IRP_MN_START_DEVICE

所有 PnP 驅動程式都必須處理此 IRP。

0x00

主要程式碼

IRP_MJ_PNP

傳送時

PnP 管理員會在將硬體資源指派給裝置之後,傳送此 IRP。 裝置可能最近已列舉,且第一次啟動,或者裝置可能會在停止後重新開機以進行資源重新平衡。

有時候,PnP 管理員會將 IRP_MN_START_DEVICE 傳送至已啟動的裝置,並提供一組與裝置目前所使用的不同資源。 驅動程式會呼叫 IoInvalidateDeviceState 並回應後續IRP_MN_QUERY_PNP_DEVICE_STATE要求並設定 PNP_RESOURCE_REQUIREMENTS_CHANGED 旗標來起始此動作。 例如,匯流排驅動程式可能會使用這項機制,在 PCI 對 PCI 橋接器上開啟新的光圈。

PnP 管理員會在 IRQL PASSIVE_LEVEL在系統執行緒的內容中傳送此 IRP。

輸入參數

parameters.StartDevice.AllocatedResources成員IO_STACK_LOCATION結構指向CM_RESOURCE_LIST描述 PnP 管理員指派給裝置的硬體資源。 此清單包含原始格式的資源。 使用原始資源來程式設計裝置。

Parameters.StartDevice.AllocatedResourcesTranslated 指向 CM_RESOURCE_LIST 描述 PnP 管理員指派給裝置的硬體資源。 此清單包含翻譯格式的資源。 使用翻譯的資源來連接插斷向量、對應 I/O 空間,以及對應記憶體。

輸出參數

I/O 狀態欄塊

驅動程式會將 Irp-IoStatus.Status > 設定為STATUS_SUCCESS或適當的錯誤狀態,例如STATUS_UNSUCCESSFUL或STATUS_INSUFFICIENT_RESOURCES。

如果驅動程式需要一些時間來執行裝置的啟動作業,它可以標示 IRP 暫止並傳回STATUS_PENDING。

作業

必須先由裝置的父匯流排驅動程式處理此 IRP,然後由裝置堆疊中的每個較高驅動程式處理。

為了回應此 IRP,驅動程式會第一次啟動裝置,或重新開機已停止的裝置。 啟動裝置所需的確切作業會因裝置到裝置而有所不同,但可包含裝置上的電源、執行裝置特定的初始化,以及連接中斷。

驅動程式通常會以相同的方式處理此 IRP,無論是第一次啟動裝置或在 IRP_MN_STOP_DEVICE之後重新開機裝置,除非驅動程式需要在停止後於重新開機時還原裝置狀態。

在 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