CmOpenKey

__int64 __fastcall CmOpenKey(VOID **a1, int a2, _OBJECT_ATTRIBUTES *a3, int a4, __int64 a5){
  unsigned int v9; 
  __int64 v10; 
  char PreviousMode; 
  __int64 v12; 
  unsigned __int64 ObjectName; 
  int v14; 
  unsigned __int64 v15; 
  unsigned __int64 v16; 
  NTSTATUS v17; 
  char v19; 
  __int64 v20; 
  UINT64 DesiredAccess; 
  void *RootDirectory; 
  UINT64 Handle; 
  PVOID Object; 
  __int64 v25; 
  _UNICODE_STRING v26; 
  int v27; 
  VOID **v28; 
  _OBJECT_ATTRIBUTES *v29; 
  _UNICODE_STRING v30; 
  _LARGE_INTEGER TimeStamp[2]; 
  __int128 v32; 
  INT64 ParseContext[38]; 

  v28 = a1;
  v29 = a3;
  Handle = 0i64;
  v26 = 0i64;
  v27 = 0;
  *(_OWORD *)&TimeStamp[0].anonymous_0.LowPart = 0i64;
  v32 = 0i64;
  v25 = 0i64;
  if( *(BOOLEAN **)((char *)&NlsMbCodePageTag + 7) )
    EtwGetKernelTraceTimestamp(TimeStamp, 0x20000ui64);
  memset(ParseContext, 0i64, 0x128u);
  LODWORD(ParseContext[12]) = -1;
  ParseContext[19] = (INT64)&ParseContext[18];
  ParseContext[18] = (INT64)&ParseContext[18];
  memset(&ParseContext[27], 0, 80);
  HIDWORD(ParseContext[3]) = a2 & 0x300;
  v9 = a2 & 0xFFFFFCFF;
  if( CmpAcquireShutdownRundown() )
  {
    if( (a4 & 0x1C) == a4 )
    {
      PreviousMode = KeGetCurrentThread()->PreviousMode;
      if( PreviousMode == 1 )
      {
        v12 = (__int64)a1;
        if( (unsigned __int64)a1 >= 0x7FFFFFFF0000i64 )
          v12 = 0x7FFFFFFF0000i64;
        *(_QWORD *)v12 = 0i64;
        if( ((unsigned __int8)a3 & 3) != 0 )
          ExRaiseDatatypeMisalignment();
        ObjectName = (unsigned __int64)a3->ObjectName;
        v30 = 0i64;
        if( ObjectName >= 0x7FFFFFFF0000i64 )
          ObjectName = 0x7FFFFFFF0000i64;
        v14 = *(_DWORD *)ObjectName;
        *(_DWORD *)&v30.Length = v14;
        v15 = *(_QWORD *)(ObjectName + 8);
        v30.Buffer = (wchar_t *)v15;
        v26 = v30;
        if( (_WORD)v14 )
        {
          if( (v15 & 1) != 0 )
            ExRaiseDatatypeMisalignment();
          v16 = v15 + (unsigned __int16)v14;
          if( v16 > 0x7FFFFFFF0000i64 || v16 < v15 )
            MEMORY[0x7FFFFFFF0000] = 0;
        }
      }
      else
      {
        v26 = *a3->ObjectName;
      }
      RootDirectory = a3->RootDirectory;
      if( *(BOOLEAN **)((char *)&NlsMbCodePageTag + 7) )
      {
        if( a3->RootDirectory )
        {
          v19 = KeGetCurrentThread()->PreviousMode;
          Object = 0i64;
          if( ObReferenceObjectByHandle(RootDirectory, 0i64, (_OBJECT_TYPE *)CmKeyObjectType, v19, &Object, 0i64) >= 0 )
          {
            v25 = *((_QWORD *)Object + 1);
            HalPutDmaAdapter((PADAPTER_OBJECT)Object);
          }
        }
      }
      ParseContext[9] = a5;
      LODWORD(ParseContext[3]) = a4;
      LODWORD(DesiredAccess) = v9;
      v17 = ObOpenObjectByName(
              a3,
              (_OBJECT_TYPE *)CmKeyObjectType,
              PreviousMode,
              0i64,
              DesiredAccess,
              ParseContext,
              (VOID **)&Handle);
      if( v17 >= 0 )
        *a1 = (VOID *)Handle;
      if( *(BOOLEAN **)((char *)&NlsMbCodePageTag + 7) )
      {
        v20 = v25;
        LOBYTE(v20) = 11;
        (*(void(__fastcall **)(__int64, _LARGE_INTEGER *, _QWORD, _QWORD, __int64, _UNICODE_STRING *))((char *)&NlsMbCodePageTag + 7))(
          v20,
          TimeStamp,
          (unsigned int)v17,
          0i64,
          v25,
          &v26);
      }
      CmpCleanupParseContext((INT64)ParseContext, 0);
      CmpReleaseShutdownRundown();
      return(unsigned int)v17;
    }
    else
    {
      CmpReleaseShutdownRundown();
      return 3221225714i64;
    }
  }
  else
  {
    if( *(BOOLEAN **)((char *)&NlsMbCodePageTag + 7) )
    {
      LOBYTE(v10) = 11;
      (*(void(__fastcall **)(__int64, _LARGE_INTEGER *, __int64, _QWORD, _QWORD, _QWORD))((char *)&NlsMbCodePageTag + 7))(
        v10,
        TimeStamp,
        3221225865i64,
        0i64,
        0i64,
        0i64);
    }
    return 3221225865i64;
  }
}

Referenced by:

AdtpObjsInitialize
ExpWatchLicenseInfoWork
ExpWatchProductTypeWork
NtOpenKey
NtOpenKeyEx
NtOpenKeyTransactedEx