FsRtlInsertPerFileObjectContext
NTSTATUS __stdcall FsRtlInsertPerFileObjectContext(_FILE_OBJECT *FileObject, _FSRTL_PER_FILEOBJECT_CONTEXT *Ptr){
NTSTATUS result;
_QWORD *PoolWithTag;
void *v6;
_QWORD *v7;
_ETHREAD *CurrentThread;
ULONG_PTR v9;
_LIST_ENTRY *v10;
_LIST_ENTRY *v11;
ULONG_PTR BugCheckParameter2;
BugCheckParameter2 = 0i64;
if( !FileObject )
return -1073741811;
result = IoGetFileObjectFilterContext(FileObject, (PVOID *)&BugCheckParameter2, 1u);
if( result >= 0 )
{
if( BugCheckParameter2 )
goto LABEL_6;
PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, 0x18ui64, 0x58434F46ui64);
BugCheckParameter2 = (ULONG_PTR)PoolWithTag;
v6 = PoolWithTag;
if( !PoolWithTag )
return -1073741670;
*PoolWithTag = 0i64;
v7 = PoolWithTag + 1;
v7[1] = v7;
*v7 = v7;
if( IoChangeFileObjectFilterContext(FileObject, v6, 1u) >= 0
|| (ExFreePoolWithTag(v6, 0),
IoGetFileObjectFilterContext(FileObject, (PVOID *)&BugCheckParameter2, 0),
BugCheckParameter2) )
{
LABEL_6:
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
v9 = BugCheckParameter2;
ExAcquirePushLockExclusiveEx(BugCheckParameter2, 0i64);
v10 = (_LIST_ENTRY *)(v9 + 8);
v11 = *(_LIST_ENTRY **)(v9 + 8);
if( v11->Blink != (_LIST_ENTRY *)(v9 + 8) )
__fastfail(3u);
Ptr->Links.Flink = v11;
Ptr->Links.Blink = v10;
v11->Blink = &Ptr->Links;
v10->Flink = &Ptr->Links;
ExReleasePushLockEx(v9, 0i64);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
return 0;
}
else
{
return -1073741823;
}
}
return result;
}Referenced by:
No references.