无法在Windows 7中为设备设置友好名称

时间:2017-03-23 18:32:21

标签: windows driver wdf umdf

在我的UMDF设备驱动程序中,我以编程方式为我的设备设置了友好名称:

HRESULT CMyDevice::SetFriendlyDeviceName(WCHAR * FriendlyName)
{
    HRESULT hr = HRESULT_FROM_WIN32(ERROR_GEN_FAILURE);
    CComPtr<IWDFUnifiedPropertyStoreFactory> upsf = NULL;

    hr = m_FxDevice->QueryInterface(&upsf);
    if (SUCCEEDED(hr))
    {
        CComPtr<IWDFUnifiedPropertyStore> ups = NULL;
        WDF_PROPERTY_STORE_ROOT rs;

        RtlZeroMemory(&rs, sizeof(WDF_PROPERTY_STORE_ROOT));
        rs.LengthCb = sizeof(WDF_PROPERTY_STORE_ROOT);
        rs.RootClass = WdfPropertyStoreRootClassHardwareKey;
        rs.Qualifier.HardwareKey.ServiceName = NULL;

        hr = upsf->RetrieveUnifiedDevicePropertyStore(&rs, &ups);
        if (SUCCEEDED(hr))
        {
            ULONG len = ((ULONG)wcslen(FriendlyName) * sizeof(WCHAR)) + sizeof(WCHAR);

            hr = ups->SetPropertyData(&DEVPKEY_Device_FriendlyName, 0, 0, DEVPROP_TYPE_STRING, len, FriendlyName);
            if (FAILED(hr))
                TraceEvents(TRACE_LEVEL_WARNING, TRACE_DEVICE, "Failed to set friendly name for device: %x", hr);
            else
                TraceEvents(TRACE_LEVEL_INFORMATION, TRACE_DEVICE, "Friendly name for device successfully set");
        }
        else
            TraceEvents(TRACE_LEVEL_WARNING, TRACE_DEVICE, "Failed to retrieve unified device property store: %x", hr);
    }
    else
        TraceEvents(TRACE_LEVEL_WARNING, TRACE_DEVICE, "Failed to retrieve unified property store factory: %x", hr);

}

它适用于Windows 8和10.问题是它在Windows 7和Vista中不起作用。虽然在执行上面的代码时没有出现任何错误,并且它表示&#34;设备的友好名称已成功设置&#34;,友好名称在设备管理器中不会更改。刷新设备列表后,它也不会更改。当我在注册表HKLM\SYSTEM\CurrentControlSet\Enum\USB\VID_XXXX&PID_XXXX\XXXX中查看我的设备的hadware密钥时,&#34; FriendlyName&#34;的值不见了。当我手动添加它时,它会显示在设备管理器中。

0 个答案:

没有答案