Método IMiniportWavePciStream::RevokeMappings (portcls.h)
El método RevokeMappings
revoca las asignaciones que se obtuvieron anteriormente a través de IPortWavePciStream::GetMapping.
NTSTATUS RevokeMappings(
[in] PVOID FirstTag,
[in] PVOID LastTag,
[out] PULONG MappingsRevoked
);
[in] FirstTag
Especifica el valor de etiqueta que identifica la primera asignación que se va a revocar.
[in] LastTag
Especifica el valor de etiqueta que identifica la última asignación que se va a revocar.
[out] MappingsRevoked
Puntero de salida para el recuento de asignaciones revocadas. Este parámetro apunta a una variable ULONG en la que el método escribe el número de asignaciones revocadas realmente por la llamada. Este número excluye las asignaciones del intervalo FirstTag a LastTag que el controlador de miniporte ya ha publicado. Debido a problemas de sincronización, algunas de las asignaciones del intervalo pueden liberarse entre el momento en que el controlador de puerto determina la lista de asignaciones que se van a revocar y la llamada a RevokeMappings
. Para obtener más información, vea la siguiente sección Comentarios.
RevokeMappings
devuelve STATUS_SUCCESS si la llamada se realizó correctamente. De lo contrario, el método devuelve un código de error adecuado.
El controlador de puerto llama a RevokeMappings
para revocar las asignaciones de la secuencia cuando:
- Se cancela una solicitud de E/S (IRP) y es posible que la memoria asignada previamente ya no esté disponible.
- El estado de la secuencia cambia a KSSTATE_STOP (consulte KSSTATE) y el dispositivo ya no necesita las asignaciones.
RevokeMapping
revoca todas las asignaciones de la secuencia que comienza con la asignación identificada por FirstTag y termina con la asignación identificada por LastTag. Esto incluye las asignaciones identificadas por FirstTag y LastTag y todas las asignaciones entre ellas. El controlador de miniporta revoca cada asignación quitándolo de la lista de asignaciones disponibles.
El método RevokeMapping
se puede usar para quitar una sola asignación estableciendo firstTag y lastTag en el mismo valor.
El controlador de puerto puede llamar a RevokeMappings
de forma asincrónica con respecto a las operaciones de mantenimiento del controlador de miniporte en la cola de transferencia de dispersión o recopilación del controlador DMA. Un primitivo de sincronización debe proteger el acceso a esta cola. Por ejemplo, en el controlador de audio de ejemplo ac97 del Kit de controladores de Microsoft Windows (WDK), esto se realiza en torno a secciones de código críticas con KeAcquireSpinLock y llamadas de KeReleaseSpinLock. Dado que el controlador de miniporte puede liberar asignaciones de forma asincrónica con respecto a las llamadas del controlador de puerto a RevokeMappings
, es posible que el controlador de miniporte haya publicado previamente (vea IPortWavePciStream::ReleaseMapping) una o varias de las asignaciones especificadas en la llamada a RevokeMappings
.
Para obtener más información sobre las asignaciones, vea WavePci Latency.
Requisito | Valor |
---|---|
de la plataforma de destino de | Universal |
encabezado de | portcls.h (incluya Portcls.h) |
irQL | DISPATCH_LEVEL |
IPortWavePciStream::GetMapping