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

来源:互联网 发布:无线网络管理工具 mac 编辑:程序博客网 时间:2024/06/06 14:19

提示这里分成两个文件,一个是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; 
}

原创粉丝点击