標籤:style blog http os io 檔案 ar art cti
int get_ndisks()
{
HANDLE hDevice; // handle to the drive to be examined
int ndisks = 0;
char path[20] = {"\\\\.\\PhysicalDrive0"};
do {
//TRACE("NDISKS %s", path);
hDevice = CreateFileA(path, // drive to open
GENERIC_READ, //access mode
FILE_SHARE_READ, // share mode
NULL, // default security attributes
OPEN_EXISTING, // disposition
0, // file attributes
NULL); // don‘t copy any file‘s attributes
if(hDevice != INVALID_HANDLE_VALUE)
CloseHandle(hDevice);
ndisks++;
path[17] = (char)(‘0‘ + ndisks);
}while(hDevice != INVALID_HANDLE_VALUE);
return ndisks - 1;
}
其中,path為第一個硬碟的裝置名稱,ndisks的值則表示當前存在幾個硬碟;
do{}while();中的CreateFileA進行裝置的開啟,若返回值不為INVALID_HANDLE_VALUE則表示開啟成功,那麼則使ndisks+1,而path[17]則是硬碟裝置的序號中的第18個字元的值,在“\\\\.\\PhysicalDrive0”中對應的字元為0,因為“\\\\.\\PhysicalDrive0”通過轉義後的實際字串為:“\\.\PhysicalDrive0”。第一個硬碟的序號為0,第二個為1,依次累加之。
CreateFile這個函數可以建立或開啟一個對象的控制代碼,憑藉此控制代碼就可以控制這些對象:
控制台對象、通訊資來源物件、目錄對象(只能開啟)、磁碟裝置對象、檔案對象、郵槽對象、管道對象。
有關CreateFile Function的更具體的說明可進行MS的MSDN進行查詢。
中文介紹REC:
http://www.cnblogs.com/transcom/articles/1384946.html
開源ext2read代碼走讀之-在windows下如何判斷有幾個硬碟裝置?