CmOpenKey

INT64 __fastcall CmOpenKey(
        VOID **KeyHandle,
        INT64 DesiredAccess,
        _OBJECT_ATTRIBUTES *ObjectAttributes,
        INT64 OpenOptions,
        _CM_TRANS_PTR Trans,
        INT64 a6,
        INT64 a7,
        INT64 a8){
  int v8; 
  int v10; 
  unsigned int v12; 
  __int64 v13; 
  char v14; 
  __int64 v15; 
  unsigned __int64 ObjectName; 
  int v17; 
  unsigned __int64 v18; 
  unsigned __int64 v19; 
  NTSTATUS v20; 
  KPROCESSOR_MODE v22; 
  __int64 v23; 
  HANDLE RootDirectory; 
  HANDLE Handle; 
  PVOID Object; 
  __int64 v27; 
  _UNICODE_STRING v28; 
  int v29; 
  VOID **v30; 
  _OBJECT_ATTRIBUTES *v31; 
  _UNICODE_STRING v32; 
  LARGE_INTEGER v33[2]; 
  __int128 v34; 
  INT64 result[3]; 
  int v36; 
  int v37; 
  _CM_TRANS_PTR v38; 
  int v39; 
  _QWORD v40[9]; 
  __int128 v41; 
  __int128 v42; 
  __int128 v43; 
  __int128 v44; 
  __int128 v45; 
  v8 = OpenOptions;
  v10 = DesiredAccess;
  v30 = KeyHandle;
  v31 = ObjectAttributes;
  Handle = 0i64;
  v28 = 0i64;
  v29 = 0;
  *(_OWORD *)&v33[0].LowPart = 0i64;
  v34 = 0i64;
  v27 = 0i64;
  if( *(BOOLEAN **)((char *)&NlsMbCodePageTag + 7) )
    EtwGetKernelTraceTimestamp(v33, 0x20000ui64);
  memset((INT64)result, 0i64);
  v39 = -1;
  v40[1] = v40;
  v40[0] = v40;
  v41 = 0i64;
  v42 = 0i64;
  v43 = 0i64;
  v44 = 0i64;
  v45 = 0i64;
  v37 = v10 & 0x300;
  v12 = v10 & 0xFFFFFCFF;
  if( CmpAcquireShutdownRundown() )
  {
    if( (v8 & 0x1C) == v8 )
    {
      v14 = *((_BYTE *)KeGetCurrentThread() + 562);
      if( v14 == 1 )
      {
        v15 = (__int64)KeyHandle;
        if( (unsigned __int64)KeyHandle >= 0x7FFFFFFF0000i64 )
          v15 = 0x7FFFFFFF0000i64;
        *(_QWORD *)v15 = 0i64;
        if( ((unsigned __int8)ObjectAttributes & 3) != 0 )
          ExRaiseDatatypeMisalignment();
        ObjectName = (unsigned __int64)ObjectAttributes->ObjectName;
        v32 = 0i64;
        if( ObjectName >= 0x7FFFFFFF0000i64 )
          ObjectName = 0x7FFFFFFF0000i64;
        v17 = *(_DWORD *)ObjectName;
        *(_DWORD *)&v32.Length = v17;
        v18 = *(_QWORD *)(ObjectName + 8);
        v32.Buffer = (wchar_t *)v18;
        v28 = v32;
        if( (_WORD)v17 )
        {
          if( (v18 & 1) != 0 )
            ExRaiseDatatypeMisalignment();
          v19 = v18 + (unsigned __int16)v17;
          if( v19 > 0x7FFFFFFF0000i64 || v19 < v18 )
            MEMORY[0x7FFFFFFF0000] = 0;
        }
      }
      else
      {
        v28 = *ObjectAttributes->ObjectName;
      }
      RootDirectory = ObjectAttributes->RootDirectory;
      if( *(BOOLEAN **)((char *)&NlsMbCodePageTag + 7) )
      {
        if( ObjectAttributes->RootDirectory )
        {
          v22 = *((_BYTE *)KeGetCurrentThread() + 562);
          Object = 0i64;
          if( ObReferenceObjectByHandle(RootDirectory, 0, (POBJECT_TYPE)CmKeyObjectType, v22, &Object, 0i64) >= 0 )
          {
            v27 = *((_QWORD *)Object + 1);
            HalPutDmaAdapter((PADAPTER_OBJECT)Object);
          }
        }
      }
      v38.0 = Trans.0;
      v36 = v8;
      v20 = ObOpenObjectByName(
              (__int64)ObjectAttributes,
              (__int64)CmKeyObjectType,
              v14,
              0i64,
              v12,
              (__int64)result,
              &Handle);
      if( v20 >= 0 )
        *KeyHandle = Handle;
      if( *(BOOLEAN **)((char *)&NlsMbCodePageTag + 7) )
      {
        v23 = v27;
        LOBYTE(v23) = 11;
        (*(void(__fastcall **)(__int64, LARGE_INTEGER *, _QWORD, _QWORD, __int64, _UNICODE_STRING *))((char *)&NlsMbCodePageTag + 7))(
          v23,
          v33,
          (unsigned int)v20,
          0i64,
          v27,
          &v28);
      }
      CmpCleanupParseContext((__int64)result, 0);
      CmpReleaseShutdownRundown();
      return(unsigned int)v20;
    }
    else
    {
      CmpReleaseShutdownRundown();
      return 3221225714i64;
    }
  }
  else
  {
    if( *(BOOLEAN **)((char *)&NlsMbCodePageTag + 7) )
    {
      LOBYTE(v13) = 11;
      (*(void(__fastcall **)(__int64, LARGE_INTEGER *, __int64, _QWORD, _QWORD, _QWORD))((char *)&NlsMbCodePageTag + 7))(
        v13,
        v33,
        3221225865i64,
        0i64,
        0i64,
        0i64);
    }
    return 3221225865i64;
  }
}

Referenced by:

AdtpObjsInitialize
ExpWatchLicenseInfoWork
ExpWatchProductTypeWork
NtOpenKeyTransactedEx