使用GetLogicalDriveStrings获取驱动器根路径
使用GetLogicalDriveStrings获取驱动器根路径,并使用自定义的GetDriveInfo函数获取驱动器的属性。
VS2012 + win7 x64下调试通过。
#include <Windows.h> #include <stdio.h> #include <stdlib.h> #define BUFSIZE 1024 BOOL GetDriverInfo(LPSTR szDrive); //int WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nCmdShow) int main(void) { CHAR szLogicDriveStrings[BUFSIZE]; PCHAR szDrive; ZeroMemory(szLogicDriveStrings,BUFSIZE); GetLogicalDriveStrings(BUFSIZE-1,szLogicDriveStrings); szDrive = (PCHAR)szLogicDriveStrings; do { if(!GetDriverInfo(szDrive)) { printf("\nGet Volume Information Error:%d",GetLastError()); } szDrive += (lstrlen(szDrive)+1); } while (*szDrive !='\x00'); system("PAUSE"); return 0; } BOOL GetDriverInfo(LPSTR szDrive) { UINT uDriverType; DWORD dwVolumeSerialNumber; DWORD dwMaximumComponentlength; DWORD dwFileSystemFlags; CHAR szFileSystemNameBuffer[BUFSIZE]; CHAR szDriveName[MAX_PATH]; printf("\n%s\n",szDrive); uDriverType = GetDriveType(szDrive); switch(uDriverType) { case DRIVE_UNKNOWN: printf("The driver type cannot be determined!"); break; case DRIVE_NO_ROOT_DIR: printf("The root path is invalid,for example,no volume is mounted at the path"); break; case DRIVE_REMOVABLE: printf("The drive is a type that has removable media,for example:a floppy drive or removable hard disk"); break; case DRIVE_FIXED: printf("The drive is a type that cannot be removed, for example,a fixed hard drive"); break; case DRIVE_REMOTE: printf("This drive is a remote(network) drive"); break; case DRIVE_CDROM: printf("This drive is a CD-ROM drive."); break; case DRIVE_RAMDISK: printf("This drive is a RAM disk"); break; default: break; } if (!(GetVolumeInformation( szDrive, szDriveName, MAX_PATH, &dwVolumeSerialNumber, &dwMaximumComponentlength, &dwFileSystemFlags, szFileSystemNameBuffer, BUFSIZE))) { return FALSE; } if (0!=lstrlen(szDriveName)) { printf("\nDrive Name is %s.\n",szDriveName); } printf("\nVolume Serial is %u.",dwVolumeSerialNumber ); printf("\nMaximum Component Length is %u.",dwMaximumComponentlength); printf("\nSystem Type is %s.\n",szFileSystemNameBuffer); if (dwFileSystemFlags & FILE_VOLUME_QUOTAS) { printf("The file system supports disk Quotas.\n"); } if (dwFileSystemFlags & FILE_SUPPORTS_REPARSE_POINTS) { printf("The file system does not support volume mount points.\n"); } if (dwFileSystemFlags & FILE_CASE_SENSITIVE_SEARCH) { printf("The file system supports case-sentitive file name.\n"); } printf("...\n"); return TRUE; }
没事,别怕,这是签名→→┃ 青山幽谷笛声扬,白鹤振羽任翱翔。往事前尘随风逝,携手云峰隐仙乡。 ┃