从UnitMask获取驱动器号

时间:2016-01-08 14:36:22

标签: c++ windows

我目前正在使用Windows服务来检测何时插入USB设备。当USB被激活时,我已成功接收通知。但是现在我似乎无法从单元掩码中获取驱动器号。我认为是由于面具不正确。

DEV_BROADCAST_DEVICEINTERFACE notificationFilter;
ZeroMemory(&notificationFilter, sizeof(notificationFilter));
notificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
notificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
//notificationFilter.dbcc_classguid = GUID_DEVINTERFACE_USB_DEVICE;
notificationFilter.dbcc_classguid = GUID_DEVINTERFACE_VOLUME;

HDEVNOTIFY hDeviceNotify = RegisterDeviceNotification(
    handle,                      // events recipient
    &notificationFilter,         // type of device
    DEVICE_NOTIFY_SERVICE_HANDLE // type of recipient handle
    );

PDEV_BROADCAST_DEVICEINTERFACE deviceInterface = static_cast<PDEV_BROADCAST_DEVICEINTERFACE>(lpEventData);
    switch (dwEventType)
    {
    case DBT_DEVICEARRIVAL:
        if (deviceInterface->dbcc_devicetype == DBT_DEVTYP_DEVICEINTERFACE)
        {
            if (::IsEqualGUID(deviceInterface->dbcc_classguid, GUID_DEVINTERFACE_VOLUME))
            {
                PDEV_BROADCAST_VOLUME pVol = (PDEV_BROADCAST_VOLUME)deviceInterface;

            // Here is where i would process the unitmask

            }
        }

所以上面的代码应该在pVol变量中有单位掩码。但我收到的面具是1408590605,这似乎不正确。任何人都可以看到我做这件事的方式是否有任何问题。

1 个答案:

答案 0 :(得分:0)

<!--Need to center the image on my class wrapper --> <div class="wrapper" id="mypic" style="background-image:url('desktop/banner.jpg' ); "> <div class="container-fluid" > <div class="row-fluid"> <div class="caption"> <h2>Heading</h2> <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> <p><a class="btn btn-primary" href="#" role="button">View details &raquo;</a></p> </div> </div> </div> 听起来不对,但只有你肯定知道。您可以使用此功能对其进行测试:

1408590605

您的窗口过程应如下所示:

char FirstDriveFromMask(ULONG unitmask)
{
    for (char i = 0; i < 26; ++i, unitmask >>= 1)
        if (unitmask & 0x1)
            return i + 'A';
    return 0;
}

char c = FirstDriveFromMask(1408590605); //result = 'A'