首页 > 其他 > 详细

使用GetLogicalDriveStrings获取驱动器根路径

时间:2014-03-03 11:09:38      阅读:626      评论:0      收藏:0      [点我收藏+]

使用GetLogicalDriveStrings获取驱动器根路径,并使用自定义的GetDriveInfo函数获取驱动器的属性。

VS2012 + win7 x64下调试通过。

bubuko.com,布布扣
#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;

}
bubuko.com,布布扣

使用GetLogicalDriveStrings获取驱动器根路径,布布扣,bubuko.com

使用GetLogicalDriveStrings获取驱动器根路径

原文:http://www.cnblogs.com/dabiao/p/3576697.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!