2012-11-29 47 views
0

好吧,我正在創建一個程序,它可以採用唯一的驅動器ID(序列號?),並將其放入數據庫,並將ID與某些文件相關聯。如果我想在閃存驅動器(可以更改驅動器盤符)的東西上找到文件,我附加閃存盤,我的程序掃描它的唯一ID,根據類似stl :: map的內容查找文件,然後將驅動器號的唯一ID。Windows API中的驅動器/分區和唯一的驅動器ID

該程序還需要識別分區(顯然),所以也許uniqueid + partitionnumber在設備上。

關於如何去做這件事的任何想法?我正在查看EnumDisk的源代碼(Windows代碼示例),但包含的演示.exe在Windows 7下似乎不起作用(表示它在不從源重建的情況下兼容)。

任何接受者?

P.S.我從ENumDisk.exe得到這個錯誤 'CreateFile failed with error:5'

P.S.S.噢,我希望程序能夠掃描來自其他文件系統的驅動器,並獲得其系列ID。我知道這是一個艱鉅的任務,但這是我最終的目標。

回答

1

錯誤5是訪問被拒絕。這意味着你很可能以非管理員身份運行。如果您嘗試打開物理驅動器,則可以通過將「dwDesiredAccess」參數設置爲0來避開它。它可能會成功打開設備,但以後的操作可能會失敗,具體取決於您使用返回的句柄的API函數用。

至於獲取分區信息看IOCTL_DISK_GET_DRIVE_LAYOUT MSDN上的http://msdn.microsoft.com/en-us/library/windows/desktop/aa365173(v=vs.85).aspx和IOCTL_DISK_GET_PARTITION_INFO在http://msdn.microsoft.com/en-us/library/windows/desktop/aa365179(v=vs.85).aspx

您將能夠收集到的所有分區,即使是那些屬於文件系統Windows無法識別。

+0

非常感謝 - 我目前正在嘗試使用STORAGE_PROPERTY_QUERY到DeviceIoControl中取回一個STORAGE_DEVICE_UNIQUE_IDENTIFIER,它將包含序列號。 我的問題是,在MSDN中它指出STORAGE_PROPERTY_QUERY 位於winioctl.h中。我使用最新的MinGW使用CodeBlocks,但它一直在說: 錯誤:'STORAGE_PROPERTY_QUERY'未在此範圍內聲明。 所以我查看了MinGW包含目錄中的winioctl.h,並且沒有STORAGE_PROPERTY_QUERY。有沒有人偶然發現過這個問題? – user1853098

+0

你應該抓住最新的WDK。 –

+0

我把那部分工作了。 MinGW是一個bug,並沒有所有的定義和GUIDs。 – user1853098

相關問題