czcty
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2006-11-08
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:2832回复:5

CTL_CODE 是怎么回事?

楼主#
更多 发布于:2005-01-22 16:39
申明,下面的代码不是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控制代码 怎么回事,我如何使用它定义自己需要的呢?
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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))"
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
czcty
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2006-11-08
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-23 14:04
#define DEVICE_HELLO_INDEX 0x860 // 这行的 0x860 是什么意思?
就是定义一个命令(或者叫请求号)

0x860 一般都是这样写吗?有什么限制?


#define NT_DEVICE_NAME L"\Device\HelloWorld" 中L 是怎么回事?
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
地板#
发布于:2005-01-23 14:40
 
0x860 一般都是这样写吗?有什么限制?

Microsoft uses function codes 0-0x7FF, OEM's use 0x800 - 0xFFF

[编辑 -  1/23/05 by  KMK]
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
地下室#
发布于:2005-01-23 15:06
 
0x860 一般都是这样写吗?有什么限制?
czcty
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2006-11-08
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-24 10:50
#define NT_DEVICE_NAME L"DeviceHelloWorld" 中L 是怎么回事?
游客

返回顶部