IopCheckInitiatorHint

NTSTATUS __stdcall IopCheckInitiatorHint(_FILE_OBJECT *FileObject, _FILE_OBJECT *RelatedFileObject){
  _ETHREAD *CurrentThread; 
  _QWORD *Teb; 
  __int64 v6; 
  char v7; 
  int v8; 
  _EPROCESS *InitiatorProcess; 
  int v11; 
  PVOID Object; 
  VOID *TypeExt; 

  v11 = 0;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  if( (CurrentThread->Tcb._bf_0 & 0x400) != 0 || CurrentThread->Tcb.ApcStateIndex == 1 )
    Teb = 0i64;
  else
    Teb = CurrentThread->Tcb.Teb;
  if( (Teb[9] | 1i64) == Teb[252] && !(unsigned __int8)RtlIsSandboxedToken(InterruptControllerInvalid) )
  {
    v6 = Teb[251];
    v7 = v6;
    Object = 0i64;
    v11 = ObReferenceObjectByHandle(
            (VOID *)(v6 & 0xFFFFFFFFFFFFFFFEui64),
            1ui64,
            (_OBJECT_TYPE *)PsProcessType,
            1,
            &Object,
            0i64);
    if( v11 >= 0 )
    {
      TypeExt = 0i64;
      IopGetSetSpecificExtension(FileObject, FoExtTypeInternal, 0x20ui64, 1u, &TypeExt, 0i64);
      v11 = v8;
      if( v8 < 0 )
      {
        ObfDereferenceObjectWithTag(Object, 0x746C6644ui64);
      }
      else
      {
        if( RelatedFileObject )
        {
          InitiatorProcess = IoGetInitiatorProcess(RelatedFileObject);
          if( InitiatorProcess != Object )
          {
            v11 = -1073741811;
            ObfDereferenceObjectWithTag(Object, 0x746C6644ui64);
          }
        }
        if( v11 >= 0 )
        {
          *((_QWORD *)TypeExt + 1) = Object;
          if( (v7 & 1) != 0 )
          {
            FileObject->Flags |= 0x20000000u;
            IopSetFileObjectExtensionFlag(FileObject, 8ui64, 0);
          }
        }
      }
    }
  }
  return v11;
}

Referenced by:

IopAllocRealFileObject