WmipGenerateMofResourceNotification
VOID __stdcall WmipGenerateMofResourceNotification(
WCHAR *ImagePath,
WCHAR *ResourceName,
_GUID *Guid,
UINT64 ActionCode){
__int64 v4;
__int64 v6;
int v7;
__int64 v10;
int v11;
size_t v12;
VOID **PoolWithTag;
VOID **v14;
int v15;
unsigned __int64 v16;
v4 = -1i64;
v6 = -1i64;
v7 = ActionCode;
do
++v6;
while( ImagePath[v6] );
v10 = 2 * v6 + 4;
do
++v4;
while( ResourceName[v4] );
v11 = 2 * v4 + 4;
v12 = v10 + 2 * v4 + 76;
PoolWithTag = ExAllocatePoolWithTag(1ui64, v10 + 2 * v4 + 76, 1885957463i64);
v14 = PoolWithTag;
if( PoolWithTag )
{
memset(PoolWithTag, 0i64, v12);
*(_DWORD *)v14 = v12;
*((_DWORD *)v14 + 1) = v7;
v14[1] = (VOID *)1;
*((_DWORD *)v14 + 11) = 266;
*(_GUID *)(v14 + 3) = *Guid;
v14[2] = *(VOID **)&KUSER_SHARED_DATA.SystemTime.LowPart;
v15 = v10 + v11;
*((_WORD *)v14 + 32) = 0;
v16 = v10 - 2;
*((_DWORD *)v14 + 12) = 64;
*((_DWORD *)v14 + 14) = 72;
*((_DWORD *)v14 + 15) = v15;
*((_WORD *)v14 + 36) = v16;
memmove((char *)v14 + 74, ImagePath, v16);
v16 >>= 1;
*((_WORD *)v14 + v16 + 37) = v11 - 2;
memmove((char *)v14 + 2 * v16 + 76, ResourceName, v11 - 2);
WmipProcessEvent((_WNODE_HEADER *)v14, 1u, 0);
ExFreePoolWithTag(v14, 0);
}
}Referenced by:
WmipAddDataSource
WmipMRCleanup