Método IMiniportWavePciStream::RevokeMappings (portcls.h)

El RevokeMappings método revoca las asignaciones que se obtuvieron anteriormente a través de IPortWavePciStream::GetMapping.

Sintaxis

NTSTATUS RevokeMappings(
  [in]  PVOID  FirstTag,
  [in]  PVOID  LastTag,
  [out] PULONG MappingsRevoked
);

Parámetros

[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 sección Comentarios que se muestra más adelante.

Valor devuelto

RevokeMappings devuelve STATUS_SUCCESS si la llamada se realizó correctamente. De lo contrario, el método devuelve un código de error adecuado.

Comentarios

El controlador de puerto llama RevokeMappings a 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.
El controlador de minipuerto realiza un seguimiento del orden en el que adquiere sus asignaciones de llamadas a IPortWavePciStream::GetMapping. El RevokeMapping método 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 minipuerto revoca cada asignación quitándolo de la lista de asignaciones disponibles.

El RevokeMapping método se puede usar para quitar una sola asignación estableciendo FirstTag y LastTag en el mismo valor.

El controlador de puerto puede llamar 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. El acceso a esta cola debe estar protegido por un primitivo de sincronización. Por ejemplo, en el controlador de audio de ejemplo ac97 del Kit de controladores de Microsoft Windows (WDK), esto se realiza rodeando secciones de código críticas con llamadas KeAcquireSpinLock y 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 miniportar haya publicado previamente (consulte IPortWavePciStream::ReleaseMapping) una o varias de las asignaciones especificadas en la RevokeMappings llamada.

Para obtener más información sobre las asignaciones, vea WavePci Latency.

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado portcls.h (incluya Portcls.h)
IRQL DISPATCH_LEVEL

Consulte también

IMiniportWavePciStream

IPortWavePciStream::GetMapping

IPortWavePciStream::ReleaseMapping

KSSTATE

KeAcquireSpinLock

KeReleaseSpinLock