!ndiskd.oid
Расширение !ndiskd.oid отображает сведения о запросе NDIS OID. Если вы запускаете это расширение без параметров, !ndiskd отобразит список всех ожидающих запросов OID на всех минипортах и фильтрах. Каждый минипорт или фильтр имеет по крайней мере один ожидающий запрос OID и любое количество очередных запросов OID.
Обратите внимание, что фильтры обычно клонировать запросы OID и передают клонирование вниз. Это означает, что даже если протокол выдает один запрос OID, может быть несколько экземпляров клонированных запросов: по одному в каждом фильтре и другом в мини-порте. !ndiskd.oid будет отображать каждый клон отдельно, поэтому вы можете увидеть больше ожидающих OID, чем протокол фактически выдан.
!ndiskd.oid [-handle <x>] [-legacyoid] [-nolimit>] [-miniport <x>]
Параметры
-ручка
Дескриптор NDIS_OID_REQUEST
-legacyoid
Рассматривается как устаревшая NDIS_REQUEST вместо NDIS_OID_REQUEST.
-nolimit
Не ограничивает количество отображаемых OID.
-miniport
Находит ожидающие запросы OID в стеке мини-порта.
DLL-библиотеки
Ndiskd.dll
Замечания
!ndiskd.oid показывает список всех ожидающих OID в системе за раз, поэтому это может быть полезно в отладке системы зависания или 0x9F ситуаций проверки ошибок (DRIVER_POWER_STATE_FAILURE). Например, предположим, что анализ вымышленного 0x9F проверки ошибок показал, что система была висела на IRP и ждала NDIS. В NDIS irPs из ОС преобразуются в OID, включая переходы питания, поэтому, выполнив !ndiskd.oid , можно увидеть, что в этом примере устройство в нижней части стека, возможно, цепляется к OID_PNP_SET_POWER и зависает остальную часть стека. Драйверы NDIS не должны перо OID в течение более одной секунды, поэтому вы могли бы изучить, почему это устройство держало OID в ожидании слишком долго, чтобы попытаться решить проблему.
Примеры
Чтобы просмотреть пример ожидающих OIDS в системе, работающей обычно, задайте точку останова для подпрограммы обработчика запросов OID мини-порта (в соответствующем драйвере минипорта). Сначала выполните команду !ndiskd.minidriver без параметров, чтобы получить список драйверов минипорта в системе. В этом примере выходных данных найдите дескриптор kdnic minidriver, ffffdf801418d650..
3: kd> !ndiskd.minidriver
ffffdf8015a98380 - tunnel
ffffdf801418d650 - kdnic
Щелкните дескриптор мини-driver, а затем щелкните ссылку "Обработчики" в нижней части страницы сведений, чтобы просмотреть список обработчиков. Можно также ввести команду !ndiskd.minidriver -handle -handlers . После получения списка обработчиков мини-driver найдите обработчик OidRequestHandler, дескриптор которого fffff80f1fd71c90 в этом примере.
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
Теперь щелкните ссылку "bp" справа от OidRequestHandler или введите команду bp -handle с его дескриптором , чтобы задать точку останова для этой подпрограммы. Затем введите команду g , чтобы разрешить целевому компьютеру отладки запускаться и нажимать точку останова, которой вы только что задали.
2: kd> bp fffff80f1fd71c90
2: kd> g
Breakpoint 1 hit
fffff80f`1fd71c90 448b4204 mov r8d,dword ptr [rdx+4]
После активации точки останова в подпрограмме обработчика запросов OID мини-driver, как показано в предыдущем примере, можно запустить команду !ndiskd.oid, чтобы просмотреть список всех ожидающих OID в системе.
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
В этом примере ожидается OID_GEN_STATISTICS OID. При просмотре результатов !ndiskd.oid, помните, что фильтры клонируют запросы OID и передают их по стеку, а OID обычно передаются из фильтра для фильтрации в мини-порт. Таким образом, хотя в этом примере может выглядеть три отдельных запроса OID с одинаковым именем, в этом примере происходит одна логическая операция, которая была физически распределена по 3 OID и на 3 драйверах.
См. также
Руководство по проектированию сетевого драйвера
Справочник по сети Windows Vista и более поздних версий