WmipSendWmiIrp

INT64 __stdcall WmipSendWmiIrp(
        UINT8 MinorFunction,
        UINT64 ProviderId,
        VOID *DataPath,
        UINT64 BufferLength,
        VOID *Buffer,
        IO_STATUS_BLOCK *Iosb){
  int v6; 
  unsigned int v8; 
  IRP *Irp; 
  IRP *v11; 
  unsigned int v12; 
  UINT64 BufferLengtha; 
  v6 = BufferLength;
  v8 = ProviderId;
  while( 1 )
  {
    Irp = IoAllocateIrp(*((_BYTE *)WmipServiceDeviceObject + 76) + 1, 0);
    v11 = Irp;
    if( !Irp )
      break;
    *((_QWORD *)Irp + 23) -= 72i64;
    --*((_BYTE *)Irp + 67);
    LODWORD(BufferLengtha) = v6;
    *(_QWORD *)(*((_QWORD *)Irp + 23) + 40i64) = WmipServiceDeviceObject;
    *((_QWORD *)Irp + 19) = KeGetCurrentThread();
    *((_QWORD *)Irp + 3) = Buffer;
    v12 = WmipForwardWmiIrp(Irp, MinorFunction, v8, DataPath, BufferLengtha, Buffer);
    *Iosb = *((IO_STATUS_BLOCK *)v11 + 3);
    IoFreeIrp(v11);
    if( v12 != -1073741160 )
      return v12;
  }
  return 3221225626i64;
}

Referenced by:

WmipDereferenceEvent
WmipDisableCollectionForRemovedGuid
WmipEnableCollectionForNewGuid
WmipProcessLegacyEtwCallback
WmipQueryAllData
WmipQuerySetExecuteSI
WmipRegisterOrUpdateDS
WmipSendEnableDisableRequest