在哪里可以找到 IOCTL 常量值
Where can I find IOCTL constant values?
我需要知道各种字符串的IOCTL常量(例如IOCTL_ATA_PASS_THROUGH常量的值)。搜索网络,我发现这些常量是在标题 Ntddscsi.h 中定义的,但这些常量是错误的。例如,IOCTL_ATA_PASS_THROUGH的常量值应该是 4D02C,而在头文件中它是 40B
问题是:我在哪里可以找到包含所有正确值的列表?
谢谢
编辑:
我找到了 http://www.ioctls.net/列出了所有代码的地方。无论如何,感谢您解释为什么 Ntddscsi.h 中的值不是"最终"值
它们位于 ntddscsi.h 中,位于 c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\(在 64 位系统上)。他们被蔑视为:
#define IOCTL_ATA_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE, 0x040b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
IOCTL_SCSI_BASE
是
#define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER
来自同一文件
这些来自WinIoCtl.h
#define METHOD_BUFFERED 0
#define FILE_DEVICE_CONTROLLER 0x00000004
#define FILE_READ_ACCESS ( 0x0001 ) // file & pipe
#define FILE_WRITE_ACCESS ( 0x0002 ) // file & pipe
CTL_CODE
来自 WinIoCtl.h 在 c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\
#define CTL_CODE( DeviceType, Function, Method, Access ) (
((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)
)
因此,IOCTL_ATA_PASS_THROUGH的最终值将是:
(4 << 16 | (1 | 2) << 14 | 0x040b << 2 | 0) = 315436 = 4D02C
:D
如果你将这些计算应用于其他IO_......宏,您将找到值。另一方面,编写一个简短的应用程序只是为了将它们的值打印为十六进制;)要容易得多
相关文章:
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 什么时候在C++中返回常量引用是个好主意
- 代理对象的常量正确性
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 通过多个头文件使用常量变量
- 在cuda线程之间共享大量常量数据
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 是默认情况下分配给char数组常量的值
- 私有类型的静态常量成员
- 类似枚举的计算常量
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么我可以通过引用修改常量返回
- 如何创建长度由常量参数指定的数组
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 隐式常量/非常量运算符布尔
- 非常量变量只读位置的赋值
- constexpr构造函数需要常量成员函数时出现问题