Код ошибки 0x0000014f

PDC_WATCHDOG_TIMEOUT Ошибка остановки синего экрана имеет значение проверки ошибки 0x0000014F и возникает, когда системный компонент не отвечает в течение выделенного периода времени, не позволяя системе выйти из подключенного режима ожидания. Если вы сталкиваетесь с этим BSOD, то некоторые предложения в этом посте могут вам помочь.

Проверка ошибки PDC_WATCHDOG_TIMEOUT имеет значение 0x0000014F. Это указывает на то, что системный компонент не смог ответить в течение выделенного периода времени, не давая системе выйти из подключенного режима ожидания.

PDC_WATCHDOG_TIMEOUT

Вы можете попробовать следующие предложения:

  1. Обновление или откат драйверов.
  2. Запустите средство диагностики памяти Windows.
  3. Отключите новое оборудование.
  4. Обновите BIOS.

Выполните восстановление системы и посмотрите, устранит ли она проблему. Если нет, загрузитесь в безопасном режиме с сетевым подключением и попробуйте следующие предложения.

1] Обновление или откат драйверов, связанных с

Используемый драйвер устройства относится к категории контроллеров IDE ATA/ATAPI и ко всем записям, таким как стандартный контроллер SATA AHCI. Эти драйверы должны быть обновлены – обновите эти драйверы.

Если вы недавно обновили этот драйвер, возможно, вам нужно откатить драйвер.

2] Запустите средство диагностики памяти Windows

Запустите проверку памяти на вашем компьютере. Начните с нажатия комбинации клавиш WINKEY + R , чтобы запустить утилиту Выполнить . Затем введите mdsched.exe и нажмите Enter . . Он запустит средство диагностики памяти Windows и выдаст две опции:

  1. Перезагрузите сейчас и проверьте наличие проблем (рекомендуется)
  2. Проверьте наличие проблем при следующем запуске компьютера

В соответствии с выбранным вами вариантом, компьютер перезагрузится и проверит наличие проблем с памятью. Если у вас возникнут какие-либо проблемы, он исправит их автоматически, в противном случае, если проблемы не обнаружены, это, вероятно, не является причиной проблемы.

3] Отключите новое оборудование

Вы можете попытаться отключить любое новое аппаратное устройство, которое вы недавно подключили. Эта ошибка также может быть вызвана, если только что установленное устройство поддерживает процессор, используя различные инструкции, такие как неправильная установка драйвера и другие.

Следовательно, рекомендуется удалить одно из таких аппаратных устройств одно за другим и проверить, устраняет ли это ваши проблемы. И если вы обнаружите конкретное устройство, которое вызывает ошибку, вы можете просто проверить, достаточно ли последний драйвер для него достаточно стабилен с вашей операционной системой.

4] Обновите BIOS

BIOS является чувствительной частью компьютера. Хотя это программный компонент, от него во многом зависит функционирование аппаратного обеспечения. Следовательно, вы должны быть очень осторожны при изменении чего-либо в BIOS. Я бы порекомендовал вам пропустить этот метод, если вы не знаете, что делаете, или не знаете, как это сделать.

Чтобы обновить BIOS, сначала нажмите комбинацию кнопок WINKEY + R, чтобы запустить поле Выполнить , введите msinfo32 и, наконец, нажмите Enter.

Откроется информация о системе. внизу вы найдете поле поиска; там вы должны найти версию BIOS и нажать Enter.

Там вы сможете увидеть версию и версию BIOS, установленную на вашем компьютере.

Теперь вы заходите на веб-сайт производителя и загружаете на свой компьютер последнюю версию BIOS.

Если вы используете ноутбук, убедитесь, что он подключен к сети до тех пор, пока не будет установлено это обновление BIOS.

Дважды щелкните по вновь загруженному файлу, чтобы установить новую версию BIOS. После этого просто перезагрузите компьютер, чтобы изменения вступили в силу.

В случае, если вы используете собранный процессор для запуска своей копии Windows 10, это будет довольно сложно для вас.

Если вы не видите правильного имени производителя в окне «Информация о системе», вам придется проверить веб-сайт производителя вашей материнской платы. Как только вы посетите веб-сайт, перейдите в раздел загрузок веб-сайта, чтобы получить последнюю версию BIOS для вашего компьютера. Обычно американские мегатенденции используются для сборки компьютеров, но в любом случае вы даже можете проверить наличие обновлений Windows для любой новой версии BIOS, доступной для вашего компьютера.

This another rare bugcheck which I’ve only seen on a handful of occasions, which makes it even important that we explore it and create some documentation. I’ll continuing from earlier analysis which Patrick made here.

PDC_WATCHDOG_TIMEOUT (14f)
A system component failed to respond within the allocated time period,
preventing the system from exiting connected standby.
Arguments:
Arg1: 0000000000000004, Client ID of the hung component.
Arg2: 0000000000000001, A notification client failed to respond.
Arg3: ffffc001079315c0, Pointer to the notification client (pdc!_PDC_NOTIFICATION_CLIENT).
Arg4: ffffd00021701b50, Pointer to a pdc!PDC_14F_TRIAGE structure.

As previously mentioned by Patrick, this bugcheck is caused when a system process has been unable to respond in a timely fashion when waking from standby mode, and therefore the system ends up in a bugcheck as shown above.

Fortunately, both of the data structures mentioned in the bugcheck parameters can be dumped using a Minidump, however, before we do that, we’ll need to familiarise ourselves with what the bugcheck is about.

This bugcheck is fairly uncommon and is typically found with devices such as tablets like the Surface Pro. PDC is an acronym for Power Dependency Coordinator and is a component of Modern Standby. This power policy was introduced with Windows 8 and developed further with the introduction of Windows 10. Essentially, its purpose was to allow devices to ‘instantly’ wake from sleep. It was primarily introduced as Microsoft began to shift its focus to portable devices such as tablets.

Modern Standby is directly analogous to how if you press the power button on your smartphone, it won’t be powered off, but rather go into a very low powered idle state and respond to certain events such as app notifications, etc.

It is very important to note that not all systems will support Modern Standby and to support it, the firmware must meet these requirements:

  1. x86-x64 processor architecture must have the ability to support hibernation.
  2. The processor must provide a power engine plugin (PEP) driver. Windows 8.1+ provides this for Intel processors natively.
  3. The ACPI table must support the following flag – ACPI_S0_LOW_POWER_IDLE_FADT.

As a side note, I believe that the ACPI specification refers to the FADT flag as LOW_POWER_S0_IDLE_CAPABLE instead (please see Section 5.2.9 of the ACPI Specification).

To check if a system supports Modern Standby, then open a Command Prompt window and enter the following command:

powercfg /availablesleepstates

You should see output which similar to the below:

The following sleep states are available on this system:
Standby (S3)
Hibernate
Hybrid Sleep
Fast Startup

The following sleep states are not available on this system:
Standby (S1)
The system firmware does not support this standby state.

Standby (S2)
The system firmware does not support this standby state.

Standby (S0 Low Power Idle) << Modern Standby
The system firmware does not support this standby state.

Notice how my system doesn’t support Modern Standby? S0 is the power state which is used to represent modern standby. We’ll discuss this in greater depth later on in this article, but for now, let’s look at the difference between Connected and Disconnected Modern Standby.

modern-standby

There is very little difference between connected and disconnected standby. The main difference being that with connected standby, network traffic still continues and the device is able to be woken by certain network notifications with connected standby. Disconnected standby was introduced with the advent of Windows 10 and therefore you can safely assume that Windows 8+ devices will be using connected standby if the system firmware supports it.

For S3 systems, a device is either in the active powered on state or is in the S3 sleep state. With modern standby devices, devices slowly reduce their power consumption gradually, which enables them to wake faster from sleep states.

Modern Standby Phases:

There is a number of phases associated with modern standby, and this bugcheck can occur within any stage, therefore it is important to understand what each stage does and where the system is as it is transitioning to S0. The following table illustrates all these phases and what they do.

Phase Name

Description

Duration

Connection Phase​

The system is checking for active remote desktop connections, and monitoring for outstanding power IRPs.​

Until all remote desktop connections have elapsed​

Presence Phase​

Windows 10 only​

Process Lifetime Manager (PLM) Phase​

Suspend all Microsoft Store apps and await for any audio playback to ease​

Usually 5 seconds, however, can be longer if audio playback is still continuing​

Maintenance Phase​

Completes necessary maintenance tasks​

Around 1 second; can be much longer on AC power​

Desktop Activity Moderator (DAM) Phase​

Checks for outstanding power IRPs related to currently running desktop applications using PowerRequestExecution

Required function​

Usually immediate, but can be indefinite on systems using AC power. This is typically a maximum of 5 minutes on battery-powered devices.​

Low Power Phase​

Notify all hardware devices which have subscribed to this power event. This informs them to place the device into a low powered state.​

Usually 5 seconds​

Resiliency Notification Phase​

Notify network adapters of the low power state, these are turned off if they do not support S3.​

Usually around 1 second​

Resiliency Phase​

System prepares to enter the low power idle state. Power manager will listen to activator requests to wake from ‘sleep’.​

N/A​

Now, we have a greater understanding of Modern Standby, it’s much easier to understand the meaning of the bugcheck parameters. We’ll begin exploring each one in the preceding section.

Bugcheck Parameters:

The first parameter refers to the client ID which corresponds to an enumeration type called PDCCLIENTID, this uniquely identifies the PDC client which the client type corresponds to. Please refer to an omitted version of the enumeration below:

4: kd> dt PDCCLIENTID
nt!PDCCLIENTID
   PDC_INVALID_CLIENT = 0n0
   PDC_PLM_CLIENT = 0n1
   PDC_NQM_CLIENT = 0n2
   PDC_WNS_CLIENT = 0n3
   PDC_DAM_CLIENT = 0n4
   PDC_WCM_CLIENT = 0n5
   PDC_NCSI_CLIENT = 0n7
   PDC_DHCP_CLIENT = 0n8
   PDC_TCPIP_CLIENT = 0n9
   PDC_WU_CLIENT = 0n11
   PDC_GP_CLIENT = 0n12
   PDC_NCA_CLIENT = 0n14
   PDC_BI_CLIENT = 0n15
   PDC_MSCHED_CLIENT = 0n16
[...]

Now, Parameter 2 decides the meaning of other the parameters and therefore we’ll look into each one individually. It’s interesting to note that all the values for the second parameter are stored within an enumeration type called PDC_CLIENT_TYPE.

3: kd> dt PDC_CLIENT_TYPE
PdcNotificationClient = 0n0
PdcResiliencyClient = 0n1
PdcActivator = 0n2
PdcSuspendResumeClient = 0n3
PdcTaskClient = 0n4
PdcSignalClient = 0n5
PdcPpmProfileClient = 0n6
PdcInvalidType = 0n7

Parameter 2 = 0x1

This indicates that the notification client has failed to respond. The notification client can be a number of different types; these can be found in an enumeration called PDC_NOTIFICATION_TYPE.

3: kd> dt PDC_NOTIFICATION_TYPE
PdcLowPowerNotification = 0n0
PdcPlmNotification = 0n1
PdcDamNotification = 0n2
PdcResiliencyNotification = 0n3
PdcShellNotification = 0n4
PdcInvalidNotification = 0n5
PdcMaxNotification = 0n5

The third parameter will contain the address of the _PDC_NOTIFICATION_CLIENT which has failed to respond.

