NtOpenMutant

NTSTATUS __stdcall NtOpenMutant(VOID **MutantHandle, _ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes){
  char PreviousMode; 
  __int64 v7; 
  int v8; 
  UINT64 DesiredAccessa; 
  UINT64 DesiredAccessb; 
  VOID *Handle[3]; 

  Handle[0] = 0i64;
  PreviousMode = KeGetCurrentThread()->PreviousMode;
  if( PreviousMode )
  {
    v7 = 0x7FFFFFFF0000i64;
    if( (unsigned __int64)MutantHandle < 0x7FFFFFFF0000i64 )
      v7 = (__int64)MutantHandle;
    *(_QWORD *)v7 = *(_QWORD *)v7;
  }
  LODWORD(DesiredAccessa) = DesiredAccess;
  v8 = ObOpenObjectByName(ObjectAttributes, ExMutantObjectType, PreviousMode, 0i64, DesiredAccessa, 0i64, Handle);
  if( v8 == -1073741788 && *(&WheapDeferredInternalLogsEventLock + 56) )
  {
    LODWORD(DesiredAccessb) = DesiredAccess;
    v8 = ObOpenObjectByName(
           ObjectAttributes,
           *(&WheapDeferredInternalLogsEventLock + 56),
           PreviousMode,
           0i64,
           DesiredAccessb,
           0i64,
           Handle);
  }
  if( v8 >= 0 )
    *MutantHandle = Handle[0];
  return v8;
}

Referenced by:

No references.