WmipSetTraceNotify
VOID __stdcall WmipSetTraceNotify(_DEVICE_OBJECT *DeviceObject, UINT64 TraceClass){
__int64 *v3;
INT8 v4;
IRP *Irp;
_IRP *v6;
ULONG v7;
UINT64 BufferLength;
__int64 Buffer[2];
*(_OWORD *)Buffer = 0i64;
switch( (_DWORD)TraceClass )
{
case 0x100000:
v3 = &EtwpDiskIoNotifyRoutines;
LABEL_3:
LODWORD(Buffer[0]) = 1;
LABEL_4:
Buffer[1] = (__int64)v3;
break;
case 0x200000:
v3 = *(__int64 **)EtwpTdiIoNotify;
goto LABEL_3;
case 0x400000:
LODWORD(Buffer[0]) = 2;
v3 = (__int64 *)&EtwpFileIoNotifyRoutines;
goto LABEL_4;
case 0x800000:
v3 = &EtwpSplitIoNotifyRoutines;
goto LABEL_3;
}
KeWaitForSingleObject(&WmipSMMutex, Executive, 0, 0, 0i64);
v4 = *((_BYTE *)WmipServiceDeviceObject + 76) + 1;
KeReleaseMutex(&WmipSMMutex, 0);
Irp = IoAllocateIrp(v4, 0);
v6 = Irp;
if( Irp )
{
*((_QWORD *)Irp + 23) -= 72i64;
--*((_BYTE *)Irp + 67);
*(_QWORD *)(*((_QWORD *)Irp + 23) + 40i64) = WmipServiceDeviceObject;
v7 = IoWMIDeviceObjectToProviderId(DeviceObject);
LODWORD(BufferLength) = 16;
WmipForwardWmiIrp(v6, 0xDu, v7, 0i64, BufferLength, Buffer);
IoFreeIrp(v6);
}
}Referenced by:
IoWMIRegistrationControl