# include<stdio.h>
# include<windows.h>
# include<stdlib.h>
/*
要获取一些关于驱动器的属性,可以调用这些函数:
1: UINT GetDriveType(
LPCTSTR lpRootPathName
);
函数有一个参数,比如"c:\\"(\是转义字符,所以要两个\,比如”\"“就是表示“)
函数返回值是无符号整型。
该函数获得的是驱动器的类型:
#define DRIVE_UNKNOWN 0 //未知的
#define DRIVE_NO_ROOT_DIR 1 //非根目录,比如”c:\\windows"
#define DRIVE_REMOVABLE 2 //可移动的,比如软盘
#define DRIVE_FIXED 3 //固定的驱动器即硬盘,比如"c:\\"
#define DRIVE_REMOTE 4 //远程驱动器,比如通过网络共享的
#define DRIVE_CDROM 5 //光盘
#define DRIVE_RAMDISK 6 //u盘
函数返回的值与这些宏对应
2: BOOL GetVolumeInformation(
LPCTSTR lpRootPathName, //驱动器的根目录
LPTSTR lpVolumeNameBuffer, //字符数组(驱动器的名称)
DWORD nVolumeNameSize, //数组大小
LPDWORD lpVolumeSerialNumber, //驱动器的序列号的地址,
//每个驱动器(卷)都有一个序列号,一般叫做"硬盘号"
//每个驱动器都有唯一的序列号,经常会用到序列号加密
LPDWORD lpMaximumComponentLength, //文件名的最大长度
LPDWORD lpFileSystemFlags, //该变量与一些属性做位
//运算,就可以判断是否具有该属性
LPTSTR lpFileSystemNameBuffer,
//驱动器的文件系统名称,比如"NTFS“
DWORD nFileSystemNameSize //数组大小
);
*/
int main()
{
UINT uDriveType = GetDriveType(TEXT("c:\\windows"));//注意要写两个\
switch (uDriveType)
{
case DRIVE_UNKNOWN:
printf("DRIVE_UNKNOWN\n");
break;
case DRIVE_NO_ROOT_DIR:
printf("DRIVE_NO_ROOT_DIR\n");
break;
case DRIVE_REMOVABLE:
printf("DRIVE_REMOVABLE\n");
break;
case DRIVE_FIXED:
printf("DRIVE_FIXED\n");
break;
case DRIVE_REMOTE:
printf("DRIVE_REMOTE\n");
break;
case DRIVE_CDROM:
printf("DRIVE_CDROM\n");
break;
case DRIVE_RAMDISK:
printf("DRIVE_RAMDISK\n");
break;
default:
break;
}
TCHAR szDriveName[MAX_PATH];
DWORD dwVolumeSerialNumber;
DWORD dwMaximumCompoentLength;
DWORD dwFileSystemFlags;
TCHAR szFileSystemNameBuffer[MAX_PATH];
if (!GetVolumeInformation(//该函数调用可能会失败
TEXT("c:\\"),//驱动器的根目录
szDriveName,
MAX_PATH,
&dwVolumeSerialNumber,
&dwMaximumCompoentLength,
&dwFileSystemFlags,
szFileSystemNameBuffer,
MAX_PATH
))
{
return -1;
}
if (dwFileSystemFlags&FILE_VOLUME_QUOTAS)//磁盘配额
{
printf("The file system supports disk quota.\n");
}
if (dwFileSystemFlags*FILE_SUPPORTS_ENCRYPTION)//是否允许加密
{
printf("The file system supports encryption.\n");
}
//还有很多属性,就不一 一列举了
system("pause");
return 0;
}