IRP_MJ_DEVICE_CONTROL

유형에 대해 시스템 정의 I/O 제어 코드 집합이 있는 경우 디바이스 개체가 특정 디바이스 유형에 속하는 모든 드라이버( 디바이스 유형 지정 참조)는 DispatchDeviceControl 루틴에서 이 요청을 지원해야 합니다. IOCTL에 대한 자세한 내용은 I/O 제어 코드 소개를 참조하세요.

상위 수준 드라이버는 일반적으로 이러한 요청을 기본 디바이스 드라이버에 전달합니다. 드라이버 스택의 각 디바이스 드라이버는 디바이스 유형별 공용 또는 프라이빗 IOCTL 집합과 함께 이 요청을 지원하는 것으로 간주됩니다. 특정 디바이스 유형에 대한 IOCTL에 대한 자세한 내용은 Microsoft WDK(Windows 드라이버 키트)의 디바이스 유형별 설명서를 참조하세요.

보낸 경우

만들기 요청이 성공적으로 완료된 후 언제든지

입력 매개 변수

I/O 컨트롤 코드는 IRP의 드라이버 I/O 스택 위치에 있는 Parameters.DeviceIoControl.IoControlCode 에 포함되어 있습니다.

다른 입력 매개 변수는 I/O 컨트롤 코드의 값에 따라 달라집니다. 자세한 내용은 I/O 제어 코드에 대한 버퍼 설명을 참조하세요.

출력 매개 변수

출력 매개 변수는 I/O 컨트롤 코드의 값에 따라 달라집니다. 자세한 내용은 I/O 제어 코드에 대한 버퍼 설명을 참조하세요.

작업

사용자 모드 스레드가 Microsoft Win32 DeviceIoControl 함수를 호출했거나 상위 수준의 커널 모드 드라이버가 요청을 설정했기 때문에 드라이버가 이 I/O 제어 코드를 받습니다. 사용자 모드 드라이버가 DeviceIoControl을 호출하여 드라이버 정의( 프라이빗이라고도 함) I/O 제어 코드를 전달하여 밀접하게 결합된 커널 모드 디바이스 드라이버에서 디바이스 또는 드라이버별 지원을 요청할 수 있습니다.

디바이스 I/O 제어 요청을 받으면 상위 수준 드라이버는 일반적으로 IRP를 다음 하위 드라이버에 전달합니다. 그러나 이 연습에는 몇 가지 예외가 있습니다. 예를 들어 기본 포트 드라이버에서 가져온 구성 정보를 저장한 클래스 드라이버는 IRP를 해당 포트 드라이버에 전달하지 않고 특정 IOCTL_XXX 요청을 완료할 수 있습니다.

디바이스 I/O 제어 요청을 받으면 디바이스 드라이버가 I/O 제어 코드를 검사하여 요청을 충족하는 방법을 결정합니다. 대부분의 공용 I/O 제어 코드에서 디바이스 드라이버는 Irp-ASSOCIATedIrp.SystemBuffer>에서 버퍼로 또는 버퍼에서 소량의 데이터를 전송합니다.

IRP_MJ_DEVICE_CONTROL 또는IRP_MJ_INTERNAL_DEVICE_CONTROL 요청에 대한 I/O 제어 코드에 대한 일반적인 내용은 I/O 제어 코드 사용을 참조하세요. 디바이스 Type-Specific I/O 요청도 참조하세요.

요구 사항

헤더

Wdm.h(Wdm.h, Ntddk.h 또는 Ntifs.h 포함)

추가 정보

DispatchDeviceControl