beneddk
驱动牛犊
驱动牛犊
  • 注册日期2001-08-24
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1465回复:3

关于IOCTL的两个问题

楼主#
更多 发布于:2001-09-17 21:49
请问:
编写wdn的pci驱动程序中,
  (1)在那里声明我自定义的ioctl代码?
  (2)在那里写实现这些ioctl代码的dispatch呢?
 恳请大侠指点迷津.
I'll Decry DDK, Debate DDK, Kill DDK!
jeosph
驱动中牛
驱动中牛
  • 注册日期2001-04-19
  • 最后登录2006-08-08
  • 粉丝0
  • 关注0
  • 积分96分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-09-18 08:51
1)自己定义一个IOCTL。H的头文件就可以啦
形式如下:
#define         IOCTL_CARD_READ \        
                CTL_CODE(\
                FILE_DEVICE_UNKNOWN,\
                0x807,\ ***
                METHOD_BUFFERED,\
                FILE_ANY_ACCESS)
***处的数值要大于等于800(对WDM而言)
2)在你的DriverEntry()中
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]=DeviceIoControl; 就可以定义你自己的dispacth了。
如果你不想排队IOCTL,则可以用switch-case语句直接处理这些IOCTL了
 

beneddk
驱动牛犊
驱动牛犊
  • 注册日期2001-08-24
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-09-18 19:53
再次请教大侠:
  你说在driverentry中初始化函数指针,但是我用的是driverwork2.0向导生成的pci WDM程序。
  生成的程序的driverentry()只有一个注册表指针参数,
没有driverobject参数。
 请问我怎么样再没有driverobject的driverentry()中初始化
dispatch函数指针呢?
先谢谢!
I'll Decry DDK, Debate DDK, Kill DDK!
jeosph
驱动中牛
驱动中牛
  • 注册日期2001-04-19
  • 最后登录2006-08-08
  • 粉丝0
  • 关注0
  • 积分96分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-09-19 16:12
把向导看仔细一些,在生成向导的某一步中有如下提示
before control codes used to communicate with applications or others drivers...
这里就是定义IOCTL的

你没有定义,你的程序里当然找不到
定义了之后,你可以在XXXDevice.cpp中找到
NTSTATUS XXXDevice::DeviceControl(KIrp I)

游客

返回顶部