2010-11-07 57 views
3

我想弄清楚特定驅動器的設備類型。我想知道如何在Mac OS X和Linux上做到這一點,但現在如果Windows解決方案太多,就足夠了。如何確定驅動器的類型?

所以,讓我們說我有一個驅動器H.我能確定設備是否通過Win32 API函數GetDriveType()可移動驅動器。我也可以在Mac OS X上找到它。

,但似乎我無法找到,以可靠的方式,是設備類型。像,它是一個USB閃存驅動器,便攜式硬盤驅動器(PHD)等

通過在Windows註冊表進行挖掘,我似乎無法找到很多信息也是如此。儘管如果可能的話,我寧願使用一些API,但如果需要,我會使用註冊表。

現在,我感興趣的是..驅動器的閃存驅動器(所以我可以在我的程序中顯示一個USB閃存驅動器圖標)或便攜式硬盤驅動器(所以,一個PHD圖標將顯示)。

回答

1

device class是你想要的嗎?如果是這樣,你可以嘗試libusb( for win32)。使用libusb_get_device_descriptor函數。

3

對於Windows,它看起來像SHGetFileInfo可能做的伎倆。也許你可以在驅動器的根文件夾中調用它?請參閱http://msdn.microsoft.com/en-us/library/bb762179(VS.85).aspx

SH ...功能一般是資源管理器使用這樣的人(假設它的作品)這應該給你,你在Windows Explorer中看到確切的圖標...

+0

感謝brone,但事情是以某種方式確定它。所以我可以使用自定義圖標。我正在使用的應用程序不像資源管理器,但在一個對話框中顯示音量信息。奇怪的是,雖然該探險家確實使用不同的圖標爲USB閃存驅動器和phd,但我沒有看到任何win32 API函數來確定它。 – Amy 2010-11-07 18:46:12

1

你可能想看看DeviceIoControlIOCTL_STORAGE_QUERY_PROPERTY。例如,您可以通過指定StorageDeviceProperty並查看BusType成員來確定設備是否爲USB。 「設備類型」成員也很有趣。

如果你不介意放棄XP的支持,有我相信提供這類信息的Virtual Disk Service

+0

感謝提示asveikau,但問題是它是什麼類型的USB設備..不是它是否在USB接口。我已經確定安裝的音量是否確實是USB設備。 現在,通過我得到的INVO看,我有事情,如: VENDORID: 「FLASH」 產品編號: 「驅動AU_USB20」 ,或者對於PHD: VENDORID: 「SPCC」 產品編號:「PHD 「 但這些(我相信)供應商的具體情況,所以他們似乎不是一個可靠的方式來確定我想找出什麼 – Amy 2010-11-07 19:35:26

1

使用前面提到的IOCTL_STORAGE_QUERY_PROPERTY控制代碼檢索STORAGE_DEVICE_DESCRIPTOR結構。部分結構是一個STORAGE_BUS_TYPE枚舉,它會告訴你總線上的驅動器(USB,1394,RAID,ATAPI,SCSI等)