3: kd> dt _PDC_NOTIFICATION_CLIENT ffffc001079315c0
pdc!_PDC_NOTIFICATION_CLIENT
+0x000 Context : _PDC_COMMON_CONTEXT
+0x020 ClientId : 4
+0x024 ReplyReceived : 0 ''
+0x028 Control : 0xfffff800`f0be7f80 _PDC_NOTIFICATION_CONTROL

Notice how the ReplyReceived field is 0? This means that no response has been received and therefore the notification client will not respond. The Client ID indicates the process which has failed. In this case, it was the System process.

Now, to find out which type of notification client has failed to respond, we can dump the PDC_NOTIFICATION_CONTROL structure.

3: kd> dt _PDC_NOTIFICATION_CONTROL 0xfffff800`f0be7f80
pdc!_PDC_NOTIFICATION_CONTROL
+0x000 NotificationType : 2 ( PdcDamNotification )
+0x008 ClientContext : (null)
+0x010 PdcSequence : 0x66
+0x018 Callback : 0xfffff800`f0bee9e0 long pdc!PdcpCommonNotificationCompleteCallback+0
+0x020 Armed : 0x1 ''
+0x021 AllClientsResponded : 0 ''
+0x022 WaitTimerExpired : 0x1 '' << The wait timer has expired since no response was provided
+0x023 CatchupReplyPending : 0 ''
+0x024 CatchupRepliesBlockingTransition : 0 ''
+0x028 PendingActivation : _PDC_ACTIVATE_NOTIFICATION_PARAMETERS
+0x058 CurrentValue : 0x79315c0
+0x05c ClientStatus : 0n-16383
+0x060 ClientList : _LIST_ENTRY [ 0xffffc001`079315c0 - 0x00000068`f145fcb8 ]
+0x070 WatchdogTimeout : 3

The NotificationType field provides the type of notification which was were waiting for. Now, looking back at the PDC phases, we can see that we were waiting for a response from the Desktop Activity Monitor component.

Parameter 2 = 0x2

This indicates that a resiliency client has failed to respond. The type of resiliency client can be found within the PDC_RESILIENCY_TYPE structure which is part of the PDC_RESILIENCY_CLIENT structure. The address of the client object can be found within the third parameter.

3: kd> dt _PDC_RESILIENCY_CLIENT
pdc!_PDC_RESILIENCY_CLIENT
+0x000 Context : _PDC_COMMON_CONTEXT
+0x020 ResiliencyType : PDC_RESILIENCY_TYPE
+0x028 ClientReferences : Uint8B
+0x030 PoResiliencyClient : UChar
+0x034 CurrentTransactionId : Uint4B
+0x038 OneTimeTransaction : UChar
+0x03c CurrentState : PDC_CLIENT_STATE
+0x040 NextState : PDC_CLIENT_STATE
+0x044 ClientId : Uint4B

The enumeration contains the following values:

3: kd> dt PDC_RESILIENCY_TYPE
PdcIdleResiliency = 0n0
PdcHostResiliency = 0n1
PdcIoResiliency = 0n2
PdcDamResiliency = 0n3
PdcNqmResiliency = 0n4
PdcWcmResiliency = 0n5
PdcInvalidResiliency = 0n6
PdcMaxResiliency = 0n6
PdcLightestResiliency = 0n5

Parameter 2 = 0x3

This indicates that an activator client held a reference for too long and therefore has led to a timeout condition. Again, the third parameter will contain the address of the appropriate structure, which in this case, is the PDC_ACTIVICATOR_CLIENT.

3: kd> dt _PDC_ACTIVATOR_CLIENT
pdc!_PDC_ACTIVATOR_CLIENT
+0x000 Context : _PDC_COMMON_CONTEXT
+0x020 ClientId : Uint4B
+0x028 ResiliencyContexts : [6] _RESILIENCY_CONTEXT
+0x088 CompletionStatus : Int4B
+0x08c CurrentActivity : PDC_ACTIVITY_TYPE
+0x090 PendingResiliency : PDC_RESILIENCY_TYPE
+0x098 ReplyMessage : _PDC_MESSAGE
+0x188 ActivationStats : Ptr64 _PDC_ACTIVATION_STATS
+0x190 WatchdogContext : Ptr64 _PDC_WATCHDOG_CONTEXT
+0x198 ContinuouslyBlockingDrips : Uint8B

Activators are special system services that are able to block a device from leaving the active power state and transitioning into the low powered idle state. These services can be a number of different system components including Windows Update and the Group Policy manager. Each activator will hold an activation reference will is activated under certain conditions, these conditions vary for each activator.

For example, with the Windows Update service activator, the reference flag will be enabled when the service is scanning for any critical updates; while this reference is held, the device will held in the active power state. Once, the Windows Update service has finished scanning for any critical updates, then the reference flag will be cleared and the device will able to transition into a low powered idle state.

Going back to the PDC_ACTIVATOR_CLIENT structure, there is a number of useful fields that can provide greater context to the type of activator and why it has timed out. The CompletionStatus indicates the status of the activator and if it is still active, whereas, the CurrentActivity provides an index into the PDC_ACTIVITY_TYPE enumeration.

3: kd> dt PDC_ACTIVITY_TYPE
PdcNetwork = 0n0
PdcSystem = 0n1
PdcTimer = 0n2
PdcAllNetworks = 0n3
PdcInvalidActivity = 0n4
PdcMaxActivity = 0n4

The ActivationStats field contains a pointer to the PDC_ACTIVATION_STATS structure which provides some useful statistics about the activator including its maximum duration and activation count.

3: kd> dt _PDC_ACTIVATION_STATS
pdc!_PDC_ACTIVATION_STATS
+0x000 Link : _LIST_ENTRY
+0x010 ClientId : Uint4B
+0x014 ActiveActivations : Uint4B
+0x018 ActivationCount : Uint4B
+0x020 ActivationTime : Uint8B
+0x028 ActivatedTime : Uint8B
+0x030 MaxActivationDuration : Uint8B

Parameter 2 – 0x100

This parameter value shows that the Win32k.sys (Windows subsystem) wasn’t able to respond to a monitor-on power request within the specified timeout limit. Effectively, a power IRP was pending for too long and therefore lead to the bugcheck. It is important to note that the monitor-on power requests come from a variety of wake sources. These wake sources are any inputs which are able to ‘wake’ the system from the idle power state. It should be noted that the wake source operation is the same for both x86-x64 and ARM architectures.

One such wake source is the power button, if this is pressed, then a request will be sent to ensure that the monitor is powered on. Similarly, if you were to open the lid of a laptop, then a monitor on power request will also be sent. Other wake sources include the keyboard and mouse. The complete list of wake sources can be found here – Modern Standby wake sources

The third parameter of this bugcheck indicates the reason why a monitor-on power request was sent. The number of available reasons are stored within an enumerator called POWER_MONITOR_REQUEST_REASON. Please refer to the documentation here – POWER_MONITOR_REQUEST_REASON (ntpoapi.h) – Windows drivers

Parameter 4

3: kd> dt _PDC_14F_TRIAGE
pdc!_PDC_14F_TRIAGE
+0x000 ClientProcess : Ptr64 _EPROCESS
+0x008 CallbackThread : Ptr64 _ETHREAD

The fourth parameter is a pointer to the _PDC_14F_TRIAGE structure for most scenarios. This structure simply wraps up the client process and call back thread of the crashed process in one neat location.

Debugging Methodology:

There are two primary methods of debugging this issue: obtaining a sleep study report and WPA trace or examining the crash dump. A sleep study report can be obtained using the following command from an elevated command prompt:

powercfg.exe /sleepstudy

If the command has run successfully, then you should see the following output which indicates where the report has been saved.

C:WINDOWSsystem32>powercfg.exe /sleepstudy
Sleep Study report saved to file path C:WINDOWSsystem32sleepstudy-report.html.

Since this article will primarily be focusing on crash dump analysis, I highly recommend reading the following articles for WPA traces and sleep study reports:

  • Capture and view a WPA trace for modern standby diagnostics
  • Modern standby SleepStudy common problem examples

In terms of crash dump debugging, I would recommend examining the parameters and then checking for any power IRPs which may be pending. I have written about a very similar bugcheck here which provides further clarification on this – Debugging Stop 0x17C – PDC_LOCK_WATCHDOG

Windows 10: Windows 10 crashed with bluescreen error 0x0000014F when resuming from sleep

Discus and support Windows 10 crashed with bluescreen error 0x0000014F when resuming from sleep in Windows 10 BSOD Crashes and Debugging to solve the problem; When I woke my Windows 10 laptop from sleep, it suddenly crashed with a bluescreen error: PDC_WATCHDOG_TIMEOUT 0x0000014F. What might have caused this…
Discussion in ‘Windows 10 BSOD Crashes and Debugging’ started by Nicholas_W_, Aug 12, 2021.

  1. Windows 10 crashed with bluescreen error 0x0000014F when resuming from sleep

    When I woke my Windows 10 laptop from sleep, it suddenly crashed with a bluescreen error: PDC_WATCHDOG_TIMEOUT 0x0000014F. What might have caused this error, and what can I do to fix it?

    :)

  2. Win7 Pro Laptop crashes when resumes from sleep

    Ok almost positive it related to the wifi card/driver. If I disable it in the device manager my laptop sleeps and resumes just fine.

    So I guess first step would to be try to find a different driver and if that doesnt work I guess I can replace it. Used mini pci-e wifi cards are pretty cheap.

  3. Bluescreen Crashes in Windows 10

    There are a few things that I notice with these errors, they are nearly all hardware 0x124 errors which are difficult to troubleshoot because there is so little information.

    Most of them occur when the Norton Security process is running so a first step would be to uninstall Norton and just use Windows Defender while we are troubleshooting.

    There was one different BSOD error: 0x18 Reference by Pointer
    Probably caused by : BHDrvx64.sys ( BHDrvx64+114761 )

    You need to update or rollback your Symantec Heuristics Driver. Maybe this is part of the Norton install so it may be removed anyway.

    Check if there has been any improvement and if not then you will need to work through your hardware:

    STOP 0x124 Troubleshooting [/i] Read carefully before proceeding.

    Windows 10 crashed with bluescreen error 0x0000014F when resuming from sleep [​IMG]
    Warning

    Windows 10 crashed with bluescreen error 0x0000014F when resuming from sleep warnsmall.png

    If you’re overclocking your system, revert back to stock clocks now.

    Windows 10 crashed with bluescreen error 0x0000014F when resuming from sleep warnsmall.png

    Windows 10 crashed with bluescreen error 0x0000014F when resuming from sleep [​IMG]
    Note Test the system once the overclock is removed before continuing with the steps outlined below.

    Part One: CPU Stress Test
    Part Two: MemTest86+ RAM Diagnostic
    Part Three: Hard Drive Diagnostics
    Part Four: GPU Stress Test

    ONE [/i] CPU TEST
    *Arrow Run Prime95 to stress test your CPU. Prime95 — Stress Test Your CPU — Windows 10 Forums

    Windows 10 crashed with bluescreen error 0x0000014F when resuming from sleep [​IMG]
    Warning Your CPU temperatures will rise quickly while under this stress test. Keep a keen eye on them and abort the test if overheating occurs.

    TWO [/i] RAM TEST
    *Arrow Run MemTest86+ to analyse your RAM. MemTest86+ — Test RAM — Windows 10 Forums

    Windows 10 crashed with bluescreen error 0x0000014F when resuming from sleep [​IMG]
    Note
    Windows 10 crashed with bluescreen error 0x0000014F when resuming from sleep [​IMG]

    MemTest86+ needs to be run for at least 8 passes for conclusive results. Set it running before you go to bed and leave it overnight. We’re looking for zero errors here. Even a single error will indicate RAM failure.

    THREE [/i] HDD TEST

    Windows 10 crashed with bluescreen error 0x0000014F when resuming from sleep [​IMG]
    Note Please run HDTune first, in the order posted!
    *Arrow Run HDTune to

    • check the health,
    • scan for errors, no quick scan but full scan
    • run a benchmark.

    It may take some time, but please take the time you need to perform it properly.
    When above is done please make screenshots of the following

    • the health,
    • the error scan,
    • the benchmark incl. following
      • transfer rate,
      • access time,
      • burst rate,
      • cpu usage.

    *Arrow Run chkdsk

    FOUR [/i] GPU TEST
    *Arrow Run Furmark to stress test your GPU. FurMark — GPU Stress Test — Windows 10 Forums

    Windows 10 crashed with bluescreen error 0x0000014F when resuming from sleep [​IMG]
    Note Run Furmark for around 30 minutes.

    Windows 10 crashed with bluescreen error 0x0000014F when resuming from sleep [​IMG]
    Warning Your GPU temperatures will rise quickly while Furmark is running. Keep a keen eye on them and abort the test if overheating occurs.

    Report back on all the tests as you do them — take your time — there is no need to get them all done immediately.

  4. Windows 10 crashed with bluescreen error 0x0000014F when resuming from sleep

    Win7 Pro Laptop crashes when resumes from sleep

    Need some help here guys. I bought a new (refurb) laptop a few weeks ago from lenovo outlet. Just a basic n585 to replace my netbook. It came with Windows 8 but I pulled the HDD and installed a OCZ vertex 2 80gb SSD in there for a windows 7 install. The laptop works great but 9/10 when it resumes from sleep it crashes and reboots. I have re-installed windows 3-4 times now with no fix. What do you think? Maybe a driver issue?

    Specs:
    Model # — Lenovo n585
    CPU/Chipset: AMD E1-1200
    Ram: 3GB (1x2gb & 1x1GB ddr3)
    SSD: OCZ Vertex II — 80gb
    OS: Windows 7 Pro 32bit

Thema:

Windows 10 crashed with bluescreen error 0x0000014F when resuming from sleep

  1. Windows 10 crashed with bluescreen error 0x0000014F when resuming from sleep — Similar Threads — crashed bluescreen error

  2. Issue with the Taskbar when resume from sleep.

    in Windows 10 Gaming

    Issue with the Taskbar when resume from sleep.: Hi,I am facing issue with my taskbar which goes weird after system wake from sleep. Even post all upgrades to Windows 11. Issue is still is persisting. It feels better not to put system to sleep because after awaking only option left is to reboot the windows and kill all open…
  3. Issue with the Taskbar when resume from sleep.

    in Windows 10 Software and Apps

    Issue with the Taskbar when resume from sleep.: Hi,I am facing issue with my taskbar which goes weird after system wake from sleep. Even post all upgrades to Windows 11. Issue is still is persisting. It feels better not to put system to sleep because after awaking only option left is to reboot the windows and kill all open…
  4. Window crash when resume from hibernation

    in Windows 10 Gaming

    Window crash when resume from hibernation: This PC is Lenovo X13, windows10 21H2.Recently, this PC will crash for below conditions sometimes but not 100%1Resume from Hibernation2Idle overnightBelow is the analyze of crash dump file, could you please help to find out the reason?BugCheck 19C, {20, ffffa28ff6d44080, 0,…
  5. Window crash when resume from hibernation

    in Windows 10 Software and Apps

    Window crash when resume from hibernation: This PC is Lenovo X13, windows10 21H2.Recently, this PC will crash for below conditions sometimes but not 100%1Resume from Hibernation2Idle overnightBelow is the analyze of crash dump file, could you please help to find out the reason?BugCheck 19C, {20, ffffa28ff6d44080, 0,…
  6. Window crash when resume from hibernation

    in Windows 10 BSOD Crashes and Debugging

    Window crash when resume from hibernation: This PC is Lenovo X13, windows10 21H2.Recently, this PC will crash for below conditions sometimes but not 100%1Resume from Hibernation2Idle overnightBelow is the analyze of crash dump file, could you please help to find out the reason?BugCheck 19C, {20, ffffa28ff6d44080, 0,…
  7. rtx 3080 crashes only when resume from sleep mode

    in Windows 10 Drivers and Hardware

    rtx 3080 crashes only when resume from sleep mode: The computer has rebooted from a bugcheck. The bugcheck was: 0x00000050 0xffff90ffde397950, 0x0000000000000002, 0xfffff800596e1e5e, 0x0000000000000002. A dump was saved in: C:WINDOWSMinidump111420-11812-01.dmp. Report Id: f84d9439-e1ab-4bd3-ade3-c89eea0fc7e3.

    here is the…

  8. Windows 10 no ipv6 on resume from sleep

    in Windows 10 Network and Sharing

    Windows 10 no ipv6 on resume from sleep: I have had this problem for the longest time and it is still happening with Windows 10 ver 2004.

    On my Surface Pro 7 and Surface Go 2 both now on Windows 10-2004, they will fail to obtain ipv6 addresses on SLAAC networks on resume from sleep for more than 1 minute. If I…

  9. Windows 10 crashes resuming from sleep mode

    in Windows 10 Performance & Maintenance

    Windows 10 crashes resuming from sleep mode: Installed Windows 10 pro on my computer which had windows 10 home on it. Now when my computer goes into sleep mode and I try to come out of it the computer crashes and I get the blue screen. I have to physically turn it off at the power button and turn it back on. It didnt…
  10. BSODs when resuming from Sleep mode

    in Windows 10 BSOD Crashes and Debugging

    BSODs when resuming from Sleep mode: Hello,

    Ever since I upgraded to W10 Pro (from W8.1 Pro) my PC has started bluescreening when resuming from Sleep. MEMORY_MANAGEMENT is the most common one, and the only one that has occured so far after upgrade to Build 10586 (upgraded 2015-11-13).
    BSODs…


Windows 10 Forums

Last updated on:  2020-06-26

Authored by:  Steven Mondragon-DeVoss


This article is a guide on using bug check analysis to investigate why a Microsoft® Windows® server
crashed. A server crash, also known as Blue Screen of Death or BSOD, displays an error screen and can cause
the server to shut down or restart unexpectedly. The following terms are common when discussing server
crashes.

  • Blue screen: When certain hardware problems occurs, a blue error screen displays.
  • Crash dump file: This file, stored on the hard drive, contains information collected when the system
    generates a STOP code. The memory.dmp file contains information that the debugger needs to analyze.
  • Debugger: Use this program to analyze the dump file
  • STOP code: This error code identifies what stopped the system kernel from running.

Analyzing a bug check code

Microsoft provides WinDbg to debug the crash dump. You can
download the debugger.

The system creates a memory.dmp file at the time of the crash. Use WinDbg to analyze the file and determine
the cause of the crash.

Run WinDbg

To use WinDbg, you need do the following tasks.

Add the symbol path

After you install WinDbg, perform the following steps to add the symbol file path for debugging:

  1. Open WinDBG > File > Symbol File Path… and enter the following:

    SRV*C:Windowssymbol_cache*https://msdl.microsoft.com/download/symbols
    
  2. Click OK.

Windows might store the dump file in the following locations:

Memory Dump Type Default Location Paging File Requirements
Small memory dump C:WindowsMinidump >2 MB
Kernel memory dump C:WindowsMemory.dmp Large enough for kernel memory
Complete memory dump C:WindowsMemory.dmp All physical RAM + 1 MB

Open the memory.dmp file

To open the dump file, perform the following steps:

  1. Go to File > Open Crash Dump… > Open the MEMORY.DMP file.

  2. Click or type “!analyze -v to get the detailed debugging information.

  3. Wait for the analysis to complete.

Read the crash dump

After the analysis completes, review the output to determine the cause of the crash. For example, driver issues
or memory corruption might have caused the crash. The output of the analysis provides you with the details.

Example causes include the following possibilities:

FAILURE_BUCKET_ID:  X64_0xA_termdd!IcaDereferenceChannel+8c
The cause of the error was due to termdd.sys.

FAILURE_BUCKET_ID: 0xd1_e1k6232+16171
The cause was the Intel network adapter(e1k6232.sys) drivers

Use Driver Verifier, if necessary

If faulty drivers caused the crash, you can use Driver Verifier to examine the system’s drivers.
Use the Windows-native Driver Verifier utility to test system drivers to find any improper behaviors.

To use Driver Verifier, perform the following steps:

  1. Open a command prompt as the administrator.

  2. Type verifier to open the Driver Verifier Manager.

  3. Select the task you want and click Next. The default is Create standard settings.

  4. Select which drivers to verify and click Next.

  5. Depending on the options selected, you might need to restart the server. In that case, the system notifies
    you before the verifier executes your options.

  6. After the verifier finishes, review the output of the verifier.

Bug check codes

The following table lists some of the bug check codes you might encounter:

Code Name
Code Name
0x00000001 APC_INDEX_MISMATCH
0x00000002 DEVICE_QUEUE_NOT_BUSY
0x00000003 INVALID_AFFINITY_SET
0x00000004 INVALID_DATA_ACCESS_TRAP
0x00000005 INVALID_PROCESS_ATTACH_ATTEMPT
0x00000006 INVALID_PROCESS_DETACH_ATTEMPT
0x00000007 INVALID_SOFTWARE_INTERRUPT
0x00000008 IRQL_NOT_DISPATCH_LEVEL
0x00000009 IRQL_NOT_GREATER_OR_EQUAL
0x0000000A IRQL_NOT_LESS_OR_EQUAL
0x0000000B NO_EXCEPTION_HANDLING_SUPPORT
0x0000000C MAXIMUM_WAIT_OBJECTS_EXCEEDED
0x0000000D MUTEX_LEVEL_NUMBER_VIOLATION
0x0000000E NO_USER_MODE_CONTEXT
0x0000000F SPIN_LOCK_ALREADY_OWNED
0x00000010 SPIN_LOCK_NOT_OWNED
0x00000011 THREAD_NOT_MUTEX_OWNER
0x00000012 TRAP_CAUSE_UNKNOWN
0x00000013 EMPTY_THREAD_REAPER_LIST
0x00000014 CREATE_DELETE_LOCK_NOT_LOCKED
0x00000015 LAST_CHANCE_CALLED_FROM_KMODE
0x00000016 CID_HANDLE_CREATION
0x00000017 CID_HANDLE_DELETION
0x00000018 REFERENCE_BY_POINTER
0x00000019 BAD_POOL_HEADER
0x0000001A MEMORY_MANAGEMENT
0x0000001B PFN_SHARE_COUNT
0x0000001C PFN_REFERENCE_COUNT
0x0000001D NO_SPIN_LOCK_AVAILABLE
0x0000001E KMODE_EXCEPTION_NOT_HANDLED
0x0000001F SHARED_RESOURCE_CONV_ERROR
0x00000020 KERNEL_APC_PENDING_DURING_EXIT
0x00000021 QUOTA_UNDERFLOW
0x00000022 FILE_SYSTEM
0x00000023 FAT_FILE_SYSTEM
0x00000024 NTFS_FILE_SYSTEM
0x00000025 NPFS_FILE_SYSTEM
0x00000026 CDFS_FILE_SYSTEM
0x00000027 RDR_FILE_SYSTEM
0x00000028 CORRUPT_ACCESS_TOKEN
0x00000029 SECURITY_SYSTEM
0x0000002A INCONSISTENT_IRP
0x0000002B PANIC_STACK_SWITCH
0x0000002C PORT_DRIVER_INTERNAL
0x0000002D SCSI_DISK_DRIVER_INTERNAL
0x0000002E DATA_BUS_ERROR
0x0000002F INSTRUCTION_BUS_ERROR
0x00000030 SET_OF_INVALID_CONTEXT
0x00000031 PHASE0_INITIALIZATION_FAILED
0x00000032 PHASE1_INITIALIZATION_FAILED
0x00000033 UNEXPECTED_INITIALIZATION_CALL
0x00000034 CACHE_MANAGER
0x00000035 NO_MORE_IRP_STACK_LOCATIONS
0x00000036 DEVICE_REFERENCE_COUNT_NOT_ZERO
0x00000037 FLOPPY_INTERNAL_ERROR
0x00000038 SERIAL_DRIVER_INTERNAL
0x00000039 SYSTEM_EXIT_OWNED_MUTEX
0x0000003A SYSTEM_UNWIND_PREVIOUS_USER
0x0000003B SYSTEM_SERVICE_EXCEPTION
0x0000003C INTERRUPT_UNWIND_ATTEMPTED
0x0000003D INTERRUPT_EXCEPTION_NOT_HANDLED
0x0000003E MULTIPROCESSOR_CONFIGURATION_NOT_SUPPORTED
0x0000003F NO_MORE_SYSTEM_PTES
0x00000040 TARGET_MDL_TOO_SMALL
0x00000041 MUST_SUCCEED_POOL_EMPTY
0x00000042 ATDISK_DRIVER_INTERNAL
0x00000043 NO_SUCH_PARTITION
0x00000044 MULTIPLE_IRP_COMPLETE_REQUESTS
0x00000045 INSUFFICIENT_SYSTEM_MAP_REGS
0x00000046 DEREF_UNKNOWN_LOGON_SESSION
0x00000047 REF_UNKNOWN_LOGON_SESSION
0x00000048 CANCEL_STATE_IN_COMPLETED_IRP
0x00000049 PAGE_FAULT_WITH_INTERRUPTS_OFF
0x0000004A IRQL_GT_ZERO_AT_SYSTEM_SERVICE
0x0000004B STREAMS_INTERNAL_ERROR
0x0000004C FATAL_UNHANDLED_HARD_ERROR
0x0000004D NO_PAGES_AVAILABLE
0x0000004E PFN_LIST_CORRUPT
0x0000004F NDIS_INTERNAL_ERROR
0x00000050 PAGE_FAULT_IN_NONPAGED_AREA
0x00000051 REGISTRY_ERROR
0x00000052 MAILSLOT_FILE_SYSTEM
0x00000053 NO_BOOT_DEVICE
0x00000054 LM_SERVER_INTERNAL_ERROR
0x00000055 DATA_COHERENCY_EXCEPTION
0x00000056 INSTRUCTION_COHERENCY_EXCEPTION
0x00000057 XNS_INTERNAL_ERROR
0x00000058 FTDISK_INTERNAL_ERROR
0x00000059 PINBALL_FILE_SYSTEM
0x0000005A CRITICAL_SERVICE_FAILED
0x0000005B SET_ENV_VAR_FAILED
0x0000005C HAL_INITIALIZATION_FAILED
0x0000005D UNSUPPORTED_PROCESSOR
0x0000005E OBJECT_INITIALIZATION_FAILED
0x0000005F SECURITY_INITIALIZATION_FAILED
0x00000060 PROCESS_INITIALIZATION_FAILED
0x00000061 HAL1_INITIALIZATION_FAILED
0x00000062 OBJECT1_INITIALIZATION_FAILED
0x00000063 SECURITY1_INITIALIZATION_FAILED
0x00000064 SYMBOLIC_INITIALIZATION_FAILED
0x00000065 MEMORY1_INITIALIZATION_FAILED
0x00000066 CACHE_INITIALIZATION_FAILED
0x00000067 CONFIG_INITIALIZATION_FAILED
0x00000068 FILE_INITIALIZATION_FAILED
0x00000069 IO1_INITIALIZATION_FAILED
0x0000006A LPC_INITIALIZATION_FAILED
0x0000006B PROCESS1_INITIALIZATION_FAILED
0x0000006C REFMON_INITIALIZATION_FAILED
0x0000006D SESSION1_INITIALIZATION_FAILED
0x0000006E SESSION2_INITIALIZATION_FAILED
0x0000006F SESSION3_INITIALIZATION_FAILED
0x00000070 SESSION4_INITIALIZATION_FAILED
0x00000071 SESSION5_INITIALIZATION_FAILED
0x00000072 ASSIGN_DRIVE_LETTERS_FAILED
0x00000073 CONFIG_LIST_FAILED
0x00000074 BAD_SYSTEM_CONFIG_INFO
0x00000075 CANNOT_WRITE_CONFIGURATION
0x00000076 PROCESS_HAS_LOCKED_PAGES
0x00000077 KERNEL_STACK_INPAGE_ERROR
0x00000078 PHASE0_EXCEPTION
0x00000079 MISMATCHED_HAL
0x0000007A KERNEL_DATA_INPAGE_ERROR
0x0000007B INACCESSIBLE_BOOT_DEVICE
0x0000007C BUGCODE_NDIS_DRIVER
0x0000007D INSTALL_MORE_MEMORY
0x0000007E SYSTEM_THREAD_EXCEPTION_NOT_HANDLED
0x0000007F UNEXPECTED_KERNEL_MODE_TRAP
0x00000080 NMI_HARDWARE_FAILURE
0x00000081 SPIN_LOCK_INIT_FAILURE
0x00000082 DFS_FILE_SYSTEM
0x00000085 SETUP_FAILURE
0x0000008B MBR_CHECKSUM_MISMATCH
0x0000008E KERNEL_MODE_EXCEPTION_NOT_HANDLED
0x0000008F PP0_INITIALIZATION_FAILED
0x00000090 PP1_INITIALIZATION_FAILED
0x00000092 UP_DRIVER_ON_MP_SYSTEM
0x00000093 INVALID_KERNEL_HANDLE
0x00000094 KERNEL_STACK_LOCKED_AT_EXIT
0x00000096 INVALID_WORK_QUEUE_ITEM
0x00000097 BOUND_IMAGE_UNSUPPORTED
0x00000098 END_OF_NT_EVALUATION_PERIOD
0x00000099 INVALID_REGION_OR_SEGMENT
0x0000009A SYSTEM_LICENSE_VIOLATION
0x0000009B UDFS_FILE_SYSTEM
0x0000009C MACHINE_CHECK_EXCEPTION
0x0000009E USER_MODE_HEALTH_MONITOR
0x0000009F DRIVER_POWER_STATE_FAILURE
0x000000A0 INTERNAL_POWER_ERROR
0x000000A1 PCI_BUS_DRIVER_INTERNAL
0x000000A2 MEMORY_IMAGE_CORRUPT
0x000000A3 ACPI_DRIVER_INTERNAL
0x000000A4 CNSS_FILE_SYSTEM_FILTER
0x000000A5 ACPI_BIOS_ERROR
0x000000A7 BAD_EXHANDLE
0x000000AB SESSION_HAS_VALID_POOL_ON_EXIT
0x000000AC HAL_MEMORY_ALLOCATION
0x000000AD VIDEO_DRIVER_DEBUG_REPORT_REQUEST
0x000000B1 BGI_DETECTED_VIOLATION
0x000000B4 VIDEO_DRIVER_INIT_FAILURE
0x000000B8 ATTEMPTED_SWITCH_FROM_DPC
0x000000B9 CHIPSET_DETECTED_ERROR
0x000000BA SESSION_HAS_VALID_VIEWS_ON_EXIT
0x000000BB NETWORK_BOOT_INITIALIZATION_FAILED
0x000000BC NETWORK_BOOT_DUPLICATE_ADDRESS
0x000000BD INVALID_HIBERNATED_STATE
0x000000BE ATTEMPTED_WRITE_TO_READONLY_MEMORY
0x000000BF MUTEX_ALREADY_OWNED
0x000000C1 SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION
0x000000C2 BAD_POOL_CALLER
0x000000C4 DRIVER_VERIFIER_DETECTED_VIOLATION
0x000000C5 DRIVER_CORRUPTED_EXPOOL
0x000000C6 DRIVER_CAUGHT_MODIFYING_FREED_POOL
0x000000C7 TIMER_OR_DPC_INVALID
0x000000C8 IRQL_UNEXPECTED_VALUE
0x000000C9 DRIVER_VERIFIER_IOMANAGER_VIOLATION
0x000000CA PNP_DETECTED_FATAL_ERROR
0x000000CB DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS
0x000000CC PAGE_FAULT_IN_FREED_SPECIAL_POOL
0x000000CD PAGE_FAULT_BEYOND_END_OF_ALLOCATION
0x000000CE DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS
0x000000CF TERMINAL_SERVER_DRIVER_MADE_INCORRECT_MEMORY_REFERENCE
0x000000D0 DRIVER_CORRUPTED_MMPOOL
0x000000D1 DRIVER_IRQL_NOT_LESS_OR_EQUAL
0x000000D2 BUGCODE_ID_DRIVER
0x000000D3 DRIVER_PORTION_MUST_BE_NONPAGED
0x000000D4 SYSTEM_SCAN_AT_RAISED_IRQL_CAUGHT_IMPROPER_DRIVER_UNLOAD
0x000000D5 DRIVER_PAGE_FAULT_IN_FREED_SPECIAL_POOL
0x000000D6 DRIVER_PAGE_FAULT_BEYOND_END_OF_ALLOCATION
0x000000D7 DRIVER_UNMAPPING_INVALID_VIEW
0x000000D8 DRIVER_USED_EXCESSIVE_PTES
0x000000D9 LOCKED_PAGES_TRACKER_CORRUPTION
0x000000DA SYSTEM_PTE_MISUSE
0x000000DB DRIVER_CORRUPTED_SYSPTES
0x000000DC DRIVER_INVALID_STACK_ACCESS
0x000000DE POOL_CORRUPTION_IN_FILE_AREA
0x000000DF IMPERSONATING_WORKER_THREAD
0x000000E0 ACPI_BIOS_FATAL_ERROR
0x000000E1 WORKER_THREAD_RETURNED_AT_BAD_IRQL
0x000000E2 MANUALLY_INITIATED_CRASH
0x000000E3 RESOURCE_NOT_OWNED
0x000000E4 WORKER_INVALID
0x000000E6 DRIVER_VERIFIER_DMA_VIOLATION
0x000000E7 INVALID_FLOATING_POINT_STATE
0x000000E8 INVALID_CANCEL_OF_FILE_OPEN
0x000000E9 ACTIVE_EX_WORKER_THREAD_TERMINATION
0x000000EA THREAD_STUCK_IN_DEVICE_DRIVER
0x000000EB DIRTY_MAPPED_PAGES_CONGESTION
0x000000EC SESSION_HAS_VALID_SPECIAL_POOL_ON_EXIT
0x000000ED UNMOUNTABLE_BOOT_VOLUME
0x000000EF CRITICAL_PROCESS_DIED
0x000000F0 STORAGE_MINIPORT_ERROR
0x000000F1 SCSI_VERIFIER_DETECTED_VIOLATION
0x000000F2 HARDWARE_INTERRUPT_STORM
0x000000F3 DISORDERLY_SHUTDOWN
0x000000F4 CRITICAL_OBJECT_TERMINATION
0x000000F5 FLTMGR_FILE_SYSTEM
0x000000F6 PCI_VERIFIER_DETECTED_VIOLATION
0x000000F7 DRIVER_OVERRAN_STACK_BUFFER
0x000000F8 RAMDISK_BOOT_INITIALIZATION_FAILED
0x000000F9 DRIVER_RETURNED_STATUS_REPARSE_FOR_VOLUME_OPEN
0x000000FA HTTP_DRIVER_CORRUPTED
0x000000FC ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY
0x000000FD DIRTY_NOWRITE_PAGES_CONGESTION
0x000000FE BUGCODE_USB_DRIVER
0x000000FF RESERVE_QUEUE_OVERFLOW
0x00000100 LOADER_BLOCK_MISMATCH
0x00000101 CLOCK_WATCHDOG_TIMEOUT
0x00000102 DPC_WATCHDOG_TIMEOUT
0x00000103 MUP_FILE_SYSTEM
0x00000104 AGP_INVALID_ACCESS
0x00000105 AGP_GART_CORRUPTION
0x00000106 AGP_ILLEGALLY_REPROGRAMMED
0x00000108 THIRD_PARTY_FILE_SYSTEM_FAILURE
0x00000109 CRITICAL_STRUCTURE_CORRUPTION
0x0000010A APP_TAGGING_INITIALIZATION_FAILED
0x0000010C FSRTL_EXTRA_CREATE_PARAMETER_VIOLATION
0x0000010D WDF_VIOLATION
0x0000010E VIDEO_MEMORY_MANAGEMENT_INTERNAL
0x0000010F RESOURCE_MANAGER_EXCEPTION_NOT_HANDLED
0x00000111 RECURSIVE_NMI
0x00000112 MSRPC_STATE_VIOLATION
0x00000113 VIDEO_DXGKRNL_FATAL_ERROR
0x00000114 VIDEO_SHADOW_DRIVER_FATAL_ERROR
0x00000115 AGP_INTERNAL
0x00000116 VIDEO_TDR_FAILURE
0x00000117 VIDEO_TDR_TIMEOUT_DETECTED
0x00000119 VIDEO_SCHEDULER_INTERNAL_ERROR
0x0000011A EM_INITIALIZATION_FAILURE
0x0000011B DRIVER_RETURNED_HOLDING_CANCEL_LOCK
0x0000011C ATTEMPTED_WRITE_TO_CM_PROTECTED_STORAGE
0x0000011D EVENT_TRACING_FATAL_ERROR
0x0000011E TOO_MANY_RECURSIVE_FAULTS
0x0000011F INVALID_DRIVER_HANDLE
0x00000120 BITLOCKER_FATAL_ERROR
0x00000121 DRIVER_VIOLATION
0x00000122 WHEA_INTERNAL_ERROR
0x00000123 CRYPTO_SELF_TEST_FAILURE
0x00000124 WHEA_UNCORRECTABLE_ERROR
0x00000125 NMR_INVALID_STATE
0x00000126 NETIO_INVALID_POOL_CALLER
0x00000127 PAGE_NOT_ZERO
0x00000128 WORKER_THREAD_RETURNED_WITH_BAD_IO_PRIORITY
0x00000129 WORKER_THREAD_RETURNED_WITH_BAD_PAGING_IO_PRIORITY
0x0000012A MUI_NO_VALID_SYSTEM_LANGUAGE
0x0000012B FAULTY_HARDWARE_CORRUPTED_PAGE
0x0000012C EXFAT_FILE_SYSTEM
0x0000012D VOLSNAP_OVERLAPPED_TABLE_ACCESS
0x0000012E INVALID_MDL_RANGE
0x0000012F VHD_BOOT_INITIALIZATION_FAILED
0x00000130 DYNAMIC_ADD_PROCESSOR_MISMATCH
0x00000131 INVALID_EXTENDED_PROCESSOR_STATE
0x00000132 RESOURCE_OWNER_POINTER_INVALID
0x00000133 DPC_WATCHDOG_VIOLATION
0x00000134 DRIVE_EXTENDER
0x00000135 REGISTRY_FILTER_DRIVER_EXCEPTION
0x00000136 VHD_BOOT_HOST_VOLUME_NOT_ENOUGH_SPACE
0x00000137 WIN32K_HANDLE_MANAGER
0x00000138 GPIO_CONTROLLER_DRIVER_ERROR
0x00000139 KERNEL_SECURITY_CHECK_FAILURE
0x0000013A KERNEL_MODE_HEAP_CORRUPTION
0x0000013B PASSIVE_INTERRUPT_ERROR
0x0000013C INVALID_IO_BOOST_STATE
0x0000013D CRITICAL_INITIALIZATION_FAILURE
0x00000140 STORAGE_DEVICE_ABNORMALITY_DETECTED
0x00000141 VIDEO_ENGINE_TIMEOUT_DETECTED
0x00000142 VIDEO_TDR_APPLICATION_BLOCKED
0x00000143 PROCESSOR_DRIVER_INTERNAL
0x00000144 BUGCODE_USB3_DRIVER
0x00000145 SECURE_BOOT_VIOLATION
0x00000147 ABNORMAL_RESET_DETECTED
0x00000149 REFS_FILE_SYSTEM
0x0000014A KERNEL_WMI_INTERNAL
0x0000014B SOC_SUBSYSTEM_FAILURE
0x0000014C FATAL_ABNORMAL_RESET_ERROR
0x0000014D EXCEPTION_SCOPE_INVALID
0x0000014E SOC_CRITICAL_DEVICE_REMOVED
0x0000014F PDC_WATCHDOG_TIMEOUT
0x00000150 TCPIP_AOAC_NIC_ACTIVE_REFERENCE_LEAK
0x00000151 UNSUPPORTED_INSTRUCTION_MODE
0x00000152 INVALID_PUSH_LOCK_FLAGS
0x00000153 KERNEL_LOCK_ENTRY_LEAKED_ON_THREAD_TERMINATION
0x00000154 UNEXPECTED_STORE_EXCEPTION
0x00000155 OS_DATA_TAMPERING
0x00000156 WINSOCK_DETECTED_HUNG_CLOSESOCKET_LIVEDUMP
0x00000157 KERNEL_THREAD_PRIORITY_FLOOR_VIOLATION
0x00000158 ILLEGAL_IOMMU_PAGE_FAULT
0x00000159 HAL_ILLEGAL_IOMMU_PAGE_FAULT
0x0000015A SDBUS_INTERNAL_ERROR
0x0000015B WORKER_THREAD_RETURNED_WITH_SYSTEM_PAGE_PRIORITY_ACTIVE
0x0000015C PDC_WATCHDOG_TIMEOUT_LIVEDUMP
0x0000015D SOC_SUBSYSTEM_FAILURE_LIVEDUMP
0x0000015E BUGCODE_NDIS_DRIVER_LIVE_DUMP
0x0000015F CONNECTED_STANDBY_WATCHDOG_TIMEOUT_LIVEDUMP
0x00000160 WIN32K_ATOMIC_CHECK_FAILURE
0x00000161 LIVE_SYSTEM_DUMP
0x00000162 KERNEL_AUTO_BOOST_INVALID_LOCK_RELEASE
0x00000163 WORKER_THREAD_TEST_CONDITION
0x00000164 WIN32K_CRITICAL_FAILURE
0x00000165 CLUSTER_CSV_STATUS_IO_TIMEOUT_LIVEDUMP
0x00000166 CLUSTER_RESOURCE_CALL_TIMEOUT_LIVEDUMP
0x00000167 CLUSTER_CSV_SNAPSHOT_DEVICE_INFO_TIMEOUT_LIVEDUMP
0x00000168 CLUSTER_CSV_STATE_TRANSITION_TIMEOUT_LIVEDUMP
0x00000169 CLUSTER_CSV_VOLUME_ARRIVAL_LIVEDUMP
0x0000016A CLUSTER_CSV_VOLUME_REMOVAL_LIVEDUMP
0x0000016B CLUSTER_CSV_CLUSTER_WATCHDOG_LIVEDUMP
0x0000016C INVALID_RUNDOWN_PROTECTION_FLAGS
0x0000016D INVALID_SLOT_ALLOCATOR_FLAGS
0x0000016E ERESOURCE_INVALID_RELEASE
0x0000016F CLUSTER_CSV_STATE_TRANSITION_INTERVAL_TIMEOUT_LIVEDUMP
0x00000170 CRYPTO_LIBRARY_INTERNAL_ERROR
0x00000171 CLUSTER_CSV_CLUSSVC_DISCONNECT_WATCHDOG
0x00000173 COREMSGCALL_INTERNAL_ERROR
0x00000174 COREMSG_INTERNAL_ERROR
0x00000175 PREVIOUS_FATAL_ABNORMAL_RESET_ERROR
0x00000178 ELAM_DRIVER_DETECTED_FATAL_ERROR
0x00000179 CLUSTER_CLUSPORT_STATUS_IO_TIMEOUT_LIVEDUMP
0x0000017B PROFILER_CONFIGURATION_ILLEGAL
0x0000017C PDC_LOCK_WATCHDOG_LIVEDUMP
0x0000017D PDC_UNEXPECTED_REVOCATION_LIVEDUMP
0x0000017E MICROCODE_REVISION_MISMATCH
0x00000187 VIDEO_DWMINIT_TIMEOUT_FALLBACK_BDD
0x00000188 CLUSTER_CSVFS_LIVEDUMP
0x00000189 BAD_OBJECT_HEADER
0x0000018B SECURE_KERNEL_ERROR
0x0000018C HYPERGUARD_VIOLATION
0x0000018D SECURE_FAULT_UNHANDLED
0x0000018E KERNEL_PARTITION_REFERENCE_VIOLATION
0x00000190 WIN32K_CRITICAL_FAILURE_LIVEDUMP
0x00000191 PF_DETECTED_CORRUPTION
0x00000192 KERNEL_AUTO_BOOST_LOCK_ACQUISITION_WITH_RAISED_IRQL
0x00000193 VIDEO_DXGKRNL_LIVEDUMP
0x00000195 SMB_SERVER_LIVEDUMP
0x00000196 LOADER_ROLLBACK_DETECTED
0x00000197 WIN32K_SECURITY_FAILURE
0x00000198 UFX_LIVEDUMP
0x00000199 KERNEL_STORAGE_SLOT_IN_USE
0x0000019A WORKER_THREAD_RETURNED_WHILE_ATTACHED_TO_SILO
0x0000019B TTM_FATAL_ERROR
0x0000019C WIN32K_POWER_WATCHDOG_TIMEOUT
0x0000019D CLUSTER_SVHDX_LIVEDUMP
0x000001A0 TTM_WATCHDOG_TIMEOUT
0x000001A1 WIN32K_CALLOUT_WATCHDOG_LIVEDUMP
0x000001A2 WIN32K_CALLOUT_WATCHDOG_BUGCHECK
0x000001A3 CALL_HAS_NOT_RETURNED_WATCHDOG_TIMEOUT_LIVEDUMP
0x000001A4 DRIPS_SW_HW_DIVERGENCE_LIVEDUMP
0x000001A5 USB_DRIPS_BLOCKER_SURPRISE_REMOVAL_LIVEDUMP
0x000001A6 BLUETOOTH_ERROR_RECOVERY_LIVEDUMP
0x000001A7 SMB_REDIRECTOR_LIVEDUMP
0x000001A8 VIDEO_DXGKRNL_BLACK_SCREEN_LIVEDUMP
0x000001B0 VIDEO_MINIPORT_FAILED_LIVEDUMP
0x000001B8 VIDEO_MINIPORT_BLACK_SCREEN_LIVEDUMP
0x000001C4 DRIVER_VERIFIER_DETECTED_VIOLATION_LIVEDUMP
0x000001C5 IO_THREADPOOL_DEADLOCK_LIVEDUMP
0x000001C6 FAST_ERESOURCE_PRECONDITION_VIOLATION
0x000001C7 STORE_DATA_STRUCTURE_CORRUPTION
0x000001C8 MANUALLY_INITIATED_POWER_BUTTON_HOLD
0x000001C9 USER_MODE_HEALTH_MONITOR_LIVEDUMP
0x000001CA SYNTHETIC_WATCHDOG_TIMEOUT
0x000001CB INVALID_SILO_DETACH
0x000001CC EXRESOURCE_TIMEOUT_LIVEDUMP
0x000001CD INVALID_CALLBACK_STACK_ADDRESS
0x000001CE INVALID_KERNEL_STACK_ADDRESS
0x000001CF HARDWARE_WATCHDOG_TIMEOUT
0x000001D0 CPI_FIRMWARE_WATCHDOG_TIMEOUT
0x000001D1 TELEMETRY_ASSERTS_LIVEDUMP
0x000001D2 WORKER_THREAD_INVALID_STATE
0x000001D3 WFP_INVALID_OPERATION
0x000001D4 UCMUCSI_LIVEDUMP
0x000001D5 DRIVER_PNP_WATCHDOG
0x000001D6 WORKER_THREAD_RETURNED_WITH_NON_DEFAULT_WORKLOAD_CLASS
0x000001D7 EFS_FATAL_ERROR
0x000001D8 UCMUCSI_FAILURE
0x000001D9 HAL_IOMMU_INTERNAL_ERROR
0x000001DA HAL_BLOCKED_PROCESSOR_INTERNAL_ERROR
0x000001DB IPI_WATCHDOG_TIMEOUT
0x000001DC DMA_COMMON_BUFFER_VECTOR_ERROR
0x00000356 XBOX_ERACTRL_CS_TIMEOUT
0x00000BFE BC_BLUETOOTH_VERIFIER_FAULT
0x00000BFF BC_BTHMINI_VERIFIER_FAULT
0x00020001 HYPERVISOR_ERROR
0x1000007E SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M
0x1000007F UNEXPECTED_KERNEL_MODE_TRAP_M
0x1000008E KERNEL_MODE_EXCEPTION_NOT_HANDLED_M
0x100000EA THREAD_STUCK_IN_DEVICE_DRIVER_M
0x4000008A THREAD_TERMINATE_HELD_MUTEX
0xC0000218 STATUS_CANNOT_LOAD_REGISTRY_FILE
0xC000021A WINLOGON_FATAL_ERROR
0xC0000221 STATUS_IMAGE_CHECKSUM_MISMATCH
0xDEADDEAD MANUALLY_INITIATED_CRASH1

Многие технические специалисты в своей работе сталкиваются с ошибками, возникающими на различных стадиях загрузки операционной системы Windows. Случился и в моем практике не так давно достаточно нетипичный сбой этапа загрузки, в котором мне, к моему огромному недовольству, затруднительно было сходу разобраться. Смысл проблемы заключался в том, что вышедшая из строя по достаточно нетривиальной цепочке причин, система Windows 7 (Профессиональная) отказывалась грузиться во всех, без исключения, режимах загрузки. Процесс загрузки просто «вис» на черном экране на этапе, следующем за графическим экраном заставки (splash screen). Код работы с видеоадаптером устанавливал разрешение в родное для монитора, а далее загрузка просто-напросто останавливалась, при этом отчетливо был виден графический курсор мыши, сам манипулятор функционировал. Я так полагаю, что у профессионалов подобное явление обозначается термином черный экран смерти (Black Screen of Death, KSOD), наиболее распространенными причинами которого являются: повреждение различных частей реестра, невозможность запуска критически важных служб и кривая установка разрешений на системные каталоги (все эти вещи зачастую вызваны обновлениями). Большая просьба не путать термин «черный экран смерти» с общеизвестным синим экраном смерти (Blue Screen of Death, BSOD). Как я уже упоминал, загрузка в безопасном режиме останавливалась на том же самом месте, то есть я вообще никак, ни в каком из режимов не мог загрузить ОС!! С грустью вспомнил обо всех хваленых средствах диагностики загрузки вида xbootmgr и прочих трассировщиках, которые оказывались абсолютно бесполезными в подобной ситуации. Потом пришла мысль, что хорошо было бы подключиться каким-нибудь отладчиком удаленно и просто протрассировать код до ошибки, но подобным опытом я пока не обладаю, а проблему надо было решать в сжатые сроки.

В действительности, проблему удалось таки решить «по старинке», воспользовавшись отличным средством Microsoft DaRT, благо удалось докопаться до виновника сбоя.

Однако, сама ситуация навела меня на размышления о том, что на дворе уже далеко ведь не первая версия операционной системы, да и эра технологий, так сказать, в полном разгаре :), а пользователи Windows продолжают наблюдать «неопределенные состояния», в которых операционная система не в силах хотя бы на простом уровне вычислить причину сбоя и сообщить об этом оператору!! С другой стороны для меня лично очевидно, насколько сложно создать код, который отслеживал бы все возможные внутренние состояния. Как же быть? Ведь я совершенно не могу понять, на каком именно этапе загрузка остановилась. Поизучав материалы, которые имеются в Сети по теме этапов загрузки, понял, что большинстве своем они не дают представления о характерах и причинах возникновения ошибок, а содержат лишь общие рекомендации по устранению. Поэтому у меня возникло желание углубиться в материал и сделать себе небольшую карту ошибок этапов загрузки, да и для дальнейшего изучения он был бы неплохой отправной точкой. Так родилась идея начать серию статей по описанию стадий загрузки Windows с уклоном в сторону диагностики ошибок. Затем захотелось посмотреть на проблему ошибок загрузки Windows не с точки зрения последовательности «описание — снимок экрана — а попробуйте во это решение», а именно со стороны изучения всех возможных причины возникновения той или иной ошибки непосредственно с изучением кода. Да и вообще, мне лично всегда было интересно погрузиться до глубин кода, заглянуть «в файл» и прикоснуться к граням алгоритмов загрузки Windows, понять больше, познакомиться с ошибками, которые никогда не встречались мне на практике и не были освещены в информационном пространстве Сети, понять происходящее «изнутри».

Вот тут то была допущена основная ошибка :) Вернувшись к этому месту после довольно продолжительного времени изучения кода я могу смело утверждать, что попал я в настоящий кодовый кошмар. Я осознал, что алгоритмический пласт информации оказался очень большим, да и ошибки коррелируются между собой настолько витиевато, что иногда упускаешь из виду сам смысл происходящего. Материалы поддержки в Сети просто отсутствуют, поэтому приходится прорубать себе путь по абсолютно незнакомому маршруту.

Поэтому я начал сокращать материал и решил сильно не вдаваться в подробности логики работы процедур/функций, а сфокусироваться именно на причинах ошибок, возникающих на различных стадиях исполнения кода. Весь материал я вынужден разбить на несколько частей, что бы не городить огромную стену теста, при чтении которой можно запросто заснуть. В этой, первой статье цикла мы будем исследовать ошибки Bootmgr, то есть одного из начальных модулей в цепи загрузки операционной системы Windows.

Скажу честно, статья получилась сырая, потому как познания в реверсинге у меня явно не соответствуют уровню материала, посему и некоторые выводы не до конца проработаны и частично ошибочны! Но я всё же набрался смелости опубликовать материал, авось кому то и будет полезной в качестве базиса.

Как Вы уже поняли, данный материал в доработанной своем состоянии (к которому еще только предстоит дойти) призван помочь нам в дальнейшей практике и существенно облегчить диагностику проблем, возникающих на стадиях загрузки операционной системы, помочь более точно отследить логику ошибки, вместо того, чтобы с досады бросить решение и взяться за модернизацию, переустановку и прочие разные нехорошие вещи.

В данной версии статьи будет описана классическая схема разбиения и загрузки (legacy boot), основанная на использовании PC/AT BIOS и MBR.

Да просто потому, что под рукой в нужный момент оказалась именно эта конфигурация. Алгоритм с использованием GPT быть может опишу в будущем, но сразу могу сказать, что уже даже на достаточно ранних этапах код, в большинстве своем, идентичен.

Об ошибках в модулях загрузки

Непосредственно перед тем как начать описание процесса загрузки и возникающих в процессе проблем, я бы хотел сделать небольшое отступление на тему ошибок Bootmgr, Winload и ntoskrnl, возникающих в ходе работы кода одноименных модулей. Многие критичные процедуры кода, реагируя на те или иные условия, генерируют числовые идентификаторы ошибок и возвращают их через произвольный регистр (чаще всего это eax). Поскольку регистр, хранящий код ошибки, часто сохраняется либо умышленно не используется, ошибки в «сквозном» режиме передаются на верхний уровень иерархии вложенных подпрограмм, то есть просто при множественном возврате из них по команде ret. Таким образом ошибки регистрируются до тех пор, пока в коде не встречается логика обработки ошибки. Подобных участков обработки ошибок Bootmgr у нас несколько:

  • Блок кода в процедуре BmMain, выдающий ошибку BlInitializeLibrary failed …;
  • Блок кода в процедуре BmMain, выдающий ошибку BlResourceFindMessage failed …;
  • Блок кода в процедуре BmMain, выдающий ошибку BlXmiInitialize failed …;
  • Процедура BmFatalErrorEx, которая является глобальным обработчиком ошибок на все остальные случаи;
  • Процедура BlStatusError, которая вызывается из процедур MmHapReportHeapCorruption и BmFatalErrorEx в аварийной ситуации, проверяет наличие активного отладчика и случае наличия выдает специальную ошибку *** Fatal error …;

Некоторые обработчики незамедлительно выдают сообщение о возникшей проблеме на консоль, а вот глобальный кейс-обработчик BmFatalErrorEx содержит более витиеватую логику обработки поступившего кода с выдачей уже развернутого текста ошибки. Другая особенность обработки ошибок Bootmgr/Winload заключается в том, что, насколько я смог разобраться, менее значимые ошибки замещаются более значимыми. А это означает, что если ошибка возникла в какой-то процедуре как реакция на определенное условие, то другая ошибка, возникшая позже и являющаяся более приоритетной, может в процессе дальнейшего исполнения кода просто «затереть» первичную ошибку. Из этого следует, что на консоли пользователь видит лишь один результирующий статус, имеющий самый высокий приоритет, хотя, вероятно, имелся и менее приоритетный статус (или серия статусов), который был потерян.
Все ошибки, возникающие на этапах загрузки операционной системы Windows можно подразделить на две общие категории:

  • Ошибка NT_ERROR (NTSTATUS). Хорошо знакомый разработчикам статус, использующийся для передачи результатов ошибок между разными компонентами ОС. Используется в ошибках Bootmgr/Winload, то есть сразу начиная с этапа Bootmgr.
  • Ошибка BSOD BugCheck (STOP). Фатальная ошибка, хорошо знакомый всем нам синий экран смерти. Может возникать на поздних стадиях загрузки ОС, после того как подгружается логика обработки критических ошибок на этапе Ntoskrnl.

Код NTSTATUS — это 32-битное числовое значение, описывающее статус выполнения (результат завершения) кода подпрограммы/функции.

NTSTATUS частично описан в заголовочном файле ntstatus.h комплекта Windows WDK. Значения подразделяются на четыре категории:

  • NT_SUCCESS (0 − 0x3FFFFFFF);
  • NT_INFORMATION (0x40000000 − 0x7FFFFFFF);
  • NT_WARNING (0x80000000 − 0xBFFFFFFF);
  • NT_ERROR (0xC0000000 — 0xFFFFFFFF);

По коду можно заметить, что неотрицательные значения соответствуют «успешному» завершению подпрограммы, отрицательные — «ошибочному». Числовой статус обычно ассоциирован с текстовым описателем, который призван олицетворять понятный человеку, осмысленный текст ошибки (в теории, а на практике иногда весь мозг сломаешь в догадках). Полный список статусов NTSTATUS достаточно внушителен, но весь он нам не потребуется, поскольку далеко не все ошибки из этого списка мы можем наблюдать на изучаемых этапах загрузки Windows, а это, согласитесь, существенно облегчает нам работу :)

Некоторые особенности ошибок

У ошибок в коде Bottmgr я выделил несколько особенностей:

  • В коде Bootmgr присутствуют так называемых «перекодирующих процедур», которые на входе проверяют значения некоторых ошибок NT_ERROR (диапазон 0xC0000000-0xFFFFFFFF) и, в зависимости от неких условий, преобразуют их в предупреждения NT_WARNING (диапазон 0x80000000-0xBFFFFFFF). По этой причине некоторые ошибки пользователь вообще никогда не будет наблюдать на результирующем ошибочном экране, выводимом Bootmgr. Однако, я этот факт в своей работе не учитывал и описывал все без исключения ошибки.
  • Следующий немаловажный момент в логике обработки ошибок заключается вот в чем: Информационные сообщения об ошибках BootMgr/Winload, выводимые кодом модулей, вовсе не обязательно будут однозначно соответствовать уникальному значению NTSTATUS! Вот вам простой пример, наверняка многие видели на практике вот такую вот ошибку:

    Не удалось запустить Windows. Возможно, это произошло из-за недавнего изменения

    конфигурации оборудования или программного обеспечения. Чтобы устранить ошибку:

    1. Вставьте установочный диск Windows и перезагрузите компьютер.

    2. Выберите параметры языка,  затем нажмите кнопку «Далее».

    3. Выберите пункт «Восстановить компьютер».

    Если этот диск отсутствует, обратитесь за помощью к системному администратору

    или изготовителю компьютера.

    Состояние: 0xc000000f

    Сведения: Сбой меню загрузки, поскольку требуемое устройство недоступно.

    А вот теперь та же самая ошибка, но с другим состоянием:

    Не удалось запустить Windows. Возможно, это произошло из-за недавнего изменения

    конфигурации оборудования или программного обеспечения. Чтобы устранить ошибку:

    1. Вставьте установочный диск Windows и перезагрузите компьютер.

    2. Выберите параметры языка,  затем нажмите кнопку «Далее».

    3. Выберите пункт «Восстановить компьютер».

    Если этот диск отсутствует, обратитесь за помощью к системному администратору

    или изготовителю компьютера.

    Состояние: 0xc000000e

    Сведения: Сбой меню загрузки, поскольку требуемое устройство недоступно.

    Описание идентично, а коды разные!! Из этого следует, что одно текстовое сообщение об ошибке (сведения) может группировать сразу несколько родственных состояний (кодов ошибок). Если я нигде не ошибся, то для меня это, честно говоря, открытие! Получается, что разработчики решили особо не заморачиваться и не описывать в коде реакции на все возможные варианты ошибок, а ограничиться лишь конечным списком пояснений с выдачей конкретизирующего кода состояния (по которому и можно определить детали). И удивляться тут нечему, ведь данный факт опирается на бессмысленность генерации в коде реакции на все возможные состояния, поскольку код Bootmgr генерирует более 70 (!) уникальных ошибок, при том что многие неявны и по ним очень сложно работать, да и многие коды ошибок Bootmgr действительно одинаковы на разные события. Не думаю, что разработчик будет сидеть и корпеть над уникальным описанием для каждой ошибки.

  • Еще одна особенность ошибок Bootmgr проистекает из второго пункта и заключается в том, что одно и то же состояние (например, C00000001) может иметь различные причины возникновения внутри разных по назначению функций. Имеется ряд ошибок Bootmgr, под которые может подпадать достаточно широкий спектр проблем в разнообразных функциональных частях образа Bootmgr. В одной функции ошибка имеет один смысл, в другой функции — другой. Поэтому, подобные ошибки лишь с большой натяжкой могут быть подогнаны под общее определение, иногда лишь отдаленно отражающее реальную суть происходящего, соответственно и рекомендации по устранению могут иметь большое количество пунктов, логически не связанных между собой. Вот такая вот реальность!!

Учитывая все вышеописанные обстоятельства, мы примем на вооружение следующую логику:

При возникновении ошибки сначала обращаем внимание на код состояния (NTSTATUS), как на наиболее информативный, а уж затем, при необходимости, руководствуемся сведениями об ошибке.

Собственно, этот постулат и будет у нас основополагающим, мы будем изучать ошибки Bootmgr, а не их описания. Это позволит нам более детально локализовать, конкретизировать проблему, то есть сделать её более определенной в причине собственного возникновения.

BmFatalErrorEx

Хотелось бы еще отдельно упомянуть основную процедуру для вывода сообщений об ошибках на консоль, именуемую BmFatalErrorEx. Она вызывается примерно из 9 мест на протяжении всего кода Bootmgr. Сама процедура предназначена для группировки ошибок по классам и вывода ограниченного количества сообщений об ошибках. Я думаю практически всем специалистам приведенный ниже шаблон достаточно хорошо знаком:

Не удалось запустить Windows. Возможно, это произошло из-за недавнего изменения

конфигурации оборудования или программного обеспечения. Чтобы устранить ошибку:

1. Вставьте установочный диск Windows и перезагрузите компьютер.

2. Выберите параметры языка,  затем нажмите кнопку «Далее».

3. Выберите пункт «Восстановить компьютер».

Если этот диск отсутствует, обратитесь за помощью к системному администратору

или изготовителю компьютера.

Файл: _путь_до_проблемного_файла_;

Состояние: _код_состояния_;

Сведения: Общее_описание_ошибки (смотрите_ниже)

Указанная самой последней строка «Сведения» может содержать одну из нижеследующих текстовых строк:

Русское обозначение Английское обозначение
An error occured while attempting to read the boot configuration data file
An error occured while attempting to load the boot application
Ошибка при перечислении глобальных параметров An error occured while enumerating global parameters
Произошла непредвиденная ошибка An unexpected error has occured
Возникла неожиданная ошибка ввода-вывода An unexpected I/O error has occured
Не удается загрузить выбранную запись, поскольку приложение отсутствует или повреждено. The selected entry could not be loaded because the application is missing or corrupt
Файл данных конфигурации загрузки Windows не содержит действительного элемента списка загрузки ОС. The Windows Boot onfiguration Data file does not contain a valid OS entry
Введена неверная группа цифр. Исправьте выделенную группу. Invalid group of digits entered. Please correct the highlighted group
Сбой меню загрузки, поскольку требуемое устройство недоступно. The boot selection failed because a required device is inaccessible.
Не удается завершить действие, поскольку не получен ключ программы шифрования диска BitLocker, необходимый для снятия блокировки с тома. The action could not be completed because the BitLocker Drive Encryption key required to unlock the volume could not be obtained
Не удается создать диск в памяти, поскольку недостаточно памяти Ramdisk device creation failed due to insufficient memory
Требуемая информация отсутствует в файле данных конфигурации загрузки Windows The Windows Boot Configuration Data file is missing required information
Попытка загрузить 64-разрядное приложение, однако данный процессор не совместим с 64-разрядным режимом. Attempting to load a 64-bit application, however the CPU is not compatible with 64-bit mode
Возможно, файл поврежден. Указанная в его заголовке контрольная сумма не совпадает с вычисленной. The file possibly corrupt. Its header checksum does not match the computed checksum
Не удается проверить цифровую подпись этого файла. Windows cannot verify the digital signature for this file
В хранилище данных конфигурации загрузки обнаружена недопустимая конфигурация элемента объекта. The configuration for an element within the object is invalid in the boot configuration data store
The boot manager experienced an error parsing element within BCD object.
The boot manager experienced error due to an invalid entry in the BCD store.
Файл хранилища данных конфигурации загрузки Windows содержит неправильные данные The boot configuration file is invalid.
No valid entries found in the boot configuration data file

Как можно заметить, не все ошибки имеют свою локализацию на русскому языке. Не знаю с чем это может быть связано, однако имеются две вероятных причины: я неправильно распарсил ресурсы главного модуля bootmgr.exe, либо пропустил какие-то записи в файле локализации bootmgr.exe.mui.
Ну и наконец то давайте уже переходит к анализу ошибок Bootmgr. Хотелось бы заметить, что вступление у нас было бы неполным, если бы сразу перешли к этапу Bootmgr и не осветили, хотя бы даже и поверхностно, стадии, которые ему предшествуют и относятся к процессу работы кода BIOS, MBR, PBR (VBR), ибо без них сюжетная линия повествования не была бы цельной.

Стадия BIOS

На IBM PC/AT-совместимой машине с классическим BIOS, код прошивки (firmware) на финальной стадии своего функционирования, по очереди перебирает устройства загрузки, заданные пользователем через меню настройки (Setup), и пытается считать с каждого из этих устройств загрузочный сектор. Сектор этот носит название Главной Загрузочной Записи (Master Boot Record, MBR). После загрузки с носителя загрузочного сектора, код BIOS проверяет наличие в последних двух байтах сигнатуры AA55h, и если сигнатура не обнаружена, то будет предпринята попытка перехода к другому устройству, если это устройство последнее в списке загрузки, то выдается одна из следующих ошибок (зависит от вендора оборудования):

Ошибка
  • Черный экран после прохождения POST;
  • Operating system not found;
  • MBR missing;
Описание BIOS не нашел Master Boot Record (MBR)! А записан ли он вообще? Необходимо удостовериться:

  • Правильно ли в BIOS задан загрузочный носитель? Не редки ситуации, когда ошибочно задается (или выбирается автоматически) другой, не имеющий системной разметки.
  • Заданный физический носитель размечен и на него определенно производилась установка операционной системы?
Решение Если Вы уверены, что носитель выбран правильно и система на него устанавливалась, то, вероятнее всего, повреждена информация в первом физическом секторе носителя. В этом случае требуется загрузиться в консоль восстановления и выполнить в командной строке следующую команду:
bootrec /fixmbr

Как Вы видите, с точки зрения ошибок финальная стадия BIOS достаточно проста, поскольку характеризуется всего-лишь невозможность нахождения кода MBR, а именно 512-байтного физического сектора с предопределенной сигнатурой AA55h.

Стадия MBR

Если коду BIOS удалось успешно считать первый физический сектор носителя в память и успешно проверить его сигнатуру, то он передает считанным данным управление. Начинает выполняться непосредственно сам код MBR. Поскольку в этом миниатюрном участке кода сложно выделить данные, то мы просто будем говорить о блоке кода и данных, который содержит всего три ошибки, детектируемые на стадии выполнения кода главной загрузочной записи. ASCII-строки ошибок располагаются во второй половине 512-байтного сектора и выглядят следующим образом:

Строки ошибок MBR

Если обратите внимание, в данном случае со смещения 160 начинаются те самые ошибки. Ну а теперь давайте более детально остановимся на каждой из них:

Ошибка Invalid partition table
Описание код MBR не нашел в таблице разделов активный раздел (маркер 80h), то есть раздел, с которого должна происходить дальнейшая загрузка. Повреждена таблица разделов, то есть она не содержит активного раздела для загрузки.
Решение Для начала попробуем автоматические средства. Загрузимся в консоль восстановления и выполним команду: bootrec /fixmbr
Ошибка Error loading operating system
Описание Код не смог считать сектор с носителя при помощи функций прерывания int 13h. Ошибку возвращает код BIOS, который взаимодействует с портами контроллера. Проблема в BIOS? Это слишком старая материнская плата, у которой имеются проблемы с обработкой int 13h? :) Или физическая проблема контроллера/носителя?
Решение
  • Обновить/сбросить BIOS.
  • Поменять материнскую плату на совместимую :)
  • Проверить шлейф;
  • Проверить накопитель на предмет аппаратных неисправностей.
Ошибка Missing operating system
Описание Считали загрузочный сектор раздела (PBR), однако у него сигнатура оказалась не AA55h. То есть, считается, что на месте сектора записан мусор. По какой то причине поврежден PBR. Скорее всего с самим разделом всё нормально, то он существует и назначен активным, а вот с первым сектором раздела что-то не так.
Решение Требуется восстановить PBR. Для этого загружается в консоль восстановления и выполняем команду: bootrec /fixmbr
bootrec /fixboot

Стадия PBR (VBR)

MBR нашел раздел, помеченный активным, загрузил с него первый физический сектор NTFS-раздела (партиции, тома) PBR (VBR), проверил его сигнатуру и передал ему управление. Как мы помним, основной целью кода PBR является загрузка Менеджера загрузки Windows (Windows Boot Manager, BootMgr) и передача ему управления.

Ошибка A disk read error occurred
Описание Универсальная комплексная ошибка, используемая кодом PBR сразу на нескольких стадиях:

  • код PBR в попытке проверить самого себя (!) сравнивает начальные байты сектора с ASCII-значением NTFS (сигнатура, которая предваряет Boot Parameter Block, BPB)
  • код не смог определить наличие расширений int 13h
  • код пытается получить расширенный блок параметров диска при помощи int 13h
  • код сравнивает значение из BPB, расположенного в начале сектора со значением, возвращенным функцией 48h прерывания int 13h.
Решение Ваш BIOS не поддерживает расширения прерывания работы с диском 13h? Такие ситуации у нас полностью должны быть исключены, ну конечно если Вы не откопали совсем уж старую материнскую плату :) Во всех остальных случаях остается вариант с поврежденным блоком BPB в загрузочном секторе раздела. Его можно восстановить целиком со всем PBR, загрузившись в консоль восстановления и выполнив команду:
bootrec /fixboot
Ошибка BOOTMGR is missing
Описание Код PBR не смог найти файл BOOTMGR на специализированном разделе.
Решение Идем по списку:

  • Сперва проверить фактическое наличие зарезервированного (скрытого) раздела, его целостность;
  • В случае присутствия раздела проверить (при помощи diskpart), помечен ли раздел как активный (active);
  • Проверить наличие на разделе необходимой файловой структуры, включающей и актуальный для данной системы файл Bootmgr.exe. Для PCAT/MBR-загрузки: неплохо было бы переписать Bootmgr.exe с системного диска из WindowsBootPCATBootmgr.exe.
Ошибка BOOTMGR is compressed
Описание Код PBR определил, что что-то не так с разделом, на котором располагается Bootmgr.
Решение Снять атрибут сжатия с раздела, на котором находится Bootmgr.
Ошибка An operating system wasn't found
Описание Очередная комплексная ошибка дополнительного кода PBR, возникает в следующих случаях:

  • Для PCAT/MBR- загрузки: код не смог найти активный раздел, с которого будет производиться загрузка файла Bootmgr. Нет раздела, помеченного как активный (active).
  • Код на может найти файл Bootmgr в корне несмонтированного системного раздела.
Решение
  • Загрузиться в среду восстановления и из командной строки при помощи diskpart назначить активный раздел;
  • Загрузиться в любую среду WinPE и скопировать в корень несмонтированного системного раздела файл Bootmgr. Файл должен быть той же версии. Обычно он содержится на разделе с установленной системой по пути %SystemRoot%BootPCAT.

Стадия Boot Manager (BOOTMGR)

Вот тут то у нас и начинается самое интересное, собственно то, ради чего данная статья и задумывалась. Код PBR(VBR) находит зарезервированный загрузочный раздел (System Reserved), находит в корне раздела файл Bootmgr и загружает его в память, затем передает ему управление. Стоит обратить отдельное внимание на оригинальный файл Bootmgr, располагающийся в корне зарезервированного раздела. Если Вы заметили он не имеет расширения, поскольку это не исполняемый PE-файл в привычном нам понимании, а составной файл, содержащий в начале 16-битную «заглушку» реального режима и «запакованный» 32-битный PE-файл bootmgr.exe. После загрузки в память управление получает именно 16-битная «заглушка», которая и занимается переводом процессора в 32-битный защищенный режим, использующий плоскую модель памяти, распаковкой оригинального .exe-файла и передачей ему управления.

Инициализация

Bootmgr.exe стартует с основной процедуры BmMain, которая сразу же начинает выполнять инициализацию внутренних структур и ключевых аппаратных компонентов системы при помощи процедуры: BlInitializeLibrary. Эта процедура включает в себя такие подпрограммы как InitializeLibrary, ReinitializeLibrary. Код которых, в свою очередь, друг за другом вызывает следующие процедуры:

Процедура Описание
BlFwSetParameters Инициализация параметров, предназначающихся для последующей работы с функциями BIOS PC/AT. В том числе задается ключевой для всей логики параметр PcatServicesTable;
BlpMmInitialize Выделение памяти под рабочий процесс;
BlpTimeInitialize Замеры производительности системы, и определение параметра BlpTimePerformanceFrequency, который далее будет часто использоваться в коде;
BlpArchInitialize Инициализация служебных структур: глобальная таблица дескрипторов (GDT), таблица векторов прерываний (IDT), схема управления страницами физической памяти и прочее;
BlpTpmInitialize Инициализация модуля TPM;
BlpIoInitialize Инициализация файловых систем FAT32/NTFS для обеспечения доступа к основному системному разделу, содержащему операционную систему;
BlNetInitialize Инициализация сети. Используется для работы с PXE?;
BlUtlInitialize Инициализация внутренних переменных модуля. Для нас процедура на данный момент абсолютно не интересная;
PltInitializePciConfiguration Выделяет область памяти для работы с пространством PCI;
BlpSiInitialize Инициализация подсистемы безопасности;
BlBdInitialize Проверка на наличие отладчика этапа загрузки. Конфигурирование отладки режима загрузки;
BlpLogInitialize Конфигурирование файла хранения журнала загрузки;
BlpDisplayInitialize Инициализация консоли для вывода. Под консолью подразумевается как текстовый, так и графический локальный терминал, так и удаленная сетевая консоль.
BlpResourceInitialize Инициализация данных в ресурсной (.rsrc) секции, получения параметров дисплея, загрузка данных из файлов локализации (.mui), инициализация локали. Достаточно важная, я бы даже сказал, ключевая процедура, поскольку именно от её функционирования зависит дальнейшая работа с конфигурационными файлами.

Поскольку стадия инициализации критична для дальнейшего функционирования модуля Bootmgr, разработчики решили сообщать об ошибках данной стадии отдельно. Поэтому, при возникновении проблем в функционировании процедуры BlInitializeLibrary мы можем получить нашу первую ошибку Bootmgr, и выглядит она следующим образом:

BlInitializeLibrary failed 0xXXXXXXXX

Текст вывода намекает нам на то, что произошел сбой в какой-то из перечисленных выше подпрограмм. Поскольку данная ошибка охватывает достаточно большой диапазон кода и не имеет текстового описателя, то оператору будет довольно сложно понять в какой именно подпрограмме она возникла. Из этого следует, что единственный способ выявить причину, это попытаться вычислить её по коду ошибки. А что, в свою очередь, представляет из себя код 0xXXXXXXXX? Так ведь это же описанный выше NTSTATUS. Коды ошибок и их описания смотри в разделе ниже. Ну а мы двигаемся дальше.

Открытие BCD

После первичной инициализации логика bootmgr выполняет открытие файла данных конфигурации загрузки (BCD), который размещается:

  • Для традиционной PC/AT (MBR) загрузки — на активном разделе по пути BootBCD;
  • Для современной UEFI загрузки — на разделе EFI по пути EFIMicrosoftBootBCD;

Для достижения этой цели используется процедура под названием BmOpenDataStore.

Файл данных конфигурации загрузки (Boot Configuration Data, BCD) — база данных, содержащая конфигурацию отдельных аспектов этапа загрузки. По структуре идентична файлу реестра Windows, после загрузки монтируется в куст HKLMBCD00000000.

Как Вы уже поняли, BCD является одной из ключевых структур процесса загрузки, содержащей пункты меню загрузки, описывающие пути и настройки определенных элементов конфигурации. Естественно, что любые проблемы с этой базой сразу же выливаются в критические ошибки Bootmgr и невозможность продолжения процесса загрузки операционной системы.
Далее проверяются настройки журналирования этапов загрузки и если логгирование включено, то статус записывается в файл %SystemDrive%Bootbootstat.dat процедурой BmpInitializeBootStatusDatalog.
Затем процедура BlResourceFindHtml используется для поиска ресурсного файла bootmgr.xsl внутри ресурсной секции (.rsrc) образа файла bootmgr.exe.

Bootmgr.xsl является конфигурационным файлом, который содержит общие настройки параметров меню: внешнего вида, количества выводимых пунктов меню, наименование пунктов, описание горячих клавиш, цветового оформления меню, наличия разных опций и прочее.

Затем предпринимается попытка найти файл bootmgr.exe.mui, содержащий локализованные версии сообщений. На этапе поиска ресурсов, в случае возникновения проблем с нахождением/открытием оных, мы можем наблюдать ошибку:

BlResourceFindMessage failed 0xXXXXXXXX

Тут у нас ситуация, похожая ту, которая описывалась на этапе инициализации. Текст данной ошибки Bootmgr говорит о том, что в процедуре возникла проблема с нахождением ключевых ресурсов, которые потребуются в дальнейшей работе. Поскольку процедура многосоставная, то и источников проблемы может быть множество. Одной из причин данной ошибки могут быть проблемы с файлом bootmgr.xsl, поскольку без параметров, в нем описанных, дальнейшее выполнение невозможно. Коды ошибок у нас опять же сгруппированы в разделе под названием «Возникающие ошибки» ниже по тексту.
Далее ссылка на данные, загруженные из файла bootmgr.xsl передается процедуре BlXmiInitialize, которая предназначена для разбора содержимого файла и вывода на консоль меню загрузки на основе обнаруженных настроек. В случае, когда инсталлировано несколько операционных систем, либо присутствует несколько пунктов выбора, процедура отображает текстовое меню загрузки и ожидает пользовательского выбора.
при неудачном окончании процедуры выдается ошибка:

BlXmiInitialize failed 0xXXXXXXXX

Ошибка говорит нам о том, что на этот раз уже с содержимым файла bootmgr.xsl что-то не так. Вероятно, присутствуют ошибки в операндах, структуре. Возможно, пользователь пытался изменить внешнее представление меню при помощи какой-то редактора и допустил ошибку.
Далее происходит проверка собственной цифровой подписи при помощи процедуры BmFwVerifySelfIntegrity. На этом этапе мы можем видеть ошибку C0000428.
Отдельно происходит проверка на наличии файла гибернации hiberfil.sys при помощи процедуры BmResumeFromHibernate, и в случае необходимости, код вызывает winresume.exe и начинает восстановление системы из режима гибернации.

Далее, в коде имеется еще один локальный обработчик ошибки, который предназначен для вывода на консоль следующего содержания:

*** Fatal error 0xXXXXXXXX :

Честно признаюсь, воочию я никогда в живой природе подобной ошибки не наблюдал, да и судя по коду она возникает только в случае подключенного отладчика в теле процедуры BlStatusError непосредственно перед передачей управления отладчику посредством вызова прерывания командой int 3, поэтому акцентировать внимание мы на ней не будем.

Загрузка пункта и передача управления OSLoader

Этот этап у нас является финальным в логике работы модуля Bootmgr. Когда пункт загрузки выбран пользователем, либо назначен автоматически, процедура под названием BmpLaunchBootEntry начинает загружать выбранный пункт загрузки. Процедура BlImgStartBootApplication через подмножество вложенных процедур передает параметры и управление загрузчику операционной системы следующего этапа под названием winload.exe (OSLoader), располагающемуся на выбранном разделе по пути ?:WindowsSystem32winload.exe либо ?:WindowsSystem32bootwinload.exe.

Возникающие ошибки

Для удобства поиска по коду ошибки и её описателю, в данном разделе будут сведены воедино все ошибки Bootmgr, возникающие на различных стадиях процесса функционирования кода модуля. Сортироваться у нас они будут по коду NTSTATUS и иметь возможные варианты описания причины возникновения. К сожалению, таблица получилась не достаточно удобной, однако другого формата представления данных я пока не придумал, поэтому что есть то есть.

Код ошибки Контекст / Причина
C0000001
STATUS_UNSUCCESSFUL
Запрошенная операция была неудачной.
BlpNetInitialize :: Выставляется, если параметр BlpPxeInfo равен нулю.
BlpNetSoftReboot :: Выставляется, если параметр BlpPxeInfo равен нулю.
BmpGetCustomAction :: Возникает при проверке списка возвращенных опций из BlpGetBootOptionIntegerList.
BmPopulateBootEntryList :: Возникает при ошибке MiscGetBootOption, которая ищет опции загрузки по заданному типу.
BmpInitializeDisplayMeasurements :: Возникает как реакция на ошибку BlResourceFindMessage, которая ищет ошибку в ресурсной секции по её идентификатору.
DmDisplayFveRecovery :: Возникает как реакция на ошибку BlResourceFindMessage, которая ищет ошибку в ресурсной секции по её идентификатору.
DmDisplayFvePinEntry :: Возникает как реакция на ошибку BlResourceFindMessage, которая ищет ошибку в ресурсной секции по её идентификатору.
BmpResumeCreateBootEntry :: Возникает при проверке существования опции загрузки, получении описателя записи загрузки.
BmpBootIniConvertToOptionList :: Возникает как реакция на ошибку AhCreateLoadOptionsList, которая создает список опций загрузки для записи загрузки.
PcatGetNextE820Descriptor :: Возникает как реакция на ошибку PcatBiosInterrupt, которая вызывает прерывание.
FvebpPromptForExternalMedia :: Возникает как реакция на ошибку отклика от консоли вывода.
DeviceTablePurge :: Возникает при проверке открыто ли уже текущее устройство.
BcInitialize :: Возникает если BcpBlockAllocatorHandle = -1.
UdpFirmwareReceivePacket :: Возникает при проверке таймера через BlpFwCheckTimer.
VhdiDynamicReadWriteAtOffset :: Возникает при проверке первого входного аргумента функции на не нулевое значение.
VhdiReadVhdInfornationAtOffset :: Возникает при проверке четвертого входного аргумента функции.
BlDisplayGetCharacterResolution :: Возникает при проверке параметра DspTextConsole на нулевое значение.
BlDisplayGetTextColor :: Возникает при проверке параметра DspTextConsole на значение 14h.
BlDisplayGetScreenResolution :: Возникает при проверке параметра DspTextConsole на нулевое значение.
BfiPrintBitmap :: Возникает при проверке входных параметров функции.
ConsoleTextLocalSetTextResolution :: Возникает при проверке результата ConsolepFindResolution, которая выполняет поиск разрешения в списке.
ConsoleGraphicalGetConsoleResolution :: Возникает при проверке значения переменной блока входных параметров.
ConsoleGraphicalGetOriginalResolution :: Возникает при проверке значения переменной блока входных параметров.
ConsoleGraphicalGetOriginalFormat :: Возникает при проверке значения переменной блока входных параметров.
ConsoleGraphicalClearPixels :: Возникает при проверке значения переменной блока входных параметров.
ConsoleGraphicalReadPixels :: Возникает при проверке значения переменной блока входных параметров.
ConsoleGraphicalWritePixels :: Возникает при проверке значения переменной блока входных параметров.
ConsoleGraphicalGetFrameBuffer :: Возникает при проверке значения переменной блока входных параметров.
BfiMapCharacterCodeToGlyphIndex :: Возникает при проверке входных параметров функции.
ConsolePcatFindModeFromAllowed :: Возникает при проверке входных параметров функции.
ConsolePcatFindTargetMode :: Возникает при ошибке функции ConsolePcatFindModeFromAllowed.
FileTablePurgeEntry :: Возникает при проверке входных параметров функции.
FileIoOpen :: Возникает при ошибке нахождения записи о файле в файловой системе.
FatMount :: Возникает при отсутствии инструкции jmp (E9h) в первом байте загрузочного сектора раздела, то есть это не FAT!.
FatpIoOperation :: Статус по умолчанию?
EtfspCheckEtfs ::
EtfspCheckCdfs :: Возникает при ошибке сравнения имен посредством функции EtfsCompareNames.
UdfspGetNextDirectoryEntry :: Возникает при сравнении локального параметра (?) со значением 101h.
NtfsMount :: Возникает как реакция на неправильное значение параметра в BPB.
NtfsDecodeUsa :: .
NtfspDeviceReadAtOffset :: Возникает при проверке входного параметра на определенное значение.
NtfspDeviceWriteAtOffset :: Возникает при проверке входного параметра на определенное значение.
NtfspFileRecordPurgeEntry :: Выставляется при проверке блока входных параметров.
NetMount :: Выставляется при проверке входного параметра.
WimpValidateWim :: Ошибка проверки длины wim-образа.
BsdpGetLogControl :: Выставляется, если функция BlFileReadAtOffset вернула ошибку.
BsdpWriteAtLogOffset :: Выставляется, если функция BlFileWriteAtOffset вернула ошибку.
PxeGetBcdFilePath :: Выставляется при проверке на ноль второго параметра функции PxepGetPacketByType.
PxeGetBcdFilePath :: Выставляется как реакция на ошибку в функции PxepFindOption.
PxepGetInformation :: Выставляется при проверке на ноль второго параметра функции PxepGetPacketByType.
BlUtlRegisterMulticastRoutine :: Появляется если параметр UtlMcDisplayMessageRoutine равен нулю.
BlUtlRegisterProgressRoutine :: Появляется если параметр UtlProgressRoutine равен нулю.
BlEnRegisterEventHandler :: Появляется если параметр EnSubsystemInitialized равен нулю.
BlPdFreeData :: Возникает как реакция на ошибку в BlMmTranslateVirtualAddress, которая выполняет преобразование реальных и виртуальных адресов.
TblDoNotPurgeEntry :: Функция всегда возвращает данный код.
BlTftpQueryFileSize :: Возникает как ошибка при вычислении длины получаемого по TFTP файла
TftppGetImageRegular :: Выставляется, если первый входной параметр функции равен нулю.
TftppGetImageWindow :: Ставится при равенстве пятого входного параметра некоему значению.
TftppReceive :: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
TftppNegotiate :: Ставится при возврате в eax значения 0FFFFFFFFh из функции TftppSafeAtol.
PxeApiService :: Возвращается в коде ошибки в любом случае.
PxeSoftReboot :: Выставляется в случае значения переменной BlpPxeInfo, отличной от нуля.
SipGetOrCreatePersistentState :: Ошибка выставляется при значении определенной переменной в блоке параметров BlpLibraryParameters значению 100h.
SipInitializePhase1 :: Выставляет при вхождении подсистемы безопасности в некое незащищенное состояние. Пока не ясно, что это такое?
SipGracefulCloseEnvironment :: Возникает при проверке некоего глобального статуса безопасности (?).
BlTpmpFirmwareCall :: Возникает после проверки некоего глобального параметра, указывающего на номер функции работы с TPM. Если не укладываемся в диапазон функций, то ошибка.
ImgPcatStartLegacyLoader :: Возникает при ошибках функций RtlUnicodeStringToAnsiString и BlGetBootOptionString.
ImgPcatStartRestartBootcode :: Код ошибки в любом случае устанавливается на выходе функции.
BlMmFreeHeap :: Выставляется при проверке параметра HapInitializationStatus на несоответствие значению 1.
BlMmAllocateMemoryBlocks :: Выставляется при нулевом значении параметра MmBlockAllocatorInitialized.
BlMmDeleteBlockAllocator :: Выставляется при нулевом значении параметра MmBlockAllocatorInitialized.
BlpMmFreeMemoryBlocks :: Выставляется при нулевом значении параметра MmBlockAllocatorInitialized.
MmBapPurgeBlockAllocatorTableEntry :: Возникает при проверке блока входных параметров.
BcdGetElementDataWithFlags ::
BcdDeleteElement ::
BdpReconfigureDebuggerDevice :: Возникает при невозможности инициализировать контроллер шины 1394.
BdSetupPciDevice :: Ошибка выставляется, когда функция поиска отладочного устройства BdSearchForPciDebuggingDevice ничего не находит.
BdSendWaitContinue :: Возникает при проверке ошибок от множества функций, в том числе от BdMoveMemory и KdTransportMaxPacketSize.
BdWriteBreakPointEx :: возникает при проверке статуса выполнения функции BdDeleteBreakPoint.
BdRestoreBreakPointEx :: возникает при проверке статуса выполнения функции BdDeleteBreakPoint.
FveStatusFromHResult :: Возникает при перекодировке определенных статусов Bitlocker.
FveDatumCreateAndCopy ::
FveDatumFree :: Возникает при проверке локальной переменной.
Dbg1394_ReadPhyRegister :: Возникает как реакция на ошибку в функции BL_READ_REGISTER_ULONG.
Dbg1394_InitializeController :: Возникает при невозможности инициализировать контроллер шины 1394.
C0000002
STATUS_NOT_IMPLEMENTED
Запрошенная операция не выполнена.
BlDeviceEnumerateDeviceClass :: Выставляется при нулевом значении переменной BlockIoDeviceFunctionTable.
BlpDeviceOpen :: Выставляет при неподдерживаемом типе устройства.
BlockIoEnumerateDeviceClass :: Выставляется при нулевом значении переменной DiskDeviceFunctionTable.
BlockIoCreate :: Выставляется при проверки серии глобальных переменных на нулевое значение.
UdpEnumerateDeviceClass :: Единственный код возврата из функции. Вероятно говорит о том, что данная функция не доработана?
UdpReset :: Единственный код возврата из функции. Вероятно говорит о том, что данная функция не доработана?
ConsoleGraphicalSetTextResolution :: Выставляется, если первый параметр функции нулевой.
BfiGetEbdtBitmapInformationFromSubTable ::
BfiReadEbdtImage :: Выставляется при проверке значения третьего входного параметра функции.
WimWrite :: Единственный код возврата из функции. Вероятно говорит о том, что данная функция не доработана?
NtfspReadWriteAttributeEx :: Выставляется при нулевом значении седьмого входного параметра функции.
BlTpmpFirmwareCall :: Выставляется при отсутствии необходимых функций для работы с TPM.
BlTcgFwGetLog :: Выставляется при различных проблемах дешифровки проверки TPM/дешифровки содержимого.
MmPaeInitializeTranslation :: Выставляется при ненулевом значении второго входного параметра функции.
MmDefInitializeTranslation :: Выставляется при ненулевом значении второго входного параметра функции.
RtlpImageDirectoryEntryToData32 ::
RtlpImageDirectoryEntryToData64 ::
FveStatusFromHResult :: Выставляется при результате 80004001 (Unable to activate partition) BitLocker.
FveVmkInfoProcess :: Выставляется при проверке некой локальной переменной на значение 1?
C0000005
STATUS_ACCESS_VIOLATION
Инструкция обратилась к определенному адресу памяти и не может выполнить (чтение/запись/выполнение).
BdTrap0d ::
BdTrap0e ::
C000000E
STATUS_NO_SUCH_DEVICE
Заданное устройство не существует.
BmOpenDataStore :: возникает при неготовности PXE.
BmResumeProbeLegacyHiberFile :: Не может получить доступ к устройству загрузки.
BmReadBootIni :: Выставляется как реакция на ошибку в функции BlGetBootOptionDevice, которая получает различные опции для устройства загрузки.
FileDeviceOpen :: Возникает как реакция на ошибку в функции BlDeviceOpen.
DiskFirmwareOpen :: Устанавливается, если переменная NextDiskNumber больше FirmwareDisks.
CdromFirmwareOpen :: Возникает при проверке блока параметров, на который указывает BlpRootDevice.
FloppyFirmwareOpen :: Возникает, если переменная NextFloppyNumber больше значения 2.
BlNetSoftReboot :: Возникает если переменная BlpBootDevice принимает нулевое значение.
PxeGetBcdFilePath :: Выставляется при проверке переменной BlpPxeInfo на нулевое значение.
AhGetBootEnvironmentDevice :: Выставляется при проверке локальной переменной после вызова BlDeviceEnumerateDeviceClass и при равенстве переменной BlpPxeInfo нулю.
AhGetFilePath :: Генерируется при проверке выходных переменных функции BlGetDevice.
PltpCheckDeviceExistence :: Устанавливается при ошибках доступа к устройству по шине.
C000000F
STATUS_NO_SUCH_FILE
Файл не найден. Файл не существует.
BmpReadBootIni :: Возникает при проверке параметра из блока параметров BlpPxeInfo.
FvebpReadKeyFile :: Возникает при несовпадении при сравнении внутреннего параметра с аргументом. Скорее всего по факту считывания блока данных, относящего к ключевому файлу BitLocker’а из внешнего источника.
FvebpSearchForKeyFileNoPrompt :: Возникает при ошибке выполнения функции BlDeviceEnumerateDeviceClass. Скорее всего отсутствует ключевой файл BitLocker’a.
FileDeviceOpen :: Возникает при ошибке в функции BlpFileOpen. В глобальном плане система не может найти файл следующего этапа (зачастую это WindowsSystem32Winload.exe (Winload.efi)).
RdpLoadImage :: Возникает при ошибке в функции RdpQueryImageSize. Вероятно, в глобальном плане это ошибка загрузки образа виртуального диска (ramdisk).
RdpUnlockSourceDevice :: Устанавливается как реакция на ошибку функции BlGetDevice. Относится к виртуальному диску (ramdisk).
RdpLoadFileToImage :: Возникает при ошибке функции BlGetFilePath. В глобальном плане функция монтирует файл в образ в памяти (ramdisk).
FatpGetNextDirent :: Вероятно, возникает при вычислении следующего элемента файловой таблицы?
EtfspSearchForDirent :: Появляется при ошибке функции EtfspGetDirent. В глобальном плане имеется в виду файловая система El Torito File System, используемая на CD диска. Скорее всего ошибка поиска записи в файловой системе.
EtfspGetDirent :: Ошибка в получении записи файла из файловой системы El Torito File System.
UdfspSearchForMatchingFid :: Возникает при проблемах получения записи о файле при помощи функции UdfspGetNextDirectoryEntry. Подразумевается файловая система udfs, которая может использоваться на широком спектре сменных носителей (чаще оптические диски).
NtfspSearchForFileIndexEntryEx :: Генерируется при ошибке функции NtfspGetNextFileIndexEntry, которая выполняет поиск записи о файле в файловой системе ntfs.
NtfspGetNextFileIndexEntry :: Генерируется при ошибке функции NtfspGetNextIndexEntry, которая выполняет поиск записи любого типа в файловой системе ntfs.
WimOpen :: Возникает при работе с блоком данных WimFunctionTable. В глобальном плане это попытка открытия wim-образа инсталляции.
WimpSearchForDirent :: Ошибка поиска файловой записи в образе.
BlTftpQueryFileSize :: Устанавливается при ошибках длины удаленного файла.
TftppReceive :: Генерируется при проверке входного параметра на значение 100h.
C0000010
STATUS_INVALID_DEVICE_ REQUEST
Указанный запрос является не допустимой операцией для целевого устройства.
BlockIopReadWriteVirtualDevice ::
UdpOpen ::
UdpRead ::
UdpWrite ::
DeviceLogGetDeviceInfo ::
NetOpen ::
NetRead ::
NetWrite ::
C0000011
STATUS_END_OF_FILE
Достигнут конец файла. Далее данной отметки в файле данных не обнаружено.
NtfspGetNextIndexEntry :: Возникает при отсутствии следующего индекса в цепочке кластеров. Данных для файла больше нет.
NtfspReadWriteAttribute :: Возникает при проверке входных параметров функции. Скорее всего при проверке атрибутов файла.
C0000017
STATUS_NO_MEMORY
Не хватает виртуальной памяти или файла подкачки для завершения операции.
BlMmAllocateHeap :: Возникает, когда функция не смогла выделить кучу (блок) памяти коду произвольной стадии. Выделение памяти инициируется в более чем 180 (!) фрагментах кода Bootmgr, однако привести огромный список всех процедур пока не могу. Причина ошибки может быть:

  • проблемы в работе оперативной памяти;
  • недостаточное количество оперативной памяти;
  • интегрирование большого количества драйверов в образ;
  • интегрирование большого количества приложений в образ;
C0000022
STATUS_ACCESS_DENIED
Процесс запросил доступ к объекту, но не был наделен правами доступа.
CdromFirmwareOpen :: Выставляется при проверке типа устройства загрузки, содержащемся в переменной BlpBootDevice
FileIoOpen :: Проверяется валидность и наличие DeviceID в таблице DmDeviceTable.
TftppReceive :: Выставляется при проверке входного аргумента функции на значение 100h (512).
C0000023
STATUS_BUFFER_TOO_SMALL
Буфер слишком мал, чтобы уместить запись. Информация не записана в буфер.
BmpProcessBadMemory :: Возникает обработка вызова BlPdQueryData
BmGetOptionList :: Функция предназначена для загрузки опций приложений из BCD. Возникает при обработке возвращаемых значений из BcdEnumerateAndUnpackElements
BmErrorGetData :: Возникает если ячейка loc_404607 = 0.
BmpHandleInvalidBcdEntryEvent :: возникает при обработке ошибки из BcdGetElementDataWithFlags
BmpBootIniConvertToOptionList :: возникает при обработке ошибки из AhCreateLoadOptionsList
FvebpLogError :: возникает при обработке ошибки из FveDatasetAppendDatum
PartitionEnumerateDeviceClass :: возникает при обработке ошибки из PartpEnumerateGptPartitions
PartpEnumerateMbrPartitions :: возникает при обработке результатов из PartpTraverseMbrPartitions
PartpEnumerateGptPartitions ::
DiskEnumerateDeviceClass ::
RdDeviceEnumerate ::
FatGetNextFile ::
EtfsGetNextFile ::
UdfsGetNextFile ::
NtfsGetNextFile ::
WimGetNextFile ::
PxeAddDhcpOption ::
BlLogData :: Функция предназначена для записи статуса операции в bootlog.
BlImgLoadImageWithProgressEx ::
ImgpLoadPEImage ::
BlPdQueryData ::
AhGetFilePath ::
ArcConvertStringIntegerToOption ::
ArcConvertStringToOption ::
BlTftpGetImage ::
BlTcgFwGetLog ::
ImgPcatStartLegacyLoader ::
BlMmGetMemoryMap ::
BiConvertRegistryDataToElement ::
BiEnumerateSubObjectElements ::
BiConvertBcdElements ::
FveWorksetCommit ::
FveGetExternalFileName ::
FveDatasetAppendDatum ::
FveKeyringCreate ::
FveKeyringCreateDataset ::
sub_44CBDF ::
C0000024
STATUS_OBJECT_TYPE_ MISMATCH
Существует несоответствие между типом объекта, который требуется по запрошенной операции и типом объекта, указанным в запросе.
FvebOpen ::
FvebpCheckAndAllocateFvebDevice ::
BiGetObjectDescription ::
BiConvertRegistryDataToElement ::
BiGetRegistryValue ::
sub_44CBDF ::
C0000032
STATUS_DISK_CORRUPT_ ERROR
Структура файловой системы на диске повреждена и непригодна для использования. Запустите служебную программу chkdsk для тома.
WimpinitilizeDecompressionWordspace ::
C0000033
STATUS_OBJECT_NAME_ INVALID
Имя объекта является недействительным.
VhdiLoadVerifyParentVhd ::
C0000034
STATUS_OBJECT_NAME_NOT_ FOUND
Имя объекта не найдено.
BiOpenKey :: Возникает как реакция на значение 0FFFFFFFFh в статусе ошибки при возврате из CmpFindSubKeyByName.
BiEnumerateSubKeys :: Возникает при сравнении какого то параметра с 0.
CmpFindSubKeyInLeafWithStatus :: .
CmpFindSubKeyByHashWithStatus :: .
CmpFindNameInListWithStatus :: .
C0000035
STATUS_OBJECT_NAME_ COLLISION
Имя объекта уже существует.
BlHtStore :: Возникает при обработке возвращенной ошибки из BlHtLookup
C000003F
STATUS_CRC_ERROR
Ошибка контрольной суммы.
FveAesCcmDecrypt :: возникает как реакция на возвращаемые значения процедурой FvepAesCcmComputeUnencryptedTag
C0000040
STATUS_SECTION_TOO_BIG
Указанный раздел слишком большой, чтобы быть отображенным на файл.
ImgPcatStartLegacyLoader :: возникает по причине стартового адреса, меньше чем 7F000h
C0000059
STATUS_REVISION_MISMATCH
Указывает на то, что два уровня редакции являются несовместимыми.
BmpGetCustomAction :: возникает по причине стартового адреса, меньше чем 7F000h
BmErrorGetData :: Возникает при проверке каких-то данных, возвращаемых BlPdQueryData.
C000007A
STATUS_PROCEDURE_NOT_FOUND
Адрес процедуры не найден в библиотеке DLL.
FveLibAllocZero :: возникает как реакция на несоответствие какого-то глобального параметра на входе процедуры.
FveLibUnseal :: возникает при проверке глобального параметра 46D1BC на входе процедуры.
FveLibRandom :: возникает при проверке глобального параметра 46D1BC на входе процедуры.
FveLibGetTime :: возникает при проверке глобального параметра 46D1BC на входе процедуры.
FveLibFree :: возникает при проверке глобального параметра 46D1BC на входе процедуры.
C000007B
STATUS_INVALID_IMAGE_ FORMAT
Образ либо не предназначен для выполнения в Windows, либо содержит ошибку в структуре.
BmpResumeProbeLegacyHiberFile :: Генерируется при некорректном заголовке файла гибернации (hiberfil.sys).
BmpResumeReadLegacyHiberFileHeader :: Выставляется при проверке некоторых атрибутов файла гибернации (hiberfil.sys).
BmpResumeInvalidateLegacyHiberfile :: Выставляется при проверке некоторых атрибутов файла гибернации (hiberfil.sys).
BfiInitializeFonts :: Появляется при проверке входного параметра. Глобально функция относится к коду по работе со шрифтами.
BfiLoadFontFile :: Возникает проверке структуры считываемого файла шрифта.
BfiConvertIndexSubTable :: .
BfiReadCmapTable :: Возникает при ошибке чтения блоков данных из файла шрифтов.
BfiReadEdbtImage :: Возникает при ошибке чтения блоков данных из файла шрифтов.
BfiReadSegmentMapHeader :: Возникает при ошибке чтения блоков данных из файла шрифтов.
BfiValidateFontNameTable :: Возникает при проверке таблицы имен шрифта.
ImgpLoadPEImage :: Возникает при проверке загружаемого PE-образа.
ResInitializeMuiResources :: Возникает при попытке найти секции различного назначения в PE-образе.
ImgArchPcatLoadBootApplication :: Возникает при загружаемого образа на валидность.
RtlImageNtHeaderEx :: Генерируется при отсутствии корректной сигнатуры ‘MZ’ заголовка .exe-файла.
LdrRelocateImageWithBias :: Появляется при проверке загружаемого образа через функцию RtlImageNtHeader.
C0000095
STATUS_INTEGER_OVERFLOW
Целочисленное переполнение.
RtlULongAdd ::
RtlULongLongToULong ::
BmpReadBootIni ::
RtlULongLongAdd ::
RtlULongSub ::
RtlULongLongSub ::
RtlULongLongMult ::
FvebpCheckAndAllocateFvebDevice ::
BfiReadEblcIndexSubTables ::
RtlULongPtrAdd ::
UdfspValidateFileIcb ::
BlGetApplicationImageName ::
MmHapHeapAllocatorExtend ::
BlXmiTransformTextForXml ::
C0000098
STATUS_FILE_INVALID
Раздел, на котором размещался файл был изменен извне, таким образом открытый файл больше не действителен.
BmpGetSelectedBootEntry :: возникает при проверде данных, возвращенных из BmEnumerateBootEntries.
BmFwVerifySelfIntegrity :: возникает при обработке параметров из RtlImageNtHeader.
UdfspFileRead :: возникает при проверке каких то значений.
WimpReadResource :: .
WimpFixupSecurity :: .
WimpFixupDirectory :: .
WimpFixupStreams :: .
WimpRead :: .
WimpDecompress :: .
BlImgGetModuleName :: .
BlImgVerifySignedPeImageFileContents :: .
ImgpLoadPEImage :: .
BdpPopulateDataTableEntry :: .
C000009A
STATUS_INSUFFICIENT_ RESOURCES
Недостаточно системных ресурсов для завершения вызова API.
Генерируется при ошибках функции выделения блока памяти BlMmAllocateHeap. Приводить список всех процедур не имеет особого смысла. Вероятно причиной является: недостаточное количество доступной физической памяти, физически неисправная память, попытка загрузиться со сжатого диска VHD(X), размер которого превышает 100 Гбайт.
C000009C
STATUS_DEVICE_DATA_ ERROR
На жестком диске имеются сбойные блоки (сектора).
BdSetupPciDevice ::
C000009D
STATUS_DEVICE_NOT_CONNECTED
Проблема с кабелем, диск не терминирован, или контроллер не смог получить доступ к жесткому диску.
RcpGetEmsParameters :: относится к службе аварийного управления?
BdTrap :: .
C00000A0
STATUS_MEMORY_NOT_ALLOCATED
Была сделана попытка освободить виртуальную память, которая не выделялась.
BlImgUnloadBootApplication ::
C00000A2
STATUS_MEDIA_WRITE_ PROTECTED
Запись на диск невозможна, потому что он защищен от записи. Снимите защиту от записи.
BiDeleteKey ::
FveDecryptRegion :: .
FveEncryptRegion :: .
FveFilteredWrite :: .
C00000A3
STATUS_DEVICE_NOT_READY
Привод не готов к использованию; возможно открыта дверца. Убедитесь, что диск вставлен и дверца привода закрыта.
BlpDeviceOpen ::
C00000BA
STATUS_FILE_IS_A_DIRECTORY
Файл, который был указан как целевой, является директорией, а вызывающий код указал, что это может быть что угодно, но не каталог.
FatRead ::
FatWrite :: .
NtfsRead :: .
NtfsWrite :: .
NtfsSetInformation :: .
C00000BB
STATUS_NOT_SUPPORTED
Запрос не поддерживается.
BmProcessCustomAction :: возникает как реакция на выходную ошибку BmpGetCustomAction.
BmpCreateDevices :: возникает при работе с входными параметрами.
BmpBootIniParseLine :: возникает при возврате из strnicmp при сравнении с «c:».
PcatVesaGetVideoMode :: ??? не факт, маска.
PcatVesaGetVideoModeInformation :: .
BlpDeviceResolveLocate :: .
UdpSetInformation :: .
PartitionEnumerateDeviceClass :: .
PartpOpenMbrPartition :: .
PartpOpenGptPartition :: .
PartpCreatePartitionDeviceEntry :: .
PartpTraverseMbrPartitions :: .
VhdiBuildVhdData :: .
VhdiVerifyAndInitializeVhd :: .
VhdiVerifyVhdFooter :: Возникает при проверке завершающего блока vhd-образа, скорее всего параметра Current Size, то есть длины.
VhdiFileDeviceReadWrite :: .
VhdiReadVhdInformation :: .
DiskPcatGetDiskInformationEx :: .
BfiGetFontStrikeForCharacter :: .
BfiGetFontStrikeForResolution :: .
ConsoleTextSplitterGetTextState :: .
ConsoleTextSplitterGetTextResolution :: .
ConsoleTextSplitterSetTextResolution :: .
ConsoleGraphicalSplitterGetConsoleResolution :: .
ConsoleGraphicalSplitterGetGraphicalResolution :: .
ConsoleGraphicalSplitterGetOriginalResolution :: .
ConsoleGraphicalSplitterSetGraphicalResolution :: .
ConsoleGraphicalSplitterGetCharacterResolution :: .
ConsoleGraphicalSplitterGetTextCellResolution :: .
ConsoleGraphicalSplitterGetFormat :: .
ConsoleGraphicalSplitterGetOriginalFormat :: .
ConsoleGraphicalSplitterReadPixels :: .
ConsoleGraphicalSplitterGetFrameBuffer :: .
BfiGetTableOffsetAndSize :: .
NtfspReadWriteNonResidentAttributeEx :: .
BlNetSoftReboot :: .
ImgpGetFileSize :: .
ImgPcatStartLegacyLoader :: .
BlMmAllocatePagesInRange :: .
PltpAccessPciConfig :: .
RtlCompressWorkSpaceSizeLZNT1 :: .
RtlUnicodeToMultiByteN :: Всегда возвращает значение в eax (на выходе).
C00000BD
STATUS_DUPLICATE_NAME
Дубликат имени обнаружен в сети.
SipGetOrCreatePersistentState ::
C00000C0
STATUS_DEVICE_DOES_NOT_ EXIST
Данное устройство не существует.
ImgpCopyApplicationBootDevice ::
BlTpmpHardwarePresent ::
C00000E4
STATUS_INTERNAL_DB_CORRUPTION
Запрошенная операция не может быть завершена из-за катастрофического сбоя носителя или повреждении структуры данных на диске.
FveInitializeCrypto ::
sub_44CBDF :: возникает как реакия на выходной параметр GveDatumKeyGetSize
C00000E9
STATUS_UNEXPECTED_IO_ ERROR
Если возвращается ошибка ввода-вывода, которая не определена в стандартном фильтре FsRtl, она конвертируется в данный код. Непредвиденная ошибка ввода-вывода. Скорее всего проблемы с чтением носителя.
FvebpEndTpmBinding ::
BlockIoPcatExtendedInt13 :: Выдается при проблемах чтения с устройства. Сигнализирует о проблемах чтения с устройства.
BlockIoPcatConventionalInt13 :: Выводится при возникновении проблем чтения с загрузочного носителя.
DiskPcatGetLegacyGeometry ::.
DiskPcatGetDiskInformationEx ::.
UdfspFileRead ::.
UdfspVolumeRead ::.
NtfspGetNextIndexEntry ::.
C00000F0
STATUS_INVALID_PARAMETER_2
Неверный параметр был передан функции в качестве второго аргумента.
RtlAnsiStringToUnicodeString ::
RtlUnicodeStringToAnsiString ::
C00000F7
STATUS_INVALID_PARAMETER_9
Неверный параметр был передан функции в качестве девятого аргумента.
InitializeLibrary ::
C0000103
STATUS_NOT_A_DIRECTORY
Запрошенный открытый файл не является каталогом.
BlFileGetNextFile ::
C0000106
STATUS_NAME_TOO_LONG
Указанное имя строки слишком длинное. Невозможно использовать в целевой функции.
BiEnumerateSubKeys ::
C0000120
STATUS_CANCELLED
Запрос ввода-вывода был отменен.
BmpLaunchBootEntry :: Возникает при расшифровке ошибок от функции DmDisplayDumpError, которая выводит на экран меню ошибок.
BmUpdateMulticastMessage :: Появляется как реакция на любую возвращенную функцией OsxmlResultHasAction ошибку.
BmDisplayFveRecovery :: Появляется при возникновении проблем с удаленной консолью.
C0000141
STATUS_INVALID_ADDRESS
Дескриптор адреса недействителен.
BlFileGetNextFile ::
C000014C
STATUS_REGISTRY_CORRUPT
Структура одного из файлов, содержащего данные реестра, повреждена; Образ файла в памяти поврежден; или файл не может быть восстановлен, поскольку резервная копия или журнал отсутствуют или повреждены.
::
C000014F
STATUS_UNRECOGNIZED_ VOLUME
Том не содержит распознаваемую файловую систему. Убедитесь, что все необходимые драйверы файловой системы были загружены и том не поврежден.
::
C0000184
STATUS_INVALID_DEVICE_ STATE
Устройство не находится в допустимом состоянии для выполнения запроса.
::
C0000185
STATUS_IO_DEVICE_ ERROR
Устройство ввода/вывода сообщает об ошибке ввода/вывода.
???????? :: Появляется при таймаутах (чрезвычайно низкой скорости) чтения с загрузочного носителя. Подобное поведение характерно в случае физической неисправности загрузочного носителя (различного рода повреждениях жесткого/твердотельного накопителя).
PcatSetVideoMode :: Генерируется при ошибке проверки поддерживаемых видеоадаптером текстовых режимов.
SppGetByte :: Появляется при ошибках работы с последовательным портом.
BlpTpmInitialize :: Выставляется при ошибке функции TpmApiSetTpmCallback, которая тестирует наличие обработчика драйвера TPM.
FveStatusFromHResult :: Выставляется при обработке внутренних статусов BitLocker.
C0000190
STATUS_TRUST_FAILURE
Ошибка входа в сеть. Узел проверки недоступен.
::
C0000221
STATUS_IMAGE_CHECKSUM_MISMATCH
Возможно образ файла поврежден. Контрольная сумма, указанная в заголовке, не совпадает с расчетной.
::
C0000225
STATUS_NOT_FOUND
Объект не найден.
Общие причины:

  • Неправильно выставленные параметры загрузки в BIOS: UEFI/Legacy-схемы загрузки.
  • Невозможно найти файл BootBCD: неправильно подготовленный загрузочный USB-диск — выставлен некорректный BIOS DISK ID в MBR (не 80).

Частные причины:
BmMain :: Выставляется при ошибках в функциях: BmpInitializeBootStatusDataLog, BmpLogBootResolution, BlResourceFindHtml, которые выполняют инициализацию файла журнала и поиск ресурсов внутри секций модуля Bootmgr.

BmpGetCustomAction :: Возникает, если функция BlpGetOptionIntegerList не находит опций для выбранной записи загрузки.
BmpTransferExecution :: Выставляется при обработке результатов функции BlPdQueryData, которая проверяет корректность параметров.
BlHtLookup :: Возникает при обработке хэш-таблицы.
BlHtGetNext :: Выставляется при поиске в хэш-таблице.
BlpmFreeMemoryBlocks :: Генерируется при поиске по битовой карте памяти.
BcdGetElementDataWithFlags :: Возникает как реакция на ошибку в функции BiOpenKey, вероятно предназначающейся для работы с ключами реестра или файлов, построенных на схожей основе.
BcdDeleteElement :: Возникает как реакция на ошибку в функции BiOpenKey, вероятно предназначающейся для работы с ключами реестра или файлов, построенных на схожей основе.
FveDatasetGetDatumHeader :: Возникает при проверке на корректность входных параметров. В глобальном плане функция относится к функционалу BitLocker’а.
FveKeyringGetDataset :: Возникает при проверке на корректность входных параметров. В глобальном плане функция относится к функционалу BitLocker’а.
FveDatumValidateCode :: Возникает при ошибке функции FveDatumGetDataSegment. В глобальном плане функция относится к функционалу BitLocker’а.
C0000229
STATUS_FAIL_CHECK
Проверка не удалась.
::
C0000242
STATUS_BAD_COMPRESSION_ BUFFER
Указанный буфер содержит неправильно оформленные данные.
::
C000025F
STATUS_UNSUPPORTED_ COMPRESSION
Указанный формат сжатия не поддерживается.
::
C0000273
STATUS_NO_MORE_MATCHES
Больше нет совпадений для текущего индекса перечисления.
::
C0000354
STATUS_DEBUGGER_INACTIVE
Попытка произвести действие с отладочным портом не удалась, порт находится в процессе удаления.
::
C0000359
STATUS_INVALID_IMAGE_WIN_32
Указанный образа файла имеет неправильный формат; возможно это образ для 32-битной Windows.
::
C000035A
STATUS_INVALID_IMAGE_WIN_64
Указанный образа файла имеет неправильный формат; возможно это образ для 64-битной Windows.
::
C0000420
STATUS_ASSERTION_FAILURE
Произошла ошибка утверждения.
::
C0000428
STATUS_INVALID_IMAGE_HASH
Хэш для образа не найден в системных каталогах. Образ поврежден или подделан.
ImgpValidateImageHash :: Проверка хэша кода самого модуля Bootmgr. При модификации кода исполняемого файла именно здесь выставляется ошибка.
C0000453
STATUS_RESTART_ BOOT_ APPLICATION
Это приложение загрузки необходимо перезапустить.
::
C0000718
STATUS_ALREADY_REGISTERED
Функция обратного вызова уже зарегистрирована.
::
C0000904
STATUS_FILE_TOO_LARGE
Размер файла превышает допустимый и не может быть записан.
::
C0140019
STATUS_ACPI_INVALID_TABLE
Была сделана попытка использовать некорректную таблицу.
::
C01A000A
STATUS_LOG_BLOCK_INVALID
Служба логгирования обнаружила недопустимый блок.
::
C03A0002
STATUS_VHD_DRIVE_FOOTER_ CHECKSUM_ MISMATCH
Некорректная контрольная сумма футера (завершающего блока) виртуального образа.
::
C03A0003
STATUS_VHD_DRIVE_FOOTER_ CORRUPT
Поврежденный футер (завершающий блок) виртуального образа.
::
C03A0004
STATUS_VHD_FORMAT_UNKNOWN
Некорректный формат виртуального образа.
::
C03A0005
STATUS_VHD_FORMAT_ UNSUPPORTED_ VERSION
Неподдерживаемая версия формата виртуального образа.
::
C03A000B
STATUS_VHD_INVALID_BLOCK_ SIZE
Неправильный размер блока виртуального образа.
::
C03A000C
STATUS_VHD_BITMAP_MISMATCH
Несоответствие битовой карты виртуального диска.
::
C03A000E
STATUS_VHD_CHILD_PARENT_ID_ MISMATCH
Ошибка идентификатора ID виртуального образа.
::
C03A0012
STATUS_VHD_INVALID_SIZE
Некорректный размер виртуального образа.
::

Выводы

Изучение внутренней структуры ошибок Bootmgr достаточно трудоемкое и кропотливое занятие, требующее огромного количества времени, а самое главное, недюжих знаний, каковыми я пока что не обладаю. Следствием этого, как Вы могли уже заметить, является тот факт, что далеко не все ошибки Bootmgr освещены достаточно подробно. В отсутствии вменяемой логики анализа исходного кода приходится изучать ошибки Bootmgr по ассемблерному листингу в отладчике. Вероятно, кто-то из профессионалов реверсинга может посоветовать восстанавливать исходные тексты на языке C/C++ для упрощения восприятия, но и данными, казалось бы, необходимыми знаниями я пока не наделен. Поэтому, статья находится в статусе альфа как не до конца проработанная, тем не менее, надеюсь, что даже в таком сыром виде будет полезна кому-либо в качестве плацдарма для изучения специфических, возникающих на начальной стадии Bootmgr, ошибок. Какие выводы можно сделать по данному материалу? Я думаю, основной вывод, который напрашивается: невозможно точно характеризовать возникающую ошибку Bootmgr и определенно сказать об причине её возникновения даже по числовому идентификатору NTSTATUS, поскольку многие статусы имеют различные причины в различных функциях. Единственное что можно сделать, это попытаться по перебору возможных причин ошибки дойти до настоящего виновника сбоя, затем уже воспользовавшись для ошибки рекомендациями по устранению. Можно воспользоваться и общими алгоритмами, которые на каждом шагу можно встретить в Сети, однако не все из них действенны. Возможно, большинство ошибок, которые приведены в результирующей таблице, на практике никогда никому не встречались и скорее всего, в живой природе можно наблюдать значительно меньший диапазон ошибок, которые уже более-менее изучены и по которым написаны развернутые мануалы по устранению. Однако, судя по некоторым темам конференций, можно сказать, что раритетные ошибки всё же имеют место быть, поэтому в качестве отправной точки материал всё же пригодится.

Понравилась статья? Поделить с друзьями:
  • Код ошибки 0x00000142
  • Код ошибки 0x0000013a windows 10
  • Код ошибки 0x00000139 windows 10 как исправить
  • Код ошибки 0x00000133 windows 11
  • Код ошибки 0x00000131