WmipCreateGuidObject

NTSTATUS __stdcall WmipCreateGuidObject(
        _OBJECT_ATTRIBUTES *ObjectAttributes,
        UINT64 DesiredAccess,
        _GUID *Guid,
        _WMIGUIDOBJECT **Object,
        _WMIGUIDOBJECT *Objecta){
  unsigned int v6; 
  _UNICODE_STRING *ObjectName; 
  int GuidSecurityDescriptor; 
  __int128 v11; 
  __int128 v12; 
  PVOID v13; 
  __int128 v14; 
  __int128 v15; 
  char *v16; 
  VOID *v18; 
  UINT64 v19; 
  UINT64 ObjectBodySize; 
  UINT64 v21; 
  UINT64 v22; 
  PVOID SecurityDescriptor; 
  char *DestinationString; 
  _UNICODE_STRING DestinationString_8; 
  _OBJECT_ATTRIBUTES ObjectAttributes_8; 
  _SECURITY_SUBJECT_CONTEXT v27[5]; 
  _AUX_ACCESS_DATA AuxData; 

  SecurityDescriptor = 0i64;
  v6 = DesiredAccess;
  DestinationString_8 = 0i64;
  memset(v27, 0i64, sizeof(v27));
  memset(&AuxData, 0i64, sizeof(AuxData));
  ObjectName = ObjectAttributes->ObjectName;
  DestinationString = 0i64;
  RtlInitUnicodeString(&DestinationString_8, (PCWSTR)ObjectName->Buffer + 9);
  GuidSecurityDescriptor = WmipGetGuidSecurityDescriptor(&DestinationString_8, &SecurityDescriptor);
  if( GuidSecurityDescriptor >= 0 )
  {
    v11 = *(_OWORD *)&ObjectAttributes->ObjectName;
    *(_OWORD *)&ObjectAttributes_8.Length = *(_OWORD *)&ObjectAttributes->Length;
    v12 = *(_OWORD *)&ObjectAttributes->SecurityDescriptor;
    v13 = SecurityDescriptor;
    *(&ObjectAttributes_8.Attributes + 1) = HIDWORD(v11);
    ObjectAttributes_8.ObjectName = 0i64;
    ObjectAttributes_8.SecurityQualityOfService = (void *)*((_QWORD *)&v12 + 1);
    ObjectAttributes_8.SecurityDescriptor = SecurityDescriptor;
    ObjectAttributes_8.Attributes = 640;
    GuidSecurityDescriptor = SeCreateAccessState(
                               (_ACCESS_STATE *)v27,
                               &AuxData,
                               v6,
                               (_GENERIC_MAPPING *)&WmipGenericMapping);
    if( GuidSecurityDescriptor >= 0 )
    {
      v14 = *(_OWORD *)&v27[1].ClientToken;
      LODWORD(v22) = 0;
      v15 = *(_OWORD *)&v27[1].PrimaryToken;
      LODWORD(v21) = 0;
      LODWORD(ObjectBodySize) = 168;
      v27[1] = WmipSystemSubjectContext;
      GuidSecurityDescriptor = ObCreateObjectEx(
                                 0i64,
                                 WmipGuidObjectType,
                                 &ObjectAttributes_8,
                                 0i64,
                                 v18,
                                 ObjectBodySize,
                                 v21,
                                 v22,
                                 (VOID **)&DestinationString,
                                 0i64);
      if( GuidSecurityDescriptor >= 0 )
      {
        v16 = DestinationString;
        memset(DestinationString, 0i64, 0xA8u);
        KeInitializeEvent((INT64)v16, 0, 0);
        LODWORD(v19) = 0;
        *((_DWORD *)v16 + 28) = 4096;
        *((_DWORD *)v16 + 36) = 4096;
        *(_GUID *)(v16 + 24) = *Guid;
        GuidSecurityDescriptor = ObInsertObjectEx(v16, (_ACCESS_STATE *)v27, v6, 0i64, v19, 0i64, 0i64);
        if( GuidSecurityDescriptor >= 0 )
        {
          *Object = (_WMIGUIDOBJECT *)v16;
          GuidSecurityDescriptor = 0;
        }
      }
      *(_OWORD *)&v27[1].ClientToken = v14;
      *(_OWORD *)&v27[1].PrimaryToken = v15;
      SepDeleteAccessState((_ACCESS_STATE *)v27);
      SeReleaseSubjectContext(&v27[1]);
    }
    if( v13 && v13 != (PVOID)WmipDefaultAccessSd )
      ExFreePoolWithTag(v13, 0);
  }
  return GuidSecurityDescriptor;
}

Referenced by:

WmipOpenGuidObject