Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Microsoft recomienda que los controladores WBDI usen el destino de E/S USB integrado en el marco del controlador en modo de usuario (UMDF).
Configuración de UmdfDispatcher
Un archivo INF que instala un controlador UMDF debe contener una sección DDInstall específica de WDF. Si usa el destino de E/S USB en UMDF, debe establecer la directiva del registro UmdfDispatcher dentro de esta sección DDInstall .
La siguiente sección de WudfBioUsbSample.inx en el ejemplo WudfBioUsbSample muestra cómo establecer esta directiva:
[Biometric_Install.NT.Wdf]
KmdfService=WINUSB, WinUsb_Install
UmdfDispatcher=WinUsb
UmdfService=WudfBioUsbSample, WudfBioUsbSample_Install
UmdfServiceOrder=WudfBioUsbSample
Para obtener información específica sobre UmdfDispatcher, vea Especificación de la directiva INF umdfDispatcher. Para obtener información general sobre las directivas del registro de WDF, vea Especificación de directivas WDF.
Solicitudes de lectura asincrónicas pendientes
WinUsb puede controlar varias solicitudes de lectura pendientes. Los dispositivos que requieren una latencia mínima entre las operaciones de lectura durante un examen deben mantener pendiente algún número de solicitudes de lectura asincrónicas pendientes. Si el controlador realiza solicitudes asincrónicas, WinUsb emite estas solicitudes antes de volver al modo de usuario para las rutinas de finalización de las solicitudes de lectura anteriores.
Puede hacer referencia al CBiometricDevice::InitiatePendingRead método en Device.cpp en WudfBioUsbSample para ver un ejemplo de código de cómo escribir una solicitud de lectura.
El código para escribir una solicitud de lectura debe ser un bucle de los pasos siguientes:
Cree un objeto de memoria de marco asignado previamente llamando a IWDFDriver::CreatePreallocatedWdfMemory.
Proporcione código de devolución de llamada en una rutina OnCompletion. Consulte
CBiometricDevice::OnCompletionen el ejemplo.Adquiera un puntero a la interfaz IRequestCallbackRequestCompletion del objeto propietario.
Registre la función de devolución de llamada llamando a IWDFIoRequest::SetCompletionCallback y pasando el puntero a IRequestCallbackRequestCompletion que se obtuvo en el paso anterior. El marco ahora llamará a la devolución de llamada cuando se complete una solicitud de E/S.
Llame a IWDFIoRequest::Send para enviar la solicitud de lectura al dispositivo.
Procesar solicitud de lectura cuando se produce la finalización de la devolución de llamada. Antes de que la rutina OnCompletion inicie una nueva solicitud de lectura pendiente, debe comprobar el estado del destino de E/S. Para ello, consulte IWDFUsbTargetPipe para un puntero a su interfaz IWDFIoTargetStateManagement . A continuación, llame a 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();
Una vez completado el examen, cancele las solicitudes de lectura pendientes.
Si usa el destino UMDF-USB, puede permitir que las solicitudes de lectura permanezcan pendientes en toda la alimentación y el encendido.
Si no usa el destino UMDF-USB, el controlador debe dejar de enviar solicitudes de lectura pendientes en D0Exit y reiniciar en D0Entry.
Suspensión selectiva
Un controlador WBDI debe admitir la suspensión selectiva USB.
Un dispositivo que admita la reactivación del sistema y la inactividad del dispositivo deben habilitar la configuración del Registro para la suspensión selectiva en WinUsb, como se muestra en este ejemplo de código de WudfBioUsbSample.inx:
HKR,,"SystemWakeEnabled",0x00010001,1
HKR,,"DeviceIdleEnabled",0x00010001,1
La pila USB del sistema operativo no puede garantizar el tiempo entre la reactivación del sistema y cuando el controlador puede empezar a leer desde el dispositivo.
Idealmente, el dispositivo debe dejarse en un estado listo para capturar un examen cuando el sistema está suspendido. Si se produce un examen mientras se suspende el sistema, el dispositivo debe almacenar en caché los datos de entrada de un examen de huellas digitales completo. Cuando el sistema se reactiva, el controlador lee los datos del dispositivo. Al admitir este escenario, puede habilitar la reactivación del sistema y los escenarios de desbloqueo o inicio de sesión.