これらは、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
これは、c:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \Include\にCTL_CODE
あるWinIoCtl.hから取得されます。
#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 _....マクロに適用すると、値が見つかります。一方、値を16進数として出力するだけの短いアプリケーションを作成する方がはるかに簡単です;)