CreateFile打开U盘的方法2-逻辑方式
来源:互联网 发布:cf辅助瞄准软件 编辑:程序博客网 时间:2024/06/06 13:08
//需要引用头文件
BOOL GetUDisk(CString strUDisk)
{
TCHAR szBuf[300];
sprintf_s(szBuf, "\\\\?\\%c:", strUDisk[0]);
HANDLE hDevice;
hDevice = CreateFile(szBuf, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL);
if (hDevice != INVALID_HANDLE_VALUE)
{
PSTORAGE_DEVICE_DESCRIPTOR pDevDesc;
pDevDesc = (PSTORAGE_DEVICE_DESCRIPTOR)new BYTE[sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512 - 1];
pDevDesc->Size = sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512 - 1;
if(GetDisksProperty(hDevice, pDevDesc))
{
ShowMessage("\r\n找到U盘,名称:\r\n");
char *p= (char*)pDevDesc;
CString str = (pDevDesc->VendorIdOffset ? &p[pDevDesc->VendorIdOffset]:"(NULL)");
str=(pDevDesc->ProductIdOffset ? &p[pDevDesc->ProductIdOffset]:"(NULL)");
ShowMessage(str);
ShowMessage("\r\n产品版本:\r\n");
str = (pDevDesc->ProductRevisionOffset ? &p[pDevDesc->ProductRevisionOffset] : "(NULL)");
ShowMessage(str);
ShowMessage("\r\n序列号:\r\n");
str = (pDevDesc->SerialNumberOffset ? &p[pDevDesc->SerialNumberOffset] : "(NULL)");
ShowMessage(str);
}
delete pDevDesc;
CloseHandle(hDevice);
}
return FALSE;
}
//取得U盘的信息
BOOL GetDisksProperty(HANDLE hDevice, PSTORAGE_DEVICE_DESCRIPTOR pDevDesc)
{
STORAGE_PROPERTY_QUERY Query;
DWORD dwOutBytes;
BOOL bResult;
Query.PropertyId = StorageDeviceProperty;
Query.QueryType = PropertyStandardQuery;
bResult = ::DeviceIoControl(hDevice,
IOCTL_STORAGE_QUERY_PROPERTY,
&Query, sizeof(STORAGE_PROPERTY_QUERY),
pDevDesc, pDevDesc->Size,
&dwOutBytes,
(LPOVERLAPPED)NULL);
return bResult;
}
#include "Setupapi.h"
#include <initguid.h>
#pragma comment(lib,"setupapi.lib")
#define INTERFACE_DETAIL_SIZE 1024
#define MAX_DRIVER_STRING_LENGHT 100
BOOL GetUDisk(CString strUDisk)
{
TCHAR szBuf[300];
sprintf_s(szBuf, "\\\\?\\%c:", strUDisk[0]);
HANDLE hDevice;
hDevice = CreateFile(szBuf, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL);
if (hDevice != INVALID_HANDLE_VALUE)
{
PSTORAGE_DEVICE_DESCRIPTOR pDevDesc;
pDevDesc = (PSTORAGE_DEVICE_DESCRIPTOR)new BYTE[sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512 - 1];
pDevDesc->Size = sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512 - 1;
if(GetDisksProperty(hDevice, pDevDesc))
{
ShowMessage("\r\n找到U盘,名称:\r\n");
char *p= (char*)pDevDesc;
CString str = (pDevDesc->VendorIdOffset ? &p[pDevDesc->VendorIdOffset]:"(NULL)");
//此地可以根据取得的U盘名称取得该盘是否自己要修改的U盘
ShowMessage("\r\n产品ID:\r\n");str=(pDevDesc->ProductIdOffset ? &p[pDevDesc->ProductIdOffset]:"(NULL)");
ShowMessage(str);
ShowMessage("\r\n产品版本:\r\n");
str = (pDevDesc->ProductRevisionOffset ? &p[pDevDesc->ProductRevisionOffset] : "(NULL)");
ShowMessage(str);
ShowMessage("\r\n序列号:\r\n");
str = (pDevDesc->SerialNumberOffset ? &p[pDevDesc->SerialNumberOffset] : "(NULL)");
ShowMessage(str);
}
delete pDevDesc;
CloseHandle(hDevice);
}
return FALSE;
}
//取得U盘的信息
BOOL GetDisksProperty(HANDLE hDevice, PSTORAGE_DEVICE_DESCRIPTOR pDevDesc)
{
STORAGE_PROPERTY_QUERY Query;
DWORD dwOutBytes;
BOOL bResult;
Query.PropertyId = StorageDeviceProperty;
Query.QueryType = PropertyStandardQuery;
bResult = ::DeviceIoControl(hDevice,
IOCTL_STORAGE_QUERY_PROPERTY,
&Query, sizeof(STORAGE_PROPERTY_QUERY),
pDevDesc, pDevDesc->Size,
&dwOutBytes,
(LPOVERLAPPED)NULL);
return bResult;
}
- CreateFile打开U盘的方法2-逻辑方式
- CreateFile打开U盘的方法1-逻辑方式
- CreateFile打开连续文档的方法
- 串口com10以上CreateFile打开成功的方法
- 打开U盘最安全的方法
- Win7如何禁止用户打开U盘?Win7禁止用户打开U盘的方法
- 用CreateFile打开COM10以上的串口
- 用CreateFile打开COM10以上的串口
- 打开方式的删除方法
- CreateFile打开一个文件
- CreateFile打开串口
- CreateFile 独占打开文件
- CreateFile打开串口时串口名字的写法
- CreateFile打开串口时串口名字的写法
- 方式的方式的是的方法快速的方式打开
- U盘无法双击打开的解决办法
- U盘双击不能打开的解决方案
- 一种安全打开U盘的技巧
- 根据身份证号码更新生日日期存储过程
- 具有system权限的进程无法访问sdcard
- 最近研究wince,在其下面读取json
- unity3d学习笔记(十七)--unity3d读取csv文件
- c# 控制textbox 只允许输入 数字 0~9
- CreateFile打开U盘的方法2-逻辑方式
- 【android基础篇之一】Android应用程序目录结构
- direct path read temp
- ubuntu上SVN版本升级到1.7
- SDUTOJ 1299 最长上升子序列
- Oracle DB对数据进行限制和排序
- java cmd编译后运行是区分大小写的
- 堆排序的应用 Priority queues 优先级排序
- 将TextBox数据提交到GridView显示(DataTable的应用2)