Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A extensão !ndiskd.oid exibe informações sobre uma solicitação NDIS OID. Se você executar essa extensão sem parâmetros, !ndiskd exibirá uma lista de todas as solicitações OID pendentes em todas as miniportas e filtros. Cada miniporta ou filtro tem no máximo uma solicitação OID pendente e qualquer número de solicitações OID enfileiradas.
Observe que os filtros normalmente clonam solicitações OID e passam o clone para baixo. Isso significa que, mesmo que um protocolo emita uma única solicitação OID, pode haver várias instâncias de solicitações clonadas: uma em cada filtro e outra na miniporta. !ndiskd.oid mostrará cada clone separadamente, então você pode ver mais OIDs pendentes do que o protocolo realmente emitiu.
!ndiskd.oid [-handle <x>] [-legacyoid] [-nolimit>] [-miniport <x>]
Parâmetros
-pega
Alça de um NDIS_OID_REQUEST
-legacióide
Trata como um legado NDIS_REQUEST em vez de um NDIS_OID_REQUEST.
-nolimit
Não limita o número de OIDs pendentes que são exibidos.
-miniporto
Localiza solicitações OID pendentes na pilha desta miniporta.
DLL
Ndiskd.dll
Observações
!ndiskd.oid mostra uma lista de todos os OIDs pendentes no sistema de cada vez, por isso pode ser útil na depuração de travamentos do sistema ou 0x9F situações de verificação de bugs (DRIVER_POWER_STATE_FAILURE). Por exemplo, suponha que a análise de uma verificação de bug de 0x9F fictícia revelou que o sistema estava pendurado em um IRP e estava esperando por NDIS. No NDIS, os IRPs do sistema operacional são traduzidos em OIDs, incluindo transições de energia, portanto, executando !ndiskd.oid você pode ver que, neste exemplo, um dispositivo na parte inferior da pilha pode estar agarrado a uma OID_PNP_SET_POWER e pendurado o resto da pilha. Os drivers NDIS não devem gastar um OID por mais de um segundo, então você pode investigar por que esse dispositivo manteve o OID pendente por muito tempo para tentar resolver o problema.
Examples
Para ver um exemplo de OIDS pendentes em um sistema que está sendo executado normalmente, defina um ponto de interrupção na rotina do manipulador de solicitações OID de uma miniporta (no driver de miniporta correspondente da miniporta). Primeiro, execute o comando !ndiskd.minidriver sem parâmetros para obter uma lista de drivers de miniporta no sistema. Neste exemplo de saída, procure o identificador para o minidriver kdnic, ffffdf801418d650..
3: kd> !ndiskd.minidriver
ffffdf8015a98380 - tunnel
ffffdf801418d650 - kdnic
Clique na alça do minidriver e, em seguida, clique no link "Manipuladores" na parte inferior da página de detalhes para ver a lista de seus manipuladores. Como alternativa, você pode inserir o comando !ndiskd.minidriver -handle -handlers . Depois de ter a lista dos manipuladores do minidriver, procure o OidRequestHandler, cujo identificador é fffff80f1fd71c90 neste exemplo.
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
Agora, clique no link "bp" à direita do OidRequestHandler ou digite o comando bp -handle com seu identificador para definir um ponto de interrupção nessa rotina. Em seguida, digite o comando g para permitir que sua máquina de destino de depuração seja executada e atinja o ponto de interrupção que você acabou de definir.
2: kd> bp fffff80f1fd71c90
2: kd> g
Breakpoint 1 hit
fffff80f`1fd71c90 448b4204 mov r8d,dword ptr [rdx+4]
Depois de acionar o ponto de interrupção na rotina do manipulador de solicitações OID de um minidriver, como mostrado pelo exemplo anterior, você pode executar o comando !ndiskd.oid para ver uma lista de todos os OIDs pendentes no 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
Neste exemplo, o OID pendente é OID_GEN_STATISTICS. Quando você olhar para os resultados de !ndiskd.oid, lembre-se de que os filtros clonam solicitações OID e as passam pela pilha, e os OIDs normalmente são passados de filtro para filtro para miniporta. Portanto, embora possa parecer que há três solicitações OID separadas com o mesmo nome neste exemplo, na verdade há uma operação lógica ocorrendo que foi fisicamente espalhada em 3 OIDs e em 3 drivers.
Consulte também
Guia de Design de Driver de Rede)
Referência de rede do Windows Vista e posterior