WmipAddMofResource

NTSTATUS __stdcall WmipAddMofResource(
        tagDATASOURCE *DataSource,
        WCHAR *ImagePath,
        UINT8 IsImagePath,
        WCHAR *MofResourceName,
        UINT8 *NewMofResource){
  NTSTATUS inserted; 
  MOFRESOURCE *MRByNames; 
  MOFRESOURCE *v11; 
  UINT8 v12; 
  __int64 v13; 
  __int64 v14; 
  UINT64 v15; 
  UINT64 v16; 
  VOID **PoolWithTag; 
  WCHAR *v18; 
  __int64 v19; 
  MOFRESOURCE **v20; 

  inserted = 0;
  MRByNames = WmipFindMRByNames(ImagePath, MofResourceName);
  if( MRByNames )
  {
    v12 = 0;
  }
  else
  {
    v11 = (MOFRESOURCE *)WmipAllocEntry((__int64)&stru_140C00F40 + 4560);
    MRByNames = v11;
    if( !v11 )
      return -1073741670;
    v12 = 1;
    if( IsImagePath )
      v11[4] |= 1u;
    v13 = -1i64;
    v14 = -1i64;
    do
      ++v14;
    while( ImagePath[v14] );
    v15 = 2 * v14 + 2;
    *((_QWORD *)MRByNames + 5) = ExAllocatePoolWithTag(1ui64, v15, 1885957463i64);
    do
      ++v13;
    while( MofResourceName[v13] );
    v16 = 2 * v13 + 2;
    PoolWithTag = ExAllocatePoolWithTag(1ui64, v16, 1885957463i64);
    v18 = (WCHAR *)*((_QWORD *)MRByNames + 5);
    *((_QWORD *)MRByNames + 6) = PoolWithTag;
    if( !v18 || !PoolWithTag )
    {
      inserted = -1073741670;
      goto LABEL_15;
    }
    RtlStringCbCopyW(v18, v15, ImagePath);
    RtlStringCbCopyW(*((WCHAR **)MRByNames + 6), v16, MofResourceName);
    KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent + 3072, 0, 0, 0, 0i64);
    v19 = *(&ExBootDevicesRemovedEvent + 398);
    v20 = *(MOFRESOURCE ***)(*(&ExBootDevicesRemovedEvent + 398) + 8i64);
    if( *v20 != (MOFRESOURCE *)*(&ExBootDevicesRemovedEvent + 398) )
      __fastfail(3u);
    *((_QWORD *)MRByNames + 1) = v20;
    *(_QWORD *)MRByNames = v19;
    *v20 = MRByNames;
    *(_QWORD *)(v19 + 8) = MRByNames;
    KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 3072), 0);
  }
  *NewMofResource = v12;
  if( DataSource )
  {
    KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent + 3072, 0, 0, 0, 0i64);
    inserted = WmipInsertMofResource(DataSource, (ULONG_PTR)MRByNames);
    KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 3072), 0);
LABEL_15:
    WmipUnreferenceEntry((__int64)&stru_140C00F40 + 4560, (volatile signed __int64 *)MRByNames);
  }
  return inserted;
}

Referenced by:

WmipAddDataSource
WmipInitializeDataStructs