!ndiskd.oid
!ndiskd.oid 延伸模組會顯示 NDIS OID 要求的相關信息。 如果您執行此延伸模組時沒有參數,!ndiskd 將會在所有迷你埠和篩選上顯示所有暫止 OID 要求的清單。 每個迷你埠或篩選最多都有一個擱置的 OID 要求和任意數目的佇列 OID 要求。
請注意,篩選通常會複製 OID 要求,並傳遞複製。 這表示,即使通訊協定發出單一 OID 要求,可能有多個複製要求實例:每個篩選中的一個,另一個在迷你埠中。 !ndiskd.oid 會個別顯示每個複製品,因此您可能會看到比實際發行的通訊協定更多的擱置 OID。
!ndiskd.oid [-handle <x>] [-legacyoid] [-nolimit>] [-miniport <x>]
參數
-處理
NDIS_OID_REQUEST的句柄
-legacyoid
將 視為舊版NDIS_REQUEST,而不是NDIS_OID_REQUEST。
-nolimit
不會限制顯示的暫止 OID 數目。
-miniport
在此迷你埠的堆疊上尋找擱置的 OID 要求。
DLL
Ndiskd.dll
備註
!ndiskd.oid 一次會顯示系統上所有擱置的 OID 清單,因此在偵錯系統停止回應或 0x9F錯誤檢查 情況(DRIVER_POWER_STATE_FAILURE)方面很有説明。 例如,假設分析虛構0x9F錯誤檢查顯示系統已掛在 IRP 上,並正在等候 NDIS。 在 NDIS 中,OS 的 IRP 會轉譯成 OID,包括電源轉換,因此執行 !ndiskd.oid ,您可以看到,在此範例中,堆棧底部的裝置可能一直緊緊抓住 OID_PNP_SET_POWER 並掛斷堆疊的其餘部分。 NDIS 驅動程式不應將 OID 畫上一秒以上,因此您可以接著調查該裝置為何讓 OID 擱置太久,無法嘗試解決問題。
範例
若要查看正常執行的系統上暫止 OIDS 的範例,請在迷你埠的 OID 要求處理程式例程上設定斷點(在迷你埠的對應迷你埠驅動程式中)。 首先,執行 沒有參數的 !ndiskd.minidriver 命令,以取得系統上的迷你埠驅動程序清單。 在此範例輸出中,尋找 kdnic minidriver、ffffdf801418d650.的句柄。
3: kd> !ndiskd.minidriver
ffffdf8015a98380 - tunnel
ffffdf801418d650 - kdnic
按兩下迷你驅動程式的句柄,然後按下其詳細資料頁面底部的 [處理程式] 連結,以查看其處理程式清單。 您也可以輸入 !ndiskd.minidriver -handle -handlers 命令。 一旦您有 minidriver 處理程式的清單,請在此範例中尋找 OidRequestHandler,其句柄為 fffff80f1fd71c90。
2: kd> !ndiskd.minidriver ffffdf801418d650 -handlers
HANDLERS
NDIS Handler Function pointer Symbol (if available)
InitializeHandlerEx fffff80f1fd78230 bp
SetOptionsHandler fffff80f1fd72800 bp
HaltHandlerEx fffff80f1fd78040 bp
ShutdownHandlerEx fffff80f1fd722c0 bp
CheckForHangHandlerEx fffff80f1fd72810 bp
ResetHandlerEx fffff80f1fd72f70 bp
PauseHandler fffff80f1fd78000 bp
RestartHandler fffff80f1fd78940 bp
OidRequestHandler fffff80f1fd71c90 bp
CancelOidRequestHandler fffff80f1fd722c0 bp
DirectOidRequestHandler [None]
CancelDirectOidRequestHandler [None]
DevicePnPEventNotifyHandler fffff80f1fd789a0 bp
SendNetBufferListsHandler fffff80f1fd71870 bp
ReturnNetBufferListsHandler fffff80f1fd71b50 bp
CancelSendHandler fffff80f1fd722c0 bp
現在,按下 OidRequestHandler 右邊的 「bp」 連結,或使用其句柄輸入 bp -handle 命令,以在該例程上設定斷點。 接下來,輸入 g 命令,以允許偵錯者目標電腦執行並叫用您剛才設定的斷點。
2: kd> bp fffff80f1fd71c90
2: kd> g
Breakpoint 1 hit
fffff80f`1fd71c90 448b4204 mov r8d,dword ptr [rdx+4]
一旦您在 minidriver 的 OID 要求處理程式例程上觸發斷點,如上一個範例所示,您可以執行 !ndiskd.oid 命令,以查看系統上所有暫止 OID 的清單。
1: kd> !ndiskd.oid
ALL PENDING OIDs
NetAdapter ffffdf80140c71a0 - Microsoft Kernel Debug Network Adapter
Current OID OID_GEN_STATISTICS
Filter ffffdf8014950c70 - Microsoft Kernel Debug Network Adapter-WFP Native MAC Layer LightWeight Filter-0000
Current OID OID_GEN_STATISTICS
Filter ffffdf801494dc70 - Microsoft Kernel Debug Network Adapter-QoS Packet Scheduler-0000
Current OID OID_GEN_STATISTICS
在此範例中,OID 擱置OID_GEN_STATISTICS。 當您查看 !ndiskd.oid 的結果時,請記得篩選複製 OID 要求並將其傳遞至堆棧,而 OID 通常會從篩選傳遞至篩選到迷你埠。 因此,雖然此範例中可能有三個不同的 OID 要求具有相同名稱,但實際上有一個邏輯作業會實際分散到 3 個 OID 和 3 個驅動程式上。