IoWMICompleteRequest
NTSTATUS __stdcall IoWMICompleteRequest(
_WMILIB_INFO *WmiLibInfo,
_DEVICE_OBJECT *DeviceObject,
_IRP *Irp,
INT64 Status,
UINT64 BufferUsed,
CHAR PriorityBoost){
int v6;
_IO_STACK_LOCATION *CurrentStackLocation;
__int64 v9;
unsigned int v10;
unsigned int v11;
__int64 v12;
int v13;
unsigned int *v14;
int v15;
__int64 v16;
int v17;
v6 = Status;
CurrentStackLocation = Irp->Tail.CurrentStackLocation;
v9 = *(_QWORD *)&CurrentStackLocation->Parameters.EaLength;
if( CurrentStackLocation->MinorFunction )
{
if( CurrentStackLocation->MinorFunction == 1 )
{
v11 = *(_DWORD *)(v9 + 56) + BufferUsed;
if( v6 >= 0 )
{
*(_DWORD *)v9 = v11;
*(_QWORD *)(v9 + 16) = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
goto LABEL_10;
}
}
else
{
if( CurrentStackLocation->MinorFunction != 9 )
goto LABEL_13;
v11 = BufferUsed + *(_DWORD *)(v9 + 60);
if( v6 >= 0 )
{
*(_DWORD *)v9 = v11;
*(_QWORD *)(v9 + 16) = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
*(_DWORD *)(v9 + 64) = BufferUsed;
goto LABEL_10;
}
}
LABEL_11:
if( v6 == -1073741789 )
{
*(_DWORD *)(v9 + 48) = v11;
*(_DWORD *)v9 = 56;
v11 = 56;
*(_DWORD *)(v9 + 44) = 32;
v6 = 0;
goto LABEL_10;
}
LABEL_13:
v11 = 0;
goto LABEL_10;
}
v10 = *(_DWORD *)(v9 + 48);
v11 = v10 + BufferUsed;
v12 = *(unsigned int *)(v9 + 52);
if( v6 < 0 )
goto LABEL_11;
v13 = -1073741789;
if( v11 <= *(_DWORD *)&CurrentStackLocation->Parameters.FileAttributes )
v13 = v6;
v6 = v13;
if( v13 < 0 )
goto LABEL_11;
v14 = (unsigned int *)(v9 + 60);
*(_QWORD *)(v9 + 16) = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
*(_DWORD *)v9 = v11;
v15 = v12;
if( (_DWORD)v12 )
{
do
{
--v15;
v14[2 * v15 + 1] = v14[v15];
}
while( v15 );
v16 = v12;
do
{
*v14 = v10;
v17 = v14[1] + v10 + 7;
v14 += 2;
v10 = v17 & 0xFFFFFFF8;
--v16;
}
while( v16 );
}
LABEL_10:
Irp->IoStatus.Information = v11;
Irp->IoStatus.Status = v6;
IofCompleteRequest(Irp, 0);
return v6;
}Referenced by:
IoWMISystemControl
WmipQueryWmiDataBlock