gpt4 book ai didi

windows - 如何检测媒体是否插入可移动驱动器/读卡器

转载 作者:可可西里 更新时间:2023-11-01 09:39:49 24 4
gpt4 key购买 nike

我有一个读卡器(没有插入内存棒)。

当我插入我的电脑时,它在我的电脑中显示一个空驱动器...

是否有可能知道驱动器是否有媒体(抱歉,我不确定如何调用它)...

最佳答案

我发现 MSalters 使用 IOCTL_STORAGE_CHECK_VERIFY 的建议非常好。 IOCTL_STORAGE_CHECK_VERIFY 的使用有一个小技巧。在DeviceIoControl函数中使用IOCTL代码之前,需要先通过CreateFile函数打开相应的设备:

HANDLE hDevice = CreateFile (szDeviceName,  // like "\\.\E:"
0, // no access to the drive
FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
NULL, OPEN_EXISTING, 0, NULL);

对于 DeviceIoControl 的使用,可以使用 0 作为 CreateFile 的第二个参数,因为我们不会使用 ReadFile WriteFile 等函数访问设备。 IOCTL_STORAGE_CHECK_VERIFY 的实现遵循一些数据读取请求。因此,为了能够使用 IOCTL_STORAGE_CHECK_VERIFY 而不会出现 ERROR_ACCESS_DENIED (5) 错误,我们必须按以下方式打开设备

HANDLE hDevice = CreateFile (szDeviceName,  // like "\\.\E:"
FILE_READ_DATA, // read access to the data
FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
NULL, OPEN_EXISTING, 0, NULL);

IOCTL_STORAGE_CHECK_VERIFY 存在另一个版本 - IOCTL_STORAGE_CHECK_VERIFY2,其工作方式与 IOCTL_STORAGE_CHECK_VERIFY 完全相同,但速度更快(参见 http://msdn.microsoft.com/en-us/library/ff560538.aspx)。要使用 IOCTL_STORAGE_CHECK_VERIFY2 可以打开只有 FILE_READ_ATTRIBUTES 访问权限的设备:

HANDLE hDevice = CreateFile (szDeviceName,         // like "\\.\E:"
FILE_READ_ATTRIBUTES, // read access to the attributes
FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
NULL, OPEN_EXISTING, 0, NULL);

测试驱动器中媒体是否存在的代码如下所示

DWORD cbBytesReturned;
bSuccess = DeviceIoControl (hDevice, // device to be queried
IOCTL_STORAGE_CHECK_VERIFY2,
NULL, 0, // no input buffer
NULL, 0, // no output buffer
&cbBytesReturned, // # bytes returned
(LPOVERLAPPED) NULL); // synchronous I/O
if (bSuccess)
_tprintf (TEXT("the device media are accessible\n"));
else if (GetLastError() == ERROR_NOT_READY)
_tprintf (TEXT("the device media are not accessible\n"));

关于windows - 如何检测媒体是否插入可移动驱动器/读卡器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3158054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com