Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Rozszerzenie !ndiskd.oid wyświetla informacje o żądaniu NDIS OID. Jeśli uruchomisz to rozszerzenie bez parametrów, !ndiskd wyświetli listę wszystkich oczekujących żądań OID we wszystkich miniportach i filtrach. Każdy miniport lub filtr ma co najwyżej jedno oczekujące żądanie identyfikatora OID i dowolną liczbę żądań OID w kolejce.
Należy pamiętać, że filtry zwykle klonować żądania OID i przekazywać klon w dół. Oznacza to, że nawet jeśli protokół wystawia pojedyncze żądanie OID, może istnieć wiele wystąpień sklonowanych żądań: jeden w każdym filtrze, a drugi w miniport. !ndiskd.oid pokaże każdy klon oddzielnie, więc może być widocznych więcej oczekujących identyfikatorów OID niż protokół rzeczywiście wystawiony.
!ndiskd.oid [-handle <x>] [-legacyoid] [-nolimit>] [-miniport <x>]
Parametry
-uchwyt
Obsługa NDIS_OID_REQUEST
-legacyoid
Traktuje jako starsze NDIS_REQUEST zamiast NDIS_OID_REQUEST.
-nolimit
Nie ogranicza liczby wyświetlanych identyfikatorów OID oczekujących.
-miniport
Znajduje oczekujące żądania OID na stosie tego miniportu.
DLL
Ndiskd.dll
Uwagi
!ndiskd.oid pokazuje listę wszystkich oczekujących identyfikatorów OID w systemie naraz, dzięki czemu może być przydatne podczas debugowania zawieszania się systemu lub 0x9F sytuacji sprawdzania błędów (DRIVER_POWER_STATE_FAILURE). Załóżmy na przykład, że analiza fikcyjnej 0x9F sprawdzania usterek wykazała, że system zawieszał się na IRP i czekał na NDIS. W sieci NDIS, irps z systemu operacyjnego są tłumaczone na identyfikatory OID, w tym przejścia zasilania, więc uruchamiając polecenie !ndiskd.oid można zobaczyć, że w tym przykładzie urządzenie w dolnej części stosu mogło być trzymane do OID_PNP_SET_POWER i zawiesił resztę stosu. Sterowniki NDIS nie powinny pend OID przez więcej niż jedną sekundę, więc można następnie zbadać, dlaczego to urządzenie przechowywało identyfikator OID oczekujące zbyt długo, aby spróbować rozwiązać problem.
Przykłady
Aby zobaczyć przykład oczekujących identyfikatorów OIDS w systemie, który działa normalnie, ustaw punkt przerwania w procedurze obsługi żądań OID miniportu (w odpowiadającym miniportu sterowniku miniportu). Najpierw uruchom polecenie !ndiskd.minidriver bez parametrów, aby uzyskać listę sterowników miniportu w systemie. W tym przykładowym danych wyjściowych poszukaj uchwytu dla kdnic minidriver, ffffffdf801418d650..
3: kd> !ndiskd.minidriver
ffffdf8015a98380 - tunnel
ffffdf801418d650 - kdnic
Kliknij uchwyt dla minidrivera, a następnie kliknij link "Handlers" w dolnej części strony szczegółów, aby wyświetlić listę swoich programów obsługi. Alternatywnie możesz wprowadzić polecenie !ndiskd.minidriver -handle -handlers . Po utworzeniu listy programów obsługi minidrivera poszukaj w tym przykładzie uchwytu OidRequestHandler, którego uchwyt to 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
Teraz kliknij link "bp" z prawej strony programu OidRequestHandler lub wprowadź polecenie bp -handle z uchwytem, aby ustawić punkt przerwania na tej procedurze. Następnie wpisz polecenie g , aby umożliwić uruchamianie maszyny docelowej debugera i przejście do ustawionego punktu przerwania.
2: kd> bp fffff80f1fd71c90
2: kd> g
Breakpoint 1 hit
fffff80f`1fd71c90 448b4204 mov r8d,dword ptr [rdx+4]
Po wyzwoleniu punktu przerwania w procedurze obsługi żądań OID minidriver, jak pokazano w poprzednim przykładzie, można uruchomić polecenie !ndiskd.oid, aby wyświetlić listę wszystkich oczekujących identyfikatorów OID w systemie.
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
W tym przykładzie oczekujące dane OID są OID_GEN_STATISTICS. Po zapoznaniu się z wynikami !ndiskd.oid pamiętaj, że filtruje klonowanie żądań OID i przekazywanie ich w stosie, a identyfikatory OID są zwykle przekazywane z filtru do filtru do miniportu. W związku z tym, chociaż może się wydawać, że istnieją trzy oddzielne żądania OID o tej samej nazwie w tym przykładzie, istnieje rzeczywiście jedna operacja logiczna, która została fizycznie rozłożona na 3 identyfikatory OID i na 3 sterowniki.
Zobacz także
Przewodnik projektowania sterowników sieciowych)
Dokumentacja dotycząca sieci systemu Windows Vista i nowszych
Rozszerzenia NDIS (Ndiskd.dll)