WmipLegacyEtwCallback

VOID __stdcall WmipLegacyEtwCallback(const _GUID *Guid, UINT64 ControlCode, VOID *EnableContext, VOID *Context){
  char v6; 
  int v7; 
  __int64 v8; 
  __int64 **v9; 
  __int64 **v10; 
  int v11; 
  VOID **PoolWithTag; 
  VOID **v13; 
  __int64 v14; 
  __int64 *i; 
  int v16; 
  INT64 v17; 
  int v18; 
  unsigned int v19; 

  if( (unsigned __int8)ControlCode <= 1u )
  {
    v6 = ControlCode;
    v7 = 0;
    KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent + 3072, 0, 0, 0, 0i64);
    if( *((_QWORD *)Context + 14) )
    {
      v8 = v6 ? *(_QWORD *)EnableContext : 0i64;
      v9 = (__int64 **)((char *)Context + 56);
      *((_QWORD *)Context + 15) = v8;
      v10 = (__int64 **)*((_QWORD *)Context + 7);
      if( v10 != (__int64 **)((char *)Context + 56) )
      {
        do
        {
          v11 = *((_DWORD *)v10 + 4);
          if( (v11 & 0x100000) != 0 && (v6 || (v11 & 0x200000) != 0) )
            ++v7;
          v10 = (__int64 **)*v10;
        }
        while( v10 != v9 );
        if( v7 )
        {
          PoolWithTag = ExAllocatePoolWithTag(1ui64, 8 * v7 + 40, 1885957463i64);
          v13 = PoolWithTag;
          if( PoolWithTag )
          {
            *((_DWORD *)PoolWithTag + 4) = 2;
            v14 = 0i64;
            PoolWithTag[3] = *(VOID **)EnableContext;
            *((_BYTE *)PoolWithTag + 36) = v6;
            *((_DWORD *)PoolWithTag + 8) = v7;
            for( i = *v9; i != (__int64 *)v9; i = (__int64 *)*i )
            {
              v16 = *((_DWORD *)i + 4);
              if( (v16 & 0x100000) != 0 && (v6 || (v16 & 0x200000) != 0) )
              {
                v17 = i[8];
                WmipReferenceEntry(v17);
                v13[v14 + 5] = (VOID *)v17;
                v14 = (unsigned int)(v14 + 1);
                v18 = *((_DWORD *)i + 4);
                if( v6 )
                  v19 = v18 | 0x200000;
                else
                  v19 = v18 & 0xFFDFFFFF;
                *((_DWORD *)i + 4) = v19;
              }
            }
            WmipQueueLegacyEtwWork(v13, (INT64)Context, 0i64);
          }
        }
      }
    }
    KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 3072), 0);
  }
}

Referenced by:

No references.