IoWMICompleteRequest

__int64 __fastcall IoWMICompleteRequest(__int64 a1, __int64 a2, __int64 a3, int a4, int a5){
  __int64 v7; 
  __int64 v8; 
  unsigned int v9; 
  unsigned int v10; 
  __int64 v11; 
  int v12; 
  unsigned int *v13; 
  int v14; 
  __int64 v15; 
  int v16; 
  v7 = *(_QWORD *)(a3 + 184);
  v8 = *(_QWORD *)(v7 + 32);
  if( *(_BYTE *)(v7 + 1) )
  {
    if( *(_BYTE *)(v7 + 1) == 1 )
    {
      v10 = *(_DWORD *)(v8 + 56) + a5;
      if( a4 >= 0 )
      {
        *(_DWORD *)v8 = v10;
        *(_QWORD *)(v8 + 16) = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
        goto LABEL_10;
      }
    }
    else
    {
      if( *(_BYTE *)(v7 + 1) != 9 )
        goto LABEL_13;
      v10 = a5 + *(_DWORD *)(v8 + 60);
      if( a4 >= 0 )
      {
        *(_DWORD *)v8 = v10;
        *(_QWORD *)(v8 + 16) = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
        *(_DWORD *)(v8 + 64) = a5;
        goto LABEL_10;
      }
    }
LABEL_11:
    if( a4 == -1073741789 )
    {
      *(_DWORD *)(v8 + 48) = v10;
      *(_DWORD *)v8 = 56;
      v10 = 56;
      *(_DWORD *)(v8 + 44) = 32;
      a4 = 0;
      goto LABEL_10;
    }
LABEL_13:
    v10 = 0;
    goto LABEL_10;
  }
  v9 = *(_DWORD *)(v8 + 48);
  v10 = v9 + a5;
  v11 = *(unsigned int *)(v8 + 52);
  if( a4 < 0 )
    goto LABEL_11;
  v12 = -1073741789;
  if( v10 <= *(_DWORD *)(v7 + 24) )
    v12 = a4;
  a4 = v12;
  if( v12 < 0 )
    goto LABEL_11;
  v13 = (unsigned int *)(v8 + 60);
  *(_QWORD *)(v8 + 16) = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
  *(_DWORD *)v8 = v10;
  v14 = v11;
  if( (_DWORD)v11 )
  {
    do
    {
      --v14;
      v13[2 * v14 + 1] = v13[v14];
    }
    while( v14 );
    v15 = v11;
    do
    {
      *v13 = v9;
      v16 = v13[1] + v9 + 7;
      v13 += 2;
      v9 = v16 & 0xFFFFFFF8;
      --v15;
    }
    while( v15 );
  }
LABEL_10:
  *(_QWORD *)(a3 + 56) = v10;
  *(_DWORD *)(a3 + 48) = a4;
  IofCompleteRequest((_IRP *)a3, 0);
  return(unsigned int)a4;
}

Referenced by:

IoWMISystemControl
WmipQueryWmiDataBlock