ViDdiBuildWmiRegInfoData
UINT64 __stdcall ViDdiBuildWmiRegInfoData(UINT64 Datapath, WMIREGINFOW *WmiRegInfo){
UINT64 result;
unsigned int v4;
char *v5;
if( WmiRegInfo )
{
WmiRegInfo->GuidCount = 1;
WmiRegInfo->WmiRegGuid[0].Flags = 0;
WmiRegInfo->WmiRegGuid[0].InstanceCount = 0;
WmiRegInfo->WmiRegGuid[0].Pdo = 0i64;
WmiRegInfo->WmiRegGuid[0].Guid = GUID_VERIFIER_WMI_INTERFACE;
}
result = 56i64;
if( !(_DWORD)Datapath )
{
if( WmiRegInfo )
{
WmiRegInfo->RegistryPath = 56;
LOWORD(WmiRegInfo->WmiRegGuid[1].Guid.Data1) = ViDdiWmiMofKey.Length;
HIWORD(WmiRegInfo->WmiRegGuid[1].Guid.Data1) = ViDdiWmiMofKey.Length;
*(_QWORD *)WmiRegInfo->WmiRegGuid[1].Guid.Data4 = &WmiRegInfo->WmiRegGuid[1].Flags;
memmove((UINT8 *)&WmiRegInfo->WmiRegGuid[1].Flags, (UINT8 *)ViDdiWmiMofKey.Buffer, ViDdiWmiMofKey.Length);
}
v4 = (ViDdiWmiMofKey.Length + 73) & 0xFFFFFFFE;
if( WmiRegInfo )
{
WmiRegInfo->MofResourceName = v4;
v5 = (char *)WmiRegInfo + v4;
*(_WORD *)v5 = ViDdiWmiMofResourceName.Length;
*((_WORD *)v5 + 1) = ViDdiWmiMofResourceName.Length;
*((_QWORD *)v5 + 1) = v5 + 16;
memmove((UINT8 *)v5 + 16, (UINT8 *)ViDdiWmiMofResourceName.Buffer, ViDdiWmiMofResourceName.Length);
}
result = v4 + ViDdiWmiMofResourceName.Length + 16;
}
if( WmiRegInfo )
{
WmiRegInfo->NextWmiRegInfo = 0;
WmiRegInfo->BufferSize = result;
}
return result;
}Referenced by:
ViDdiDispatchWmiRegInfoEx