snowoct
驱动牛犊
驱动牛犊
  • 注册日期2004-08-26
  • 最后登录2004-09-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:913回复:1

应用程序如何与驱动程序通信

楼主#
更多 发布于:2004-09-02 16:14

自己开发的usb设备和驱动程序,
那么在应用程序中是否要包含驱动程序中的头文件?
当应用程序使用creatfile,readfile,writefile时,是在跟驱动程序打交道吗?  
weileng
驱动牛犊
驱动牛犊
  • 注册日期2004-07-21
  • 最后登录2007-12-25
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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例程来处理。
游客

返回顶部