EVT_WDF_IO_IN_CALLER_CONTEXT 콜백 함수(wdfdevice.h)

[KMDF에만 적용]

드라이버의 EvtIoInCallerContext 이벤트 콜백 함수는 프레임워크가 I/O 큐에 배치하기 전에 I/O 요청을 전처리합니다.

구문

EVT_WDF_IO_IN_CALLER_CONTEXT EvtWdfIoInCallerContext;

void EvtWdfIoInCallerContext(
  [in] WDFDEVICE Device,
  [in] WDFREQUEST Request
)
{...}

매개 변수

[in] Device

프레임워크 디바이스 개체에 대한 핸들입니다.

[in] Request

프레임워크 요청 개체에 대한 핸들입니다.

반환 값

없음

설명

프레임워크는 드라이버의 EvtIoInCallerContext 콜백 함수를 호출하여 드라이버가 각 I/O 요청을 검사하고 프레임워크가 I/O 큐에 배치하기 전에 요청에 대한 예비 처리를 수행할 수 있도록 합니다. 디바이스에 대한 EvtIoInCallerContext 콜백 함수를 등록하기 위해 드라이버는 WdfDeviceInitSetIoInCallerContextCallback을 호출합니다.

드라이버가 디바이스에 대해 EvtIoInCallerContext 콜백 함수를 등록하는 경우 프레임워크는 디바이스에 대한 I/O 요청을 받을 때마다 콜백 함수를 호출합니다. 콜백 함수는 드라이버에 I/O 요청을 보낸 프로세스의 스레드 컨텍스트에서 호출됩니다. 이 프로세스는 다음 수준 드라이버이거나 드라이버가 드라이버 스택의 맨 위에 있는 경우 사용자 모드 애플리케이션입니다.

이 콜백 함수의 주요 목적은 프레임워크 기반 드라이버가 버퍼링되거나 직접 I/O가 아닌 버퍼 액세스 메서드를 지원할 수 있도록 하는 것입니다. 이 버퍼 액세스 메서드의 경우 드라이버는 보낸 사람의 프로세스 컨텍스트에서 수신된 버퍼에 액세스해야 합니다.

콜백 함수가 요청의 버퍼를 가져온 후에는 요청 개체의 컨텍스트 스토리지에 버퍼 주소 또는 핸들을 저장할 수 있습니다. (드라이버는 WdfDeviceInitSetRequestAttributes를 호출하여 요청 개체의 컨텍스트 스토리지 영역의 크기를 설정합니다.)

요청이 아직 I/O 큐에 속하지 않으므로 프레임워크는 요청을 잠그거나 동기화하지 않습니다. 드라이버는 필요할 수 있는 모든 동기화를 담당합니다. 동기화에 대한 자세한 내용은 Framework-Based 드라이버용 동기화 기술을 참조하세요.

콜백 함수가 요청 전처리를 완료한 후 WdfDeviceEnqueueRequest 를 호출하여 큐에 추가하거나 WdfRequestComplete (오류가 감지된 경우)를 호출하여 완료해야 합니다.

EvtIoInCallerContext 콜백 함수에 대한 자세한 내용은 큐에 대기되기 전에 I/O 요청 가로채기Framework-Based 드라이버에서 데이터 버퍼 액세스를 참조하세요.

드라이버가 보장된 정방향 진행을 지원하도록 I/O 큐를 구성한 경우 프레임워크는 메모리 부족 상황에서 드라이버의 EvtIoInCallerContext 콜백 함수를 호출하지 않을 수 있습니다. 프레임워크의 모든 예약된 요청 개체를 사용하는 경우 프레임워크는 예약된 요청 개체를 사용할 수 있게 될 때까지 I/O 요청 처리를 연기합니다. 이 경우 예약된 요청 개체를 사용할 수 있게 되면 프레임워크가 드라이버에 I/O 요청을 보낸 프로세스의 스레드 컨텍스트에서 더 이상 실행되지 않으므로 프레임워크는 연기된 I/O 요청에 대해 EvtIoInCallerContext 콜백 함수를 호출할 수 없습니다.

EvtIoInCallerContext 콜백 함수는 호출 스레드의 IRQL에서 호출됩니다. 호출 스레드가 사용자 모드 애플리케이션에서 온 경우 콜백 함수는 IRQL = PASSIVE_LEVEL 호출됩니다. 호출 스레드가 상위 수준의 커널 모드 드라이버에서 온 경우 콜백 함수와 상위 수준 드라이버가 모두 IRQL = DISPATCH_LEVEL 요청을 전달하도록 설계된 경우 드라이버의 EvtIoInCallerContext 콜백 함수를 IRQL <<= DISPATCH_LEVEL 호출할 수 있습니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
최소 KMDF 버전 1.0
머리글 wdfdevice.h(Wdf.h 포함)
IRQL 설명 섹션을 참조하십시오.

추가 정보

EvtDeviceWdmIrpPreprocess