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.