共用方式為


在 WBDI 驅動程式中使用 WinUSB

Microsoft建議 WBDI 驅動程式使用 內建於使用者模式驅動程式架構 (UMDF) 的 USB I/O 目標

設定 UmdfDispatcher

安裝 UMDF 驅動程式的 INF 檔案必須包含 WDF 特定的 DDInstall 區段。 如果您在 UMDF 中使用 USB I/O 目標,則必須在此 DDInstall 區段中設定 UmdfDispatcher 登錄指示詞。

WudfBioUsbSample.inx 範例中的下一節示範如何設定此指示詞:

[Biometric_Install.NT.Wdf]
KmdfService=WINUSB, WinUsb_Install
UmdfDispatcher=WinUsb
UmdfService=WudfBioUsbSample, WudfBioUsbSample_Install
UmdfServiceOrder=WudfBioUsbSample

如需UmdfDispatcher的特定資訊,請參閱 指定UmdfDispatcher INF指示詞。 如需 WDF 登錄指示詞的一般資訊,請參閱 指定 WDF 指示詞

暫止的異步讀取要求

WinUsb 可以處理多個未處理的讀取要求。 在掃描期間,在讀取作業之間需要最少延遲的裝置,應該讓一些未處理的異步讀取要求擱置中。 如果驅動程式提出異步要求,WinUsb 會在傳送回使用者模式之前發出這些要求,以取得先前讀取要求的完成例程。

您可以參考 CBiometricDevice::InitiatePendingRead WudfBioUsbSample Device.cpp 中的 方法,以查看如何撰寫讀取要求的程式碼範例。

撰寫讀取要求的程式代碼應該是下列步驟的循環:

  1. 呼叫 IWDFDriver::CreatePreallocatedWdfMemory 來建立預先配置的架構記憶體物件。

  2. OnCompletion 例程中提供回呼程式代碼。 請參閱 CBiometricDevice::OnCompletion 範例中的 。

  3. 取得擁有物件的 IRequestCallbackRequestCompletion 介面指標

  4. 呼叫 IWDFIoRequest::SetCompletionCallback 並傳入上一個步驟中取得之 IRequestCallbackRequestCompletion 的指標,以註冊回呼函式。 架構現在會在 I/O 要求完成時呼叫回呼。

  5. 呼叫 IWDFIoRequest::Send 將讀取要求傳送至裝置。

  6. 回呼完成時處理讀取要求。 在 OnCompletion 例程起始新的暫止讀取要求之前,它應該檢查 I/O 目標的狀態。 若要這樣做,請查詢 IWDFUsbTargetPipe 以取得其 IWDFIoTargetStateManagement 介面的指標。 然後呼叫 IWDFIoTargetStateManagement::GetState

    IWDFIoTarget * pTarget
    IWDFIoTargetStateManagement * pStateMgmt = NULL;
    WDF_IO_TARGET_STATE state;
    
    HRESULT hrQI = pTarget->QueryInterface(IID_PPV_ARGS(&pStateMgmt));
    WUDF_TEST_DRIVER_ASSERT((SUCCEEDED(hrQI) && pStateMgmt));
    
    state = pStateMgmt->GetState();
    

掃描完成時,取消任何擱置的讀取要求。

如果您使用 UMDF-USB 目標,則可以允許讀取要求在關閉電源和電源之間保持擱置。

如果您未使用 UMDF-USB 目標,驅動程式應該停止在 D0Exit 傳送擱置的讀取要求,並在 D0Entry 重新啟動。

選擇性暫停

WBDI 驅動程式應該支援 USB選擇性暫停

支援系統喚醒和裝置閒置的裝置應該啟用 WinUsb 中選擇性暫停的登錄設定,如來自 WudfBioUsbSample.inx 的程式代碼範例所示:

HKR,,"SystemWakeEnabled",0x00010001,1
HKR,,"DeviceIdleEnabled",0x00010001,1

操作系統 USB 堆疊無法保證系統喚醒和驅動程式何時可以開始從裝置讀取。

在理想情況下,當系統暫停時,裝置應該處於準備好擷取掃描的狀態。 如果系統暫停時發生掃描,裝置應該快取整個指紋掃描的輸入數據。 當系統喚醒時,驅動程序接著會從裝置讀取數據。 藉由支援此案例,您可以啟用系統喚醒和解除鎖定/登入案例。