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