SDK遍历驱动器并获取驱动属性

本文介绍了一个C++程序,该程序通过遍历系统中的所有物理驱动器,并使用Windows API函数来获取每个驱动器的详细属性,包括驱动类型、驱动器名称、序列号等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示这里分成两个文件,一个是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("\n\n%s\n",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("\n\n%s\n",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 %s\n",szDriveName);
 }
 printf("\nVolume Serial Number is %u",dwVolumeSerialNumber); //空间大小
 printf("\nMaximum Componet Lenght is %u",dwMaximumComponentLenght); //最大组件长度 (命名长度)
 printf("\nSystem Type is %s\n",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; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值