概述
提示这里分成两个文件,一个是GetDriveInfo.h,另一个是APIFinfFirstVolume.cpp
//APIFinfFirstVolume.cpp 代码如下
/*
// 在这个程序里面。显示的驱动不是如C:这样的
// 而是直接显示 物理驱动的唯一标示,
// 每个都是不一样的请仔细看清楚了!
// 这些都是 保存驱动器名称的内存缓存区
// \?Volume{56ffabb3-0ce3-11e1-a106-806d6172696f} C:
// \?Volume{56ffabb4-0ce3-11e1-a106-806d6172696f} D:
// \?Volume{56ffabb5-0ce3-11e1-a106-806d6172696f} E:
// 不同之处在这里,向上看
http://wenwen.soso.com/z/q254494002.htm?sp=1001
*/
/*****************************
// 遍历驱动器并获取驱动属性
*****************************/
/*宏定义*/
#define _WIN32_WINNT 0x0501
//#define BUFSIZE MAX_PATH
/*头文件*/
#include <windows.h>
#include <stdio.h>
#include "GetDriveInfo.h" //自己写的头文件
/*************************
//功能:应用程序主函数,遍历驱动器并调用
// GetDriverInfo 获取驱动器属性
*************************/
int main(void)
{
TCHAR buf[BUFSIZE]; //卷标信息 //
HANDLE hVol; //卷遍历
BOOL bFlag;
//ZeroMemory(buf, MAX_PATH);
hVol = FindFirstVolume(buf,BUFSIZE);//
if(hVol == INVALID_HANDLE_VALUE)
{
printf(TEXT("NO Volume Found!n"));
return -1;
}
GetDriverInfo(buf);
//printf("nn%sn",szDriveName);
while( FindNextVolume(
hVol,
buf,
BUFSIZE))//
{
GetDriverInfo(buf);
}
bFlag = FindVolumeClose( hVol );
return (bFlag);
}
//---------------------------------------------------------------------------------------------------------------
//---------------------------GetDriverInfo.h---------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------
//GetDriveInfo.h代码如下
/*宏定义*/
#define BUFSIZE 1024
/*函数声明*/
BOOL GetLogicDriverInfo(LPSTR szDrive);
/*************************
//BOOL GetDriverInfo(LPSTR szDrive)
//功能:
//参数:
//指明要获取属性的驱动器的根路径,如C:
//返回BOOL值:表示是否成功
*************************/
BOOL GetDriverInfo(LPSTR szDrive)
{
UINT uDriveType;
DWORD dwVolumeSerialNumber;
DWORD dwMaximumComponentLenght;
DWORD dwFileSystemFlags;
CHAR szFileSystemNameBuffer[ BUFSIZE];
CHAR szDriveName[MAX_PATH]; //驱动器名称
printf("nn%sn",szDrive);
uDriveType = GetDriveType(szDrive); //获取驱动类型
switch(uDriveType)
{
case DRIVE_UNKNOWN: //未知驱动器
printf("The Driver type cannot be determined.");
break;
case DRIVE_NO_ROOT_DIR: //无根目录的驱动器
printf("The root path is invalid, no volume is mounted at the path.");
break;
case DRIVE_REMOVABLE: //不可移除的驱动器
printf("The drive is a type that removable media,for example,a floppy drive or removable hard disk.");
break;
case DRIVE_FIXED: //固定驱动器
printf("The drive is a type that cannot be removable,for example,a fixed hard drive.");
break;
case DRIVE_REMOTE: //远程驱动器
printf("The drive is a remote (network) drive.");
break;
case DRIVE_CDROM: //光驱
printf("The drive is a CD-ROM drive.");
case DRIVE_RAMDISK: //随机存储驱动
printf("The drive is a ram disk.");
break;
default:
break;
}
//无法获取驱动信息 返回BOOL值
if( !GetVolumeInformation (
szDrive, //输入参数,指向所要获取属性的驱动器的根路径字符串
szDriveName, //输出参数,返回驱动器名称
MAX_PATH, //输入参数,内存缓冲区大小
&dwVolumeSerialNumber, //输出参数,存储驱动器序列号
&dwMaximumComponentLenght, //输出参数,返回文件系统所支持的文件组成部分的最大值
&dwFileSystemFlags, //输出参数,判断多种驱动的属性值,用在 case 那里,如FILE_VOLUME_QUOTAS
szFileSystemNameBuffer, //输出参数,表示文件系统类型,如NTFS,FAT32,CDFS
BUFSIZE //缓冲区大小
))
{
return FALSE;
}
if(0 != lstrlen(szDriveName))
{
printf("nDrive Name is %sn",szDriveName);
}
printf("nVolume Serial Number is %u",dwVolumeSerialNumber); //空间大小
printf("nMaximum Componet Lenght is %u",dwMaximumComponentLenght); //最大组件长度 (命名长度)
printf("nSystem Type is %sn",szFileSystemNameBuffer);
if(dwFileSystemFlags & FILE_SUPPORTS_REPARSE_POINTS)
{
printf("The file system does not support volume mount points.n");
}
else if(dwFileSystemFlags & FILE_VOLUME_QUOTAS)
{
printf("The file system supports disk quotas.n");
}
else if(dwFileSystemFlags & FILE_CASE_SENSITIVE_SEARCH)
{
printf("The file system supports case-senstive file names.n");
}
//use this method get other infomation
/*if(dwFileSystemFlags & )
{
printf("");
}
//
printf("Other....n");
*/
return TRUE;
}
最后
以上就是哭泣故事为你收集整理的SDK遍历驱动器并获取驱动属性的全部内容,希望文章能够帮你解决SDK遍历驱动器并获取驱动属性所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复