Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Проверка на DRIVER_POWER_STATE_FAILURE ошибок имеет значение 0x0000009F. Эта проверка на наличие ошибок указывает на то, что драйвер находится в нестабильном или недопустимом состоянии питания.
Это важно
Эта статья предназначена для программистов. Если вы являетесь клиентом, который получил код ошибки синего экрана при использовании компьютера, см. раздел Устранение ошибок синего экрана.
DRIVER_POWER_STATE_FAILURE Параметры
Параметр 1 указывает на тип нарушения.
Параметр 1 | Параметр 2 | Параметр 3 | Параметр 4 | Причина |
---|---|---|---|---|
0x1 | Объект устройства | Зарезервировано | Зарезервировано | Освобождаемый объект устройства по-прежнему имеет незавершенный запрос питания, который он не завершил. |
0x2 | Объект устройства целевого устройства, если он доступен | Объект устройства | Объект драйвера, если он доступен | Объект устройства завершил пакет запроса ввода-вывода (IRP) для запроса состояния питания системы, но не вызвал PoStartNextPowerIrp. |
0x3 | Физический объект устройства (PDO) стека |
nt!_TRIAGE_9F_POWER . |
Заблокированный IRP | Объект устройства блокирует IRP в течение слишком долгого времени. |
0x4 | Значение тайм-аута в секундах. | Поток, который в данный момент удерживает блокировку Plug-and-Play (PnP). |
nt!_TRIAGE_9F_PNP . |
Время ожидания синхронизации с подсистемой PnP истекло время ожидания перехода в другое состояние. |
0x5 | Объект физического устройства стека | Объект POP_FX_DEVICE | Зарезервировано — 0 | Устройству не удалось завершить направленный переход мощности за необходимое время. |
0x6 | Объект POP_FX_DEVICE | Указывает, было ли это завершение направленного отключения питания(1) или Power Up(0). | Зарезервировано — 0 | Устройство не выполнило обратный вызов Directed Power Transition. |
0x500 | Зарезервировано | Объект устройства целевого устройства, если он доступен | Объект устройства | Объект устройства завершил IRP для запроса состояния питания системы, но не вызвал PoStartNextPowerIrp. |
Причина
Описание возможных причин см. в описании каждого кода в разделе Параметры. Наиболее вероятные причины:
- Объект устройства освобожден с незавершенным запросом на питание
- Истекло время ожидания переключения между источниками питания
- Объект устройства, блокирующий IRP
- Завершил IRP, но не вызвал PoStartNextPowerIrp
Резолюция
Чтобы определить конкретную причину и создать исправление кода, требуется опыт программирования и доступ к исходному коду неисправного модуля.
Проверка ошибок при отладке 0x9F когда параметр 1 равен 0x3
- В отладчике ядра используйте команду !analyze -v для выполнения первоначального анализа проверки на наличие ошибок. Подробный анализ отображает адрес nt! TRIAGE_9F_POWER структура, которая находится в Arg3.
kd>!analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
DRIVER_POWER_STATE_FAILURE (9f)
A driver has failed to complete a power IRP within a specific time.
Arguments:
Arg1: 0000000000000003, A device object has been blocking an Irp for too long a time
Arg2: fffffa8007b13440, Physical Device Object of the stack
Arg3: fffff8000386c3d8, nt!_TRIAGE_9F_POWER on Win7 and higher, otherwise the Functional Device Object of the stack
Arg4: fffffa800ab61bd0, The blocked IRP
Если драйвер, ответственный за ошибку, может быть идентифицирован, его имя выводится на синий экран и сохраняется в памяти по адресу (PUNICODE_STRING) KiBugCheckDriver. Вы можете использовать команду отладчика dx (display debugger object model expression), чтобы отобразить это: dx KiBugCheckDriver
.
Премия nt! TRIAGE_9F_POWER структура предоставляет дополнительную информацию о проверке на ошибки, которая может помочь вам определить причину этой проверки на наличие ошибок. Структура может предоставить список всех незавершенных операций IRP по мощности, список всех рабочих потоков Power IRP и указатель на очередь отложенных системных рабочих процессов.
- Используйте команду dt (Тип отображения) и укажите nt! TRIAGE_9F_POWER структуру с использованием адреса из Arg3.
0: kd> dt nt!_TRIAGE_9F_POWER fffff8000386c3d8
+0x000 Signature : 0x8000
+0x002 Revision : 1
+0x008 IrpList : 0xfffff800`01c78bd0 _LIST_ENTRY [ 0xfffffa80`09f43620 - 0xfffffa80`0ad00170 ]
+0x010 ThreadList : 0xfffff800`01c78520 _LIST_ENTRY [ 0xfffff880`009cdb98 - 0xfffff880`181f2b98 ]
+0x018 DelayedWorkQueue : 0xfffff800`01c6d2d8 _TRIAGE_EX_WORK_QUEUE
Команда dt (Тип Отображения) отображает структуру. С помощью различных команд отладчика можно следовать за полями LIST_ENTRY для просмотра списка невыполненных IRP и рабочих потоков Power IRP.
- Используйте команду !irp для проверки заблокированного IRP. Адрес этого IRP находится в Arg4.
0: kd> !irp fffffa800ab61bd0
Irp is active with 7 stacks 6 is current (= 0xfffffa800ab61e08)
No Mdl: No System Buffer: Thread 00000000: Irp stack trace.
cmd flg cl Device File Completion-Context
[N/A(0), N/A(0)]
0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[N/A(0), N/A(0)]
0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[N/A(0), N/A(0)]
0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[N/A(0), N/A(0)]
0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[N/A(0), N/A(0)]
0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
>[IRP_MJ_POWER(16), IRP_MN_SET_POWER(2)]
0 e1 fffffa800783f060 00000000 00000000-00000000 pending
\Driver\HidUsb
Args: 00016600 00000001 00000004 00000006
[N/A(0), N/A(0)]
0 0 00000000 00000000 00000000-fffffa800ad00170
Args: 00000000 00000000 00000000 00000000
- Используйте команду !devstack с PDO-адресом в Arg2 для отображения информации, связанной с неисправным драйвером.
0: kd> !devstack fffffa8007b13440
!DevObj !DrvObj !DevExt ObjectName
fffffa800783f060 \Driver\HidUsb fffffa800783f1b0 InfoMask field not found for _OBJECT_HEADER at fffffa800783f030
> fffffa8007b13440 \Driver\usbhub fffffa8007b13590 Cannot read info offset from nt!ObpInfoMaskToOffset
!DevNode fffffa8007ac8a00 :
DeviceInst is "USB\VID_04D8&PID_0033\5&46fa7b7&0&1"
ServiceName is "HidUsb"
- Используйте команду !poaction для отображения потоков, которые обрабатывают операции питания и все выделенные IRP питания.
3: kd> !poaction
PopAction: fffff801332f3fe0
State..........: 0 - Idle
Updates........: 0
Action.........: None
Lightest State.: Unspecified
Flags..........: 10000003 QueryApps|UIAllowed
Irp minor......: ??
System State...: Unspecified
Hiber Context..: 0000000000000000
Allocated power irps (PopIrpList - fffff801332f44f0)
IRP: ffffe0001d53d8f0 (wait-wake/S0), PDO: ffffe00013cae060
IRP: ffffe0001049a5d0 (wait-wake/S0), PDO: ffffe00012d42050
IRP: ffffe00013d07420 (set/D3,), PDO: ffffe00012daf840, CURRENT: ffffe00012dd5040
IRP: ffffe0001e5ac5d0 (wait-wake/S0), PDO: ffffe00013d33060
IRP: ffffe0001ed3e420 (wait-wake/S0), PDO: ffffe00013c96060
IRP: ffffe000195fe010 (wait-wake/S0), PDO: ffffe00012d32050
Irp worker threads (PopIrpThreadList - fffff801332f3100)
THREAD: ffffe0000ef5d040 (static)
THREAD: ffffe0000ef5e040 (static), IRP: ffffe00013d07420, DEVICE: ffffe00012dd5040
PopAction: fffff801332f3fe0
State..........: 0 - Idle
Updates........: 0
Action.........: None
Lightest State.: Unspecified
Flags..........: 10000003 QueryApps|UIAllowed
Irp minor......: ??
System State...: Unspecified
Hiber Context..: 0000000000000000
Allocated power irps (PopIrpList - fffff801332f44f0)
IRP: ffffe0001d53d8f0 (wait-wake/S0), PDO: ffffe00013cae060
IRP: ffffe0001049a5d0 (wait-wake/S0), PDO: ffffe00012d42050
IRP: ffffe00013d07420 (set/D3,), PDO: ffffe00012daf840, CURRENT: ffffe00012dd5040
IRP: ffffe0001e5ac5d0 (wait-wake/S0), PDO: ffffe00013d33060
IRP: ffffe0001ed3e420 (wait-wake/S0), PDO: ffffe00013c96060
IRP: ffffe000195fe010 (wait-wake/S0), PDO: ffffe00012d32050
Irp worker threads (PopIrpThreadList - fffff801332f3100)
THREAD: ffffe0000ef5d040 (static)
THREAD: ffffe0000ef5e040 (static), IRP: ffffe00013d07420, DEVICE: ffffe00012dd5040
Если вы работаете с драйвером KMDF, используйте расширения Windows Driver Framework Extensions (!wdfkd) для сбора дополнительной информации.
Используйте !wdfkd.wdflogdump<имени вашего драйвера>, чтобы узнать, ожидает ли KMDF вашего подтверждения любых ожидающих запросов.
Используйте !wdfkd.wdfdevicequeues<для> проверки всех невыполненных запросов и их состояния.
Используйте расширение !stacks для проверки состояния каждого потока и поиска потока, который может задерживать переход в состояние power.
Чтобы определить причину ошибки, рассмотрите следующие вопросы:
- Каковы характеристики драйвера физического объекта устройства (PDO) (Arg2)?
- Можете ли вы найти заблокированную тему? Когда вы изучаете поток с помощью команды отладчика !thread , из чего состоит поток?
- Существует ли ввод-вывод, связанный с потоком, который его блокирует? Какие символы находятся в стеке?
- Когда вы изучаете заблокированное питание IRP, что вы замечаете?
- Что такое код второстепенной функции PnP в Power IRP?
Проверка ошибок при отладке 0x9F когда параметр 1 равен 0x4
- В отладчике ядра используйте команду !analyze -v для выполнения первоначального анализа проверки на наличие ошибок. Подробный анализ отображает адрес nt! TRIAGE_9F_PNP структура, которая находится в параметре 4 (arg4).
kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
DRIVER_POWER_STATE_FAILURE (9f)
A driver has failed to complete a power IRP within a specific time (usually 10 minutes).
Arguments:
Arg1: 00000004, The power transition timed out waiting to synchronize with the Pnp
subsystem.
Arg2: 00000258, Timeout in seconds.
Arg3: 84e01a70, The thread currently holding on to the Pnp lock.
Arg4: 82931b24, nt!TRIAGE_9F_PNP on Win7
Премия nt! TRIAGE_9F_PNP структура предоставляет дополнительную информацию о проверке ошибок, которая может помочь вам определить причину ошибки. Премия nt! TRIAGE_9F_PNP структура предоставляет указатель на структуру, которая содержит список отправленных (но не завершенных) PnP IRP и предоставляет указатель на очередь отложенного системного рабочего процесса.
- Используйте команду dt (Тип отображения) и укажите
nt!_TRIAGE_9F_PNP
структуру и адрес, которые вы нашли в Arg4.
kd> dt nt!_TRIAGE_9F_PNP 82931b24
+0x000 Signature : 0x8001
+0x002 Revision : 1
+0x004 CompletionQueue : 0x82970e20 _TRIAGE_PNP_DEVICE_COMPLETION_QUEUE
+0x008 DelayedWorkQueue : 0x829455bc _TRIAGE_EX_WORK_QUEUE
Команда dt (Тип Отображения) отображает структуру. С помощью команд отладчика можно следовать за LIST_ENTRY полями для просмотра списка незавершенных операций IRP PnP.
Чтобы определить причину ошибки, рассмотрите следующие вопросы:
Существует ли IRP, связанный с потоком?
Есть ли в CompletionQueue какие-либо операции ввода-вывода?
Какие символы находятся в стеке?
Обратитесь к дополнительным методам, описанным выше в параметре 0x3.
Замечания
Если у вас нет возможностей для отладки этой проблемы с помощью описанных выше методов, вы можете использовать некоторые основные методы устранения неполадок.
Если недавно были добавлены новые драйверы устройств или системные службы, попробуйте удалить или обновить их. Попробуйте определить, что изменилось в системе, вызвавшей появление нового кода проверки ошибок.
Посмотрите в Диспетчере устройств , помечены ли какие-либо устройства восклицательным знаком (!). Просмотрите журнал событий, отображаемый в свойствах драйвера, для любого неисправного драйвера. Попробуйте обновить соответствующий драйвер.
Проверьте средство просмотра событий системного входа на наличие дополнительных сообщений об ошибках, которые могут помочь точно определить устройство или драйвер, вызвавший ошибку. Ищите критические ошибки в системном журнале, которые появились примерно в то же время, что и "синий экран".
Чтобы попытаться изолировать причину, временно отключите энергосбережение с помощью панели управления, параметров электропитания. Некоторые проблемы с драйверами связаны с различными состояниями гибернации системы, приостановкой и возобновлением питания.
Если вы недавно добавили оборудование в систему, попробуйте удалить или заменить его. Или обратитесь к производителю, чтобы узнать, доступны ли какие либо исправления.
Можно попробовать запустить средство диагностики оборудования, предоставленное производителем системы.
Обратитесь к производителю, доступна ли обновленная прошивка системы ACPI/BIOS или другая прошивка.
См. также
Анализ аварийного дампа с помощью отладчиков Windows (WinDbg)
Анализ файла дампа Kernel-Mode с помощью WinDbg
Bug Check Code Reference (Справочник с кодами критических ошибок)