阅读:913回复:1
应用程序如何与驱动程序通信自己开发的usb设备和驱动程序, 那么在应用程序中是否要包含驱动程序中的头文件? 当应用程序使用creatfile,readfile,writefile时,是在跟驱动程序打交道吗? |
|
沙发#
发布于:2004-09-02 19:58
不用,对于PNP驱动程序,当驱动加载时,PNP管理器和IO管理器自然根据应用程序的请求产生所对应的IRP包与驱动程序交互。
当应用程序creatfile,readfile,writefile,就开始和驱动程序打交道了。 I/O管理器可以找到DriverEntry例程,因为它有一个公认的名字(实际上,连接器使用一个命令行开关声明DriverEntry的地址,然而,DDK文档要求入口点命名为DriverEntry),其它的驱动程序例程不需要固定的名字,因此,I/O管理器需要一些方法定位它们。连接机制是驱动程序对象,驱动程序对象包含指向其它驱动程序例程的指针。DriverEntry例程负责设置这些指针。 这些函数指针有两种: 1. 在驱动程序对象中有明确的名字的函数。 2. 在驱动程序的MajorFunction队列中列出的IRP派遣函数。 下列代码片段是初始化两种函数指针的例子: pDO->DriverStartIo = StartIo; pDO->DriverUnload = Unload; // Initialize the MajorFunction Dispatch table pDO->MajorFunction[ IRP_ MJ_CREATE ] = adFileCreate; pDO->MajorFunction[ IRP_MJ_CLOSE ] = adFileClose; .......... adFileCreate可以对应于应用程序中CreadFile函数的调用 adFileClose可以对应于应用程序中CloseFile函数的调用 当然这些函数的处理也可以全都交给StarIo例程来处理。 |
|