共用方式為


IWDFUsbTargetDevice::RetrieveDescriptor 方法 (wudfusb.h)

[警告: UMDF 2 是最新版的 UMDF,並取代 UMDF 1。 所有新的 UMDF 驅動程式都應該使用 UMDF 2 來撰寫。 未將新功能新增至 UMDF 1,且較新版本的 Windows 10 上不支援 UMDF 1。 通用 Windows 驅動程式必須使用 UMDF 2。 如需詳細資訊,請參閱使用 UMDF 使用者入門。]

RetrieveDescriptor 方法會擷取可描述裝置、組態或字串的 USB 描述元。

語法

HRESULT RetrieveDescriptor(
  [in]      UCHAR  DescriptorType,
  [in]      UCHAR  Index,
  [in]      USHORT LanguageID,
  [in, out] ULONG  *BufferLength,
  [out]     PVOID  Buffer
);

參數

[in] DescriptorType

值,指定要傳回的描述元類型。 此參數對應於標準裝置描述元的 bDescriptorType 字段,其值會在 通用序列總線 規格中說明。 (某些語言可能無法使用此資源

和國家/地區.) 其中一些值會列在 _URB_CONTROL_DESCRIPTOR_REQUEST 結構之 DescriptorType 成員的描述中。

[in] Index

描述項的索引,根據 通用序列總線 規格。 (某些語言可能無法使用此資源

和國家/地區.)

[in] LanguageID

如果 UMDF 驅動程式要求字串描述元,則為語言的標識碼;否則,此參數為零。

[in, out] BufferLength

在輸入時,變數的指標包含 Buffer 所指向之緩衝區的大小,以位元組為單位。 如果作業成功,變數會接收架構複製到緩衝區的位元元組數目。

[out] Buffer

接收USB描述元之呼叫端所提供緩衝區的指標。 緩衝區的類型應該符合 DescriptorType 中指定的值。

傳回值

RetrieveDescriptor 會傳回下列其中一個值:

傳回碼 Description
S_OK

RetrieveDescriptor 已成功擷取 USB 描述元。

E_OUTOFMEMORY

RetrieveDescriptor 發生配置失敗。

在 Winerror.h 中定義的錯誤碼
這個值對應於 WinUsb API 傳回的錯誤碼。

備註

如需 UMDF 驅動程式可以針對 DescriptorType 參數傳遞之有效描述元類型的詳細資訊,請參閱 WinUsb_GetDescriptor 函式。

RetrieveDescriptor 方法會產生 UMDF 要求,並以同步方式將要求傳送至 I/O 目標。

範例

下列程式代碼範例會擷取USB組態描述元。

HRESULT
CUmdfHidDevice::RetrieveConfigDescriptor(
    __out_bcount(ConfigDescriptorCb) PUSB_CONFIGURATION_DESCRIPTOR *ConfigDescriptor,
    __out ULONG *ConfigDescriptorCb
    )
{
    ULONG descriptorCb = sizeof(USB_CONFIGURATION_DESCRIPTOR);
    USB_CONFIGURATION_DESCRIPTOR descriptorHeader;
    PBYTE descriptorBuffer;
    HRESULT hr;

    //
    // Get the configuration descriptor at index 0
    //

    hr = m_UsbTargetDevice->RetrieveDescriptor(
                            USB_CONFIGURATION_DESCRIPTOR_TYPE,
                            0,
                            0,
                            &descriptorCb,
                            &descriptorHeader
                            );
    //
    // Store the buffer in the output parameter, or delete it.
    //
    if (SUCCEEDED(hr)) {
        *ConfigDescriptor = (PUSB_CONFIGURATION_DESCRIPTOR) (descriptorHeader);
        *ConfigDescriptorCb = descriptorCb;
    }
    else {
        delete[] descriptorHeader;
    }
    return hr;
}

規格需求

需求
終止支援 UMDF 2.0 和更新版本中無法使用。
目標平台 桌面
最低UMDF版本 1.5
標頭 wudfusb.h (包括 Wudfusb.h)
Dll WUDFx.dll

另請參閱

IWDFUsbTargetDevice

WinUsb_GetDescriptor