다음을 통해 공유


KsProbeStreamIrp 함수(ks.h)

KsProbeStreamIrp 함수는 전달된 플래그를 기반으로 지정된 IRP의 입력 및 출력 버퍼를 지정한 다음 스트림 헤더의 유효성을 검사합니다. 이는 예외 처리를 지역화하거나 IRP에서 비동기 작업을 수행할 때 유용합니다. 결과 IRP는 기본적으로 이 함수에 전달된 플래그 또는 스트림 헤더의 플래그에 따라 데이터 버퍼에 대한 액세스가 IoModifyAccess일 수 있다는 점을 제외하고 기본적으로 METHOD_OUT_DIRECT 또는 METHOD_IN_DIRECT 형식입니다.

구문

KSDDKAPI NTSTATUS KsProbeStreamIrp(
  [in, out]      PIRP  Irp,
  [in]           ULONG ProbeFlags,
  [in, optional] ULONG HeaderSize
);

매개 변수

[in, out] Irp

입력 및 출력 버퍼를 매핑할 IRP를 지정합니다. IRP의 요청자 모드는 버퍼를 검색할 때 사용됩니다.

[in] ProbeFlags

스트리밍 IRP를 검색하는 방법을 지정하는 플래그를 지정합니다. 플래그는 다음 표에 나열되어 있습니다.

[in, optional] HeaderSize

이 클라이언트에 전달된 각 헤더의 유효성을 검사할 크기를 지정하거나 유효성 검사를 수행할 수 없는 경우 0을 지정합니다. 사용되는 경우 버퍼에 단일 형식 변경 헤더가 포함되지 않는 한 전달된 전체 버퍼가 이 헤더 크기의 배수라고 가정합니다.

반환 값

KsProbeStreamIrp 함수는 성공하면 STATUS_SUCCESS 반환하거나 메모리 또는 액세스 오류를 반환합니다.

설명

함수가 MDL을 할당하는 데만 사용되고 주소를 검색하고 잠그지 않는 경우 호출자는 MDL을 클린 완료 루틴이 있어야 합니다. instance 경우 Just-In-Time 잠금 메커니즘은 MDL 목록을 할당할 수 있지만 필요에 따라 메모리만 잠글 수 있습니다. 클라이언트는 IRP가 완료 루틴에서 완료되기 전에 부분적으로 잠긴 MDL 목록을 제거하는 정리 코드를 제공해야 합니다.

헤더가 시스템 버퍼에 이미 복사된 것으로 표시되면 다시 유효성이 검사되지 않습니다. 일반적으로 IRP를 사용하여 KsProbeStreamIrp 함수를 여러 번 호출하는 것은 해롭지 않습니다. 함수를 호출한 후에는 PIRP에서 스트림 헤더를 사용할 수 있습니다. ASSOCIATedIrp.SystemBuffer. 스트림 버퍼 MDL이 할당된 경우 PIRP를 통해 사용할 수 있습니다. MdlAddress.

다음 정의는 ProbeFlags 변수에 사용됩니다.

ProbeFlags Description
KSPROBE_READ 작업이 디바이스에서 읽은 스트림임을 나타냅니다. 이것이 기본값입니다.
KSPROBE_WRITE 작업이 디바이스의 스트림 쓰기임을 나타냅니다.
KSPROBE_ALLOCATEMDL MDL이 아직 할당되지 않은 경우 스트림 버퍼에 할당되어야 했음을 나타냅니다. 스트림 버퍼가 없으면 플래그가 무시됩니다. KSPROBE_PROBEANDLOCK 이 플래그와 동시에 지정되지 않은 경우 호출자는 모든 MDL이 성공적으로 검색되고 잠겨 있지 않은 경우 MDL을 클린 위해 완료 루틴이 있어야 합니다.
KSPROBE_PROBEANDLOCK KSPROBE_ALLOCATEMDL 설정된 경우 스트림 버퍼에 대한 MDL에서 참조하는 메모리를 검색하고 잠가야 했음을 나타냅니다. MDL 할당 플래그가 설정되지 않은 경우 MDL 할당이 이전에 수행된 경우에도 이 플래그는 무시됩니다. 검색 방법은 전달되는 IRP 유형에 따라 결정됩니다. 쓰기 작업의 경우 IoReadAccess 가 사용됩니다. 읽기 작업의 경우 IoWriteAccess 가 사용됩니다. 데이터를 보낸 클라이언트가 비페이지 풀을 사용하는 경우 검색 및 잠금 대신 적절한 MDL이 초기화됩니다.
KSPROBE_SYSTEMADDRESS 호출자가 별도의 단계에서 이 작업을 수행할 필요가 없도록 체인의 각 MDL에 대한 시스템 주소를 검색합니다. 이전에 MDL을 검색한 경우에도 프로브 및 잠금 플래그가 설정되지 않은 경우 무시됩니다.
KSPROBE_ALLOWFORMATCHANGE Stream 쓰기의 경우 스트림 헤더에서 KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 플래그를 설정할 수 있습니다. 이는 확장 헤더 크기가 표시된 경우에도 스트림 헤더의 길이가 확장되지 않음을 의미합니다. 또한 이 경우 IRP에 포함된 스트림 헤더가 하나만 있을 수 있습니다. 이 헤더와 연결된 버퍼에는 새 데이터 형식이 포함됩니다. 시스템 메모리 데이터 스트림의 경우 데이터 스트림의 일부가 아니으므로 협상된 할당자에서 버퍼를 획득하지 않아야 합니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 ks.h(Ks.h 포함)
라이브러리 Ks.lib