IopAllocateFileObjectExtension
VOID __fastcall IopAllocateFileObjectExtension(_FILE_OBJECT *FileObject, VOID **FoExt){
void *FileObjectExtension;
void *v3;
unsigned __int8 CurrentIrql;
void *v7;
__int64 v8;
VOID **Pool_0;
FileObjectExtension = FileObject->FileObjectExtension;
v3 = 0i64;
if( FileObjectExtension )
{
if( FileObjectExtension != IopRevocationExtension && FoExt )
*FoExt = FileObjectExtension;
}
else
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
KxAcquireSpinLock(&FileObject->IrpListLock);
v7 = FileObject->FileObjectExtension;
if( !v7 )
{
KxReleaseSpinLock(&FileObject->IrpListLock);
__writecr8(CurrentIrql);
Pool_0 = IopVerifierExAllocatePool_0(v8, 0x58ui64);
v7 = Pool_0;
if( !Pool_0 )
return;
memset(Pool_0, 0i64, 0x58u);
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
KxAcquireSpinLock(&FileObject->IrpListLock);
if( FileObject->FileObjectExtension )
{
v3 = v7;
v7 = FileObject->FileObjectExtension;
}
else
{
_InterlockedExchange64((volatile __int64 *)&FileObject->FileObjectExtension, (__int64)v7);
}
}
if( FoExt )
*FoExt = v7;
KxReleaseSpinLock(&FileObject->IrpListLock);
__writecr8(CurrentIrql);
if( v3 )
ExFreePoolWithTag(v3, 0);
}
}Referenced by:
IoGetFileObjectFilterContext
IoSetIoPriorityHintIntoFileObject
IoSetOplockKeyContext
IoSetOplockPrivateFoExt
IopGetSetSpecificExtension
IopSetFileMemoryPartitionInformation
IopSetFileObjectExtensionFlag
IopSetFileObjectIosbRange
IopSymlinkSetFoExtension
NtSetInformationFile