看看这个贴子,提问之前搜索一下多好。
http://www.csdn.net/expert/TopicView.asp?id=60081

解决方案 »

  1.   

    用DWORD GetLogicalDrives(void)返回一个32位值,每一位代表一个逻辑驱动器是否存在,比如如果存在A驱,第0位被置1;
    用BOOL DoesDriverExist(char cDriverLetter)可以验证特定字母的驱动器是否存在.
    用DWORD GetLogicalDriverString(DWORD cchBuffer, LPTSTR lpszBuffer)填充lpszBuffer用以下形式:
    "A:\<NULL>C:\<NULL>D:\<NULL><NULL>"   <NULL>表示'\0'
    可以得到每一个逻辑驱动器的根目录。如果你传入的Buffer不够放下所有信息,返回值是需要的Buffer大小。
    用UINT GetDriverType(LPTSTR lpszRootPathName)可以得到驱动器的类型。要传入根目录名如"A:\"返回值为以下值:
    0,无法确定;1,不存在;DRIVER_REMOVEABLE,软驱;DRIVER_FIXED,硬盘;DRIVER_REMOVE,网络驱动器;DRIVER_CDROM,光驱;DRIVER_RAMDISK,RAM模拟驱动器。
    用UINT GetVolumnInformation(LPTSTR lpRootPathNane,
        LPTSTR lpVolumnNameBuffer,DWORD nVolumnNameSize,
        LPDWORD lpVolumnSerialNumber,LPDWORD lpMaximumComponentLength,
        LPDWORD lpFileSystemFlags,LPTSTR lpFileSystemNameBuffer,
        DWORD nFileSystemNameSize);
    可以取得相应驱动器的:
    卷标:    lpVolumnNameBuffer, nVolumnNameSize
    序列号:  lpVolumnSerialNumber, 
    目录名/文件名的最大字符数:lpMaximumComponentLength,
    文件系统特征: lpFileSystemFlags,
    文件系统名称: lpFileSystemNameBuffer, nFileSystemNameSize
    具体阐述看MSDN.
    以及用 BOOL GetDiskFreeSpace(LPTSTR lpszRootPathName,
             LPDWORD lpSectorsPerCluster, LPSWORD lpBytesPerSector.
             LPDWORD lpFreeCluster, LPDWORD lpClusters);
    可以返回:
    每簇扇区数:lpSectorsPerCluster
    每扇区字节数:lpBytesPerSector
    空簇数:lpFreeCluster
    总簇数:lpClusters
    以上是除用CreateFile/DeviceIoControl外的所有磁盘API了。