다음을 통해 공유


PFNKSHANDLER 콜백 함수(ks.h)

커널 스트리밍이 IOCTL_KS_METHODget/set 속성 요청을 받을 때 미니 드라이버 제공 루틴이 호출됩니다. 관련 KSMETHOD_ITEMKSPROPERTY_ITEM 구조에서 이 처리기에 대한 포인터를 제공합니다.

통사론

PFNKSHANDLER Pfnkshandler;

NTSTATUS Pfnkshandler(
  [in]      PIRP Irp,
  [in]      PKSIDENTIFIER Request,
  [in, out] PVOID Data
)
{...}

매개 변수

[in] Irp

메서드 또는 속성 요청을 포함하는 IRP를 지정합니다.

[in] Request

메서드 매개 변수의 정렬된 복사본을 지정합니다. 이는 일반적으로 KSMETHOD 또는 KSPROPERTY 구조체에 대한 포인터입니다.

[in, out] Data

메서드의 KSMETHOD_ITEM 구조에 지정된 플래그에 따라 원래 데이터 매개 변수의 시스템 주소 또는 메서드 데이터 매개 변수의 정렬된 복사본을 지정합니다.

반환 값

메서드가 처리되고 데이터 버퍼가 KSMETHOD_ITEM 지정된 플래그에 따라 채워진 경우 STATUS_SUCCESS 반환합니다. 데이터를 반환하는 경우 드라이버는 Irp->IoStatus.Information 필드를 설정해야 하지만 Irp->IoStatus.Status 필드를 설정하거나 IRP를 완료해서는 안 됩니다. IRP가 비동기적으로 완료될 경우 보류 중인 IRP를 표시합니다.

또는 메서드가 처리되었지만 특정 요청이 완료되지 않았으며 호출 도우미 함수에 의해 완료되어야 하는 경우 STATUS_SOME_NOT_MAPPED 반환합니다. 메서드가 지원되지 않거나 매개 변수 오류가 발생했음을 나타내는 다른 오류 메시지를 반환합니다.

발언

미니 드라이버는 KSMETHOD_ITEM 구조체의 MethodHandler 멤버에서 이 루틴의 주소를 지정합니다.

KStrMethodHandlerKStrSupportHandler 사용되는 처리기 선언은 동일한 매개 변수 및 반환 값을 사용하여 속성 및 이벤트 집합의 처리기에도 사용됩니다.

KsMethodHandler와 같은 도우미 함수가 데이터 버퍼가 쓰기 또는 수정 버퍼로 정의된 메서드 처리기를 호출할 경우 메서드 처리기는 IRP(Irp 매개 변수) 내의 IoStatus 멤버에 대한 IO_STATUS_BLOCK 구조의 Information 멤버를 해당 데이터 버퍼의 크기로 설정해야 합니다. 미니 드라이버는 메서드에 대한 KSMETHOD_ITEM 구조의 Flags 멤버를 KSMETHOD_TYPE_WRITE 설정하거나 메서드 처리기의 데이터 버퍼를 각각 쓰기 또는 수정으로 정의하는 KSMETHOD_TYPE_MODIFY 설정합니다.

다음 코드 조각은 IRP에서 반환되는 데이터 버퍼의 크기를 설정하는 메서드 처리기 구현의 예를 보여 주는 코드 조각입니다.

NTSTATUS
  MethodHandler(PIRP pIrp, PKSIDENTIFIER Request, PVOID Data) {
    NTSTATUS Status = STATUS_UNSUCCESSFUL;
    // Pointer to hold the position on the Irp stack
    PIO_STACK_LOCATION  pIrpStack  = NULL;
    ASSERT(pIrp);
    if(Data) {
        // Modify data here
    }
    // Find the current Irp stack.
    pIrpStack = IoGetCurrentIrpStackLocation(pIrp);
    if(pIrpStack) {
        // Set the size of the returning Irp data.
        pIrp->IoStatus.Information =
          pIrpStack->Parameters.DeviceIoControl.OutputBufferLength;
        Status = STATUS_SUCCESS;
    }
    return(Status);
}

미니 드라이버는 KSPROPERTY_ITEM 구조체의 GetPropertyHandler 멤버에서 이 루틴의 주소를 지정합니다.

미니 드라이버는 KSPROPERTY_ITEM 구조체의 SetPropertyHandler 멤버에서 이 루틴의 주소를 지정합니다.

미니 드라이버는 KSMETHOD_ITEM 구조체의 SupportHandler 멤버에서 이 루틴의 주소를 지정합니다.

KStrMethodHandlerKStrSupportHandler 사용되는 처리기 선언은 동일한 매개 변수 및 반환 값을 사용하여 속성 및 이벤트 집합의 처리기에도 사용됩니다.

요구 사항

요구
대상 플랫폼 바탕 화면
헤더 ks.h(Ks.h 포함)

참고 항목

KSMETHOD

KSMETHOD_ITEM

KSMETHOD_SET

KsMethodHandler