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