Freigeben über


!ndiskd.oid

Die !ndiskd.oid-Erweiterung zeigt Informationen zu einer NDIS-OID-Anforderung an. Wenn Sie diese Erweiterung ohne Parameter ausführen, zeigt !ndiskd eine Liste aller ausstehenden OID-Anforderungen für alle Miniports und Filter an. Jeder Miniport oder Filter hat höchstens eine ausstehende OID-Anforderung und eine beliebige Anzahl von OID-Anforderungen in die Warteschlange.

Beachten Sie, dass Filter in der Regel OID-Anforderungen klonen und den Klonen nach unten übergeben. Dies bedeutet, dass selbst wenn ein Protokoll eine einzelne OID-Anforderung ausgibt, kann es mehrere Instanzen von geklonten Anforderungen geben: eine in jedem Filter und eine andere im Miniport. !ndiskd.oid zeigt jeden Klon separat an, sodass möglicherweise mehr ausstehende OIDs angezeigt werden, als das Protokoll tatsächlich ausgestellt wurde.

!ndiskd.oid [-handle <x>] [-legacyoid] [-nolimit>] [-miniport <x>] 

Die Parameter

-Griff
Handle eines NDIS_OID_REQUEST

-legacyoid
Behandelt als ältere NDIS_REQUEST anstelle eines NDIS_OID_REQUEST.

-nolimit
Beschränkt nicht die Anzahl der ausstehenden OIDs, die angezeigt werden.

-miniport
Sucht ausstehende OID-Anforderungen im Stapel dieses Miniports.

DLL

Ndiskd.dll

Bemerkungen

!ndiskd.oid zeigt Ihnen eine Liste aller ausstehenden OIDs auf dem System gleichzeitig an, sodass es hilfreich sein kann, systemhänger zu debuggen oder 0x9F Fehlerüberprüfungssituationen (DRIVER_POWER_STATE_FAILURE). Angenommen, die Analyse einer fiktiven 0x9F Fehlerüberprüfung ergab, dass das System auf einem IRP aufhängt und auf NDIS wartete. In NDIS werden IRPs aus dem Betriebssystem in OIDs übersetzt, einschließlich Stromübergängen, sodass sie durch Ausführen von !ndiskd.oid sehen könnten, dass in diesem Beispiel ein Gerät am unteren Rand des Stapels an einem OID_PNP_SET_POWER festhält und den Rest des Stapels anhängte. NDIS-Treiber sollten kein OID für mehr als eine Sekunde pendieren, sodass Sie dann untersuchen können, warum das Gerät das OID für zu lange aussteht, um das Problem zu lösen.

Examples

Um ein Beispiel für ausstehende OIDS auf einem System anzuzeigen, das normal ausgeführt wird, legen Sie einen Haltepunkt in der OID-Anforderungshandlerroutine eines Miniports fest (im entsprechenden Miniport-Treiber). Führen Sie zuerst den Befehl "!ndiskd.minidriver " ohne Parameter aus, um eine Liste der Miniporttreiber auf dem System abzurufen. Suchen Sie in diesem Beispiel nach dem Handle für den kdnic minidriver, ffffdf801418d650..

3: kd> !ndiskd.minidriver
    ffffdf8015a98380 - tunnel
    ffffdf801418d650 - kdnic

Klicken Sie auf den Handle für den Minidriver, und klicken Sie dann unten auf der Detailseite auf den Link "Handler", um die Liste der Handler anzuzeigen. Alternativ können Sie den Befehl "!ndiskd.minidriver" -handle -handlers eingeben. Nachdem Sie über die Liste der Minidriver-Handler verfügen, suchen Sie in diesem Beispiel nach dem OidRequestHandler, dessen Handle fffffff80f1fd71c90 ist.

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

Klicken Sie nun entweder rechts neben dem OidRequestHandler auf den Link "bp", oder geben Sie den Befehl "bp-handle " mit seinem Handle ein, um einen Haltepunkt für diese Routine festzulegen. Geben Sie als Nächstes den Befehl "g " ein, damit der Debugee-Zielcomputer ausgeführt werden kann, und drücken Sie den soeben festgelegten Haltepunkt.

2: kd> bp fffff80f1fd71c90
2: kd> g
Breakpoint 1 hit
fffff80f`1fd71c90 448b4204        mov     r8d,dword ptr [rdx+4]

Nachdem Sie den Haltepunkt in der OID-Anforderungshandlerroutine eines Minidrivers ausgelöst haben, wie im vorherigen Beispiel gezeigt, können Sie den Befehl "!ndiskd.oid" ausführen, um eine Liste aller ausstehenden OIDs im System anzuzeigen.

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

In diesem Beispiel ist das ausstehende OID OID_GEN_STATISTICS. Wenn Sie sich die Ergebnisse von !ndiskd.oid ansehen, erinnern Sie sich daran, dass Filter OID-Anforderungen klonen und sie an den Stapel übergeben, und OIDs werden in der Regel vom Filter in den Miniport übergeben. Daher kann es so aussehen, als ob es drei separate OID-Anforderungen mit demselben Namen in diesem Beispiel gibt, es gibt tatsächlich einen logischen Vorgang, der physisch über 3 OIDs und auf 3 Treiber verteilt wurde.

Siehe auch

Entwurfshandbuch für Netzwerktreiber)

Referenz zu Windows Vista und höherer Netzwerk

Debuggen des Netzwerkstapels

NDIS-Erweiterungen (Ndiskd.dll)

!ndiskd.help

0x9F Fehlerüberprüfung

OID_PNP_SET_POWER

bp, bu, bm (Haltepunkt festlegen)

OID_GEN_STATISTICS

NDIS-OIDs

NDIS OID-Anforderungsschnittstelle