首页
社区
课程
招聘
[求助]CTL_CODE的计算
发表于: 2009-1-26 10:26 7931

[求助]CTL_CODE的计算

2009-1-26 10:26
7931
在http://hi.baidu.com/magical/blog/item/463d63d9177ca92910df9bc6.html
看到一篇文章,其中
举例说明一下:

我定义两个IOCTL,一个用于对设备的读,一个用于对设备的写

#define ATST2004_IOCTL_READ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_READ_DATA)
#define ATST2004_IOCTL_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_WRITE_DATA)

在VC中使用不需要进行处理,假如我要在VB中使用这两个IOCTL,就需要进行查值计算了,计算后定义如下:

Private Const ATST2004_IOCTL_READ = &H226000
Private Const ATST2004_IOCTL_WRITE = &H22A004

请教他是怎么把两个CTL_CODE转化为&H226000,和&H22A004的呢?之间是怎么转换的?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
2
CTL_CODE 实际是个宏,
#define CTL_CODE(DeviceType, Function, Method, Access) (
  ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)
)

你在VB也可以写一个函数来实现这个功能
2009-1-26 10:56
0
雪    币: 220
活跃值: (711)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼上的qihoocom大牛,我知道是个宏,就是不知道怎么把两个CTL_CODE转化为&H226000,和&H22A004的呢?之间是怎么转换的?
例如知道&H22A004,怎么还原出原来的CTL_CODE的定义呢?
2009-1-27 09:58
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
4
osr上面有个htm可以帮助你反算回来

取位  移动 就ok了
2009-1-27 10:26
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
5
用上面那个宏的公式就可以转换阿,如果你想在VB里直接这么定义,写一个实现这个公式的函数就可以了
2009-1-27 12:04
0
游客
登录 | 注册 方可回帖
返回
//