다음을 통해 공유


IRP_MN_READ_CONFIG

구성 공간이 있는 버스용 버스 드라이버는 자식 디바이스(자식 PDO)에 대해 이 요청을 처리해야 합니다. 필터 및 함수 드라이버는 이 요청을 처리하지 않습니다.

0x0F

주 코드

IRP_MJ_PNP

보낸 경우

드라이버 또는 다른 시스템 구성 요소는 디바이스의 부모 버스의 구성 공간을 읽기 위해 이 IRP를 보냅니다.

드라이버 또는 다른 시스템 구성 요소는 임의 스레드 컨텍스트에서 IRQL < DISPATCH_LEVEL 이 IRP를 보냅니다.

입력 매개 변수

IO_STACK_LOCATION 구조체의 Parameters.ReadWriteConfig 멤버 자체는 다음 정보를 포함하는 구조체입니다.

ULONG WhichSpace;
PVOID Buffer;
ULONG Offset;
ULONG Length

구조체의 멤버는 다른 버스 드라이버에 의해 다르게 해석될 수 있지만 멤버는 일반적으로 다음과 같이 정의됩니다.

어느 영역
액세스할 메모리 영역을 지정합니다. 이 매개 변수에 가능한 값은 다음과 같습니다.

버스 의미

PCI_WHICHSPACE_CONFIG

PCI

PCI 구성 공간.

PCI_WHICHSPACE_ROM

PCI

읽기 전용 메모리입니다.

PCCARD_COMMON_MEMORY

PCCARD_COMMON_MEMORY_INDIRECT

PCMCIA

기본 PCCARD 메모리.

PCCARD_ATTRIBUTE_MEMORY

PCCARD_ATTRIBUTE_MEMORY_INDIRECT

PCMCIA

PCMCIA 특성(구성) 공간.

PCCARD_PCI_CONFIGURATION_SPACE

PCMCIA

PCI 구성 공간.

PCI_XXX 값은 Wdm.h에 정의되어 있습니다. PCCARD_XXX 값은 Ntddpcm.h에 정의됩니다.

버퍼
요청된 정보를 반환할 버퍼를 가리킵니다. IRP를 보내는 구성 요소는 페이징된 메모리에서 이 구조를 할당합니다. 버퍼의 형식은 버스에 따라 다릅니다.

오프셋
구성 공간에 대한 오프셋을 지정합니다.

길이
읽을 바이트 수를 지정합니다.

출력 매개 변수

성공하면 버스 드라이버가 Parameters.ReadWriteConfig.Buffer 의 버퍼를 요청된 데이터로 채웁니다.

I/O 상태 블록

버스 드라이버는 Irp-IoStatus.Status>를 STATUS_SUCCESS 또는 STATUS_INVALID_PARAMETER_n, STATUS_NO_SUCH_DEVICE 또는 STATUS_DEVICE_NOT_READY 같은 적절한 오류 상태 설정합니다.

성공 시 버스 드라이버는 Irp-IoStatus.Information>를 반환된 바이트 수로 설정합니다.

버스 드라이버가 이 요청을 즉시 완료할 수 없는 경우 IRP 보류 중임을 표시하고, STATUS_PENDING 반환하고, 나중에 IRP를 완료할 수 있습니다.

작업

버스 드라이버는 자식 디바이스(자식 PDO)에 대해 이 IRP를 처리합니다.

함수 및 필터 드라이버는 이 IRP를 처리하지 않습니다. Irp-IoStatus>를 변경하지 않고 다음 하위 드라이버에 전달합니다. 상태 및 상태는 IoCompletion 루틴을 설정하지 않습니다.

이 요청을 처리하는 버스 드라이버는 드라이버가 지원하는 값을 포함하도록 WhichSpace 매개 변수를 검사 합니다.

플러그 앤 플레이 사소한 IRP를 처리하기 위한 일반적인 규칙은 플러그 앤 플레이 참조하세요.

이 IRP 보내기

일반적으로 함수 드라이버는 연결되고 IRP가 부모 버스 드라이버에 의해 처리되는 디바이스 스택의 최상위 드라이버로 이 IRP를 보냅니다.

IRP 전송에 대한 자세한 내용은 IRP 처리를 참조하세요. 다음 단계는 이 IRP에 특별히 적용됩니다.

  • 페이징된 풀에서 버퍼를 할당하고 0으로 초기화합니다.

  • IRP의 다음 I/O 스택 위치에 있는 값을 설정합니다. MajorFunctionIRP_MJ_PNP 설정하고, MinorFunctionIRP_MN_READ_CONFIG 설정하고, Parameters.ReadWriteConfig에서 적절한 값을 설정합니다.

  • IoStatus.Status를 초기화하여 STATUS_NOT_SUPPORTED.

  • 더 이상 필요하지 않은 경우 IRP 및 버퍼의 할당을 취소합니다.

드라이버는 IRQL DISPATCH_LEVEL 이 IRP를 < 보내야 합니다.

부모 버스 드라이버가 이러한 인터페이스를 지원하는 경우 드라이버는 버스 인터페이스 루틴을 통해 DISPATCH_LEVEL 버스의 구성 공간에 액세스할 수 있습니다. 버스 인터페이스를 가져오기 위해 드라이버는 드라이버가 연결된 디바이스 스택에 IRP_MN_QUERY_INTERFACE 요청을 보냅니다. 그런 다음 드라이버는 인터페이스에서 반환된 적절한 루틴을 호출합니다.

예를 들어 DISPATCH_LEVEL 구성 공간을 읽으려면 드라이버가 드라이버 초기화 중에 IRP_MN_QUERY_INTERFACE 호출하여 부모 버스 드라이버에서 BUS_INTERFACE_STANDARD 인터페이스를 가져올 수 있습니다. 드라이버는 IRQL PASSIVE_LEVEL 쿼리 IRP를 보냅니다. 나중에 IRQL DISPATCH_LEVEL 코드에서 드라이버는 Interface.GetBusData 루틴과 같이 인터페이스에 반환된 적절한 루틴을 호출합니다.

요구 사항

헤더

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

추가 정보

IRP_MN_QUERY_INTERFACE

IRP_MN_WRITE_CONFIG