CmpCreateObjectTypes

INT64 __stdcall CmpCreateObjectTypes(){
  INT64 result; 
  _OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; 

  memset(&ObjectTypeInitializer, 0i64, sizeof(ObjectTypeInitializer));
  ObjectTypeInitializer.DumpProcedure = 0i64;
  ObjectTypeInitializer.OpenProcedure = 0i64;
  ObjectTypeInitializer._bf_1 |= 1u;
  ObjectTypeInitializer.Length = 120;
  ObjectTypeInitializer.GenericMapping.GenericAll = 983103;
  ObjectTypeInitializer.ValidAccessMask = 983103;
  ObjectTypeInitializer.InvalidAttributes = 48;
  ObjectTypeInitializer.GenericMapping.GenericRead = 131097;
  ObjectTypeInitializer._bf_0 = ObjectTypeInitializer._bf_0 & 0xE2 | 0xD;
  ObjectTypeInitializer.CloseProcedure = (void(__fastcall *)(_EPROCESS *, void *, unsigned __int64, unsigned __int64))CmpCloseKeyObject;
  ObjectTypeInitializer.DeleteProcedure = (void(__fastcall *)(void *))CmpDeleteKeyObject;
  ObjectTypeInitializer.ParseProcedure = (int(__fastcall *)(void *, void *, _ACCESS_STATE *, char, unsigned int, _UNICODE_STRING *, _UNICODE_STRING *, void *, _SECURITY_QUALITY_OF_SERVICE *, void **))CmpParseKey;
  ObjectTypeInitializer.SecurityProcedure = (int(__fastcall *)(void *, _SECURITY_OPERATION_CODE, unsigned int *, void *, unsigned int *, void **, _POOL_TYPE, _GENERIC_MAPPING *, char))CmpSecurityMethod;
  ObjectTypeInitializer.QueryNameProcedure = (int(__fastcall *)(void *, unsigned __int8, _OBJECT_NAME_INFORMATION *, unsigned int, unsigned int *, char))CmpQueryKeyName;
  ObjectTypeInitializer.GenericMapping.GenericWrite = 131078;
  ObjectTypeInitializer.GenericMapping.GenericExecute = 131129;
  ObjectTypeInitializer.DefaultPagedPoolCharge = 104;
  ObjectTypeInitializer.PoolType = PagedPool;
  ObjectTypeInitializer.ObjectTypeCode = 256;
  LODWORD(result) = ObCreateObjectType(
                      (_UNICODE_STRING *)&CmpKeyTypeNameString,
                      &ObjectTypeInitializer,
                      0i64,
                      (_OBJECT_TYPE **)&CmKeyObjectType);
  return result;
}

Referenced by:

CmInitSystem1