CmCallbackGetKeyObjectIDEx

NTSTATUS __stdcall CmCallbackGetKeyObjectIDEx(
        LARGE_INTEGER *Cookie,
        PVOID Object,
        UINT64 *ObjectID,
        UNICODE_STRING **ObjectName,
        UINT64 Flags){
  UINT64 v6; 
  NTSTATUS started; 
  _UNICODE_STRING *KeyPath; 
  INT64 v10[2]; 
  PPRIVILEGE_SET Privileges[2]; 
  KAPC_STATE ApcState; 
  KeyPath = 0i64;
  *(_OWORD *)v10 = 0i64;
  WORD1(v10[0]) = -1;
  memset(&ApcState, 0, sizeof(ApcState));
  *(_OWORD *)Privileges = 0i64;
  if( !Object || *(_DWORD *)Object != 1803104306 || !Cookie || (_DWORD)Flags )
    goto LABEL_20;
  v6 = *((_QWORD *)Object + 1);
  if( ObjectID )
    *ObjectID = v6;
  if( !ObjectName )
  {
    started = 0;
    goto LABEL_15;
  }
  if( (v6 & 1) == 0 )
  {
    CmpAttachToRegistryProcess(&ApcState);
    CmpLockRegistry();
    started = CmpStartKcbStackForTopLayerKcb((INT64)v10, v6);
    if( started >= 0 )
    {
      CmpLockKcbStackShared((INT64)v10);
      if( *(_QWORD *)(v6 + 80) && CmpConstructNameWithStatus((_CM_KEY_CONTROL_BLOCK *)v6, &KeyPath) >= 0 )
      {
        started = 0;
        *ObjectName = KeyPath;
      }
      else
      {
        started = -1073741670;
      }
      CmpUnlockKcbStack((__int64)v10);
    }
    CmpUnlockRegistry();
    KiUnstackDetachProcess(&ApcState, 0i64);
  }
  else
  {
LABEL_20:
    started = -1073741811;
  }
LABEL_15:
  if( Privileges[1] )
    CmSiFreeMemory(Privileges[1]);
  return started;
}

Referenced by:

No references.