首 页 用户登录 | ![]() |
|||
|
|||
按字母检索 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
按声母检索 | A | B | C | D | E | F | G | H | J | K | L | M | N | O | P | Q | R | S | T | W | X | Y | Z | 数字 | 符号 |
|
![]() |
您的位置: 5VAR论文频道 → 论文中心 → 计算机论文 → 计算机应用 |
|
|||||
基于Windows2000开发WDM设备驱动程序的方法 | |||||
收集整理:佚名 来源:本站整理 时间:2009-01-10 11:55:40 点击数:[] ![]() |
|||||
LE_DEVICE_UNKNOWN, 3.具体实现 同许多应用程序一样,WDM驱动程序是PE格式的,但是它却没有WinMain或main这样的入口,取而代之的是DriverEntry:NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, //不同于前面的PDO IN PUNICODE_STRING RegistryPath) { DriverObject- >DriverExtension- >AddDevice = AddDevice; // DriverExtension 中存放着驱动程序扩展信息,包括设备所需要的硬件资源等。 DriverObject- >MajorFunction[IRP_MJ_CREATE]= RequestCreate; DriverObject- >MajorFunction[IRP_MJ_CLOSE]= RequestClose; DriverObject- >MajorFunction[IRP_MJ_DEVICE_CONTROL]= RequestControl; DriverObject- >MajorFunction[IRP_MJ_PNP] = RequestPnp; return STATUS_SUCCESS; } ---- 在DriverEntry驱动程序要向操作系统登记并注册一些消息处理器,而且还要指明是否对驱动程序输入输出的数据进行缓冲,另外还要我们提供一个AddDevice例程来把驱动程序添加到驱动程序堆栈中。其中,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 Tags: |
提供人:佚名 | |
【返回上一页】【打 印】【关闭窗口】 |
![]() |
5VAR论文频道 |
![]() |
5VAR论文频道 |
![]() |
关于本站 -
网站帮助 -
广告合作 -
下载声明 -
网站地图
Copyright © 2006-2033 5Var.Com. All Rights Reserved . |