[英]Where can I find the declaration of HOST_E_CLRNOTAVAILABLE (type HRESULT) constant?
[英]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.