다음을 통해 공유


KsStreamIo 함수(ks.h)

KsStreamIo 함수는 지정된 파일 개체에 대해 스트림 읽기 또는 쓰기를 수행합니다. 함수는 가능하면 FastIoDispatch 를 사용하려고 시도하거나 디바이스 개체에 대한 읽기 또는 쓰기 요청을 생성합니다.

구문

KSDDKAPI NTSTATUS KsStreamIo(
  [in]           PFILE_OBJECT            FileObject,
  [in, optional] PKEVENT                 Event,
  [in, optional] PVOID                   PortContext,
  [in, optional] PIO_COMPLETION_ROUTINE  CompletionRoutine,
  [in, optional] PVOID                   CompletionContext,
  [in, optional] KSCOMPLETION_INVOCATION CompletionInvocationFlags,
  [out]          PIO_STATUS_BLOCK        IoStatusBlock,
  [in, out]      PVOID                   StreamHeaders,
  [in]           ULONG                   Length,
  [in]           ULONG                   Flags,
  [in]           KPROCESSOR_MODE         RequestorMode
);

매개 변수

[in] FileObject

I/O를 수행할 파일 개체를 지정합니다.

[in, optional] Event

필요에 따라 I/O에서 사용할 이벤트를 포함합니다. 전달되지 않으면 호출이 동기 파일 개체에 있는 것으로 간주되거나 호출자가 파일 개체의 이벤트를 기다리고 있거나 비동기적으로 완료될 수 있습니다. 를 사용하고 KSSTREAM_SYNCHRONOUS 플래그가 설정되지 않은 경우 개체 관리자가 할당한 이벤트여야 합니다. 호출자가 비동기 I/O를 수행하는 경우 파일 개체의 이벤트를 기다리거나 이 매개 변수의 이벤트를 전달하고 대기해야 합니다. 이 작업이 수행되지 않으면 호출자가 호출에 의해 IoStatusBlock이 업데이트된 시기를 알 수 있는 방법이 없습니다.

[in, optional] PortContext

필요에 따라 완료 포트에 대한 컨텍스트 정보를 포함합니다.

[in, optional] CompletionRoutine

필요에 따라 이 IRP에 대한 완료 루틴을 가리킵니다.

[in, optional] CompletionContext

CompletionRoutine을 지정하면 완료 루틴 콜백에 컨텍스트 포인터가 제공됩니다.

[in, optional] CompletionInvocationFlags

완료 루틴이 호출되는 시기를 지정하는 호출 플래그를 지정합니다. 사용된 값은 다음 표를 참조하세요.

[out] IoStatusBlock

상태 정보를 반환할 위치입니다. 요청자 모드에 관계없이 항상 유효한 주소로 간주됩니다. 호출이 상태 업데이트될 때까지 값은 유효한 상태로 유지되어야 합니다. 호출자는 동기 I/O를 수행하거나 이 주소가 유효하지 않도록 허용하기 전에 파일 개체의 이벤트 또는 Event 매개 변수에 전달된 이벤트를 기다려야 합니다.

[in, out] StreamHeaders

스트림 헤더 목록을 지정합니다. 이 주소와 데이터 버퍼의 주소는 적절한 액세스를 위해 검색된 것으로 간주됩니다. 스트리밍 헤더를 제출하는 커널 모드 클라이언트는 NonPagedPool 메모리에서 헤더를 할당해야 합니다.

[in] Length

전달된 StreamHeaders 의 크기를 지정합니다.

[in] Flags

I/O에 대한 다양한 플래그를 지정합니다. 사용된 값은 다음 표를 참조하세요.

[in] RequestorMode

생성해야 하는 경우 IRP에 배치할 프로세서 모드를 나타냅니다. 이 변수는 빠른 I/O 호출을 수행할 수 있는지 여부도 결정합니다. 요청자 모드가 커널 모드가 아니지만 이전 모드인 경우 빠른 I/O를 사용할 수 없습니다.

반환 값

KsStreamIo 함수는 성공하면 STATUS_SUCCESS 반환하고, 작업이 보류 중이면 STATUS_PENDING, 실패하면 I/O 오류를 반환합니다.

설명

다음 열거형 값은 CompletionInvocationFlags 변수에 사용되며 형식은 KSCOMPLETION_INVOCATION.

CompletionInvocationFlags Description
KsInvokeOnSuccess 성공 시 완료 루틴을 호출합니다.
KsInvokeOnError 오류 발생 시 완료 루틴을 호출합니다.
KsInvokeOnCancel 취소 시 완료 루틴을 호출합니다.

Flags 변수에는 다음과 같은 정의된 값이 사용됩니다.

플래그 Description
KSSTREAM_READ IOCTL_KS_STREAMREAD IRP를 빌드하도록 지정합니다. 이것이 기본값입니다.
KSSTREAM_WRITE IOCTL_KS_STREAMWRITE IRP를 빌드하도록 지정합니다.
KSSTREAM_PAGED_DATA 데이터를 페이지할 수 있도록 지정합니다. 이는 기본값이며 항상 사용할 수 있습니다.
KSSTREAM_NONPAGED_DATA 데이터가 페이징되지 않으며 성능 향상으로 사용할 수 있도록 지정합니다.
KSSTREAM_SYNCHRONOUS IRP가 동기식임을 지정합니다. 즉 , Event 매개 변수가 전달되면 개체 관리자 이벤트로 처리되지 않으며 참조되거나 역참조되지 않습니다.

KSSTREAM_READ KSPROBE_STREAMREAD 동일합니다.

마찬가지로 KSSTREAM_WRITE KSPROBE_STREAMWRITE 동일합니다.

요구 사항

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