4.2 使用FindFirstVolume系列函數(shù)遍歷驅(qū)動(dòng)器信息

效果

和上一個(gè)方法區(qū)別在于如紅框處,驅(qū)動(dòng)名返回的是以\\?\volume{GUID}形式,并且多出了之前沒有的一個(gè)系統(tǒng)保留磁盤

源碼

#include

#include

#define _WIN32_WINNT 0x0601

#define BUFSIZE 1024//文件系統(tǒng)名稱緩沖區(qū)的長度

BOOL GetDirverInfo(LPSTR szDrive);//聲明函數(shù)

void main(int argc, PCHAR argv[]){

TCHAR buf[BUFSIZE];//卷標(biāo)信息

HANDLE hVol;//卷遍歷句柄

BOOL bFlag;//標(biāo)志

hVol = FindFirstVolume(buf, BUFSIZE);//查找主機(jī)中的第一個(gè)驅(qū)動(dòng)器,返回查找句柄

if (hVol == INVALID_HANDLE_VALUE){

printf("no volume found\n");

return (-1);

}

GetDirverInfo(buf);

while (FindNextVolume(hVol, buf, BUFSIZE)){//根據(jù)FindFirstVolume返回的句柄, 查找主機(jī)中后續(xù)的邏輯驅(qū)動(dòng)器

GetDirverInfo(buf);

}

bFlag = FindVolumeClose(hVol);

getchar();

return bFlag;

}

//獲取驅(qū)動(dòng)器信息

//參數(shù):要獲取的驅(qū)動(dòng)器根路徑,如 C:\ */

