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