『壹』 vc++如何獲取磁碟信息
如果是windows下,你可以查找"精通Windows.API-函數、介面、編程實例.pdf"第四章文件系統中的內容。
4.2.1 遍歷卷並獲取屬性
獲取一個主機上的所有驅動器列表有兩種方法,一種是使用 GetLogicalDrives 或
GetLogicalDriveStrings,另一種是使用 FindFirstVolume 和 FindNextVolume 組合。
第一種方法獲取主機上的邏輯驅動器,也就是所有分配的卷標的驅動器,返回的結果是
驅動器的根路徑。第二種方法返回的是「\?volume{GUID}」形式的驅動器設備名。
使用 GetDriveType API 可以獲取驅動器類型,使用 GetVolumeInformation 可以獲取驅
動器屬性。
1.關鍵 API
(1) GetLogicalDrives。
獲取主機中所有的邏輯驅動器,以 BitMap 的形式返回,其函數原型如下:
◇返回值
GetLogicalDrive 函數返回一個 DWORD 類型的值,第一位表示所對應的驅動器是否存在。
一般情況下 DWORD 的數據長度是 32 位,在這個 DWORD 中,每一位對應了一個邏輯驅動器是
否存在。第二位如果是「1」則表示驅動器「B:」存在,第 4 位如果是「1」則表示驅動器
「D:」是存在的,以此類推。
(2) GetLogicalDriverStrings。
獲取主機中所有驅動器,以驅動器根路徑字元串返回,其函數原型如下:
◇參數
nBufferLength:參數 lpBuffer 所指向的內存空間的大小,以位元組為單位。
lpBuffer:指向存儲返回結果字元串的內存空間。
◇返回值
函數的返回值指明了函數調用是否成功,如果成功則返回緩沖區中返回結果的總長度。
如果返回值大於 nBufferLength,說明給定的緩沖區大小不夠,返回值是實際需要的大小。
如果返回 0,則說明函數運行出錯。
◇使用說明
這個 API 實現了與 GetLogicalDrives 同樣的功能,卻以一種更直觀的方式返回執行結
果。函數執行結果放在 lpBuffer 所指向的內存區域中,此內存區域大小由 nBufferLength
參數指定,使函數返回結果不至於溢出。在調用此函數前需保證內存分配。
函數調用成功後,將在緩沖區中依次填入本機所具有的驅動器根路徑字元串,如在筆者
系統中有 5 個邏輯驅動器「C:」、「D:」「E:」、「F:」、「I:\」。執行後在緩沖
區中的結果如下:
也就是連續放置了「C:」、「D:」「E:」、「F:」、「I:\」這 5 個字元串(會
在每個字元串後加一個『\o』結束符,在所有卷標字元串的最後再加一個結束符)。
(3)FindFirstVolume。
查找主機中的第一個驅動器,返回驅動器設備名,其函數原型如下:
◇參數
lpszVolumeName:指向驅動器名的內存緩沖區。
cchBufferLength:參數 lpszVolumeName 所指向的緩沖區大小,以位元組為單位。
◇返回值
驅動器查找句柄, F 貓 NextVolume 和 FindVolumeColse 的參數, 如果執行失敗, 返回 NULL。
(4)FindNextVolume
查找主機中後繼的邏輯驅動器,其函數原型如下:
◇參數
hFindVolume: FindFirstVolume 所返回的驅動器查找句柄。
lpszVolumeName:指向保存驅動器名的內存緩沖區。
cchBufferLength:參數 lpszVolumeName 所指向的緩沖區大小,以位元組為單位。
◇返回值
返回 BOOL 表示是否成功,如果失敗說明已經查找完成所有邏輯驅動器。
(5)FindVo1umeClose。
\關閉 FindFirstVolume 打開的卷遍歷句柄,其函數原型如下:
◇參數
hFindVolume:要關閉的驅動器查找句柄。
◇返回值
返回 BOOL 值表示是否成功關閉句柄。
(6) GetDriveType。
獲取驅動器類型,其函數原型如下:
◇參數
lpRootPathIName:驅動器根路徑,如「C:」。
◇返回值 /
驅動器的類型,如 DRIVE' FIXED 表示硬碟,DRIVE_CDROM 表示光碟等。詳見實例 4-2
的 GetDirverInfo 函數。
(7) GetVolumeInformation。
獲取邏輯驅動器信息,其函數原型如下:
◇參數
lpRootPathName:輸入參數,指向所要獲取屬性的驅動器的根路徑字元串。
lpVolumeNameBuffer:輸出參數,返回驅動器名。
『貳』 什麼是邏輯磁碟和物理磁碟
磁碟分區包括:主分區,擴展分區。其中擴展分區有可能包含若干個邏輯分區。 硬碟1,分一個主分區,剩餘的分擴展分區,然後根據需要分若干邏輯分區,硬碟2整盤分成擴展分區,然後建立若干邏輯分區。邏輯分區數量根據你的需求進行劃分。
『叄』 Vb如何獲取系統有多少個邏輯磁碟,以及卷標磁碟名字各是什麼 急求,不會的麻煩別回答,手機提問麻煩。
獲取系統
首先,引用System.Management;
然後在代碼中Imports System.Management;
//獲取硬碟ID
沒轍你不會提問,手機簡訊只限100字 輸入內容達到長度限制,就給你發不過去系統封裝少不了編程>VC/VB
『肆』 VC 根據邏輯驅動器號,得到物理驅動器號
調用DeviceIoControl,
使用IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS,
可以得到物理驅動器的編號,
0就是IDE0位置0,1就是IDE0位置1,依次類推。
另外,IOCTL_DISK_CONTROLLER_NUMBER也可以完成這個功能。
後面比較麻煩,
要得到匯流排類型需要調用IOCTL_STORAGE_QUERY_PROPERTY,
但是這個需要DDK的頭文件,可以獲得的信息也很多,自己看ntdddisk.h、ntddstor.h
『伍』 在VC中我如何列表出系統的盤符名稱
TCHARbuf[100];這里得m_conClean是一個combox的控制項變數,將這一段代碼寫入OnInitDialog()函數即可
DWORDlen=GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);
CStringstrDisks;
for(TCHAR*s=buf;*s;s+=_tcslen(s)+1)
{
CStringstrDisks;
LPCTSTRsDrivePath=s;//單個盤符
m_conClean.ModifyStyle(CBS_SORT,0);
m_conClean.AddString(sDrivePath);
strDisks+=sDrivePath;
strDisks+="";
}
『陸』 如何用vc列出所有邏輯盤符,及所有的物理盤(DhysicalDrive)
有兩個函數好像叫GetLogicalDriveStrings()和GetLogicalDrives(),它們可以幫助你獲取所有分區。在我QQ空間上有介紹這兩種辦法。
『柒』 VC怎樣獲得驅動器的名稱
獲取系統的邏輯磁碟:
DWORD GetLogicalDrives(void);
和
DWORD GetLogicalDriveStrings(
DWORD nBufferLength,
LPTSTR lpBuffer
);
詳見 MSDN
『捌』 如何通過邏輯盤符獲取物理磁碟名稱
右鍵點擊 我的電腦,選擇「管理」,彈出「計算機管理」窗口。在左邊的樹形菜單里選擇「存儲」->「磁碟管理」。在右邊可以看到各個盤符對應的磁碟號(磁碟0表示PHYSICALDRIVE0,以此類推)
『玖』 如何通過U盤盤符索取物理序列號
現在有一種想法就是做一個函數然後做一個隱藏的list。讓他讀取出來所有磁碟的盤符(效果是刷出來所有的盤符CDEF...)然後在用索取物理序列號的方法列出來所有的物理序列號,讓他們在一排上面,在在後面的程序裡面取其中的一組數據讓他只要在序列號=xxxx的時候索取前面盤符,試了還多次沒有實現。不過是一種思路。大家看看能不能行得通。或者有沒有其他辦法。
『拾』 VC中用createfile打開一個磁碟,如何在程序運行時修改盤符也即如何在程序運行時由用戶指定打開哪個磁碟
我試了下,可以的吧,你看看你返回的錯誤值呢
LPCTSTR lpstrtmp = "H:" ;
char str[MAX_PATH] = "\\\\.\\";
strcat(str, lpstrtmp);
HANDLE hFile = CreateFile(str,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
0,