Have you ever experienced a situation where your Windows has been stuck on the page of Windows is loading files…? Have you found a solution? This article will tell you how to solve the problem of Windows stuck at loading files.
Windows Stuck at Loading Files
Today Windows operating system is the most commonly used operating system in the world. No matter it is in the office, school or at home, we have established a close relationship with Windows. However, during the usage of Windows OS, many issues may appear. Windows Stuck at loading screen is a common issue that may occur from Windows Vista to Windows 8.
This post may help you get out of Windows stuck at loading screen error.
What is Windows stuck at loading files?
To put it simply, when staring up a computer, Windows is unable to boot into the desktop, and hangs at a progress bar on black screen, saying Windows is loading files…Another situation is Windows 7 install hangs at loading files, hence the installation won’t go on.
Here is one of the many true examples posted on Tomshardware.com:
My custom built PC doesn’t have genuine Windows 7, It’s been two years since I built it and today I got blue screen of death about three times. The second and third times were hours after the first and happened back to back. After the third BSOD windows will not start and brings me to the option of “launch startup repair (recommended)” or “Start windows normally”.
If I choose “start windows normally”, the computer just resets. If I choose “launch startup repair”, it brings me to and remains stuck at “windows is loading files…” I have important information that I’m going to need for a test tomorrow morning. How can I fix this without having to wipe my hard drive? If I leave it alone it automatically chooses “launch startup repair” and remains stuck at “windows is loading files”. Thanks! –Tomshardare.com
Fixes for Windows Hangs on Loading Files
In this post, we put forward several suggestions on how to fix Windows is loading files freezes from three aspects, along with step-by-step guide. As the solutions to this issue for each OS are very similar, we mainly take Windows 8 for example to explain in this article.
1. Reinstall Windows
For average users, the first solution that comes to mind is to reinstall Windows. But we have to admit this solution is effective to cope with non-hardware issues. You can reformat the OS partition, then reinstall OS. If there are important files you need to save, use an external dock for the hard drive and transfer those files to another location before you carry out formatting. While a more effective way is to use MiniTool Partition Wizard Bootable CD which works on Windows XP/Vista/7/8/10 to help you. With this tool you can transfer files to your own computer even it won’t boot into Windows.
Kind Remind:
MiniTool Partition Wizard Bootable CD is generated by Bootable Media Builder, which is a paid feature in MiniTool Partition Wizard. Thus, to get a bootable CD, you need to purchase MiniTool Partition Wizard advanced edition.
Before you do:
Follow How to Build Boot CD/DVD Discs and Boot Flash Drive with Bootable Media Builder to create Partition Wizard Bootable CD. Then insert the media into your computer and set it as the boot device in BIOS. Doing these, your computer will boot from this bootable media.
Step 1: Backup files
After entering the main interface of Partition Wizard Bootable CD, you can see all drives connected to your machine are listed there, including their key information. Now select the system partition to copy personal files.
Follow these steps to finish the copy:
- Select Copy Partition from the left menu.
- Select system partition as the source partition. Click Next to go on.
- Choose an unallocated space as the destination location. Click Next to go on.
- Edit the partition size and partition location of the selected location. Click Finish to go back to the main interface.
- Click Apply on the upper left corner to make this operation effective.
Step 2: Format OS partition
Follow these steps to finish the formatting:
- Click the system partition and choose Format Partition and confirm that you want to do the formatting.
- In the pop-up window, specify the partition parameters (should be NTFS file system to install Windows) and click OK.
- Press Apply to execute changes.
Step 3: Reinstall Windows
When it’s done you go ahead and re-install OS on that partition. To reinstall Windows, follow these steps:
- Insert the installation DVD and boot from it.
- Select a keyboard method and language and click Next.
- Click Install Now at the Welcome screen.
- Follow the wizard to complete the installation process.
Click to Tweet
By doing the 3 steps we explained, finally you can finish “computer gets stuck on loading files” error totally. But reinstalling Windows is not all you can do, for more flexible choices, continue reading the best part:
2. Restore Windows
Reinstalling Windows is good, but is time-consuming, for you will have to reinstall many applications and re-customize settings. So the next solution to fix Windows stuck at loading files is to restore system if you happen to have a system image backup. There are two options for you to restore Windows: using system image and recovery drive.
Fix 1: Restore Windows with a recovery drive
If you’ve created a recovery drive, you can boot from the recovery drive and restore your image from it. This is an effective way to deal with computer getting stuck on loading files.
How can you actually use this?
- Insert the USB recovery drive and boot from it. This may require changing the boot order in your computer’s BIOS menu.
- Select your Language.
- Click on Troubleshoot, then select Reset your PC.
- Click Next and then select your version of Windows OS.
- Note here you should select No, keep the existing partitions.
- Here choose Just remove my files.
- Click Reset.
- When system restarts into the Recovery screen, remove your USB recovery drive, and click Continue to exit and boot back into Windows.
- Follow the instructions to go through all steps as the first time setup.
If no recovery drive is available, you can create one on another Windows PC that works properly. This post tells how to do this.
Fix 2: Restore system image from Windows installation media
System images are a very useful way to restore your entire PC. If you have made a recent system backup image, and a Windows installation disc is available, you can boot it to restore the system image.
Here is the tutorial:
- Boot from the Windows installation media like you did in booting recovery drive.
- At Troubleshoot screen, select Advance Options.
- Select the System Image Recovery to restore Windows.
- On the next screen choose the target operating system, then an account to continue (a password may be required).
- Select the latest available system image backup or customize another one to restore your OS.
- The following options are based on your own, but it is recommended to choose Only restore system drives to keep separate data safe.
- When you have finished selecting about how to restore your system, you can tap Finish and Yes to start re-image.
- when all is done, restart your PC.
3. Repair System
If you want to fix the current system directly instead of installing a new one or come back to a former state, you may try resolving the “Windows is loading files loop” error by following these ways.
Note: Most of the solutions below require the use of the Microsoft Windows setup CD or DVD.
Fix 1: Reset BIOS
Reset BIOS woks quickly on windows is loading files stuck installing windows 7. To reset your computer’s BIOS settings to the default settings, follow these steps:
- Restart computer.
- Press a key to boot into the BIOS menu. (This key is not always the same for different manufacturers. Usually it should be one of these: Esc, Del, F2, F8, F12, etc. This key will be displayed on the first screen when your computer boots, before the Windows logo appears.)
- Find the option to reset your BIOS or load its default options.
- Save your changes and exit the BIOS menu.
Tip: If resetting BIOS to default doesn’t make sense, try updating BIOS to its latest version available.
Fix 2: Boot into Safe Mode
Booting into Safe Mode and uninstalling recently installed applications or drivers is an easy way that may fix Windows stuck at loading files. To boot into Safe Mode, follow these steps:
- Restart your computer.
- Press the F8 key before the Windows logo appears.
- At the Advanced Boot Options menu, select Safe Mode and press Enter.
Fix 3: Boot into Last Known Good Configuration
As we have mentioned booting into Safe Mode, then booting into the Last Known Good Configuration mode is also deserves a trying, because it provides a way to recover system from problems such as a newly added driver that may be incompatible with your hardware. Please do the following:
- Restart computer and Press F8 as we have explained in Fix 2.
- At the Advanced Boot Options menu, select the Last Known Good Configuration option and press Enter.
Attention:
Last Known Good Configuration mode is disabled in Windows 8 and Windows 10 by default. Here is the way to enable it in Windows 8.
- Under the key HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerConfiguration ManagerLastKnownGood, create a DWORD value “Enabled” and set it to 1.
- Under the key HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerConfiguration Manager, create a DWORD value “BackupCount” and set it to 2.
- Run cmd and input “BCDEdit /SET {default} BootMenuPolicy Legacy”, this will enable the regular legacy F8 key in the Boot manager.
- Restart your machine.
Fix 2 and Fix 3 are also useful in fixing Windows black screen error. To get to know more solutions to BKSOD issue, please read Perfect Solutions to Black Screen Error When Booting Windows right now.
Fix 4: Run Start-up Repair
Start-up Repair is a recovery tool in Windows that can fix some boot issues. It will scan the computer for problems and try to fix them to make your computer boot correctly. To run the Startup Repair utility on your Windows, follow these steps:
- Insert the original Windows installation disc and boot from it.
- At the Welcome screen, click Repair your computer.
- Choose your operating system.
- At the System Recovery Options screen, select Start-up Repair and wait until it finishes.
- Restart your computer.
Fix 5: Run bootrec
By using the bootrec.exe utility provided on your Windows installation DVD, you can attempt to fix the “Windows is loading files freeze” error. Do these steps to run the bootrec utility:
1. Insert the Windows installation DVD and boot from it.
2. Select Language, Time, Currency, Keyboard method and click Next.
3. Select Repair your computer on the welcome screen.
4. Choose your operating system from the list and click Next.
5. Click Command Prompt from the System Recovery Options menu.
6. Type these commands and press the Enter key after each command:
- bootrec /FixMbr
- bootrec /FixBoot
- bootrec /RebuildBcd
7. Type exit and press Enter key.
8. Restart your computer.
Tip: You can also use MiniTool Partition Wizard to help fix MBR. Press the buttons below to get MiniTool Partition Wizard Pro, and then use it to build a Bootable CD. Finally you can boot your computer from the Bootable CD, select the system disk and choose Rebuild MBR feature to complete.
Fix 6: Run chkdsk
Why does CHKDEK matter? Well, you can also try to run the chkdsk utility and check whether there is something wrong with your computer’s HDD. Please follow these steps:
- Follow the steps in Fix 5 until you reach Command Prompt.
- Type chkdsk C: /r and press Enter. (C: is the letter of the drive where your OS is installed.)
- Type exit and press Enter.
- Restart your computer.
Bottom Line
Now we have gone through the possible solutions to Windows stuck at loading screen issue from three aspects: reinstall Windows, restore Windows and repair system. Although we have been trying, we believe they are not the whole story. If you are now troubled by this problem, you can have a try one by one, and give us a feedback on whether your issue is resolved.
If you have a better solution to Windows hangs on loading files, you can leave us a comment below or you can send an email to [email protected] to help us make progress and help more users out. We appreciate every effort you have made.
Проблема с зависанием загрузки файлов исполняемых компонентов Windows может возникнуть по разным причинам и серьезно затруднить работу компьютера. Когда приложение зависает на стадии загрузки, пользователи могут столкнуться с задержками, простоем системы или даже полным блокированием. Эта проблема может быть вызвана различными факторами, от неправильной установки программного обеспечения до наличия вредоносных программ на компьютере.
Одной из возможных причин проблемы с зависанием загрузки файлов исполняемых компонентов Windows является конфликт между программами или драйверами. Когда несколько программ или драйверов пытаются использовать одни и те же системные ресурсы одновременно, возникают конфликты, которые могут привести к зависанию загрузки. Также стоит учитывать, что некоторые программы могут быть несовместимыми с вашей версией операционной системы, что также может вызывать проблемы.
Другим возможным источником проблемы может быть наличие вредоносных программ на компьютере. Вредоносные программы могут вмешиваться в процесс загрузки исполняемых компонентов Windows и вызывать их зависание. Это может быть вирус, троян, шпионское ПО или другое вредоносное приложение. Если ваш компьютер подвержен атакам вредоносных программ, рекомендуется выполнить полное сканирование и удаление вредоносных программ с помощью надежного антивирусного программного обеспечения.
Для решения проблемы с зависанием загрузки файлов исполняемых компонентов Windows предлагается ряд действий. В первую очередь, рекомендуется выполнить проверку наличия совместимости программы или драйвера с вашей операционной системой. Если найдено несовместимое приложение, обновите его до последней версии или установите альтернативное решение. Также вы можете попробовать отключить все ненужные программы и службы автозагрузки, чтобы избежать возможных конфликтов.
Содержание
- Загрузка файлов: причины и решения проблемы
- Неполадки исполняемых компонентов Windows
- Проблемы с загрузкой исполняемых файлов
Загрузка файлов: причины и решения проблемы
Существует несколько причин, по которым загрузка файлов может зависать:
- Неполадки с жестким диском: если у вас есть проблемы с жестким диском, это может замедлить или остановить процесс загрузки файлов. Неполадки с файловой системой, поврежденные секторы или недостаток свободного места на диске могут вызвать зависание.
- Нестабильное подключение к интернету: если вы загружаете файлы из интернета, нестабильное или медленное подключение может вызвать задержку или зависание процесса.
- Вирус или вредоносное ПО: наличие вируса или вредоносного программного обеспечения на компьютере может вызвать проблемы с загрузкой файлов. Вредоносные программы могут замедлить систему или блокировать загрузку.
- Конфликты с программным обеспечением: проблемы совместимости между различными программами или неправильные настройки могут привести к зависанию процесса загрузки файлов.
Если вы столкнулись с проблемой зависания при загрузке файлов, есть несколько способов ее решения:
- Проверьте свой жесткий диск на наличие ошибок и поврежденных секторов. Это можно сделать с помощью утилиты проверки диска, доступной в операционной системе Windows.
- Проверьте свое подключение к интернету. Убедитесь, что вы имеете стабильное подключение с достаточной скоростью.
- Запустите антивирусное сканирование для обнаружения и удаления вирусов и вредоносного ПО.
- Обновите все установленные программы и драйверы. Некорректная работа программного обеспечения может вызывать проблемы с загрузкой файлов.
- Если проблема остается нерешенной, попробуйте запустить процесс загрузки в безопасном режиме. Это позволит определить, есть ли проблема с конфликтом программного обеспечения.
Загрузка файлов является важным процессом, и любые проблемы с ним могут вызвать неудобства для пользователя. Однако, следуя приведенным выше рекомендациям, можно устранить причины зависания и восстановить нормальную работу загрузки файлов на компьютере под управлением операционной системы Windows.
Неполадки исполняемых компонентов Windows
Одной из возможных причин неполадок может быть повреждение самого исполняемого файла компонента. Это может произойти, когда файл был поврежден в процессе загрузки или установки операционной системы. В таком случае рекомендуется произвести проверку целостности системных файлов с помощью утилиты SFC (System File Checker).
Еще одной возможной причиной проблем с исполняемыми компонентами может быть конфликт с другими программами или приложениями. Если у вас установлены сторонние программы, которые могут взаимодействовать с исполняемыми компонентами Windows, то возможно им нужно изменить настройки или отключить их временно, чтобы избежать конфликтов.
Ошибки в реестре операционной системы также могут вызывать проблемы с исполняемыми компонентами. В таком случае рекомендуется использовать специализированные инструменты для очистки и восстановления реестра, такие как CCleaner или Wise Registry Cleaner.
Некоторые антивирусные программы могут блокировать исполняемые компоненты Windows из-за подозрительной активности. Рекомендуется проверить настройки антивируса и добавить исполняемые компоненты Windows в список доверенных или исключенных файлов.
Если проблема с загрузкой файлов исполняемых компонентов Windows возникает только в отношении конкретных приложений, то возможно нужно переустановить или обновить эти приложения. Некоторые приложения могут иметь собственные зависимости от исполняемых компонентов Windows и требовать их актуальных версий для корректной работы.
Несмотря на то, что неполадки с исполняемыми компонентами Windows могут вызывать различные проблемы, в большинстве случаев их можно решить без особых сложностей. Если вы столкнулись с проблемой загрузки файлов исполняемых компонентов Windows, рекомендуется использовать перечисленные выше методы поиска причины и решения проблемы, чтобы вернуть операционную систему в нормальное состояние.
Проблемы с загрузкой исполняемых файлов
Загрузка исполняемых файлов может столкнуться с различными проблемами, которые могут привести к зависанию компонентов Windows. Вот некоторые из наиболее распространенных причин и возможные решения проблемы:
Проблема | Причина | Возможное решение |
---|---|---|
Ошибки в файле | Наличие ошибок или повреждений в исполняемом файле | Попробуйте выполнить проверку целостности файла или загрузить его заново |
Отсутствие необходимых компонентов | Отсутствие или неправильно установленные компоненты, необходимые для загрузки файла | Установите или обновите необходимые компоненты |
Проблемы с антивирусным ПО | Антивирусное программное обеспечение может блокировать загрузку исполняемых файлов | Проверьте настройки антивирусного ПО и добавьте файл в список исключений |
Проблемы сети | Плохое соединение, проблемы с прокси или брандмауэром могут вызывать проблемы с загрузкой | Проверьте соединение, настройки прокси и брандмауэра, возможно стоит изменить их параметры |
Если проблемы с загрузкой исполняемых файлов продолжаются, рекомендуется обратиться к специалистам технической поддержки или воспользоваться инструментами диагностики и восстановления Windows для детального анализа и устранения возможных проблем.
Неоконченный эксперимент с неполным количеством входных данных.
Данный материал представляет собой своего рода исследование, попытку разобраться в одной, набившей уже оскомину, загадке этапа загрузки операционной системы Windows. Многие специалисты согласятся со мной, что на практике довольно часто приходится наблюдать сбой при котором станция, загружаясь в безопасном режиме, отображает на экране монитора список загруженных драйверов (последним из которых часто выводится classpnp.sys) и сообщение «Подождите, пожалуйста…», после чего благополучно подвисает:
При этом, та же проблема имеет зеркальное отображение и в обычном (нормальном) режиме загрузки: в редких случаях загрузка останавливается на анимированном логотипе (значке) Windows (bootscreen), который может «видоизменяться» на экране приветствия бесконечно долго:
намного чаще же система подвисает на более позднем этапе, когда на черном фоне остается графический курсор мыши:
Настроение в этот момент, надо признаться, стремительно падает, поскольку приходит понимание, что это один из самых тяжелых общих случаев в практике любого технического специалиста и, по традиции, предстоит много работы. Подобного рода сбои относятся к категории общих не случайно, поскольку причиной их возникновения является целый комплекс источников, поэтому, в идеале, они тянут за собой диагностику аппаратного и программного уровней персонального компьютера. Сама по себе процедура диагностирования непроста, до сих пор не выработано какого-либо универсального алгоритма, а значит нас опять ждет копание в заметках, занудные поиски в Сети в надежде составить матрицу решений, одно из которых должно дать положительный результат. Ну что же, время принятия кардинальных решений рано или поздно настает.
Подопытная конфигурация: Windows 7 SP1 Professional RUS x86, 32-битная выбрана как наименее капризная в плане препятствий, чинимых на пути исследователя, защита у неё определенно проще, патчить легче, бороться с PatchGuard не приходится!!
Теория
На данный исторический момент уровень моих знаний оставляет желать лучшего, тем не менее, все же попытаемся выйти за привычные рамки теории. В очередной раз не перестаешь удивляться отсутствию у одной из самых популярных настольных операционных систем продуманной диагностической подсистемы. Удивляюсь, конечно же, не я один.. на официальных форумах Microsoft по теме зависания на classpnp.sys можно встретить достаточно много вопросов, к примеру, пользователь с ником Дима_413 пишет:
Справедливо, поскольку зависание на classpnp.sys, наряду с черным экраном смерти и штормом прерываний, является примером недоработок в архитектуре системы Windows 7, вероятно ведущих свою родословную из недостатков архитектуры x86. Странно другое, ведь на ранних стадиях загрузки операционной системы (начиная с кода сектора MBR, Bootmgr) уже обеспечена простая диагностика, которая выводит сообщения в текстовом режиме в качестве реакции на ошибки. Получается, что отсутствие подобного подхода при зависании на classpnp.sys наблюдается по причине возникновения блокировок в коде ядра в части обработки ошибок/таймаутов от сторонних драйверов [устройств] на раннем этапе загрузки, вероятно разработчики посчитали подобный код бессмысленными, поскольку он все-равно не сможет отработать? Поэтому:
причина появления этого опуса — отсутствие на начальных этапах загрузки какой бы то ни было внятной системы журналирования, либо отсутствия полноценных знаний о таковой.
Во всех ветках обсуждений на тему зависания на classpnp.sys, найденных в Сети, все обычно сводится к рассуждениям относительно природы этого драйвера, структуры, функциональных задач, роли, которую он играет в процессе загрузки и, главное, как можно привести его (обратно) в работоспособное состояние? Очевидно что драйвер уже однозначно определен в виновники происходящего зависания, при том, что во всех дискуссиях попросту отсутствует исследовательская (практическая) доказательная часть, что, конечно же, понижает объективность данных теорий. Ну что же, давайте и мы последуем в рамках описанного «слепого» тренда и начнем повествование с попытки описания функциональных особенностей драйвера.
Что есть сам classpnp.sys?
Classpnp — общая библиотека класса устройств хранения информации (жестких/твердотельных накопителей, ленточных устройств, CD/DVD-ROM’ов и аналогичных), используемая драйверами жестких дисков, CD/DVD-ROM, ленточных накопителей (включая SATA/SCSI-накопители).
Из определения следует, что любой драйвер, относящийся к классу устройств хранения информации (магнитных, ленточных, оптических), использует функции данной библиотеки в процессе функционирования. Действительно, образ представляет собой типовую системную библиотеку (DLL), содержащую набор устройствонезависимых процедур (функций), используемых классом отмеченных ранее устройств. Похоже что данная библиотека — это библиотека, функции которой используются всеми драйверами накопителей (устройств хранения) в операционной системе Windows. Библиотека обеспечивает для системных/сторонних драйверов уровня ядра общие процедуры работы с устройствами хранения на уровне обслуживания пакетов IRP, поддержки функций PnP и управления питанием, выполнения общих алгоритмов работы с памятью, чтения, записи, инициализации, конфигурации устройств, работа с уровнями IRQL, обработку ошибок и много прочей аналогичной необходимой требухи.
В Windows XP и последующих операционных системах, некоторые из наиболее часто используемых сервисов, ранее предоставляемых прямыми вызовами к библиотеке classpnp.sys, теперь предоставляются драйвером класса. Поэтому в Windows XP (и более поздних системах) обычно нет необходимости прямого вызова функции classpnp.sys из сторонних минипорт-драйверов.
Драйвера класса устройств хранения информации вместе с соответствующим драйвером порта, используются для взаимодействия с конечными физическими накопителями. Драйвера класса располагаются в стеке (драйверов) выше драйверов портов и управляют устройствами своего класса, вне зависимости от того, к какой шине они подключены.
Ну что же, бегло ознакомились с функциональными особенностями мнимого виновника торжества? Теперь нам необходимо разобраться со структурой данного «драйвера», понять как и когда он загружается и загружается ли вообще.
Общая теория загрузки
Перед тем как понять, какое же место classpnp.sys занимает в системе, нам необходимо освежить в памяти общую теорию загрузки. Из неё мы знаем, что весь процесс запуска операционной системы Windows 7 на начальных стадиях можно описать следующим образом (упрощенное представление):
- Выполняется код микропрограммы BIOS/UEFI (POST);
- Выполняется код сектора MBR;
- Выполняется код сектора(ов) PBR;
- Выполняется код модуля Bootmgr.exe(.efi);
- Выполняется код модуля Winload.exe(.efi);
- Выполняется инициализация ядра (ntoskrnl.exe | ntkrnpa.exe | ntkrnlmp.exe | ntkrpamp.exe)
- Ядро создает/запускает процесс SMSS, который создает сессии:
- Сессия 0
- запускается копия процесса CSRSS:
- Wininit
- SCM (services.exe)
- LSASS
- LSM
- Сессия 1
- запускается копия процесса CSRSS:
- WinLogon
- LogonUI.exe
- UserInit
- оболочка (explorer.exe)
- Приложения автозагрузки
Есть примета, что если зависает на classpnp.sys — это к апгрейду Если серьезно, то за все время компьютерной практики относительно данной темы накопилось несколько наблюдений:
- В разные периоды практики удавалось понаблюдать очень похожие между собой сбои, когда возникали ситуации, в которых загрузка в безопасном режиме зависала не на самом драйвере classpnp.sys, а на следующих за ним, то есть этот драйвер не был последним в списке (например, иногда загрузка вставала на agp440.sys).
- На нормально загружающихся в безопасном режиме системах периодически наблюдал картину, когда текстовый режим кончался на выводе строки classpnp.sys с надписью «Подождите, пожалуйста…», после чего присутствовала совсем уж короткая пауза и загрузка уходила в графический режим и продолжалась. Делаем выводы, что приведенная строка ожидания характеризует конец одного (визуально определяемого нами как «текстовый») этапа загрузки и переход к следующему (визуально «графическому»).
Каково, а? Первый пункт, я бы сказал, просто расшатывает столпы веры в то, что виновником является именно драйвер classpnp.sys. Отсюда непременно возникает один резонный вопрос: действительно ли причина зависания кроется в тех драйверах, которые мы наблюдаем в списке на экране монитора? Или то что мы видим является ли истинной причиной происходящего?
Этап Winload
Где же впервые в коде модулей запуска встречается загрузка каких-либо системных или сторонних драйверов/библиотек? Очевидно что на этапе Winload.exe, поскольку именно в коде данного модуля впервые начинают загружаться системные драйвера с флагом BOOT_START. С целью анализа нам придется изучать исходный код, для этого расчехляем IDA и дизассемблируем код модуля Winload.exe. После продолжительного изучения алгоритмов можно прийти к выводу, что исполнение кода модуля начинается с точки входа в процедуре OslMain. Уже из этой процедуры вызывается дочерняя функция OslInitializeCodeIntegrity, которая проверяем целостность модулей, участвующих в загрузке. В коде основной функции встречается интересная вложенная функция под названием OslpLoadAllModules, которая используется разнообразным кодом для обеспечения загрузки системных модулей (они же — драйвера/библиотеки режима ядра). Могу ошибаться, но мне показалось, что все модули, загружаемые через неё на начальной стадии, делятся на:
- жестко заданные во внутренней переменной OslMicrosoftBootImages;
- загружаемые уже при подключении и разборе ветви реестра HKLM\SYSTEM\CurrentControlSet\services;
- загружаемые при разборе зависимостей используемых функций;
Непосредственно сама загрузка производится через вложенную функцию OslLoadImage (и подчиненную LoadImageEx). Теперь настало время ознакомиться с полным списком загружаемых кодом модуля Winload.exe драйверов:
Имя | Официальное описание | Зависимости |
---|---|---|
ntoskrnl.exe | NT Kernel & System | pshed.dll, hal.dll, bootvid.dll, kdcom.dll, clfs.sys, ci.dll |
hal.dll | Hardware Abstraction Layer DLL | ntoskrnl.exe, pshed.dll, kdcom.dll |
kdcom.dll | Serial Kernel Debugger | ntoskrnl.exe, hal.dll |
pshed.dll | Драйвер аппаратных ошибок, специфичных для платформы | ntoskrnl.exe, hal.dll |
bootvid.dll | VGA Boot Driver | ntoskrnl.exe, hal.dll |
ci.dll | Code Integrity Module | ntoskrnl.exe |
clfs.sys | Common Log File System Driver | ntoskrnl.exe, hal.dll |
fileinfo.sys | Fileinfo Filter Driver | ntoskrnl.exe, hal.dll, fltmgr.sys |
fltmgr.sys | Диспетчер фильтров файловых систем Майкрософт | ntoskrnl.exe, hal.dll |
atapi.sys | ATAPI IDE Miniport Driver | ntoskrnl.exe, ataport.sys |
ataport.sys | ATAPI Driver Extension | ntoskrnl.exe, hal.dll |
wmilib.sys | WMILIB WMI support library DLL | ntoskrnl.exe |
amdxata.sys | Storage Filter Driver | ntoskrnl.exe, hal.dll |
mountmgr.sys | Диспетчер точек подключения | ntoskrnl.exe, hal.dll |
msahci.sys | MS AHCI 1.0 Standard Driver | ntoskrnl.exe, pciidex.sys |
pciide.sys | Generic PCI IDE Bus Driver | ntoskrnl.exe, pciidex.sys |
pciidex.sys | PCI IDE Bus Driver Extension | ntoskrnl.exe, hal.dll |
msisadrv.sys | ISA Driver | ntoskrnl.exe, wdfldr.sys |
wdfldr.sys | Kernel Mode Driver Framework Loader | ntoskrnl.exe, hal.dll |
acpi.sys | ACPI драйвер для NT | ntoskrnl.exe, hal.dll, wmilib.sys |
partmgr.sys | Partition Management Driver | ntoskrnl.exe, hal.dll, wmilib.sys |
pci.sys | NT Plug and Play PCI-перечислитель | ntoskrnl.exe, hal.dll, pshed.dll |
vdrvroot.sys | Корневой перечислитель виртуальных дисков | ntoskrnl.exe, wdfldr.sys |
volmgr.sys | Volume Manager Driver | ntoskrnl.exe, hal.dll, wmilib.sys |
volmgrx.sys | Драйвер расширения диспетчера томов | ntoskrnl.exe, hal.dll |
wdf01000.sys | Среда выполнения платформы драйвера режима ядра | ntoskrnl.exe, hal.dll, wdfldr.sys |
msrpc.sys | Kenrel Remote Procedure Call Provider | ntoskrnl.exe |
cng.sys | Kernel Cryptography, Next Generation | ntoskrnl.exe, hal.dll |
pcw.sys | Perfomance Counters for Windows Driver | ntoskrnl.exe |
fs_rec.sys | File System Recognizer Driver | ntoskrnl.exe |
ndis.sys | Драйвер NDIS 6.20 | ntoskrnl.exe, hal.dll, netio.sys |
ksecpkg.sys | Kernel Security Support Provider Interface Packages | ntoskrnl.exe, ksecdd.sys, cng.sys |
ksecdd.sys | Kernel Security Support Provider Interface Packages | ntoskrnl.exe, hal.dll, msrpc.sys |
tcpip.sys | Драйвер TCP/IP | ntoskrnl.exe, hal.dll, msrpc.sys, ksecdd.sys, fwpkclnt.sys, fltmgr.sys, ndis.sys, netio.sys |
fwpkclnt.sys | FWP/IPSec Kernel-Mode API | ntoskrnl.exe, hal.dll, msrpc.sys, ndis.sys, netio.sys |
netio.sys | Network I/O Subsystem | ntoskrnl.exe, hal.dll, ndis.sys, msrpc.sys |
vmstorfl.sys | Virtual Storage Filter Driver | ntoskrnl.exe, hal.dll, wdfldr.sys |
volsnap.sys | Драйвер теневого копирования тома | ntoskrnl.exe, hal.dll |
spldr.sys | loader for security processor | ntoskrnl.exe |
rdyboost.sys | ReadyBoost Driver | ntoskrnl.exe, hal.dll, ksecdd.sys |
mup.sys | Драйвер поставщика множественных UNC-имен | ntoskrnl.exe, hal.dll |
hwpolicy.sys | Hardware Policy Driver | ntoskrnl.exe |
fvevol.sys | BitLocker Drive Encryption Driver | ntoskrnl.exe, hal.dll |
disk.sys | PnP Disk Driver | ntoskrnl.exe, hal.dll, classpnp.sys |
classpnp.sys | SCSI Class System DLL | ntoskrnl.exe, hal.dll |
В таблице представлены (сведены) драйверы, у которых соответствующий параметр START
выставлен в значение 0, то есть приведенные в таблице драйвера можно смело назвать группировкой драйверов режима загрузки (BOOT). Столбец зависимостей приведен в таблице не случайно, он то как раз нужен нам с целью определения функциональных взаимосвязей (зависимостей на уровне функций) того или иного драйвера.
В модуле winload.exe драйвер с именем classpnp.sys вы не найдете ни в жесткозакодированных (вкомпилированных) переменных, ни в ветвях реестра. Он загружается при разборе зависимостей от драйвера disk.sys, который использует некоторые функции classpnp.sys.
Одним из первых загружается образ ядра (ntoskrnl.exe) и уровень аппаратных абстракций HAL.DLL, но секции импорта у этих модулей на данном этапе не разрешаются (то есть указанные модули просто подгружаются в память без связывания). Соответственно и код библиотеки на этом этапе всего-лишь загружается в адресное пространство ядра, для того что бы в последствии, после инициализации, функции были «видимыми» (доступными) для кода других драйверов. Затем, таблица импорта актуального модуля ядра (ntoskrnl.exe и аналогичные) заполняется и связывается (при помощи функции LoadImports и вложенной в неё BindImportRefences). После того, как все подобные подготовительные процедуры отработали, управление передается ядру при помощи функции OslArchTransferToKernel. То есть, давайте резюмируем данный этап загрузки:
В процессе функционирования модуля Winload.exe драйвера режима загрузки только лишь подгружаются в память, но не инициализируются.
Отсюда рождается ряд вопросов:
- может ли этот этап (Winload.exe) загрузки зависнуть по причине какого-либо типа повреждения файлов подгружаемых драйверов (в том числе и библиотеки classpnp.sys)?
- если да, то по каким именно причинам: повреждение записи файла в файловой системе ntfs? неправильная версия classpnp.sys? нулевая длина файла?
Этап ntoskrnl
Собственно, это ни что иное как ядро операционной системы. На самом деле имя ntoskrnl.exe используется только в одноядерной системе (без режимов SMP/PAE). Имена ядра определяются следующим образом:
- ntoskrnl.exe — (1 ядро ЦП);
- ntkrnlmp.exe — (N ядер ЦП, SMP);
- ntkrnlpa.exe — (1 ядро ЦП, PAE);
- ntkrpamp.exe — (N ядер ЦП, SMP, PAE);
Как мы знаем из теории загрузки операционной системы Windows, после передачи управления на код модуля ядра, в нем происходит последовательная инициализация множества подсистем ядра. Поэтому дизассемблируем и начинаем изучать исходный текст актуального (на моей тестовой конфигурации это был ntkrnlpa.exe) ядра. Если честно, задача перед нами стоит не такая уж и тривиальная и по уму нам предстоит проанализировать множество этапов загрузки операционной системы и попытаться связать кодовые ветвления с событиями, происходящими на экране монитора. Тем не менее, при отсутствии исходников на языке C и знаний по декомпиляции кода из машинного языка в листинг на C, разобраться в дизассемблированных исходных кодах будет непросто, благо что разработчиком предоставляются символы ядра.
Итак, выше мы уже упоминали, что визуально на экране надпись «Подождите, пожалуйста…» знаменует окончание какого-то одного этапа загрузки и переход к следующему, при том что деление это чисто формальное, но для нас оно требуется с целью упрощения понимания происходящего. Теперь, за неимением другой внятной логики, нам надо визуально привязаться к тому, что происходит на экране, но как отследить момент начала текстового этапа и его конец? Поскольку я не умею пока работать с удаленной отладкой, был использован следующий алгоритм действий: мы будем расставлять так называемые «точки зацикливания» (точки «подвисания»), представляющие собой пару машинных опкодов EB FE (команда «прыжка на месте» — jmp $) и вводящие процессор в бесконечный цикл выполнения.
Ага, прямо так вот сразу взяли и модифицировали! Не все так просто как хотелось бы, дело в том, что ядро проверяет собственную целостность, поэтому если вы не выключили проверку подлинности кода ядра (флаги DISABLE_INTEGRITY_CHECKS и TESTSIGNING), то при попытке внесения изменений ядро «валится» в BSOD. Поэтому сперва нам следует отключить проверку целостности bootmgr и winload.
Первая точка останова
Как уже было рассмотрено, процесс загрузки некоторых драйверов категории BOOT_START начинается на этапе работы модуля winload.exe. Поэтому было решено начать с модуля winload.exe и попытаться обнаружить в нем участок кода, в котором процесс загрузки может подвиснуть на том самом текстовом участке (после вывода списка драйверов и сообщения «Подождите, пожалуйста..»). Далее, мы постараемся модифицировать найденный фрагмент таким образом, чтобы ввести в бесконечный цикл (подвесить), тем самым найдя первую точку останова. Самая удачная, по моему мнению, точка — это непосредственно перед передачей управления коду ядра ntoskrnl.exe. Где осуществляется передача управления? Для выяснения этого стартуем с начала основной процедуры OslMain и доходим до её финальной части, где код передачи управления происходит через вызов процедуры OslArchTransferToKernel. Вот так выглядит обрамляющий участок кода:
.text:00401781 loc_401781: .text:00401781 8B 70 1C mov esi, [eax+1Ch] .text:00401784 E8 AC 7C 00 00 call _BlBdStop@0 .text:00401789 56 push esi .text:0040178A 53 push ebx .text:0040178B E8 50 72 04 00 call near ptr _OslArchTransferToKernel@8 .text:00401790 .text:00401790 loc_401790: .text:00401790 EB FE jmp short loc_401790 .text:00401790 _OslpMain@4 endp |
после непродолжительного оттупления, было решено заменить два маркированных (выделены цветом) пуша на инструкцию зацикленного прыжка jmp $
(опкоды EB FE). Изменения выполняем в шестнадцатеричном редакторе методом поиска длинной сигнатуры и замены (двух) байтов. После сохраняем изменений в Winload.exe, обязательно модифицируем контрольную сумму (CRC) образа, затем перезагружаемся, загрузка в безопасном режиме и.. результат:
Удача!! Произошло зависание процесса загрузки внутри «текстового» этапа на строке, содержащей имя драйвера classpnp.sys. Значит, мы попали своей модификацией в нужное место. Условимся, что отправная первая точка останова найдена.
Вторая точка останова
Теперь давайте попробуем определиться со второй точкой останова.
Как искать вторую точку? Загружаясь в безопасном режиме на нормально работающей станции, мы замечаем, что после вывода на экран имени classpnp.sys происходит кратковременная задержка и выполняется переключение между графическими режимами видеоадаптера.
Судя по всему, ядро принимает от кода модуля Winload.exe управление в собственной точке входа, которая является первой инструкцией функции KiSystemStartup. После этого процесс инициализации ядра системы проходит несколько внутренних этапов, во время которых на экране отображается все тот же «текстовый» режим (с уже знакомым нам списком загруженных драйверов). Затем происходит переключение в графический режим с разрешением 640×480 и выводом анимированного логотипа загрузки (bootscreen). Анимация этого логотипа обеспечивается группой функций с суффиксом Invb*, которые занимаются инициализацией драйвера видеокарты и последующим выводом разнообразных графических примитивов. Например, функция InbvUpdateProgressBar в определенном режиме обновляет прогресс-бар времени загрузки.
Но это все представляет для нас лишь опосредованный интерес, поскольку после текстового режима загрузка уходит в графический режим далеко не сразу. Этап с выводом логотипа находится в модуле ядра, а вот переход к следующему (графическому) этапу происходит позже, во время загрузки диспетчера (менеджера) сессий SMSS (модуль smss.exe). Вычислил я это экспериментальным путем, проставляя точки останова по ходу исполнения этапов инициализации ядра. В конце концов я обнаружил интересную процедуру с именем Phase1Initialization, в которой происходит вызов вложенной процедуры Phase1InitializationDiscard, в конце которой мы находим следующий фрагмент кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
. . . INIT:007C9378 loc_7C9378: ; CODE XREF: Phase1InitializationDiscard(x)+DCDj INIT:007C9378 6A 5A push 5Ah INIT:007C937A E8 B3 D9 C3 FF call _InbvUpdateProgressBar@4 ; InbvUpdateProgressBar(x) INIT:007C937F E8 BB 00 00 00 call _StartFirstUserProcess@0 ; StartFirstUserProcess() INIT:007C9384 FF 05 30 4B 57 00 inc _InitializationPhase INIT:007C938A 53 push ebx ; Tag INIT:007C938B FF 74 24 34 push [esp+0B8h+P] ; P INIT:007C938F E8 2A 47 D6 FF call _ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x) INIT:007C9394 53 push ebx ; Argument2 INIT:007C9395 53 push ebx ; Argument1 INIT:007C9396 FF 35 28 6E 54 00 push _ExCbPhase1InitComplete ; CallbackObject INIT:007C939C E8 B6 83 C6 FF call _ExNotifyCallback@12 ; ExNotifyCallback(x,x,x) INIT:007C93A1 39 1D 20 CE 54 00 cmp _ViVerifierEnabled, ebx INIT:007C93A7 74 07 jz short loc_7C93B0 INIT:007C93A9 6A 05 push 5 INIT:007C93AB E8 DB D0 F7 FF call _VfNotifyVerifierOfEvent@4 ; VfNotifyVerifierOfEvent(x) . . . |
Как помечено цветовой маркировкой, тут у нас вызывается функция _StartFirstUserProcess которая и создает процесс SMSS (Диспетчер сеанса/сессии, Session Manager Subsystem Service). Фактически именно в коде данной функции и происходит (визуально) переключение из графического режима 640×480 в «родное» разрешение установленного монитора (при условии, что установлены драйвера видеоадаптера и выставлено правильное разрешение). Таким образом, инструкция вызова функции _StartFirstUserProcess и знаменует собой:
- в безопасном режиме: окончание «текстового» этапа загрузки модуля ядра;
- в нормальном режиме: начало этапа анимированного логотипа (bootscreen);
Но поскольку мы сейчас разбираем именно безопасный режим загрузки, то данная функция является последней точкой блока кода, зависание внутри которого подвешивает загрузку со списком драйверов на экране. Таким образом мы (вероятно) получили вторую точку останова, тем самым обозначив участок возникновения проблем!!
Данным экспериментом мы подтвердили, что от момента вывода на экран строки о загрузке библиотеки classpnp.sys и до перехода в графический режим происходит выполнение довольно большого фрагмента кода, на протяжении которого возможно (теоретически) огромное количество подвисаний в абсолютно разносортных по назначению процедурах.
Между точками: инициализация драйвера classpnp.sys
Помните мы говорили, что загрузка большинства драйверов происходит на этапе работы модуля Winload.exe, а вот связывание и инициализация этих драйверов происходит уже на этапе работы модуля ядра (ntoskrnl.exe). Выходит что и инициализация интересующей нас библиотеки classpnp.sys происходит на этапе функционирования ядра. Давайте проверим, могут ли проблемы с инициализацией быть причиной зависания, для этого изучим внутреннюю структуру драйвера classpnp.sys. Как и в любом другом драйвере, после загрузки в адресное пространство ядра, требуется выполнить инициализацию, поэтому вызывается процедура инициализации драйвера, которая традиционно носит название DriverEntry.
. . . INIT:0002F048 _GsDriverEntry@8 proc near INIT:0002F048 INIT:0002F048 DriverObject = dword ptr 8 INIT:0002F048 RegistryPath = dword ptr 0Ch INIT:0002F048 INIT:0002F048 8B FF mov edi, edi INIT:0002F04A 55 push ebp INIT:0002F04B 8B EC mov ebp, esp INIT:0002F04D E8 BD FF FF FF call ___security_init_cookie INIT:0002F052 5D pop ebp INIT:0002F053 EB B0 jmp short _DriverEntry@8 INIT:0002F053 _GsDriverEntry@8 endp . . . |
и код вызываемой подфункции:
. . . INIT:0002F005 _DriverEntry@8 proc near INIT:0002F005 33 C0 xor eax, eax INIT:0002F007 C2 08 00 retn 8 INIT:0002F007 _DriverEntry@8 endp . . . |
Ну и что мы тут видим? Помимо сервисной функции __security_init_cookie, которая, по заверению разработчиков, предназначается для защиты от переполнения буфера (При входе в функцию с защитой от переполнения cookie-файл помещается в стек, а при выходе значение в стеке сравнивается с глобальным cookie-файлом. Любое различие между ними указывает, что произошло переполнение буфера, что приводит к немедленному завершению работы программы), процедура инициализации этого драйвера не выполняет никаких специфических действий, по большому счету не делает вообще ничего, что могло бы её подвесить, даже не инициализирует привычных структур драйвера и не содержит никаких вложенных вызовов, просто-напросто возвращает управление с кодом STATUS_SUCCESS (EAX=0). И о чем нам это может говорить? Это говорит нам о том, что:
Сам по себе код classpnp.sys на этапе инициализации не является источником проблем, поскольку это библиотека для стороннего использования и процедура инициализации её исключительно формальна (предельно проста).
Такое возможно, однако требуется дополнительное подтверждение. Вспоминаем, что драйвер classpnp.sys является библиотекой класса устройств и его функции вызываются из других драйверов. Надо проверить все драйвера режима BOOT_START на предмет использования функций данной библиотеки. Судя по всему, функции библиотеки classpnp.sys на начальном «текстовом» этапе использует всего один-лишь драйвер disk.sys.
Между точками: инициализация драйвера disk.sys
Ну что же, тогда перейдем к драйверу disk.sys и проверить гипотезу о причастности его к подвисанию, с этой целью дизассемблируем и заглянем в код. Данный драйвер является драйвером класса дисковых накопителей и обеспечивает монтирование сконфигурированных в системе дисковых томов. В драйвере процедура инициализации (DriverEntry) выглядит уже намного сложнее, в ней мы обнаруживаем вызовы функции ClassInitialize, которая не является собственной внутренней функцией драйвера, а импортируется из библиотеки класса устройств classpnp.sys. Возможно что функция ClassInitialize может вызываться любым драйвером класса устройства при выполнении его собственной функции инициализации драйвера DriverEntry.
Один интересный момент: на экране (в списке) мы видим пункт с драйвером disk.sys ДО classpnp.sys, тем не менее, для того, чтобы disk.sys мог использовать некоторые свои функции, библиотека classpnp.sys должна быть УЖЕ загружена и инициализирована ДО загрузки и инициализации disk.sys. Этот факт лишний раз подтверждает, что та последовательность загрузки драйверов, которую мы наблюдаем на экране при запуске в защищенном режиме, всего-навсего отражает очередность загрузки драйверов/библиотек в память на этапе работы модуля загрузчика Winload, но никак не отражает очередность их инициализации на стадии ядра Ntoskrnl. Что, в свою очередь, укрепляет нас в предположении, что видимый нами последним на экране драйвер не обязательно является причиной подвисания!!
Хорошо, переключаемся на изучение исходного кода драйвера classpnp.sys и анализируем код функции ClassInitialize, а вот он то как раз ужасающе огромен Но ошибочные коды возврата все же удалось обнаружить:
- Функция возвращает C0000059 (STATUS_REVISION_MISMATCH): в случае расхождения размера структуры InitializationData, фактически проверка версии файла classpnp.sys.
- Функция возвращает C0000059 (STATUS_REVISION_MISMATCH): если требуемые поля структуры (фактически ссылки на соответствующие функции драйвера) нулевые (NULL).
- Функция возвращает C000009A (STATUS_INSUFFICIENT_RESOURCES): если нулевое значение буфера RegistryPath.Buffer в расширениях
driverExtension
. То есть похоже не выделился буфер по каким-то причинам. - Функция возвращает C0000035 (STATUS_OBJECT_NAME_COLLISION): в любом ином случае.
Драйвер disk.sys обеспечивает функционирование стека устройств хранения в операционной системе Windows, и ниже данного драйвера в стеке располагаются:
- драйверы многопутевого ввода-вывода (MPIO-драйвера, обеспечивающие доступность томов по нескольким путям) (mpio.sys и прч.);
- драйверы порта (обеспечивает поддержку транспортного протокола: SCSI/SAS/SATA/ATAPI);
- драйвер минипорта (обеспечивает функциональность контроллера на материнской плате);
Но, опять же, сам драйвер disk.sys на этапе функционирования ядра (ntoskrnl.exe) не может быть причиной зависания, поскольку тут он инициализируется: вызывается функция инициализации драйвера DriverEntry. А как мы видели выше, в процедуре инициализации в случае проблем возвращаются конкретные коды ошибок, которые будут выведены на экран в случае сбоя, что исключает «тихое» подвисание.
Что еще между точками?
Ну хорошо, помимо инициализации вышеописанных драйверов, что у нас еще расположено между найденными нами точками останова? Да там адская прорва кода!! Получается, что весь код, размещающийся от начала кода модуля ядра в функции KiSystemStartup и до окончания в функции Phase1InitializationDiscard (фактически всей фазы 1), может, потенциально, являться причиной изучаемого нами подвисания (в безопасном режиме). Да уж, тут, что называется, без комментариев!!
Но не все так страшно, как кажется на первый взгляд. В большинстве расположенного на этом участке кода ядра выполняется обработка возникающих ошибок, что тем или иным образом (в виде сообщений) становится известно пользователю. А вот где действительно могут скрываться «мертвые» зависания процесса загрузки, так это на стыке хорошо отлаженного кода ядра и кода сторонних драйверов (то есть на этапе загрузки/инициализации драйверов сторонних разработчиков). Судя по всему в ядре существуют несколько цепочек кода загрузки подобных драйверов:
Start
= 0 (режим BOOT_START) : цепочка вызова функций IoInitSystem → IopInitializeBootDrivers → PnpInitializeBootStartDriver → IopInitializeBuiltinDriver;Start
= 1 (режим SYSTEM_START) : цепочка вызова функций IoInitSystem → IopInitializeSystemDrivers → IopLoadDriver → MmLoadSystemImage;Start
= 2 (режим AUTO_START) : цепочка вызова функций NtLoadDriver → IopLoadUnloadDriver → IopLoadDriver → MmLoadSystemImage;Start
= 3 (режим DEMAND_START) : ???
Вот перечисленные то функции нам в первую очередь и интересны. В дополнение участвует функция MmLoadSystemImage, которая выполняет загрузку исполняемого образа драйвера в адресное пространство ядра (создает секции и производит связывание, заполняет таблицы импорта, перемещения, выполняет проверки безопасности и прочие задачи.). Еще одна функция IopLoadDriver работает с реестром, ответственная за открытие файла драйвера, создание объекта драйвера и передачу управления на точки входа (вызов процедуры инициализации DriverEntry). Для драйверов режима BOOT_START, функции IopLoadDriver и MmLoadSystemImage не участвуют в процессе, поскольку, как мы писали ранее, данные драйвера загружаются еще на этапе winload.exe.
Если предположить, что я допустил ошибку в оценке области подвисания, то в эту область еще должны входить последующие этапы, начиная с smss.exe и до самого logonui.exe. А мы знаем, что на этих этапах уязвимым для сбоев местом являются сервисы/службы режимов AUTO_START и DEMAND_START как загружаемые на схожих с драйверами принципах.
. . .
ПРОДОЛЖЕНИЕ СЛЕДУЕТ
. . .
Общие причины
Общие причины подвисания следующие:
- установленное на станции железо: после загрузки общих библиотек/драйверов (в том числе и classpnp.sys) начинается перечисление устройств и загрузка драйверов к ним.
- подключение системных томов: возможно ядро не может проинициализировать устройство (накопитель), на котором располагается один из сконфигурированных в системе разделов.
- установленное на станции железо: возможно загрузка какого-либо драйвера устройства проводит первичную инициализацию устройства (через вызов инициализации драйвера и вложенных процедур), которая не может завершиться, подвешивая весь процесс запуска системы.
Частные причины [решения]
предположение: проблема как то связана с загрузочным носителем либо контроллером или шлейфом.. одним словом с дисковой подсистемой.
решения:
- BIOS: перепрошивка BIOS на последнюю версию + сброс всех настроек в [Factory] Default (умолчание);
- BIOS: замена механизма подключения дисков с AHCI → IDE (и наоборот);
- BIOS: смена режима работы контроллера с Compatible (Legacy) Mode → Enhanced (Native) mode (и наоборот);
- BIOS: смена режима загрузки CSM (Legacy) ↔ UEFI;
- Железо: вышедшие из строя сторонние аппаратные модули (например: WIFI/Bluetooth/CardReader): отключение их в BIOS или (при возможности) физически на материнской плате;
- Железо: попробовать использовать для загрузочного диска другой порт IDE/SATA на материнской плате;
- Железо: в случае наличия в системе нескольких накопителей — поочередное отключение носителей (HDD/SSD);
- Железо: заменить кабели данных/питания;
- Железо: проверка утилитами SMART-мониторинга состояния основного загрузочного диска (замена в случае наличия существенных проблем);
- Железо: проблема с модулями ОЗУ (RAM) + нестандартные настройки таймингов при использовании «нестандартных» модулей/разгоне;
- ОС: загрузиться с LiveCD, подцепить реестр сбойной машины, в ветке HKLM\SYSTEM\CurrentControlSet\services пройтись по всем ключам и для каждого драйвера с параметром START = 0 проверить физическое наличие в файловой системе соответствующего файла.
- ОС: загрузиться с LiveCD, подцепить реестр сбойной машины (ветка HKLM\SYSTEM\CurrentControlSet\services), пробежаться по всем ключам и для каждого драйвера этапа BOOT_START (список выше в статье) проверить чтобы параметр START был равен 0.
- ОС: проверка файловой системы диска (команда: chkdsk c: /f /r);
- ОС: подмена/повреждение драйверов этапа загрузки:
- замена всего набора файлов classpnp.sys/disk.sys и остальных драйверов начальной загрузки из единого доверенного источника — работоспособной ОС аналогичной редакции (с сохранением старых, конечно же).
- отключение проверки подписей драйверов. в меню начальной загрузки (клавиша F8 на старте) нужно отключить проверку подписей драйверов;
- ОС: Разнообразные модификации ключевых структур разметки жесткого диска: например, сокрытие/отображение дисков при помощи сторонних утилит (Acronis);
- ОС: Отключение любого ПО, способного вмешиваться в ранние этапы загрузки ОС: антивирусы, оптимизаторы, системы обнаружения вторжений и прочее подобное;
Выводы
При изучении некоторых функций модулей загрузки, я вышел на некий термин Adding Event Tracing to Kernel-Mode Drivers, вероятно возможность появилась начиная с версии Windows Vista. ETW и WPP — два инструмента диагностики для системных приложений (в том числе и драйверов). Интересно, можно включить через утилиту perfmon логгирование для classpnp/disk? Памятка: Группы сборщиков данных — сеансы отслеживания событий — ПКМ — создать — группа сборщиков данных — создать вручную (для опытных) — далее — в окне поставщики жмем добавить — Disk Class Driver Tracing Provider и Classpnp. Тем не менее, тут же возникает резонный вопрос: как это применимо к уже подвисающим станциям? Как на них можно включить логгирование и получить отчет?
К тому же, интересно, описанная в статье проблема зависания на classpnp.sys решена в Windows 10? И как та же логика реализована в Windows 10, имеются ли там «визуальные» зависания этапа загрузки и как изменился алгоритм обработки отказа в загрузке сторонних драйверов?
К сожалению, начиная с версии Windows Vista, можно заметить, что достаточно часто возникают проблемы «вылета» системы, после чего даже в безопасном режиме система виснет после загрузки (CLASSPNP.SYS – последний компонент, на котором происходит остановка). Давайте посмотрим, с чем это может быт связано, и как восстановить работоспособность Windows.
Не грузится CLASSPNP.SYS: причины
Что касается причин появления такой нелицеприятной ситуации, то их может быть достаточно много. Обычно даже при перезагрузке с использованием клавиши F8 (Safe Mode) система вроде бы должна вести себя нормально. Но тут вдруг почему-то некий компонент, в нашем случае CLASSPNP.SYS, не грузится в безопасном режиме.
Вообще, такое явление может наблюдаться, скажем, при банальном заражении компьютерной системы вирусом, нарушении целостности или в связи с отсутствием самого файла CLASSPNP.SYS, а также при возникновении конфликтов со сторонними приложениями или во время сбоев в работе загрузчика системы.
Windows не загружалась (CRCDISK.SYS, CLASSPNP.SYS): последствия
В целом же, такие сбои наиболее характерны для двух системных библиотек – CRCDISK.SYS и CLASSPNP.SYS. Первая является средством проверки жесткого диска, вторая отвечает за режим работы винчестера SCSI. Нарушения в их работе являются просто катастрофичными. Располагаются эти компоненты в системной папке drivers каталога System32 корневой директории Windows. Понятно, что их повреждение влечет за собой негативные последствия. В некоторых случаях бывает невозможным даже произвести восстановление Windows. Но обо всем по порядку.
Не работает безопасный режим: что делать?
Итак, имеем ситуацию, когда системная библиотека CLASSPNP.SYS не грузится в безопасном режиме. Признаками такого сбоя может быть полное зависание на загрузке этого компонента. А в некоторых случаях – даже появление BSoD (того, что принято называть синим экраном смерти).
Исходя из причин, указанных выше, и будем принимать решение по устранению последствий такого сбоя. Для начала рассмотрим вопрос отката системы, предположительно исходя из того, что файл все-таки на винчестере присутствует и не поврежден (причина сбоя может крыться и в другом).
Восстанавливаем систему
Когда, например, Windows 7 зависает на загрузке CLASSPNP.SYS, можно попробовать повторное использование загрузчика с применением клавиши F8, но только после входа в меню стоит выбирать не безопасный режим, а загрузку последней удачной конфигурации.
В принципе, если сам файл не поврежден, то есть причина абсолютно с этим не связана, достаточно часто восстановление происходит без всяких проблем. Однако не всегда. Бывает и такое, что при попытке отката, когда появляется окно параметров восстановления, система входит в такой себе бесконечный поиск. В таком состоянии она может провисеть очень долгий промежуток времени. Что делать в этом случае? Попробуем использовать несколько универсальных средств.
Проверяем систему на вирусы
Если наблюдается ситуация, когда загрузка Windows 7 останавливается на CLASSPNP.SYS, весьма вероятным является заражение компьютера или ноутбука каким-то вирусом. Собственно, его-то и нужно удалить или изолировать. Но как это сделать, ведь система не загружается, а штатный антивирус или какую-то портативную утилиту запустить просто нет возможности?
Тут нам на помощь приходят универсальные и, пожалуй, самые действенные средства проверки, которые принято называть восстановительными дисками (Rescue Disk). Правда, записать диск придется на другом терминале, зато его последующее использование для устранения всевозможных угроз в нашем случае является единственно возможным и правильным решением.
Сама утилита проверки стартует еще до начала загрузки операционной системы (в BIOS обязательно нужно будет указать CD/DVD-ROM в качестве первого Boot-устройства). После запуска программа предложит пользователю выбрать режим работы (загрузить графический интерфейс, использовать какой-то язык, произвести процессы из командной строки и т. д.). Выбираем графический интерфейс – так удобнее всего. Теперь остается только запустить процесс сканирования (установленный по умолчанию или с выбором объектов и дисковых разделов вручную). Если даже вирус засел глубоко в оперативной или системной памяти, можно не сомневаться, что он будет обнаружен и полностью изолирован или удален.
Загружаем файл из Интернета или копируем оригинальный файл с установочного диска
Опять же, а что делать, если вирусы обнаружены не были, и снова компонент останавливает загрузку, или система перезагружается на CLASSPNP.SYS? Такое положение дел может свидетельствовать о том, что данный файл попросту поврежден или отсутствует в локации по умолчанию. Некоторые рекомендуют воспользоваться его заменой на оригинальную библиотеку. Тут есть два варианта: скачать файл с официального ресурса с другого терминала или попробовать скопировать его с установочного диска, который нам понадобится в любом случае (даже при копировании искомого объекта с USB-устройства).
Рассмотрим второй способ, поскольку он практически полностью идентичен первому. За исключением только того, что копирование будет производиться, например, не с флэшки, а именно с оптического носителя с инсталляционным дистрибутивом.
Как уже понятно, загружаемся с диска. После появления на экране графического интерфейса установщика не включаем инсталляцию, а используем командную строку (вызывается она сочетанием Shift + F10). После этого командой copy «литера диска или флэшки»:\«путь к файлу» c:\windows\system32\drivers переносим файл в нужное место (команда вводится без кавычек). После этого можно попробовать перезагрузить систему и посмотреть, что будет при загрузке.
Отдельно стоит обратить внимание на копируемый файл. Его версия должна соответствовать разрядности системы, ведь если в 32-битную Windows 7 поместить файл, рассчитанный на 64-битную версию, то работать ничего не будет.
Восстанавливаем загрузчик
Если и это не помогает, и ситуация повторяется снова и снова (CLASSPNP.SYS не грузится в безопасном режиме или в любом другом), проблема может заключаться в повреждении самого загрузчика Windows и загрузочного сектора. Тут придется применять крайние меры. Опять же, для этого потребуется загрузочный диск Windows или какой-нибудь Live CD. Как и в прошлом варианте, нужно вызвать командную строку, после чего для начала задать стандартную проверку диска, введя последовательность chkdsk c: /f /r.
После этого можно приступать непосредственно к восстановлению загрузчика. Для этого в консоли последовательно нужно ввести две основные команды:
- Bootrec.exe /FixMbr
- Bootrec.exe /FixBoot
После этого, конечно, можно попытаться перезапустить систему, но лучше для полной уверенности переписать весь загрузочный сектор. Для этого используется команда Bootrec.exe /RebuildBcd. Вот теперь загрузка должна произойти в любом режиме.
Если система хоть раз загрузилась…
Напоследок обратим внимание еще на один момент. Если система хотя бы раз загрузилась после применения первых способов, возможно, конфликты возникают между каким-то софтом. Отзывы пользователей свидетельствуют о том, что, как ни странно, очень часто такая проблема происходит по вине пакета Daemon Tools. Утверждается, что смена его на облегченную версию Lite проблему устраняет.
Впрочем, при загруженной системе можно воспользоваться утилитой DLL Suite, которая позволит автоматически восстановить все жизненно важные системные библиотеки, в том числе и CLASSPNP.SYS.
Итог
Вот, собственно, и все о причинах появления сбоев, когда CLASSPNP.SYS не грузится в безопасном режиме, и методах устранения негативных последствий таких ситуаций. Если же говорить о том, какую именно методику предпочесть, думается, лучше всего использовать сразу восстановление загрузчика, а затем применить программу DLL Suite. Такой путь многим может показаться окольным, тем не менее в большинстве случаев помогает именно такая комбинация. Конечно, нельзя сбрасывать со счетов и самые простые решения, ведь проблема может иметь и быстро устраняемые причины. Но в общем и целом особых проблем возникнуть не должно. Да, еще одна, последняя рекомендация: всегда имейте под рукой какой-нибудь антивирусный и загрузочный диск, а то ведь случиться может всякое.
Как часто у вас появляется надпись при установке Windows «Windows is loading █████████ files»? Наверное не чаще, когда Windows не загружает файлы при установке системы. Как исправить, что сделать? Тут мы рассмотрим несколько решений. Найдите своё решение, которое более интуитивно вам подходит.
Для начала проверьте жесткий диск и оперативную память. Эта ошибка на застревание Windows на экране «Windows загружает файлы» может быть вызвана повреждением или отказом жесткого диска. Ну или неисправными картами памяти RAM. Если у вас несколько жестких дисков и карт памяти RAM, следуйте этим советам:
- Удалите из ПК дополнительные жесткие диски и оставьте только основной жесткий диск. Перезагрузите компьютер, чтобы проверить, правильно ли загружается экран «Windows загружает файлы».
- Удалите дополнительные карты памяти RAM и оставьте только 1 карту памяти. Перезагрузите компьютер и проверьте, появляется ли ошибка снова.
Процесс автоматического восстановления сообщит обо всех проблемах, обнаруженных с жестким диском или оперативной памятью.
Windows is loading █████████ files – Сбросить BIOS решение № 2
Целесообразно будет так же сбросить настройки BIOS. Либо обновить версию BIOS до последней доступной, согласно версии вашей материнской платы.
Чтобы сбросить настройки BIOS вашего компьютера до значений по умолчанию, выполните следующие действия:
- Перезагрузите компьютер
- Нажмите необходимую клавишу, чтобы загрузиться в меню BIOS. Этот ключ, как правило любое из следующих действий в зависимости от производителя компьютера: Esc, Del, F2, F8, F12. Ваш ключ вам нужно нажимать, как правило при загрузке компьютера, перед логотипом Windows.
При захождении в Bios найдите параметры сброса. Они могут называться:
- Загрузка параметров по умолчанию;
- Загрузить отказоустойчивые значения по умолчанию;
- Выставить настройки BIOS по умолчанию;
- Загрузить стандартные настройки;
- Загрузить настройки по умолчанию;
- Получить значения по умолчанию;
Далее сохраните эти изменения и выйдите из меню BIOS с перезагрузкой компьютера. Если сброс BIOS до настроек по умолчанию не устраняет ошибку, попробуйте обновить BIOS до последней доступной версии.
Загрузка в безопасном режиме – решение №3
Загрузка в безопасном режиме и удаление конфликтующего программного обеспечения так может быть решением.
Чтобы загрузиться в безопасном режиме, выполните следующие действия:
- Перезагрузите компьютер
- Нажмите F8 клавишу, как только ваш компьютер запустится. Вам необходимо нажать клавишу до того, как появится логотип Windows.
- В меню Advanced Boot Options выберите Safe Mode.
- Экран дополнительных параметров загрузки в Windows
- Нажмите Enter
Windows не загружает файлы – Загрузка последней удачной конфигурации
Если сброс BIOS и загрузка через безопасный режим с исправлением не привела к желаемым результатам, то решение № 4. Загрузка последней удачной конфигурации, попробуйте режим последней удачной конфигурации.
Чтобы загрузиться в этом режиме, выполните следующие действия:
- Перезагрузите компьютер;
- Нажмите F8 клавишу, чтобы открыть меню дополнительных параметров загрузки;
- Далее выберите меню запуска расширенных параметров загрузки;
- В списке выберите последнюю конфигурацию – удачный вариант;
- Нажмите Enter.
Windows не загружает файлы – Отключение автоматического перезапуска при сбое системы
Отключение автоматического перезапуска при сбое системы может быть решением № 5. Если ошибка «Windows загружает файлы» вызвана ошибкой STOP, вы можете попробовать отключить опцию автоматического перезапуска при сбое системы. Для того чтобы определить, какая ошибка STOP вызывает этот сбой.
Чтобы определить ошибку STOP и устранить ее, выполните следующие действия:
- Перезагрузите компьютер;
- Нажмите F8 клавишу до появления логотипа Windows;
- В Advanced Boot Options меню, выберите Отключить автоматическую перезагрузку при отказе системы опции;
- Нажмите Enter.
Ваш компьютер по сценарию должен перезагрузиться. Если после перезагрузки появится синий экран, обратите внимание на ошибку STOP и устраните ее. Если Windows по-прежнему не продолжает работу после экрана «Windows загружает файлы», перейдите к решению №6
Windows не загружает файлы запустите утилиту bootrec, решение № 6
Выполните следующие действия, чтобы открыть и запустить утилиту bootrec:
- Вставьте DVD с Windows загрузитесь с него;
- Выберите язык, метод клавиатуры;
- Щелкните > Восстановить компьютер на экране приветствия;
- Далее выберите свою > операционную систему из списка;
- Нажмите командная строка в меню > Параметры восстановления системы.
- Введите эти команды и нажимайте Enter клавишу, после каждой команды:
- команда – bootrec fixboot
- параметр – bootrec scanos
- команда (параметр) – bootrec fixmbr
- параметр – bootrec rebuildbcd
- Далее > Нажмите Enter
- После > Перезагрузите компьютер …
Команда chkdsk может быть решением № 7
Если предыдущие решения не работают, то вы также можете попробовать запустить утилиту chkdsk. Которая проверит целостность жесткого диска:
Запустив командную строку с правами администратора ведите команду;
- chkdsk C: / f
- Где C: это буква диска, на котором установлена ваша версия Windows;
- Нажмите Enter;
- После исправления компьютер перезагрузиться.
Если компьютер не перезагрузился, то попробуйте перезагрузить в ручном режиме. И попробуйте проверить ту самую ошибку, которая вас провоцировала пройти этот долгий путь. Если попытки оказались пытками и вы хотели бы найти более короткий путь к решению, то решение № 8 для вас.
Windows не загружает файлы – «Компью-помощь» решение № 8
Если система Windows не загружается, перезагружается и живёт своей жизнью и вам необходима помощь? То компьютерная помощь может прийти на помощь. Специалист настроит вам компьютер на нужную волну, где по щелку клавиш система плавно поприветствует вас, перед началом своей работы.