다음을 통해 공유


EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL 콜백 함수(wdfio.h)

[KMDF 및 UMDF에 적용]

드라이버의 EvtIoDeviceControl 이벤트 콜백 함수는 지정된 디바이스 I/O 제어 요청을 처리합니다.

구문

EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtWdfIoQueueIoDeviceControl;

void EvtWdfIoQueueIoDeviceControl(
  [in] WDFQUEUE Queue,
  [in] WDFREQUEST Request,
  [in] size_t OutputBufferLength,
  [in] size_t InputBufferLength,
  [in] ULONG IoControlCode
)
{...}

매개 변수

[in] Queue

I/O 요청과 연결된 프레임워크 큐 개체에 대한 핸들입니다.

[in] Request

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

[in] OutputBufferLength

출력 버퍼를 사용할 수 있는 경우 요청 출력 버퍼의 길이(바이트)입니다.

[in] InputBufferLength

입력 버퍼를 사용할 수 있는 경우 요청의 입력 버퍼 길이(바이트)입니다.

[in] IoControlCode

요청과 연결된 드라이버 정의 또는 IOCTL(시스템 정의 I/O 제어 코드)입니다.

반환 값

없음

설명

드라이버는 WdfIoQueueCreate를 호출할 때 EvtIoDeviceControl 콜백 함수를 등록합니다. WdfIoQueueCreate 호출에 대한 자세한 내용은 I/O 큐 만들기를 참조하세요.

드라이버가 디바이스의 I/O 큐에 대한 EvtIoDeviceControl 콜백 함수를 등록한 경우 콜백 함수는 큐에서 모든 I/O 제어 요청(IRP_MJ_DEVICE_CONTROL)을 수신합니다. 자세한 내용은 요청 처리기를 참조하세요.

EvtIoDeviceControl 콜백 함수는 수신된 각 I/O 요청을 어떤 방식으로 처리해야 합니다. 자세한 내용은 I/O 요청 처리를 참조하세요.

드라이버는 사용자 애플리케이션이 DeviceIoControl을 호출하거나(Microsoft Windows SDK 설명서에 설명됨) WdfIoTargetSendIoctlSynchronously 또는 WdfIoTargetFormatRequestForIoctl을 호출하여 요청을 만들 때 I/O 제어 요청을 받습니다.

수행할 작업 유형은 IoControlCode 매개 변수의 값에 따라 달라집니다. 애플리케이션 및 기타 드라이버가 드라이버에 보낼 수 있는 IoControlCode 값 집합을 결정해야 합니다. IOCTL에 대한 자세한 내용은 I/O 제어 코드 사용을 참조하세요.

대부분의 디바이스 I/O 컨트롤 작업에는 입력 버퍼, 출력 버퍼 또는 둘 다 필요합니다. 드라이버가 요청의 버퍼에 액세스하는 방법에 대한 자세한 내용은 Framework-Based 드라이버에서 데이터 버퍼 액세스를 참조하세요.

드라이버가 요청의 입력 및 출력 버퍼(있는 경우)에 액세스하는 데 사용할 수 있는 기술은 IOCTL의 TransferType 필드에 따라 달라집니다. IOCTL의 TransferType 필드 값은 METHOD_BUFFERED, METHOD_DIRECT_IN, METHOD_DIRECT_OUT 또는 METHOD_NEITHER 수 있습니다. TransferType 필드에 대한 자세한 내용은 I/O 제어 코드 정의를 참조하세요.

디바이스 또는 드라이버의 WDF_OBJECT_ATTRIBUTES 구조체의 ExecutionLevel 멤버가 WdfExecutionLevelPassive로 설정되지 않는 한 EvtIoDeviceControl 콜백 함수는 IRQL <= DISPATCH_LEVEL 호출할 수 있습니다.

IRQL이 PASSIVE_LEVEL 경우 프레임워크는 중요한 지역 내에서 콜백 함수를 호출합니다.

요청 처리기의 IRQL 수준에 대한 자세한 내용은 자동 동기화 사용을 참조하세요.

드라이버의 EvtIoDeviceControl 콜백 함수는 다음 큐 개체 메서드를 호출하면 안 됩니다.

WdfIoQueueDrainSynchronously
WdfIoQueuePurgeSynchronously
WdfIoQueueStopSynchronously

요구 사항

요구 사항
대상 플랫폼 유니버설
최소 KMDF 버전 1.0
최소 UMDF 버전 2.0
머리글 wdfio.h(Wdf.h 포함)
IRQL <= DISPATCH_LEVEL(주의 섹션 참조)

추가 정보

EvtIoInternalDeviceControl

WDF_OBJECT_ATTRIBUTES

WdfIoQueueCreate

WdfIoTargetFormatRequestForIoctl

WdfIoTargetSendIoctlSynchronously