IopGetSetSpecificExtension
VOID __stdcall IopGetSetSpecificExtension(
_FILE_OBJECT *FileObject,
_FILE_OBJECT_EXTENSION_TYPE Type,
UINT64 Size,
UINT8 SetOperation,
PVOID *TypeExt,
PVOID *FoExt){
UINT64 v7;
VOID *v10;
INT64 v11;
_IOP_FILE_OBJECT_EXTENSION *v12;
void *v13;
CHAR *Pool_0;
_IOP_FILE_OBJECT_EXTENSION *FileObjectExtension[5];
FileObjectExtension[0] = 0i64;
v7 = (unsigned int)Size;
if( !SetOperation || IopAllocateFileObjectExtension(FileObject, 0i64) >= 0 )
{
v10 = IopGetFileObjectExtension(FileObject, Type, (VOID **)FileObjectExtension);
v12 = FileObjectExtension[0];
v13 = v10;
if( !v10 && SetOperation )
{
Pool_0 = IopVerifierExAllocatePool_0(v11, v7);
v13 = Pool_0;
if( !Pool_0 )
return;
memset((INT64)Pool_0, 0i64);
if( IopSetTypeSpecificFoExtension(v12, Type, v13) < 0 )
{
ExFreePoolWithTag(v13, 0);
v13 = IopGetFileObjectExtension(FileObject, Type, 0i64);
}
}
if( TypeExt )
*TypeExt = v13;
if( FoExt )
*FoExt = v12;
}
}Referenced by:
IoCopyDeviceObjectHint
IoCreateStreamFileObjectEx2
IopAdjustFileObjectKeepAliveCount
IopAllocateFoExtensionsOnCreate
IopCheckInitiatorHint
IopGetSetStreamIdentifier
IopParseDevice
IopRetrieveTransactionParameters
IopSetLockOperationProcess