다음을 통해 공유


IMiniportWavePciStream::RevokeMappings 메서드(portcls.h)

메서드는 RevokeMappings 이전에 IPortWavePciStream::GetMapping을 통해 가져온 매핑을 취소합니다.

구문

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

매개 변수

[in] FirstTag

해지되는 첫 번째 매핑을 식별하는 태그 값을 지정합니다.

[in] LastTag

해지되는 마지막 매핑을 식별하는 태그 값을 지정합니다.

[out] MappingsRevoked

해지된 매핑 수에 대한 출력 포인터입니다. 이 매개 변수는 메서드가 호출에 의해 실제로 해지된 매핑 수를 기록하는 ULONG 변수를 가리킵니다. 이 숫자는 미니포트 드라이버가 이미 릴리스한 LastTag대한 FirstTag 범위의 모든 매핑을 제외합니다. 동기화 문제로 인해 포트 드라이버가 해지할 매핑 목록을 결정하는 시간과 에 대한 호출 RevokeMappings사이에 범위의 일부 매핑이 해제될 수 있습니다. 자세한 내용은 아래 설명 부분을 참조하십시오.

반환 값

RevokeMappings 는 호출에 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 메서드는 적절한 오류 코드를 반환합니다.

설명

포트 드라이버는 다음과 같은 경우 를 호출 RevokeMappings 하여 스트림의 매핑을 취소합니다.

  • IRP(I/O 요청)가 취소되고 이전에 매핑된 메모리를 더 이상 사용할 수 없습니다.
  • 스트림 상태가 KSSTATE_STOP 변경되고( KSSTATE 참조) 디바이스에 더 이상 매핑이 필요하지 않습니다.
미니포트 드라이버는 IPortWavePciStream::GetMapping 호출에서 매핑을 획득하는 순서를 추적합니다. 메서드는 RevokeMappingFirstTag 로 식별된 매핑으로 시작하고 LastTag로 식별된 매핑으로 끝나는 시퀀스의 모든 매핑을 취소합니다. 여기에는 FirstTagLastTag 로 식별되는 매핑과 그 사이의 모든 매핑이 포함됩니다. 미니포트 드라이버는 사용 가능한 매핑 목록에서 제거하여 각 매핑을 취소합니다.

메서드를 RevokeMapping 사용하여 FirstTagLastTag 를 동일한 값으로 설정하여 단일 매핑을 제거할 수 있습니다.

포트 드라이버는 DMA 컨트롤러의 분산/수집 전송 큐에서 미니포트 드라이버의 유지 관리 작업과 관련하여 비동기적으로 호출 RevokeMappings 할 수 있습니다. 이 큐에 대한 액세스는 동기화 기본 형식으로 보호되어야 합니다. 예를 들어 Microsoft WDK(Windows 드라이버 키트)의 ac97 샘플 오디오 드라이버에서 이 작업은 KeAcquireSpinLockKeReleaseSpinLock 호출을 사용하여 중요한 코드 섹션을 둘러싸고 수행됩니다. 미니포트 드라이버는 포트 드라이버의 에 대한 호출과 관련하여 매핑을 비동기적으로 해제할 RevokeMappings수 있으므로 미니포트 드라이버는 이전에 호출에 RevokeMappings 지정된 매핑 중 하나 이상(IPortWavePciStream::ReleaseMapping 참조)을 릴리스했을 수 있습니다.

매핑에 대한 자세한 내용은 WavePci 대기 시간을 참조하세요.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 portcls.h(Portcls.h 포함)
IRQL DISPATCH_LEVEL

추가 정보

IMiniportWavePciStream

IPortWavePciStream::GetMapping

IPortWavePciStream::ReleaseMapping

KSSTATE

KeAcquireSpinLock

KeReleaseSpinLock