!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
-asa
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
comprobación de errores de 0x9F