1)启动DriverWizard,选择DriverWorks Project创造一个名为USBDIO的VC++项目;
2)在驱动程序类型中选择WDM Driver,WDM Function Driver,在硬件设备所支持的总线类型中选择USB(WDM Only),在USB Vendor ID(厂商识别码)中填写0741,在USB Product ID(产品识别码)中填写0821;
3)增加USB设备端点,设置端点2为批量输入/输出传输方式;
4)在驱动程序支持的功能项中选择Read、Write、Device Control、Cleanup;
5)选择自动产生批量读及批量写程序代码;
6)在I/O请求IRP处理方式中选择None,即IRP不排队;
7)在接口的打开方式中选择Symbolic link:UsbdioDevice,即应用程序以符号链接名打开设备;
8)定义应用程序调用DeviceIoControl函数对WDM驱动程序通信的控制命令,结果如图2所示。
图2 定义控制代码
9)最后选择完成并确认生成新的项目信息,向导程序就会在usbdio目录中生成一个名为USBDIO的项目文件,其中包括了ISP1581驱动程序框架、模块及部分源代码。
USB设备驱动程序的编程
在使用DriverWizard生成驱动程序框架、模块及部分程序源代码后,开发者只需完成图2中三个控制代码所对应的三个功能模块的编程:模块USBDIO_IOCTL_ID_CODE_Handler的功能是从控制端点0读取数据,模块USBDIO_IOCTL_TEST_COMMAND_Handler的功能是向控制端点0发送一个控制命令,模块USBDIO_IOCTL_DMA_COMMAND_Handler的功能是向控制端点0发送一个要求USB设备进行DMA传输的控制命令,下面是第一个模块的编程实例。
NTSTATUS USBDIODevice::USBDIO_IOCTL_ID_CODE_Handler(KIrp I)
{
NTSTATUS status = STATUS_SUCCESS;
t << "Entering USBDIODevice::USBDIO_IOCTL_ID_CODE_Handler, " << I << EOL;
PURB pUrb;