Condividi tramite


!ndiskd.oid

L'estensione !ndiskd.oid visualizza informazioni su una richiesta NDIS OID. Se si esegue questa estensione senza parametri, !ndiskd visualizzerà un elenco di tutte le richieste OID in sospeso in tutti i miniport e i filtri. Ogni miniport o filtro ha al massimo una richiesta OID in sospeso e un numero qualsiasi di richieste OID in coda.

Si noti che i filtri in genere clonano le richieste OID e passano il clone verso il basso. Ciò significa che, anche se un protocollo emette una singola richiesta OID, potrebbero esserci più istanze di richieste clonate: una in ogni filtro e un'altra nel miniport. !ndiskd.oid mostrerà ogni clone separatamente, quindi è possibile che vengano visualizzati più IDE in sospeso rispetto al protocollo effettivamente emesso.

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

Parametri

-maneggiare
Handle di un NDIS_OID_REQUEST

-legacyoid
Considera un NDIS_REQUEST legacy anziché un NDIS_OID_REQUEST.

-nolimit
Non limita il numero di URI in sospeso visualizzati.

-miniport
Trova le richieste OID in sospeso nello stack del miniport.

DLL

Ndiskd.dll

Osservazioni:

!ndiskd.oid mostra un elenco di tutti gli IDE in sospeso nel sistema alla volta, quindi può essere utile nel eseguire il debug dei blocchi del sistema o 0x9F situazioni di controllo dei bug (DRIVER_POWER_STATE_FAILURE). Si supponga, ad esempio, di analizzare un controllo di bug fittizio 0x9F ha rivelato che il sistema è stato bloccato su un IRP ed era in attesa di NDIS. In NDIS i runtime di integrazione del sistema operativo vengono convertiti in OID, incluse le transizioni di alimentazione, quindi eseguendo !ndiskd.oid si potrebbe notare che, in questo esempio, un dispositivo nella parte inferiore dello stack potrebbe essere stato collegato a un OID_PNP_SET_POWER e bloccato il resto dello stack. I driver NDIS non devono eseguire la penna di un OID per più di un secondo, quindi è possibile indagare sul motivo per cui il dispositivo ha mantenuto l'OID in sospeso per troppo tempo per tentare di risolvere il problema.

Esempi

Per visualizzare un esempio di OIDS in sospeso in un sistema in esecuzione normalmente, impostare un punto di interruzione sulla routine del gestore di richieste OID di un miniport (nel driver miniport corrispondente). Eseguire prima di tutto il comando !ndiskd.minidriver senza parametri per ottenere un elenco di driver miniport nel sistema. In questo output di esempio cercare l'handle per il minidriver kdnic, ffffdf801418d650..

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

Fare clic sull'handle per il minidriver, quindi fare clic sul collegamento "Gestori" nella parte inferiore della pagina dei dettagli per visualizzare l'elenco dei gestori. In alternativa, è possibile immettere il comando !ndiskd.minidriver -handle -handle. Dopo aver ottenuto l'elenco dei gestori del minidriver, cercare OidRequestHandler, il cui handle è fffff80f1fd71c90 in questo esempio.

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

A questo punto fare clic sul collegamento "bp" a destra di OidRequestHandler oppure immettere il comando bp -handle con il relativo handle per impostare un punto di interruzione su tale routine. Digitare quindi il comando g per consentire l'esecuzione del computer di destinazione di debug e raggiungere il punto di interruzione appena impostato.

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

Dopo aver attivato il punto di interruzione nella routine del gestore di richieste OID di un minidriver, come illustrato nell'esempio precedente, è possibile eseguire il comando !ndiskd.oid per visualizzare un elenco di tutti gli IDE in sospeso nel sistema.

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 questo esempio l'OID in sospeso è OID_GEN_STATISTICS. Quando si esaminano i risultati di !ndiskd.oid, ricordare che filtra le richieste OID clone e le passano allo stack e gli IDE vengono in genere passati dal filtro al miniport. Pertanto, anche se potrebbe sembrare che ci siano tre richieste OID separate con lo stesso nome in questo esempio, in realtà è in corso un'operazione logica che è stata distribuita fisicamente tra 3 OID e su 3 driver.

Vedi anche

Guida alla progettazione dei driver di rete

Informazioni di riferimento sulla rete di Windows Vista e versioni successive

Debug dello stack di rete

Estensioni NDIS (Ndiskd.dll)

!ndiskd.help

0x9F controllo dei bug

OID_PNP_SET_POWER

bp, bu, bm (Imposta punto di interruzione)

OID_GEN_STATISTICS

NDIS OID

Interfaccia della richiesta OID NDIS