IRP_MN_QUERY_CAPABILITIES
PnP 管理員會傳送此 IRP 來取得裝置的功能,例如裝置是否可以鎖定或退出。
如果函式和篩選驅動程式改變總線驅動程式所支援的功能,則函式和篩選驅動程式可以處理此要求。 總線驅動程式必須處理其子裝置的這項要求。
值
0x09
主要程序代碼
傳送時
PnP 管理員會在列舉裝置之後立即將此 IRP 傳送給裝置的總線驅動程式。 在裝置的所有驅動程式都已啟動裝置之後,PnP 管理員會再次傳送此 IRP。 驅動程式可以傳送此 IRP 來取得裝置的功能。
PnP 管理員和驅動程式會在任意線程內容中,在 IRQL PASSIVE_LEVEL傳送此 IRP。
輸入參數
IO_STACK_LOCATION 結構的Parameters.DeviceCapabilities.Capabilities成員指向包含裝置功能相關信息的DEVICE_CAPABILITIES結構。
輸出參數
Parameters.DeviceCapabilities.Capabilities 指向 DEVICE_CAPABILITIES 結構,反映處理 IRP 的驅動程式所做的任何修改。
I/O 狀態區塊
驅動程式會將 Irp-IoStatus.Status> 設定為STATUS_SUCCESS或適當的錯誤狀態,例如STATUS_UNSUCCESSFUL。
如果函式或篩選驅動程式未處理此 IRP,它會呼叫 IoSkipCurrentIrpStackLocation ,並將 IRP 向下傳遞至下一個驅動程式。 這類驅動程式不得修改 Irp-IoStatus.Status>,且不能完成 IRP。
總線驅動程式會設定 Irp-IoStatus.Status> 並完成 IRP。
作業
列舉裝置時,但在為裝置載入函式和篩選驅動程式之前,PnP 管理員會將IRP_MN_QUERY_CAPABILITIES要求傳送給裝置的父總線驅動程式。 總線驅動程式必須在 DEVICE_CAPABILITIES 結構中設定任何相關值,並將其傳回給 PnP 管理員。
建置裝置堆疊並啟動驅動程序之後,PnP 管理員會將此 IRP 再次傳送給裝置堆疊頂端的驅動程式,然後由堆疊中的每個較低驅動程式處理。 函式和篩選驅動程式可以設定 IoCompletion 例程,並在備份裝置堆疊時處理此 IRP。
驅動程式應先新增功能,再將 IRP 傳遞至下一個較低的驅動程式。
驅動程式應該在 IRP 完成所有較低驅動程式之後移除功能。 驅動程式通常不會移除其他驅動程式所設定的功能,但如果它具有特定組態中裝置功能的特殊資訊,它可能會這麼做。 如需延遲 IRP 處理的相關信息,請參閱 隨插即用,直到較低的驅動程式完成為止。
列舉裝置並載入其驅動程序之後,其功能不應該變更。 如果移除並重新列舉裝置,裝置的功能可能會變更。
處理 IRP_MN_QUERY_CAPABILITIES IRP 時,裝置電源原則管理員的驅動程式應該在 IRP 備份裝置堆疊的路上設定 IoCompletion 例程,並複製裝置電源功能,例如 S-to-D 電源狀態對應。 為了判斷子裝置的電源功能,父總線驅動程式會建立另一個查詢功能 IRP,並將 IRP 傳送至其父驅動程式。 如需詳細資訊,請參閱 報告裝置電源功能 。
如果驅動程式處理此 IRP,它應該檢查DEVICE_CAPABILITIES版本值。 如果該值不是驅動程式支援的版本,驅動程式應該會失敗 IRP。 如果支援版本,驅動程式應該檢查 [ 大小] 欄位。 驅動程式應該只設定其接收做為輸入之功能結構界限內的欄位。
處理此 IRP 的驅動程式可以設定一些 DEVICE_CAPABILITIES 欄位,但不得設定 [大小 ] 和 [版本] 字段。 這些欄位只會由傳送 IRP 的元件設定。
如需處理 隨插即用 次要 IRP 的一般規則,請參閱 隨插即用。
傳送此 IRP
當總線驅動程序處理 其中一個子裝置的IRP_MN_QUERY_CAPABILITIES 要求時,總線驅動程式會將此 IRP 傳送至父裝置堆疊。 此外,驅動程式可能會傳送此 IRP 來取得其中一個裝置的裝置功能。 堆疊中的單一驅動程式只有裝置功能資訊的一部分;將 IRP 傳送至裝置堆疊可讓它收集完整圖片,包括任何篩選驅動程式的修改等等。
如需傳送 IRP 的相關信息,請參閱 處理 IRP 。 下列步驟特別適用於此 IRP:
從分頁集區配置DEVICE_CAPABILITIES結構,並藉由呼叫 RtlZeroMemory 將其初始化為零。 將 Size 初始化為 sizeof(DEVICE_CAPABILITIES)、版本為 1,並將 Address 和 UINumber 初始化為 -1。
設定 IRP 下一個 I/O 堆棧位置中的值:將 MajorFunction 設定為 IRP_MJ_PNP、將 MinorFunction 設定為 IRP_MN_QUERY_CAPABILITIES,並將 Parameters.DeviceCapabilities 設定為配置之DEVICE_CAPABILITIES結構的指標。
將 IoStatus.Status 初始化為 STATUS_NOT_SUPPORTED。
不再需要 IRP 和 DEVICE_CAPABILITIES 結構時解除分配。
需求
頁首 |
Wdm.h (包括 Wdm.h、Ntddk.h 或 Ntifs.h) |