gpt4 book ai didi

c++ - 检测正在插入的 USB 驱动器 - Windows 服务

转载 作者:可可西里 更新时间:2023-11-01 10:30:06 24 4
gpt4 key购买 nike

我正在尝试检测插入到 Windows 服务中的 USB 磁盘驱动器,我已将其作为普通 Windows 应用程序完成。问题是以下代码不适用于卷。

注册设备通知:

    DEV_BROADCAST_DEVICEINTERFACE notificationFilter;
HDEVNOTIFY hDeviceNotify = NULL;

::ZeroMemory(&notificationFilter, sizeof(notificationFilter));

notificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
notificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
notificationFilter.dbcc_classguid = ::GUID_DEVINTERFACE_VOLUME;

hDeviceNotify = ::RegisterDeviceNotification(g_serviceStatusHandle, &notificationFilter, DEVICE_NOTIFY_SERVICE_HANDLE);

ServiceControlHandlerEx 函数中的代码:

case SERVICE_CONTROL_DEVICEEVENT:
PDEV_BROADCAST_HDR pBroadcastHdr = (PDEV_BROADCAST_HDR)lpEventData;

switch (dwEventType)
{
case DBT_DEVICEARRIVAL:
::MessageBox(NULL, "A Device has been plugged in.", "Pounce", MB_OK | MB_ICONINFORMATION);

switch (pBroadcastHdr->dbch_devicetype)
{
case DBT_DEVTYP_DEVICEINTERFACE:
PDEV_BROADCAST_DEVICEINTERFACE pDevInt = (PDEV_BROADCAST_DEVICEINTERFACE)pBroadcastHdr;

if (::IsEqualGUID(pDevInt->dbcc_classguid, GUID_DEVINTERFACE_VOLUME))
{
PDEV_BROADCAST_VOLUME pVol = (PDEV_BROADCAST_VOLUME)pDevInt;

char szMsg[80];
char cDriveLetter = ::GetDriveLetter(pVol->dbcv_unitmask);

::wsprintfA(szMsg, "USB disk drive with the drive letter '%c:' has been inserted.", cDriveLetter);
::MessageBoxA(NULL, szMsg, "Pounce", MB_OK | MB_ICONINFORMATION);
}
}

return NO_ERROR;
}

在 Windows 应用程序中,我能够在 dbch_devicetype 中获取 DBT_DEVTYP_VOLUME,但这在 Windows 服务实现中不存在。有没有人看到或听说过这个问题的解决方案,没有明显的重写为 Windows 应用程序?

最佳答案

Windows 7 支持“触发启动服务”。如果你想启动你的服务,在一个 sleep 循环中四处走动,并在插入东西时使用react,我认为你最好(假设 Windows 7 是一个选项)使用操作系统启动服务的触发器启动服务当插入 USB 设备时。(还有其他触发器,但你提到了这个。)

示例应用程序 XP2Win7 ( http://code.msdn.microsoft.com/XP2Win7 ) 包括此功能。它带有完整的源代码。大多数是在 VB 和 C# 中,但触发器启动的服务部分是在( native )C++ 中。

关于c++ - 检测正在插入的 USB 驱动器 - Windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2638329/

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