Udostępnij przez


!ndiskd.oid

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

Debugowanie stosu sieciowego

Rozszerzenia NDIS (Ndiskd.dll)

!ndiskd.help

sprawdzanie błędów 0x9F

OID_PNP_SET_POWER

bp, bu, bm (Ustaw punkt przerwania)

OID_GEN_STATISTICS

Identyfikatory OID NDIS

Interfejs żądania NDIS OID