!ndiskd.oid
L’extension !ndiskd.oid affiche des informations sur une requête NDIS OID. Si vous exécutez cette extension sans paramètres, !ndiskd affiche la liste de toutes les requêtes OID en attente sur tous les miniports et filtres. Chaque miniport ou filtre comporte au maximum une requête OID en attente et n’importe quel nombre de requêtes OID mises en file d’attente.
Notez que les filtres clonent généralement les requêtes OID et transmettent le clone. Cela signifie que même si un protocole émet une requête OID unique, il peut y avoir plusieurs instances de requêtes clonées : une dans chaque filtre et une autre dans le miniport. !ndiskd.oid affiche chaque clone séparément. Vous pouvez donc voir plus d’OID en attente que le protocole a réellement émis.
!ndiskd.oid [-handle <x>] [-legacyoid] [-nolimit>] [-miniport <x>]
Paramètres
-manche
Handle d’un NDIS_OID_REQUEST
-legacyoid
Traite comme une NDIS_REQUEST héritée au lieu d’une NDIS_OID_REQUEST.
-nolimit
Ne limite pas le nombre d’OID en attente qui sont affichés.
-miniport
Recherche les requêtes OID en attente sur la pile de ce miniport.
DLL
Ndiskd.dll
Notes
!ndiskd.oid affiche une liste de tous les OID en attente sur le système à la fois. Il peut donc être utile en cas de plantage du système de débogage ou de vérification du bogue 0x9F (DRIVER_POWER_STATE_FAILURE). Par exemple, supposons que l’analyse d’un bogue fictif 0x9F a révélé que le système était suspendu sur un IRP et en attente de NDIS. Dans NDIS, les IRP provenant du système d’exploitation sont traduites en OID, y compris les transitions d’alimentation. Par conséquent, en exécutant !ndiskd.oid, vous pouvez voir que, dans cet exemple, un appareil au bas de la pile a peut-être été accroché à un OID_PNP_SET_POWER et mis en suspens le reste de la pile. Les pilotes NDIS ne doivent pas mettre en attente un OID pendant plus d’une seconde. Vous pouvez donc rechercher pourquoi cet appareil a conservé l’OID en attente pendant trop longtemps pour essayer de résoudre le problème.
Exemples
Pour voir un exemple d’OIDS en attente sur un système qui s’exécute normalement, définissez un point d’arrêt sur la routine de gestionnaire de requêtes OID d'un miniport (dans le pilote correspondant du miniport). Tout d’abord, exécutez la commande !ndiskd.minidriver sans paramètres pour afficher la liste de tous les pilotes de miniport sur le système. Dans cet exemple de sortie, localisez le handle du minipilote kdnic, ffffdf801418d650.
3: kd> !ndiskd.minidriver
ffffdf8015a98380 - tunnel
ffffdf801418d650 - kdnic
Cliquez sur le handle du minipilote, puis cliquez sur le lien « Gestionnaires » en bas de sa page de détails pour afficher la liste de ses gestionnaires. Vous pouvez également entrer la commande !ndiskd.minidriver -handle -handlers. Une fois que vous avez la liste des gestionnaires du minipilote, localisez le gestionnaire OidRequestHandler, dont le handle est fffff80f1fd71c90 dans cet exemple.
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
Cliquez maintenant sur le lien « bp » à droite de OidRequestHandler ou entrez la commande bp-handle avec son handle pour définir un point d’arrêt sur cette routine. Ensuite, tapez la commande g pour autoriser l’exécution de votre machine cible de débogage et atteindre le point d’arrêt que vous venez de définir.
2: kd> bp fffff80f1fd71c90
2: kd> g
Breakpoint 1 hit
fffff80f`1fd71c90 448b4204 mov r8d,dword ptr [rdx+4]
Une fois que vous avez déclenché le point d’arrêt sur la routine de gestionnaire de requêtes OID d’un minipilote, comme indiqué dans l’exemple précédent, vous pouvez exécuter la commande !ndiskd.oid pour afficher la liste de tous les OID en attente sur le système.
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
Dans cet exemple, l’OID en attente est OID_GEN_STATISTICS. Lorsque vous examinez les résultats de !ndiskd.oid, rappelez-vous que les filtres clonent les requêtes OID et les transmettent à la pile, et que les OID sont généralement transmis de filtre à filtre puis au miniport. Par conséquent, bien qu’il semble qu’il existe trois requêtes OID distinctes portant le même nom dans cet exemple, il existe en fait une opération logique qui a été physiquement répartie sur 3 OID et sur 3 pilotes.
Voir aussi
Guide de conception des pilotes réseau
Documentation de référence sur la mise en réseau de Windows Vista et versions ultérieures