BOOL GetDirverInfo(LPSTR szDrive){

UINT uDriveType;//驅(qū)動(dòng)器的類型

DWORD dwVolumeSerialNumber;//卷序號(hào)

DWORD dwMaximumComponentLength;//最大長度

DWORD dwFileSystemFlags;//標(biāo)志

CHAR szFileSystemNameBuffer[MAX_PATH];//接收文件系統(tǒng)名稱的緩沖區(qū),例如FAT文件系統(tǒng)或NTFS文件系統(tǒng)

CHAR szDriveName[MAX_PATH];//卷名的緩沖區(qū)

printf("驅(qū)動(dòng)器: %s\n", szDrive);

uDriveType = GetDriveType(szDrive);//判斷驅(qū)動(dòng)器的類型

switch (uDriveType){

case DRIVE_UNKNOWN:

printf("不能確定驅(qū)動(dòng)器類型\n");

break;

case DRIVE_NO_ROOT_DIR:

printf("根路徑無效,例如:在該路徑上備用安裝卷\n");

break;

case DRIVE_REMOVABLE:

printf("驅(qū)動(dòng)器是一種可移動(dòng)介質(zhì)的類型,例如:軟盤驅(qū)動(dòng)器或可移動(dòng)硬盤\n");

break;

case DRIVE_FIXED:

printf("驅(qū)動(dòng)器是一種不能移動(dòng)的類型,例如:固定硬盤驅(qū)動(dòng)器\n");

break;

case DRIVE_REMOTE:

printf("驅(qū)動(dòng)器是遠(yuǎn)程(網(wǎng)絡(luò))驅(qū)動(dòng)器\n");

break;

case DRIVE_CDROM:

printf("驅(qū)動(dòng)器是一個(gè)CD-ROM驅(qū)動(dòng)器\n");

case DRIVE_RAMDISK:

printf("驅(qū)動(dòng)器是RAM(內(nèi)存)磁盤\n");

break;

default:

break;

}

if (!GetVolumeInformation(//獲得磁盤卷的信息

szDrive,//指向包含要描述的卷的根目錄的字符串的指針

szDriveName,//指向接收指定卷名稱的緩沖區(qū)的指針

MAX_PATH,//緩沖區(qū)的長度,TCHAR中最大緩沖區(qū)的大小是MAX_PATH + 1

&dwVolumeSerialNumber,//指向接收卷序號(hào)的變量的指針

&dwMaximumComponentLength,//指向一個(gè)變量的指針.用來保存文件系統(tǒng)支持的最大文件名長度

&dwFileSystemFlags,//指向接收與指定文件系統(tǒng)關(guān)聯(lián)的標(biāo)志的變量的指針

szFileSystemNameBuffer,//指向緩沖區(qū)的指針

BUFSIZE//文件系統(tǒng)名稱緩沖區(qū)的長度

)){

//MessageBox(NULL, "xxx", "xxx", MB_OK);

return FALSE;

}

if (0 != lstrlen(szDriveName)){//如果卷名不為空

printf("驅(qū)動(dòng)器名稱: %s\n", szDriveName);

}

printf("卷的序列號(hào): %u\n", dwVolumeSerialNumber);

printf("最大組件長度: %u\n", dwMaximumComponentLength);

printf("系統(tǒng)類型: %s\n", szFileSystemNameBuffer);

if (dwFileSystemFlags & FILE_CASE_PRESERVED_NAMES){

printf("指定的卷支持在磁盤上保存名稱時(shí)保留文件名的大小寫。\n");

}

if (dwFileSystemFlags & FILE_CASE_SENSITIVE_SEARCH){

printf("指定的卷支持區(qū)分大小寫的文件名。\n");

}

if (dwFileSystemFlags & FILE_FILE_COMPRESSION){

printf("指定的卷支持基于文件的壓縮。\n");

}

if (dwFileSystemFlags & FILE_NAMED_STREAMS){

printf("指定的卷支持命名流。\n");

}

if (dwFileSystemFlags & FILE_PERSISTENT_ACLS){

printf("指定的卷保留并強(qiáng)制訪問控制列表(ACL)。\n");

}

if (dwFileSystemFlags & FILE_READ_ONLY_VOLUME){

printf("指定的卷是只讀的。\n");

}

if (dwFileSystemFlags & FILE_SEQUENTIAL_WRITE_ONCE){

printf("指定的卷支持單個(gè)順序?qū)懭?。\n");

}

if (dwFileSystemFlags & FILE_SUPPORTS_ENCRYPTION){

printf("指定的卷支持加密文件系統(tǒng)(EFS)。\n");

}

if (dwFileSystemFlags & FILE_SUPPORTS_EXTENDED_ATTRIBUTES){

printf("指定的卷支持?jǐn)U展屬性。\n");

}

if (dwFileSystemFlags & FILE_SUPPORTS_HARD_LINKS){

printf("指定的卷支持硬鏈接。\n");

}

if (dwFileSystemFlags & FILE_SUPPORTS_OBJECT_IDS){

printf("指定的卷支持對象標(biāo)識(shí)符。\n");

}

if (dwFileSystemFlags & FILE_SUPPORTS_OPEN_BY_FILE_ID){

printf("文件系統(tǒng)支持FileID打開。\n");

}

if (dwFileSystemFlags & FILE_SUPPORTS_REPARSE_POINTS){

printf("指定的卷支持重解析點(diǎn)。\n");

}

if (dwFileSystemFlags & FILE_SUPPORTS_SPARSE_FILES){

printf("指定的卷支持稀疏文件。\n");

}

if (dwFileSystemFlags & FILE_SUPPORTS_TRANSACTIONS){

printf("指定的卷支持事務(wù)。\n");

}

if (dwFileSystemFlags & FILE_SUPPORTS_USN_JOURNAL){

printf("指定的卷支持更新序列號(hào)(USN)日志。\n");

}

if (dwFileSystemFlags & FILE_UNICODE_ON_DISK){

printf("指定的卷在文件名中顯示在磁盤上時(shí)支持Unicode。\n");

}

if (dwFileSystemFlags & FILE_VOLUME_IS_COMPRESSED){

printf("指定的卷是一個(gè)壓縮卷。\n");

}

if (dwFileSystemFlags & FILE_VOLUME_QUOTAS){

printf("指定的卷支持磁盤配額。\n");

}

return TRUE;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 效果 源碼 #include #include #include //不要用Unicode編碼,反正我用這個(gè)編碼后...
    f675b1a02698閱讀 1,913評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,564評論 19 139
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,242評論 2 33
  • 碎碎念的日子已經(jīng)久違,給潮涌而至的十萬個(gè)為什么一一找到了答案,終于有了足夠的理由去繼續(xù)修煉這威力無窮的叨叨神功。 ...
    云妙凈閱讀 268評論 0 2
  • 古典:最好的人生狀態(tài)是在熱愛的領(lǐng)域努力地玩 古典的第二本書《你的生命有什么可能》,本書寫給成長中的每一個(gè)人,以生涯...
    Jean_zz閱讀 706評論 0 1

友情鏈接更多精彩內(nèi)容