Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
NDIS-Erweiterungen (Ndiskd.dll)