我在哪里可以找到IOCTL常数值?

时间:2012-06-22 08:04:36

标签: c++ .net vb.net msdn

我需要知道各种字符串的IOCTL常量(例如IOCTL_ATA_PASS_THROUGH的常量值)。在网上搜索我发现这些常量是在标题Ntddscsi.h中定义的,但那些常量是错误的。例如,IOCTL_ATA_PASS_THROUGH的常量值应为4D02C,而在头文件中则为40B

问题是:我在哪里可以找到包含所有正确值的列表?

由于

编辑:

我找到了http://www.ioctls.net/,其中列出了所有代码。无论如何,谢谢你解释为什么Ntddscsi.h中的值不是" final"值

1 个答案:

答案 0 :(得分:12)

它们位于c:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Include \(在64位系统上)的ntddscsi.h中。他们被视为:

#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 _....宏,您将找到这些值。另一方面,编写一个简短的应用程序只是为了将它们的值打印为十六进制更容易;)