!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