首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windows上USB闪存驱动器和USB硬盘驱动器的区别

Windows上USB闪存驱动器和USB硬盘驱动器的区别
EN

Stack Overflow用户
提问于 2010-08-03 02:56:41
回答 7查看 5.7K关注 0票数 5

我正在尝试使用Win32应用程序接口在Windows上区分U盘和U盘。

如果驱动器是可移动的,则GetDriveType()函数将返回DRIVE_REMOVABLE,当然,U盘也是可移动的。但我在想,Windows可能认为USB硬盘驱动器也是可移动的(不幸的是,我无法访问USB硬盘驱动器来测试它)。

提前谢谢。

EN

回答 7

Stack Overflow用户

发布于 2011-06-10 15:28:30

如果要确定设备是USB设备,可以打开它的句柄并使用DeviceIoControl()发送IOCTL查询,以获取设备所连接的总线类型。

EnumUsbDrivesLetters -这篇文章是用俄语写的,但它包含了C++源代码,所以这个问题很容易理解。

干杯,安德烈

票数 2
EN

Stack Overflow用户

发布于 2014-10-06 23:06:01

代码语言:javascript
运行
复制
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//  Method      OpenVolume
//  Purpose:    Open volume for removal. Change to ::CreateFile(volumeName, 0, 0, 0, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, 0);
//              if you just want to inquire if it's removable. 
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

HANDLE OpenVolume(const char& driveLetter)
{
    char volumeName[8] = "";
    char* volumeFormat = "\\\\.\\%c:";
    sprintf(volumeName, volumeFormat, driveLetter);

    HANDLE volume = ::CreateFile(volumeName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    if (volume == INVALID_HANDLE_VALUE) return INVALID_HANDLE_VALUE;

    DWORD bytesReturned = 0;
    STORAGE_HOTPLUG_INFO Info = {0};
    if (::DeviceIoControl(volume, IOCTL_STORAGE_GET_HOTPLUG_INFO, 0, 0, &Info, sizeof(Info), &bytesReturned, NULL)) 
    {
        if (!(Info.MediaRemovable || Info.DeviceHotplug)) 
        {
            ::CloseHandle(volume);
            ::SetLastError(ERROR_INVALID_PARAMETER);
            return INVALID_HANDLE_VALUE;
        }
    }

    return volume;
}
票数 2
EN

Stack Overflow用户

发布于 2010-08-03 03:04:47

实际上windows没有,我的两个usb硬盘GetDriveType都返回了3 (DRIVE_FIXED)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3390865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档