阅读:2832回复:5
CTL_CODE 是怎么回事?
申明,下面的代码不是USB驱动,但不妨碍我问的问题
下载了一个驱动版的HelloWorld 头文件如下: 代码可以在 http://www.cnxhacker.com/article/show/733.htm 下载 #ifndef __HELLOWORLD_H__ #define __HELLOWORLD_H__ #include <ntddk.h> #define DEVICE_HELLO_INDEX 0x860 // 这行的 0x860 是什么意思? //2个IOCTL宏 #define START_HELLPWORLD CTL_CODE(FILE_DEVICE_UNKNOWN,DEVICE_HELLO_INDEX,METHOD_BUFFERED,FILE_ANY_ACCESS) #define STOP_HELLPWORLD CTL_CODE(FILE_DEVICE_UNKNOWN,DEVICE_HELLO_INDEX+1,METHOD_BUFFERED,FILE_ANY_ACCESS)// DEVICE_HELLO_INDEX+1 又是什么意思 #define NT_DEVICE_NAME L"\\Device\\HelloWorld" //设备名称 #define DOS_DEVICE_NAME L"\\DosDevices\\HelloWorld" //符号连接 NTSTATUS HelloWorldDispatch (IN PDEVICE_OBJECT DeviceObject,IN PIRP pIrp); VOID HelloWorldUnLoad (IN PDRIVER_OBJECT DriverObject); #endif 上面代码中: #define DEVICE_HELLO_INDEX 0x860 // 这行的 0x860 是什么意思? #define STOP_HELLPWORLD CTL_CODE(FILE_DEVICE_UNKNOWN,DEVICE_HELLO_INDEX+1,METHOD_BUFFERED,FILE_ANY_ACCESS)// DEVICE_HELLO_INDEX+1 又是什么意思 STOP_HELLPWORLD 是传递停止的I/O控制代码 API调用如下: (DeviceIoControl(hDevice,STOP_HELLPWORLD,NULL,0,NULL,0,&RetBytes,NULL))) 请问 I/O控制代码 怎么回事,我如何使用它定义自己需要的呢? |
|
沙发#
发布于:2005-01-22 17:12
#define DEVICE_HELLO_INDEX 0x860 // 这行的 0x860 是什么意思?
就是定义一个命令(或者叫请求号) DEVICE_HELLO_INDEX+1同上。 I/O控制代码就是哪个#define STOP_HELLPWORLD CTL_CODE(FILE_DEVICE_UNKNOWN,DEVICE_HELLO_INDEX+1,METHOD_BUFFERED,FILE_ANY_ACCESS) 定义的STOP_HELLPWORLD等 上面不是已经有自己定义的STOP_HELLPWORLD发送的代码吗? "DeviceIoControl(hDevice,STOP_HELLPWORLD,NULL,0,NULL,0,&RetBytes,NULL))" |
|
|
板凳#
发布于:2005-01-23 14:04
#define DEVICE_HELLO_INDEX 0x860 // 这行的 0x860 是什么意思?
就是定义一个命令(或者叫请求号) 0x860 一般都是这样写吗?有什么限制? #define NT_DEVICE_NAME L"\Device\HelloWorld" 中L 是怎么回事? |
|
地板#
发布于:2005-01-23 14:40
0x860 一般都是这样写吗?有什么限制? Microsoft uses function codes 0-0x7FF, OEM's use 0x800 - 0xFFF [编辑 - 1/23/05 by KMK] |
|
地下室#
发布于:2005-01-23 15:06
0x860 一般都是这样写吗?有什么限制? |
|
5楼#
发布于:2005-01-24 10:50
#define NT_DEVICE_NAME L"DeviceHelloWorld" 中L 是怎么回事?
|
|