!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 個驅動程式上。

另請參閱

網路驅動程序設計指南

Windows Vista 和更新版本的網路參考

偵錯網路堆疊

NDIS 延伸模組 (Ndiskd.dll)

!ndiskd.help

0x9F錯誤檢查

OID_PNP_SET_POWER

bp, bu, bm (設定斷點)

OID_GEN_STATISTICS

NDIS OIDs

NDIS OID 要求介面