首页
社区
课程
招聘
求助 CTL_CODE问题
发表于: 2015-4-3 18:31 3911

求助 CTL_CODE问题

2015-4-3 18:31
3911
求高手指点 CTL_CODE宏第二个参数起到什么作用  是可以随意设置的么   和别的函数什么的有没有连带呢 比如一个功能码对应一个函数  对应一个功能啊  如果有  这个函数是怎么定义的呢  使我们自己写的还是微软写好了的呢   求高人指点  越详细越好

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 22
活跃值: (242)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
只是一个功能码,你在应用层和驱动层同时定义以后,在应用层调用DeviceIoControl()函数,在驱动层的IRP_MJ_DEVICE_CONTROL 的例程中通过irp堆栈就可以得到你定义的功能码,利用switch语句进行下发,一般定义大于0x830就行了
2015-4-4 20:08
0
雪    币: 31
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
#define CTL_CODE( DeviceType, Function, Method, Access ) (                 \
    ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
)
DeviceType 文档里有~
Function 就当是ID好了,传个0xXXX就可以,但是不要和微软的定义重复
Method 与R0层交互时使用的数据传递方式
Access FILE_READ_ACCESS之类的

我对这玩意的理解是,这就是个功能码,用来区分不同的功能的,当然这个功能是你自己定义的,让驱动完成不同的操作。写清楚点就是(ID 就是功能码)
switch(ID)
{
case 1:
{
   func();
   break;
}
....
}
2015-4-16 19:21
0
雪    币: 940
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢楼上二位的指点  感激不尽
2015-4-21 09:39
0
雪    币: 445
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我也想学。
2015-4-22 15:32
0
游客
登录 | 注册 方可回帖
返回
//