获取系统中存在的 优盘设备

CHAR* lpdrives = new CHAR[MAX_PATH];

// 获取盘符,返回字符串的长度。(我理解的格式应该是 {c:\\\0d:\\\0......},所以一个盘符占据 4 个字符)

     DWORD _count = GetLogicalDriveStringsA(MAX_PATH, lpdrives);

std::string sDrives[26]={""}; //设备盘符路径集

HANDLE hDeviceHandle[26]; //设备句柄集

DWORD hDevice_Num = 0;

for(size_t i = 0; i < _count/4; ++i)
{

// 获取磁盘的类型 DRIVE_FIXED 固定磁盘, DRIVE_REMOVABLE 可移动磁盘

if(GetDriveTypeA(lpdrives + 4*i) == DRIVE_FIXED || 

GetDriveTypeA(lpdrives + 4*i) == DRIVE_REMOVABLE)

{

sDrives[i] = lpdrives + 4*i;

std::string temp = "\\\\?\\";

sDrives[i] = temp + (sDrives[i].substr(0, 2));

char ch = sDrives[i][4];

printf("%c  ", ch);

hDeviceHandle[hDevice_Num] = CreateFileA(sDrives[i].c_str(), GENERIC_READ | GENERIC_WRITE, 

FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); 

if(hDeviceHandle[hDevice_Num] == INVALID_HANDLE_VALUE)

printf("failed reason is %lu\n", GetLastError());

hDevice_Num ++;
}
}

STORAGE_DEVICE_NUMBER stn;

  DWORD lpbuffer;

for(size_t i = 0; i < hDevice_Num; ++i)

{

//检索设备类型、设备数量,可分区的设备,设备的分区号

DeviceIoControl(hDeviceHandle[i], IOCTL_STORAGE_GET_DEVICE_NUMBER, NULL, 0, &stn, sizeof(stn), &lpbuffer, NULL);

CloseHandle(hDeviceHandle[i]);

printf("%d ,%d  ", stn.DeviceNumber, stn.DeviceType);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值