!ndiskd.oid

La extensión !ndiskd.oid muestra información sobre una solicitud OID NDIS. Si ejecuta esta extensión sin parámetros, !ndiskd mostrará una lista de todas las solicitudes OID pendientes en todos los minipuertos y filtros. Cada minipuerto o filtro tiene como máximo una solicitud OID pendiente y cualquier número de solicitudes OID en cola.

Tenga en cuenta que los filtros suelen clonar solicitudes de OID y pasar el clon hacia abajo. Esto significa que incluso si un protocolo emite una sola solicitud OID, puede haber varias instancias de solicitudes clonadas: una en cada filtro y otra en el minipuerto. !ndiskd.oid mostrará cada clon por separado, por lo que es posible que vea más OID pendientes de los que el protocolo ha emitido realmente.

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

Parámetros

-handle
Identificador de un NDIS_OID_REQUEST

-legacyoid
Trata como un NDIS_REQUEST heredado en lugar de un NDIS_OID_REQUEST.

-nolimit
No limita el número de OID pendientes que se muestran.

-miniport
Busca solicitudes de OID pendientes en la pila de este minipuerto.

Archivo DLL

Ndiskd.dll

Comentarios

!ndiskd.oid muestra una lista de todos los OID pendientes en el sistema a la vez, por lo que puede resultar útil para depurar si el sistema se bloquea o situaciones de comprobación de errores 0x9F (DRIVER_POWER_STATE_FAILURE). Por ejemplo, supongamos que el análisis de una comprobación de errores ficticia 0x9F reveló que el sistema estaba bloqueado en un IRP y estaba esperando NDIS. En NDIS, los IRP del sistema operativo se traducen en OID, incluidas las transiciones de energía, por lo que mediante la ejecución de !ndiskd.oid podría ver que, en este ejemplo, un dispositivo en la parte inferior de la pila podría haberse unido a un OID_PNP_SET_POWER y bloquear el resto de la pila. Los controladores NDIS no deben dejar pendiente un OID durante más de un segundo, por lo que podría investigar por qué ese dispositivo mantuvo el OID pendiente durante demasiado tiempo para intentar resolver el problema.

Ejemplos

Para ver un ejemplo de OIDS pendiente en un sistema que se ejecuta normalmente, establezca un punto de interrupción en la rutina del controlador de solicitudes OID de un minipuerto (en el controlador de minipuerto correspondiente). En primer lugar, ejecute el comando !ndiskd.minidriver sin parámetros para obtener una lista de controladores de minipuerto en el sistema. En esta salida de ejemplo, busque el identificador del minicontrolador kdnic, ffffdf801418d650.

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

Haga clic en el identificador del minicontrolador y, a continuación, haga clic en el vínculo "Controladores" en la parte inferior de la página de detalles para ver la lista de controladores. También puede escribir el comando !ndiskd.minidriver -handle -handlers. Una vez que tenga la lista de controladores del minicontrolador, busque OidRequestHandler, cuyo identificador es fffff80f1fd71c90 en este ejemplo.

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

Ahora haga clic en el vínculo "bp" situado a la derecha de OidRequestHandler o introduzca el comando bp -handle con su identificador para establecer un punto de interrupción en esa rutina. A continuación, escriba el comando g para permitir que la máquina de destino de depuración se ejecute y alcance el punto de interrupción que acaba de establecer.

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

Una vez que haya desencadenado el punto de interrupción en la rutina del controlador de solicitudes OID de un minicontrolador, tal como se muestra en el ejemplo anterior, puede ejecutar el comando !ndiskd.oid para ver una lista de todos los OID pendientes en el 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

En este ejemplo, el OID pendiente es OID_GEN_STATISTICS. Al examinar los resultados de !ndiskd.oid, recuerde que filtra las solicitudes de OID clonadas y las pasa por la pila y los OID normalmente se pasan de filtro a minipuerto. Por lo tanto, aunque pueda parecer que hay tres solicitudes de OID independientes con el mismo nombre en este ejemplo, en realidad hay una operación lógica que se lleva a cabo que se ha distribuido físicamente entre 3 OID y en 3 controladores.

Consulte también

Guía de diseño de controladores de red

Referencia de redes de Windows Vista y versiones posteriores

Depuración de la pila de red

Extensiones NDIS (Ndiskd.dll)

!ndiskd.help

comprobación de errores de 0x9F

OID_PNP_SET_POWER

bp, bu, bm (Establecer punto de interrupción)

OID_GEN_STATISTICS

NDIS OIDs

Interfaz de solicitud OID de NDIS