效果

源碼
#include
#include
#include
//不要用Unicode編碼,反正我用這個(gè)編碼后不能正確執(zhí)行
#define BUFSIZE 1024//文件系統(tǒng)名稱緩沖區(qū)的長度
BOOL GetDirverInfo(LPSTR szDrive);//聲明函數(shù)
void main(int argc, PCHAR argv[]){
CHAR szLogicalDriveStrings[BUFSIZE];//保存所有卷緩存的空間
PCHAR szDrive;
ZeroMemory(szLogicalDriveStrings, BUFSIZE);//將指定空間用0填充
GetLogicalDriveStrings(BUFSIZE - 1, szLogicalDriveStrings);//保存類似于 C:\\0D:\\0\0...
szDrive = (PCHAR)szLogicalDriveStrings;//指向保存了所有卷緩存的空間
do{
if (!GetDirverInfo(szDrive)){
printf("獲取信息錯(cuò)誤: %d\n", GetLastError());
}
szDrive += (lstrlen(szDrive) + 1);//看不懂...
} while (*szDrive != '\x00');//指向的值不是0就循環(huán)
getchar();
}
//獲取驅(qū)動器信息
//參數(shù):要獲取的驅(qū)動器根路徑,如 C:\ */
BOOL GetDirverInfo(LPSTR szDrive){
UINT uDriveType;//驅(qū)動器的類型
DWORD dwVolumeSerialNumber;//卷序號
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ū)動器: %s\n", szDrive);
uDriveType = GetDriveType(szDrive);//判斷驅(qū)動器的類型
switch (uDriveType){
case DRIVE_UNKNOWN:
printf("不能確定驅(qū)動器類型\n");
break;
case DRIVE_NO_ROOT_DIR:
printf("根路徑無效,例如:在該路徑上備用安裝卷\n");
break;
case DRIVE_REMOVABLE:
printf("驅(qū)動器是一種可移動介質(zhì)的類型,例如:軟盤驅(qū)動器或可移動硬盤\n");
break;
case DRIVE_FIXED:
printf("驅(qū)動器是一種不能移動的類型,例如:固定硬盤驅(qū)動器\n");
break;
case DRIVE_REMOTE:
printf("驅(qū)動器是遠(yuǎn)程(網(wǎng)絡(luò))驅(qū)動器\n");
break;
case DRIVE_CDROM:
printf("驅(qū)動器是一個(gè)CD-ROM驅(qū)動器\n");
case DRIVE_RAMDISK:
printf("驅(qū)動器是RAM(內(nèi)存)磁盤\n");
break;
default:
break;
}
if (!GetVolumeInformation(//獲得磁盤卷的信息
szDrive,//指向包含要描述的卷的根目錄的字符串的指針
szDriveName,//指向接收指定卷名稱的緩沖區(qū)的指針
MAX_PATH,//緩沖區(qū)的長度,TCHAR中最大緩沖區(qū)的大小是MAX_PATH + 1
&dwVolumeSerialNumber,//指向接收卷序號的變量的指針
&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ū)動器名稱: %s\n", szDriveName);
}
printf("卷的序列號: %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)識符。\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("指定的卷支持更新序列號(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;
}