本文主要介绍windows NT驱动之间利用CTL_CODE如何通信。一般来讲,用户态的应用程序通过调用CreateFile和DeviceIOControl就可以和内核态驱动之间进行通信,如果是内核态的一个驱动程序想和另外一个驱动程序进行类似操作又如何实现呢,接下来会做详细的说明。
主要的思路是首先得到另外一个驱动的handle,再构建一个IRP,赋予必要的参数,再把这个IRP发送给另外一个驱动,等待另外一个驱动处理完毕后获取返回的数据。具体代码如下:
PIRP SMBIrp;
PIO_STACK_LOCATION irpStack;
RtlInitUnicodeString( & usDeviceToFilter, L " /Device/AdvSMBus " );
status = IoGetDeviceObjectPointer( & usDeviceToFilter,FILE_WRITE_DATA, & SMBusObject, & g_LM87Data.SmbHc);
if ( ! NT_SUCCESS(status) )
PIO_STACK_LOCATION irpStack;
RtlInitUnicodeString( & usDeviceToFilter, L " /Device/AdvSMBus " );
status = IoGetDeviceObjectPointer( & usDeviceToFilter,FILE_WRITE_DATA, & SMBusObject, & g_LM87Data.SmbHc);
if ( ! NT_SUCCESS(status) )