2011-02-17 61 views
1

我覺得有點小技巧了,因爲獲取CPU的硬件信息,所以我提出了這個要求:硬盤驅動器,CD/DVD /藍光閱讀器,軟盤和如果有可能的USB。 我一直在尋找MSDN GetDriveType,但似乎我在尋找不好或我不明白它。任何想法?如何確定特定驅動器的類型?

+0

你想獲得什麼信息?給定驅動器是什麼類型的驅動器?卷/分區大小?物理設備信息? – 2011-02-17 07:29:54

回答

2

我不知道你不明白你鏈接到文件...

由函數接受的唯一參數是要獲取有關信息(包括驅動器的根目錄一個尾隨的反斜槓)。該函數返回一個值,指示哪種類型的驅動器是。顯示的圖表給出了可能的返回值以及它們各自的含義。

例如:

GetDriveType(_T("C:\\")) // returns DRIVE_FIXED if C:\ is my hard drive 
GetDriveType(_T("A:\\")) // returns DRIVE_REMOVABLE if A:\ is my floppy drive 
GetDriveType(_T("D:\\")) // returns DRIVE_CDROM if D:\ is a CD-ROM drive 
GetDriveType(_T("N:\\")) // returns DRIVE_REMOTE if N:\ is a network drive 

它還說,如果你想確定驅動器是否是USB型驅動器,你需要調用SetupDiGetDeviceRegistryProperty function並指定SPDRP_REMOVAL_POLICY屬性。

+0

什麼.h(頭文件)是GetDrivePath?如果它需要一個。 – Kazuma 2011-02-17 08:33:32

+0

@Kazuma:所有信息位於MSDN上每個文檔頁面的最底部。在這種情況下,它說:「WinBase.h(包括Windows.h)」。這意味着它在`WinBase.h`中定義,但是你不應該自己包含它。你應該已經包含`Windows.h`,所以你不需要做其他任何事情。 – 2011-02-17 08:36:44

1

我所知道的Windows中唯一使用該信息的全功能API是WMI,但使用起來並不是非常簡單。另一方面,許多程序使用直通控制代碼或I/O控制代碼(如SMART_RCV_DRIVE_DATA)直接與設備通信。

(我不知道怎麼Speccy的作品,但我猜它使用這些方法的組合來獲得所需的系統信息。)

2

如果要確定一個設備是USB設備,您可以打開其句柄並使用DeviceIoControl()發送IOCTL查詢以獲取設備連接的總線類型。

EnumUsbDrivesLetters - 這篇文章是用俄語編寫的,但它包含C++源代碼,所以很容易理解。

乾杯,安德里