基于Windows2000开发WDM设备驱动程序的方法(2)
作者:佚名; 更新时间:2014-12-05
IRP_MJ_XXXXX为驱动程序所收到的系统消息,RequestXXXXX为相应的消息处理函数。在客户端程序中,我们一般要采用DeviceIoContro l通过自定义的控制码与驱动程序通信(在VxD中大多也采用这种方式)。看看驱动程序所收到的系统消息,我们不难发现当用户调用DeviceIoControl时操作系统就会向驱动程序发出一条IRP_MJ_DEVICE_CONTROL消息,以触发RequestControl消息处理函数。NTSTATUS RequestControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { PIO_STACK_LOCATION IrpStack; ULONG ControlCode; ULONG InputLength,OutputLength; NTSTATUS status; IrpStack=IoGetCurrentIrpStackLocation(Irp); //获取当前IRP所在的I/O堆栈 ControlCode=IrpStack- >Parameters.DeviceIoControl.IoControlCode; //取得控制码 InputLength=IrpStack- >Parameters.DeviceIoControl.InputBufferLength; //取输入缓冲区大小
OutputLength=IrpStack- >Parameters.DeviceIoControl. OutputBufferLength;//取输出缓冲区大小
switch(ControlCode) { case HELLOWDM_IOCTL_HELLO: DbgPrint ("Hello from WDM.\n");//向调试器输出字符串 status=STATUS_SUCCESS; //置返回值 break; default: status=STATUS_INVALID_DEVICE_REQUEST; //输入的控制码不支持 } return CompleteRequest(Irp, status, 0); //调用CompleteRequest通知操作系统完成IRP操作
立刻注册,免费享受三天的试用收看期,火爆,激情 让您免费欣赏三天
4.结束语
本文是笔者在Windows2000下开发网卡驱动程序的一些经验总结,使用Windows2000 DDK开发包和Windows2000 platform SDK ,在VC++6.0下调试通过。
参考文献
[1] Art Baker Jerry Lozano 著 施 诺 译 Windows 2000设备驱动程序设计指南 机械工业出版社 2001
[2] 武安河 周利莉 著 Windows 设备驱动程序开发实务 电子工业出版社 2002
OutputLength=IrpStack- >Parameters.DeviceIoControl. OutputBufferLength;//取输出缓冲区大小
switch(ControlCode) { case HELLOWDM_IOCTL_HELLO: DbgPrint ("Hello from WDM.\n");//向调试器输出字符串 status=STATUS_SUCCESS; //置返回值 break; default: status=STATUS_INVALID_DEVICE_REQUEST; //输入的控制码不支持 } return CompleteRequest(Irp, status, 0); //调用CompleteRequest通知操作系统完成IRP操作
立刻注册,免费享受三天的试用收看期,火爆,激情 让您免费欣赏三天
4.结束语
本文是笔者在Windows2000下开发网卡驱动程序的一些经验总结,使用Windows2000 DDK开发包和Windows2000 platform SDK ,在VC++6.0下调试通过。
参考文献
[1] Art Baker Jerry Lozano 著 施 诺 译 Windows 2000设备驱动程序设计指南 机械工业出版社 2001
[2] 武安河 周利莉 著 Windows 设备驱动程序开发实务 电子工业出版社 2002
热门论文