Método IWDFDevice3::CreateInterrupt (wudfddi.h)
[Advertencia: UMDF 2 es la versión más reciente de UMDF y sustituye a UMDF 1. Todos los controladores UMDF nuevos deben escribirse con UMDF 2. No se agregan nuevas características a UMDF 1 y hay compatibilidad limitada con UMDF 1 en versiones más recientes de Windows 10. Los controladores universales de Windows deben usar UMDF 2. Para obtener más información, consulta Introducción con UMDF.
El método CreateInterrupt crea un objeto de interrupción de marco.
Sintaxis
HRESULT CreateInterrupt(
[in] PWUDF_INTERRUPT_CONFIG Configuration,
[out] IWDFInterrupt **ppInterrupt
);
Parámetros
[in] Configuration
Puntero a una estructura de WUDF_INTERRUPT_CONFIG inicializada por una llamada a la macro WUDF_INTERRUPT_CONFIG_INIT .
[out] ppInterrupt
Puntero a un búfer que recibe un puntero a la interfaz IWDFInterrupt para el nuevo objeto de interrupción.
Valor devuelto
El método devuelve S_OK si la operación se realiza correctamente. De lo contrario, este método devuelve uno de los códigos de error definidos en Winerror.h.
Comentarios
El controlador debe llamar a CreateInterrupt una vez para cada vector de interrupción que requiera su dispositivo. Si el dispositivo admite interrupciones señaladas por mensajes (MSI), el controlador debe crear un objeto de interrupción para cada mensaje que el dispositivo pueda admitir.
Los controladores suelen llamar al método CreateInterrupt desde una función de devolución de llamada OnDeviceAdd , pero también pueden llamar a este método desde IPnpCallbackHardware2::OnPrepareHardware.
Una vez que el administrador de Plug and Play (PnP) asigna recursos del sistema al dispositivo, el marco almacena información sobre los recursos de interrupción asignados del dispositivo en los objetos de interrupción que ha creado el controlador. (Los controladores que no admiten Plug and Play no pueden usar objetos de interrupción).
Es posible que el sistema no asigne todos los recursos de interrupción que un dispositivo pueda admitir. Por ejemplo, un controlador crea ocho objetos de interrupción para un dispositivo que es capaz de admitir ocho mensajes MSI. Sin embargo, el sistema puede asignar solo un mensaje al dispositivo. En ese caso, siete de los objetos de interrupción no se usarán.
Normalmente, el controlador debe almacenar información específica de la interrupción, como el contenido copiado de los registros de interrupciones del dispositivo, en el espacio de contexto del objeto de interrupción. Un controlador llama a IWDFObject::AssignContext para registrar un contexto y solicitar una notificación cuando el objeto deja de ser válido.
UMDF admite interrupciones desencadenadas por el nivel a partir de Windows 8. Si un controlador que se ejecuta en un sistema operativo anterior a Windows 8 crea una interrupción desencadenada por el nivel en OnDeviceAdd, CreateInterrupt se realiza correctamente porque el sistema operativo aún no tiene asignados recursos. Sin embargo, cuando el marco intenta conectar la interrupción más adelante, el dispositivo no se inicia.
Para obtener más información sobre el control de interrupciones en los controladores UMDF, consulte Acceso a hardware y control de interrupciones.
Ejemplos
HRESULT hr;
IWDFInterrupt* pInterrupt;
WUDF_INTERRUPT_CONFIG interruptConfig;
WUDF_INTERRUPT_CONFIG_INIT(&interruptConfig,
MyInterruptIsr,
MyInterruptWorkItem);
hr = pDevice->Create(&interruptConfig,
&pInterrupt);
Requisitos
Requisito | Value |
---|---|
Finalización del soporte técnico | No disponible en UMDF 2.0 y versiones posteriores. |
Plataforma de destino | Escritorio |
Versión mínima de UMDF | 1.11 |
Encabezado | wudfddi.h |
Archivo DLL | WUDFx.dll |