簡體   English   中英

我在哪里可以找到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中的值不是“最終”值

它們位於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 _....宏,您將找到這些值。 另一方面,編寫一個簡短的應用程序只是為了將它們的值打印為十六進制,這要容易得多;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM