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