다음을 통해 공유


IRP_MN_START_DEVICE

모든 PnP 드라이버는 이 IRP를 처리해야 합니다.

0x00

주 코드

IRP_MJ_PNP

보낸 경우

PnP 관리자는 하드웨어 리소스(있는 경우)를 디바이스에 할당한 후 이 IRP를 보냅니다. 디바이스가 최근에 열거되어 처음으로 시작되었거나 리소스 리밸런싱을 위해 중지된 후 디바이스가 다시 시작될 수 있습니다.

PnP 관리자가 이미 시작된 디바이스에 IRP_MN_START_DEVICE 전송하여 현재 사용 중인 디바이스와 다른 리소스 집합을 제공하는 경우가 있습니다. 드라이버는 IoInvalidateDeviceState 를 호출하고 PNP_RESOURCE_REQUIREMENTS_CHANGED 플래그 집합을 사용하여 후속 IRP_MN_QUERY_PNP_DEVICE_STATE 요청에 응답하여 이 작업을 시작합니다. 예를 들어 버스 드라이버는 이 메커니즘을 사용하여 PCI-PCI 브리지에서 새 조리개를 열 수 있습니다.

PnP 관리자는 시스템 스레드의 컨텍스트에서 IRQL PASSIVE_LEVEL 이 IRP를 보냅니다.

입력 매개 변수

IO_STACK_LOCATION 구조의 Parameters.StartDevice.AllocatedResources 멤버는 PnP 관리자가 디바이스에 할당한 하드웨어 리소스를 설명하는 CM_RESOURCE_LIST 가리킵니다. 이 목록에는 원시 형식의 리소스가 포함되어 있습니다. 원시 리소스를 사용하여 디바이스를 프로그래밍합니다.

Parameters.StartDevice.AllocatedResourcesTranslated는 PnP 관리자가 디바이스에 할당한 하드웨어 리소스를 설명하는 CM_RESOURCE_LIST 가리킵니다. 이 목록에는 번역된 형식의 리소스가 포함되어 있습니다. 변환된 리소스를 사용하여 인터럽트 벡터를 연결하고, I/O 공간을 매핑하고, 메모리를 매핑합니다.

출력 매개 변수

없음

I/O 상태 블록

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

드라이버가 디바이스에 대한 시작 작업을 실행하는 데 시간이 필요한 경우 보류 중인 IRP를 표시하고 STATUS_PENDING 반환할 수 있습니다.

작업

이 IRP는 먼저 디바이스에 대한 부모 버스 드라이버에 의해 처리된 다음 디바이스 스택의 각 상위 드라이버에 의해 처리되어야 합니다.

이 IRP에 대한 응답으로 드라이버는 처음으로 디바이스를 시작하거나 중지된 디바이스를 다시 시작합니다. 디바이스를 시작하는 데 필요한 정확한 작업은 디바이스마다 다르지만 디바이스의 전원 공급, 디바이스별 초기화 수행 및 인터럽트 연결이 포함될 수 있습니다.

드라이버가 중지 후 다시 시작 시 디바이스 상태를 복원해야 하는 경우를 제외하고 드라이버는 일반적으로 처음으로 디바이스를 시작하거나 IRP_MN_STOP_DEVICE 후 디바이스를 다시 시작하는 것과 동일한 방식으로 이 IRP를 처리할 수 있습니다.

Windows Vista 이상 운영 체제에서는 드라이버가 항상 IRP_MN_START_DEVICE IRP를 보류하고 나중에 처리를 완료하는 것이 좋습니다. 이 순서를 사용하면 시스템에서 디바이스 다시 시작을 비동기적으로 처리할 수 있습니다. (Windows Vista 이전 운영 체제에서 드라이버는 디스패치 루틴에서 STATUS_PENDING 반환할 수 있지만 PnP 관리자는 디바이스 다시 시작을 다른 작업과 겹치지 않습니다.)

시작 IRP 처리에 대한 자세한 내용은 디바이스 시작을 참조하세요.

이 IRP 보내기

시스템에서 사용하도록 예약되었습니다. 드라이버는 이 IRP를 보내지 않아야 합니다.

요구 사항

헤더

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

추가 정보

IRP_MN_STOP_DEVICE