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