阅读:1465回复:3
关于IOCTL的两个问题
请问:
编写wdn的pci驱动程序中, (1)在那里声明我自定义的ioctl代码? (2)在那里写实现这些ioctl代码的dispatch呢? 恳请大侠指点迷津. |
|
|
沙发#
发布于: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了 |
|
板凳#
发布于:2001-09-18 19:53
再次请教大侠:
你说在driverentry中初始化函数指针,但是我用的是driverwork2.0向导生成的pci WDM程序。 生成的程序的driverentry()只有一个注册表指针参数, 没有driverobject参数。 请问我怎么样再没有driverobject的driverentry()中初始化 dispatch函数指针呢? 先谢谢! |
|
|
地板#
发布于:2001-09-19 16:12
把向导看仔细一些,在生成向导的某一步中有如下提示
before control codes used to communicate with applications or others drivers... 这里就是定义IOCTL的 你没有定义,你的程序里当然找不到 定义了之后,你可以在XXXDevice.cpp中找到 NTSTATUS XXXDevice::DeviceControl(KIrp I) |
|