CreateFile打开U盘的方法1-逻辑方式

在网上发现CreateFile打开U盘的方法很多,总结起来总共两种,一种是通过逻辑方式盘符打开U盘,一种是通过物理驱动方式打开U盘。下面具体介绍

1.通过逻辑方式盘符打开U盘

  ①通过GetLogicalDriveStrings函数获取所有盘符(像A,C,D等),放到一个数组中

  ②循环遍历①得到的数组,通过GetDriveType判断取得的盘符的类型,看是软盘,还是硬盘还是U盘等等。

  ③通过GetVolumeInformation方法获取②得到的U盘的信息。

简要代码如下:

#include <windows.h>
#include <stdlib.h>
#include <stdio.h>

// 预定义
#define BUFSIZE 1024

//函数申明
BOOL GetDirverInfo(LPSTR szDrive);


void main(void)
{
CHAR szLogicalDriveStrings[BUFSIZE];
PCHAR szDrive;用来指向字符数组

//将上面申请的CHar数组用O填充
ZeroMemory(szLogicalDriveStrings,BUFSIZE);
//获取逻辑驱动器卷标名  写入数组
GetLogicalDriveStrings(BUFSIZE-1,szLogicalDriveStrings);
//指向字符数组
szDrive=(PCHAR)szLogicalDriveStrings;

//循环每个卷
do
{
if(!GetDirverInfo(szDrive))
{
printf("\n 获取错误:%d",GetLastError());
}
szDrive +=(lstrlen(szDrive)+1);
}
while(*szDrive!='\x00');

printf("\n",szDrive);
}


BOOL GetDirverInfo(LPSTR szDrive)
{
UINT uDriveType;
DWORD dwVolumeSerialNumber;
DWORD dwMaximumComponentLength;
DWORD dwFileSystemFlags;
CHAR szFileSystemNameBuffer[BUFSIZE];
CHAR szDirveName[MAX_PATH];

printf("\n%s\n",szDrive);
uDriveType = GetDriveType(szDrive);//TCHAR的指针类型
switch(uDriveType)
{
case DRIVE_UNKNOWN:
printf("the drive type cannot be determined");
break;
case DRIVE_NO_ROOT_DIR:
printf("the root path is invalid, for example,no volume is mounted at the path");
break;
case DRIVE_REMOVABLE:
printf("the drive is a type that has removable media,for example,a floppy drive or removable hard disk");
break;
case DRIVE_FIXED:
printf("the drive is a type that cannot be removed,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");
break;
case DRIVE_RAMDISK:
printf("the drive is a RAM disk");
break;
default:
break;

}
if(!GetVolumeInformation(//读取文件系统信息
szDrive,
szDirveName,
MAX_PATH,
&dwVolumeSerialNumber,
&dwMaximumComponentLength,
&dwFileSystemFlags,
szFileSystemNameBuffer,
BUFSIZE
))
{
return FALSE;
}
if(0!=lstrlen(szDirveName))
{
printf("\nDrive name is %s\n",szDirveName);
}
printf("\nVolume serial Number is %u",dwVolumeSerialNumber);
printf("\nMaximum Component Length is %u",dwMaximumComponentLength);
printf("\nsystem type is %s\n",szFileSystemNameBuffer);

if (dwFileSystemFlags & FILE_VOLUME_QUOTAS)
{
printf("the file system supports disk quotas");

}
if (dwFileSystemFlags & FILE_CASE_SENSITIVE_SEARCH)
{
printf("the file system supports case-sensitive file names");
}
return TRUE;
}

2.通过逻辑方式方式打开U盘2

 http://blog.csdn.net/dongpanshan/article/details/12968319

展开阅读全文

没有更多推荐了,返回首页