Share via


Método IPortDMus::Notify (dmusicks.h)

Se Notify debe llamar al método desde la rutina de servicio de interrupción (ISR) del controlador de miniporte cuando se ha producido una interrupción de hardware. Esta llamada solicita que el controlador de puerto llame al controlador de minipuerto con una llamada de procedimiento diferido (DPC) mientras el controlador de minipuerto controla la interrupción.

Sintaxis

void Notify(
  [in, optional] PSERVICEGROUP ServiceGroup
);

Parámetros

[in, optional] ServiceGroup

Puntero a un objeto IServiceGroup . Este parámetro es opcional y se puede especificar como NULL. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

Valor devuelto

None

Observaciones

El Notify método envía una notificación al grupo de servicios del controlador de miniporte:

  • Si el parámetro pServiceGroup no es NULL, el Notify método llama al método RequestService en el objeto IServiceGroup al que apunta este parámetro.
  • Si pServiceGroup es NULL:
    • El Notify método llama al método RequestService en el objeto IServiceGroup del controlador de miniport. Este es el objeto IServiceGroup que genera el controlador de miniporte durante la llamada A IMiniportDMus::Init . El controlador de minipuerto también podría haber registrado este objeto al principio (es decir, antes del retorno de Init) llamando a IPortDMus::RegisterServiceGroup.
    • El Notify método también llama al método RequestService en el objeto IServiceGroup que pertenece a cada una de las secuencias del controlador de miniport. Este es el objeto IServiceGroup que genera el método IMiniportDMus::NewStream .
Normalmente, el controlador de miniporte llama Notify a para notificar al controlador de puerto que el dispositivo de audio ha generado una interrupción de hardware. Cuando una interrupción indica, por ejemplo, que es necesario leer algún registro, el ISR del controlador de miniporte no puede acceder al gráfico MXF (filtro de transformación MIDI) en el IRQL con privilegios elevados. En su lugar, el controlador de minipuerto puede almacenar los datos de entrada (un byte de datos MIDI, por ejemplo) desde el registro, llamar a Notifyy esperar a que el controlador de puerto vuelva a él con un DPC.

Cuando el ISR del controlador de miniporte llama Notifya , el controlador de puerto recibe la notificación en el IRQL de interrupción de hardware con privilegios elevados y coloca un DPC en la cola. Cuando IRQL cae a la DISPATCH_LEVEL, el DPC del controlador del puerto se activa y atiende al controlador de minipuerto.

En DPC, el controlador de puerto llama a IMXF::P utMessage en el flujo de entrada del controlador de miniporte con un parámetro NULL para indicar que el controlador de miniporte ahora puede colocar el mensaje MIDI almacenado anteriormente en el gráfico MXF porque IRQL ha vuelto a DISPATCH_LEVEL.

Este método es fundamental para un tiempo preciso. La mayoría de los miniportes llamarán a este método en respuesta a una interrupción de notificación después de haber borrado el origen de la interrupción. Aunque el controlador de minipuerto es libre de usar otros métodos para determinar cuándo llamar a este método, el tiempo preciso es importante y debe mantenerse.

Cuando un controlador de adaptador instala un ISR, envía un parámetro ServiceContext junto con el punto de entrada de ISR (para obtener más información, consulte Proporcionar información de contexto de ISR). Cuando se produce la interrupción, el sistema operativo llama al ISR y pasa ServiceContext como parámetro de llamada al ISR. Aunque el significado del parámetro ServiceContext solo se conoce para el desarrollador del controlador, normalmente es un puntero al objeto miniport. El ISR usa este puntero para obtener acceso a información sobre el objeto miniport.

El parámetro pServiceGroup sigue las convenciones de recuento de referencias para objetos COM.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado dmusicks.h (incluye Dmusicks.h)
IRQL Cualquier nivel

Consulte también

IMXF::P utMessage

IMiniportDMus::Init

IMiniportDMus::NewStream

IPortDMus

IPortDMus::RegisterServiceGroup

IServiceGroup