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