Partager via


!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

Débogage de la pile réseau

Extensions NDIS (Ndiskd.dll)

!ndiskd.help

vérification du bogue 0x9F

OID_PNP_SET_POWER

bp, bu, bm (Définir un point d’arrêt)

OID_GEN_STATISTICS

OID NDIS

Interface de requête OID NDIS