Windows Update Windows Vista Business Windows Vista Enterprise Windows Vista Home Basic Windows Vista Home Premium Windows Vista Starter Windows Vista Ultimate Windows 7 Enterprise Windows 7 Home Premium Windows 7 Professional Windows 7 Starter Windows 7 Ultimate Еще…Меньше
Решение
Чтобы устранить эту ошибку, следуйте приведенным ниже методам. Если первый метод не устранит эту проблему, перейдите к следующему методу.
Способ 1. Использование последней удачной конфигурации для запуска Windows
При запуске компьютера с использованием последней известной хорошей конфигурации компьютер начинается с конфигурации с момента последней успешной загрузки компьютера. Для этого выполните следующие действия:
-
Нажмите кнопку Пуск, щелкните стрелку рядом с кнопкой Завершение работы, а затем нажмите кнопку Перезапустить.
-
В процессе загрузки компьютера нажмите и удерживайте клавишу F8. Если появилась эмблема Windows, повторите попытку — завершите работу и перезагрузите компьютер.
-
На экране Дополнительные варианты загрузки выберите с помощью клавиш со стрелками пункт Последняя удачная конфигурация (дополнительно) и нажмите клавишу ВВОД. Windows загрузится в обычном режиме.
Если по-прежнему не удается запустить Windows, перейдите к методу 2.
Способ 2. Удаление вирусов загрузочного сектора :
Вирусы загрузочного сектора заражают компьютер перед запуском Windows. Это может привести к ошибке, которую вы получаете. Средство Защитник Windows автономной бета-версии поможет удалить вирусы загрузочного сектора.
-
На другом компьютере перейдите на сайт Защитник Windows автономная бета-версия по адресу: Что такое Защитник Windows автономная бета-версия?
-
В зависимости от версии Windows щелкните Скачать 32-разрядную версию или Скачать 64-разрядную версию.
-
Если вы не знаете, какую версию Windows вы используете, нажмите кнопку Пуск, щелкните правой кнопкой мыши компьютер, а затем выберите пункт Свойства. Версия будет указана рядом с полем Тип системы.
-
-
При появлении запроса щелкните стрелку рядом с кнопкой Сохранить, а затем нажмите кнопку Сохранить как. После завершения загрузки удалите съемный носитель.
-
Вставьте компакт-диск, DVD-диск или съемный USB-накопитель. В левой области окна Сохранить как щелкните съемный носитель и нажмите кнопку Сохранить.
-
Вставьте Защитник Windows автономный компакт-диск, DVD-диск или USB на компьютер, зараженный вирусом или вредоносными программами. Перезагрузите компьютер.
-
Если компьютер обнаружит носитель автоматически, выполните указанные ниже действия. Если компьютер не обнаруживает мультимедиа автоматически, перейдите к шагу 7.
-
Прочтите инструкции на экране, чтобы включить этот параметр. В некоторых случаях может потребоваться нажать любую клавишу, чтобы начать работу с компакт-диска, DVD-диска или USB-накопителя, или нажать определенную клавишу, например F12.
-
Нажмите клавишу (обычно F12). Отобразится список доступных устройств. Будет запись для каждого жесткого диска, по одной для каждого компакт-диска, DVD-диска и USB-устройства флэш-памяти.
-
С помощью клавиши со стрелкой прокрутите диск с загрузочным компакт-диском, DVD-диском или USB-устройством флэш-памяти, а затем нажмите клавишу ВВОД.
-
Компьютер будет начинаться с Защитник Windows автономного компакт-диска, DVD-диска или USB-устройства флэш-памяти. Проверка займет несколько минут и удалит все вредоносные программы, которые могут заразить ваш компьютер.
-
-
Если компьютер не обнаружит носитель автоматически:
-
Во время перезапуска прочитайте на экране инструкции, объясняющие, как прервать обычный запуск, и войдите в программу установки BIOS. Чтобы начать настройку BIOS, для большинства компьютеров можно нажать клавиши F2, F10, ESC или DEL.
-
В окне программы настройки BIOS Setup Utility найдите вкладку Boot Order (Порядок загрузки), Boot Options (Параметры загрузки) или Boot (Загрузка). Следуя инструкциям на экране, воспользуйтесь клавишами со стрелками, чтобы открыть вкладку Boot Order (Порядок загрузки), а затем нажмите клавишу ВВОД.
-
Найдите компакт-диск, DVD-диск или USB-устройство флэш-памяти (это может называться съемным устройством) в списке загрузки. Следуя указаниям на экране, используйте клавиши со стрелками, чтобы переместить диск вверх, чтобы он появился первым в списке загрузки. Нажмите клавишу ВВОД. Последовательность заказа загрузки теперь изменяется для загрузки с компакт-диска, DVD-диска или USB-устройства флэш-памяти.
-
Нажмите клавишу F10, чтобы сохранить изменения и выйти из программы установки BIOS. Выберите команду Yes (Да) в окне подтверждения. Компьютер будет перезагружен. Разрешите компьютеру нормально перезагружаться. Проверка займет несколько минут и удалит все вредоносные программы, которые могут заразить ваш компьютер.
-
-
После завершения сканирования компьютер обычно загружается в Windows.
Если по-прежнему не удается загрузить Windows, перейдите к методу 3.
Способ 3. Использование функции восстановления при запуске
Восстановление при запуске позволяет обнаруживать и устранять некоторые типы системных проблем, которые могут препятствовать запуску Windows.
Чтобы запустить восстановление при запуске с помощью предустановленных параметров восстановления, выполните следующие действия:
-
Перезагрузите компьютер с помощью кнопки питания компьютера. Выполните одно из указанных ниже действий.
-
Если на компьютере установлена только одна операционная система, при перезагрузке компьютера нажмите и удерживайте клавишу F8. Клавишу F8 необходимо нажать до появления эмблемы Windows. В случае появления эмблемы Windows необходимо повторить попытку, дождавшись вывода приглашения войти в систему Windows, а затем заново перезагрузив компьютер.
-
Если на компьютере установлено несколько операционных систем, с помощью клавиш со стрелками выберите операционную систему, которую необходимо восстановить, а затем нажмите и удерживайте клавишу F8.
-
-
На экране Дополнительные варианты загрузки выберите с помощью клавиш со стрелками пункт Устранение неполадок компьютера и нажмите клавишу ВВОД.
-
Выберите раскладку клавиатуры и нажмите кнопку Далее.
-
В меню Параметры восстановления системы выберите пункт Восстановление при запуске, а затем следуйте инструкциям на экране.
Чтобы запустить восстановление при запуске с помощью установочного диска Windows или диска восстановления системы, выполните следующие действия:
-
Вставьте установочный диск Windows 7 или диск восстановления системы, а затем завершите работу компьютера.
-
Перезагрузите компьютер с помощью кнопки питания компьютера.
-
Нажмите любую клавишу при отображении соответствующего запроса, а затем следуйте инструкциям на экране.
-
На странице Установка Windows или на странице Параметры восстановления системы выберите язык и другие параметры, а затем нажмите кнопку Далее.
-
Если вы используете установочный диск Windows, щелкните Восстановить компьютер.
-
Выберите установку Windows, которую требуется восстановить, и нажмите кнопку Далее.
-
В меню Параметры восстановления системы щелкните Восстановление при запуске, а затем следуйте инструкциям на экране.
Дополнительная информация
Нужна дополнительная помощь?
Нужны дополнительные параметры?
Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.
В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.
Содержание
- Исправление ошибки 0x0000007b
- Причина 1: Шлейфы
- Причина 2: Неисправность носителя
- Причина 3: Сбой очереди загрузки
- Причина 4: Режимы SATA
- Причина 4: Отсутствие драйверов
- Причина 5: Дисковый софт
- Причина 6: Вирусы
- Заключение
- Вопросы и ответы
BSOD (синий экран смерти) своим появлением вводит в ступор многих неопытных пользователей. Обусловлено это тем, что ошибки, сопровождающиеся им, ограничивают или вовсе делают невозможным дальнейшее использование ПК. В этой статье мы поговорим о том, как избавиться от BSOD с кодом 0x0000007b.
Данный сбой происходит при загрузке или установке Windows и говорит нам о невозможности использования загрузочного диска (раздела) по разным причинам. Это может быть повреждение или ненадежное подключение шлейфов, неисправность носителя, отсутствие в ОС или памяти необходимых для работы дисковой подсистемы драйверов, сбой порядка загрузки в БИОС. Существуют и другие факторы, например, действие вредоносных программ, или использование софта для работы с разделами жестких дисков.
Для того чтобы иметь представление о том, что такое BSOD и как с ним бороться, прочитайте статью об общих рекомендациях по устранению таких неполадок.
Подробнее: Решаем проблему синих экранов в Windows
Причина 1: Шлейфы
Шлейфы – это обычные провода, с помощью которых жесткий диск подключается к компьютеру. Их два: кабель питания и шлейф передачи данных.
В первую очередь нужно проверить надежность их подключения. Если ситуация не изменилась, то стоит попробовать включить диск в соседний порт SATA, поменять кабель питания (воспользоваться другим, идущим от БП), заменить шлейф данных.
Причина 2: Неисправность носителя
После проверки средств подключения нужно перейти к определению работоспособности диска и исправлению возможных ошибок. Выяснить, работает ли «хард», можно несколькими способами. Во-первых, можно извлечь его из системника и подключить к другому компьютеру. Во-вторых, воспользоваться загрузочным носителем с установочным дистрибутивом Windows.
Подробнее:
Создаем загрузочную флешку с Windows 7
Загрузка Windows 7 с флешки
- После того как ПК будет загружен, появится стартовое окно программы установки Виндовс. Здесь нажимаем комбинацию клавиш SHIFT+F10, вызвав «Командную строку».
- Запускаем консольную дисковую утилиту (после ввода нажимаем ENTER).
diskpart
- Вводим команду для получения списка жестких дисков, включенных в систему.
lis dis
Определить, «виден» ли наш диск, можно посмотрев на объем накопителей.
Если утилита не определила наш «хард», а со шлейфами все в порядке, то помочь сможет только его замена на новый. Если же диск присутствует в списке, то выполняем следующие действия:
- Вводим команду для вывода списка томов, имеющихся на всех накопителях, которые в данный момент подключены к компьютеру.
lis vol
- Находим раздел, возле которого указано, что он зарезервирован системой, и переходим к нему командой
sel vol d
Здесь «d» — буква тома в списке.
- Делаем этот раздел активным, то есть показываем системе, что загружаться нужно именно с него.
activ
- Завершаем работу утилиты командой
exit
- Пробуем загрузить систему.
Если нас постигла неудача, то следует выполнить проверку системного раздела на наличие ошибок и исправить их. Поможет нам в этом утилита CHKDSK.EXE. Ее также можно запустить из «Командной строки» в программе установки Windows.
- Загружаем ПК с установочного носителя и открываем консоль сочетанием клавиш SHIFT+F10. Далее нам нужно определить букву системного тома, так как установщик меняет их по своему алгоритму. Вводим
dir e:
Здесь «е» — буква обозреваемого раздела. Если в нем будет обнаружена папка «Windows», то переходим к дальнейшим действиям. В противном случае перебираем другие буквы.
- Запускаем проверку и исправление ошибок, ждем завершения процесса, после чего перезагружаем ПК с жесткого диска.
chkdsk e: /f/r
Здесь «е» — буква раздела с папкой «Windows».
Причина 3: Сбой очереди загрузки
Очередь загрузки представляет собой список из накопителей, которым пользуется система при старте. Сбой может произойти при подключении или отключении носителей от неработающего ПК. Первым в списке должен стоять наш системный диск и настроить все это можно в БИОС материнской платы.
Подробнее: Как попасть в BIOS на компьютере
Далее мы приведем пример настройки для AMI BIOS. В вашем случае названия разделов и параметров может отличаться, но принцип остается тем же.
- Ищем вкладку меню с названием «Boot» и переходим в раздел «Boot Device Priority».
- Оставаясь на первой позиции в списке, жмем ENTER, переключаемся на наш диск и снова ENTER. Определить нужный накопитель можно по названию.
- Нажимаем клавишу F10, стрелками переключаемся на «ОК» и нажимаем ENTER.
Если при выборе накопителя наш диск в списке не был обнаружен, то нужно произвести еще пару манипуляций.
- На вкладке «Boot» переходим в раздел «Hard Disk Drives».
- Ставим диск на первую позицию тем же способом.
- Настраиваем порядок загрузки, сохраняем параметры и перезагружаем машину.
Причина 4: Режимы SATA
Рассматриваемая ошибка может возникать из-за неверно выставленного режима работы контроллера SATA. Для того чтобы исправить ситуацию, нужно снова заглянуть в БИОС и выполнить пару настроек.
Подробнее: Что такое SATA Mode в BIOS
Причина 4: Отсутствие драйверов
Рекомендации, приведенные ниже, предназначены для устранения неполадок при установке Виндовс. По умолчанию в установочных дистрибутивах отсутствуют некоторые драйвера, управляющие жесткими дисками и управляющих ими контроллерами. Решить проблему можно, внедрив нужные файлы в дистрибутив или «подкинуть» драйвер непосредственно при инсталляции системы.
Подробнее: Исправление ошибки 0x0000007b при установке Windows XP
Обратите внимание, что для «семерки» нужно будет скачать другую версию программы nLite. Остальные действия будут аналогичными.
Скачать nLite с официального сайта
Файлы драйверов нужно загрузить и распаковать на своем ПК, как написано в статье по ссылке выше, и записать их на флешку. Далее можно начинать инсталляцию Windows, а во время выбора диска «подсунуть» драйвер программе установки.
Подробнее: Нет жесткого диска при установке Windows
Если вы используете дополнительные контроллеры для дисков SATA, SAS или SCSI, то для них также нужно установить (внедрить или «подсунуть») драйвера, найти которые можно на сайтах производителей данного оборудования. Имейте в виду, что стандарт «хардов» должен поддерживаться контроллером, в противном случае мы получим несовместимость и, как следствие, ошибку.
Причина 5: Дисковый софт
Программы для работы с дисками и разделами (Acronis Disk Director, MiniTool Partition Wizard и другие) в отличие от аналогичного системного средства, имеют более удобный интерфейс и больше необходимых функций. Вместе с тем, манипуляции с томами, выполненные с их помощью, могут привести к серьезному сбою в файловой системе. Если такое произошло, то поможет только создание новых разделов с последующей переустановкой ОС. Впрочем, если размер томов позволяет, то можно произвести восстановление Виндовс из резервной копии.
Подробнее:
Варианты восстановления Windows
Как восстановить Windows 7
Существует еще одна неочевидная причина. Это использование функции восстановления загрузки в Acronis True Image. При ее включении на всех дисках создаются необходимые файлы. Если отключить один из них, то программа выдаст ошибку запуска. Выход здесь простой: подключить накопитель обратно, загрузить систему и отключить защиту.
Причина 6: Вирусы
Вирусы — вредоносные программы, которые способны, повредив дисковые драйвера, привести к возникновению ошибки 0x0000007b. Для проверки ПК и удаления вредителей нужно воспользоваться загрузочным диском (флешкой) с антивирусным дистрибутивом. После этого следует произвести операции по восстановлению запуска системы, описанные выше.
Подробнее: Борьба с компьютерными вирусами
Заключение
Устранение причин ошибки с кодом 0x0000007b может быть несложным или, наоборот, весьма трудозатратным. В некоторых случаях гораздо проще переустановить Windows, чем бороться со сбоями. Надеемся, что информация, приведенная в этой статье, поможет вам исправить ситуацию без этой процедуры.
Содержание
- Описание проблемы
- Решение
- Проблемы с файлами dll в DirectX или C++
- Проблема с патчем или пиратской программой
- Исключение декомпрессии
- Неправильный exe-файл был изменен вирусом
- Несовместимость игры с текущей системой
- Режим отладки программного обеспечения
- Ошибка 0xc000007b на синем экране
- Решение
- Ошибка 0x0000007b появляется на синем экране
- Драйвер видеокарты обновлен?
- Вы импортировали информацию реестра?
- Англоязычная директория
- Решение
- Включено ли прямое ускорение?
- Вы установили PhyX?
- Режим совместимости
- Ваша игра для Windows Live установлена?
- Установлен ли ваш Microsoft .NET Framework?
- Замена операционной системы
- Аппаратное обеспечение
- Часто задаваемые вопросы
Операционная система Windows — это сложный, взаимодополняющий и связанный с другим ПО комплекс эффективного распределения вычислительных ресурсов и управления устройствами. Однако не редки случаи, когда происходят проблемы. Ошибка 0xc000007b появляется у многих пользователей ПК. На этой странице мы узнаем, в чем заключается сложность её устранения, и найдем несколько способов решения.
0xc000007b означает, что код ошибки возникает из-за ненормального вызова файла dll. Часто игры или программы, которые мы планируем запустить, используют библиотеки и компоненты распространенных ПО — DirectX (часто версии 9.0) и распространяемый пакет Visual C++.
Описание проблемы
Когда возникает ошибка 0xc000007b, это может быть аппаратная проблема или проблема с программным обеспечением. Вероятность того, что электроника вызывает эту проблему, очень мала. Даже если выяснится, что дело в железе, то лучшим решением станет замена неисправного компонента ПК. В этой статье будет подробно рассказано, как решить возникшую трудность с помощью установки необходимого ПО. Это именно то, что больше всего интересует пользователей.
Решение
Часто для решения проблемы 0xc000007b, нужно установить последнюю версию компонентов DirectX и C++. Это правда, что обновление файлов один за другим поможет устранить уведомления ошибки, пользователи, которые уже искали Visual C в Интернете, наверняка знают, что их существует много версий.
Переходите по ссылке для скачивания DirectX и C++ или испробуйте все способы решения данной проблемы. Выберите необходимые вам и устанавливайте на свой ПК.
Переустановка новых версий не помогла?
Проблемы с файлами dll в DirectX или C++
Эта ситуация является наиболее распространенной. Dll-файлы компонентов DirectX или компонентов C++ в вашей системе все еще имеют аномалии. Скорее всего, версия утилиты была не полная или не последняя. Новый билд обычно обновляет пакет данных и улучшает возможность исправления 0xc000007b. Если какие-то файлы постоянно не восстанавливаются, то, скорее всего, причина в том, что файлы заняты. Рекомендуется перезагрузить компьютер и закрыть все бесполезные программы (включая антивирус, QQ, браузер и завершить процесс QQProtect.exe в диспетчере задач и т. д.).
Проблема с патчем или пиратской программой
Причина в том, что пиратское ПО для взлома изменяет некоторую информацию в исходном файле exe/dll. Игра или программное обеспечение имеют большой размер, а патч для взлома относительно невелик. Обычно, заменив exe или steam_api.dll и другие файлы, злоумышленники производят нарушения, изменив несколько МБ. Так что если причина в этом, то рекомендуется повторно скачать ваш патч, проверив контрольные суммы для исключения сторонних встроек. Если dll другой, то перейдите по ссылке, чтобы загрузить любой необходимый.
Исключение декомпрессии
Эта ситуация чаще всего возникает в установочном пакете игры. Причина такого рода проблем заключается в том, что компонент распаковки в системе неисправен. Это приводит к генерации ошибки при вызове ненормального компонента при автоматической распаковке программы.
Решение
- Найдите дистрибутив с приложением.
- Распакуйте его через правую кнопку мыши в любую папку.
- Пропустите ошибки, возникающие при работе архиватора.
Неправильный exe-файл был изменен вирусом
Эта ситуация имеет определенную вероятность возникновения, и некоторые пользователи также сталкивались с этой проблемой. В похожем случае в системе есть вирус, который заражает exe-файл. Поэтому он не может запуститься. Этот тип вируса может изменять только исполняемые файлы без цифровой подписи. Поэтому средство восстановления DirectX на вашем компьютере и некоторые небольшие программы в Интернете могут не работать. Однако собственные программы Windows и некоторые с цифровыми подписями от крупных компаний все еще могут нормально функционировать. Если ошибка 0xc000007b возникает во многих программах на вашем компьютере, скорее всего, это так.
Решение
Чтобы исправить, включите сначала стандартный защитник Windows, а потом сторонний антивирус, чтобы проверить ОС на наличие вредоносных файлов, и исправьте их или внесите в карантин.
- Наберите в строке поиска «Защита от вирусов и угроз».
- Откройте это окно безопасности Windows кликнув по найденному параметру левой кнопкой мыши.
- Включите все параметры подсвеченные как выключенные таким образом, чтобы они стали выводить галочку в зеленом кружке.
Несовместимость игры с текущей системой
Пользователи Windows 7 получают ошибки 0xc000007b при запуске некоторых последних игр (особенно игр 2020 года и более поздних версий).
Решение
- Пожалуйста, зайдите на официальный сайт игры (или steam).
- Посмотрите, что написано в графе операционная система в минимальной конфигурации, необходимой для игры.
- Сравните с той которая у вас. Если Необходимо обновить ОС, установите необходимую, например Windows 11 последней конфигурации с нашего ресурса.
- Кроме версии системы, также советуем проверить требования к оборудованию.
- Кроме покупки нового качественного «железа» выхода нет.
Режим отладки программного обеспечения
Если вы используете Visual Studio и другое программное обеспечение для разработки программ, особенно в режиме отладки, появится ошибка 0xc000007b. Её уже не решишь простым обновлением Компонентов Диеркс и C++.
- Попробуйте найти параметр «SATA Mode Selection» в интерфейсе BIOS и измените режим «AHCI» на режим «iDE».
- Для этого при включении ПК нажмите на клавишу «del, F2,F9,F12 (в зависимости от того, какой клавишей запускается загрузчик — BIOS именно у вас. Это будет на секунду написано на экране)».
- Перейдите в раздел «Advaced».
- Затем найдите «SATA Configuration». Иногда этого пункта нет, в сразу можно увидеть «SATA Mode Selection».
- Поменяйте значение на «iDE». Как показано на скриншотах из разных загрузчиков в галерее ниже.
- В командной строке орт имени администратора, введите команду «sfc /scannow». Подождите сканирования и восстановления. Это действие будет выглядеть как на скриншоте ниже галереи.
Ошибка 0xc000007b на синем экране
Такая ситуация чаще встречается в Windows 10, после перезагрузки системы внезапно обнаруживается, что вход в систему невозможен, и на синем экране появляется сообщение об ошибке 0xc000007b. Причина этого в том, что при автоматическом обновлении системных компонентов они случайно убиваются антивирусным ПО, что приводит к невозможности входа в ОС после перезагрузки.
Решение
- Предлагается переустановить систему напрямую, чтобы решить эту проблему.
Ошибка 0x0000007b появляется на синем экране
Пожалуйста, прочитайте внимательно. Эта статья отличается от пункта 7. Код ошибки имеет дополнительный ноль. Эта ошибка в основном вызвана установкой неправильного режима жесткого диска.
- Например, если у вас изначально была IDE, а вы зашли в биос и изменили его на AHCI, то перезапуск обязательно приведет к синему экрану 0x0000007b.
- Также возможно, когда вы не проявляли инициативу по изменению режима жесткого диска, а обновили BIOS и изменили режим ЖД по умолчанию.
Решение
- При включении ПК нажмите на клавишу «del, F2,F9,F12 (в зависимости от того, какой клавишей запускается загрузчик — BIOS именно у вас. Это будет на секунду написано на экране)»
- Перейдите в раздел «Advaced».
- Затем найдите «SATA Configuration». Иногда этого пункта нет, в сразу можно увидеть «SATA Mode Selection».
- Поменяйте значение на «iDE». Как показано на скриншотах из разных загрузчиков в галерее ниже.
Да, решение очень похоже на предыдущий пункт, однако сама ошибка имеет другое название, поэтому требует отдельного рассмотрения. Кроме того порядок действий, который предшествует возникновению ошибки отличается, поэтому чтобы сориентироваться было легче решение вынесли в отельную инструкцию.
Драйвер видеокарты обновлен?
Если это не последняя версия драйвера или вы не знаете, является ли она крайней.
Решение
- Перейдите на официальный веб-сайт вашей видеокарты, чтобы загрузить и установить ее.
- Либо наберите в поисковике Windows «Диспетчер устройств».
- В открывшемся окне, выберите «Видеоадаптеры».
- Кликните ПКМ и в выпадающем меню отройте «Свойства».
- Внутри щелкните по вкладке «Драйвер».
- Нажмите «Обновить».
Вы импортировали информацию реестра?
Вообще говоря, версия игры имеют один или несколько файлов информации реестра с расширением *.reg. Эти документы необходимо показать для правильной работы приложений. Особенно после переустановки компьютера.
Решение
Запустите его, чтобы импортировать информацию. В противном случае может быть невозможно запустить игру.
Часто все очень просто и достаточно кликнуть два раза левой кнопкой мыши и дать разрешение на изменение реестра.
Англоязычная директория
Иногда игра должна быть помещена в каталог полностью на английском языке, прежде чем она сможет нормально работать.
Решение
- Например, измените название пути на «C:/game/…».
- Вы должны убедиться, что пользователь Windows, которого вы используете в настоящее время, именован английскими символами.
- Иначе рекомендуется создать нового пользователя.
Включено ли прямое ускорение?
Часто прямое ускорение компьютера отключается по необъяснимым причинам, что приводит к сбою многих игр. Подсказка в это время может быть такой, как «Пожалуйста, установите DirectX 8.0 или выше» или «Ускорение DirectX недоступно». В настоящее время для запуска игры необходимо вручную включить прямое ускорение.
Решение
- Зажимаем «Win+R».
- Вводим «dxdiag».
- Переходим в вкладку «Дисплей».
- Находим поле «Возможности DirectX».
- Все должно быть включено так, как на картинке ниже.
Если что то выключено, то проблема скрывается в в следующем:
- Битые драйвера;
- Проверьте в «Диспетчере устройств» и обновите все драйвера через меню «Свойства».
- Не новый Дирекс;
- Обновите до версии указанной в системных требованиях.
- Ускорение железа;
- Сторонние программы для ускорения;
- Электронные компоненты перестали работать или не соответствуют требованиям.
Вы установили PhyX?
Многие игры теперь поддерживают PhyX, хотя только NVIDIA могут его включать.
Решение
Для пользователей видеокарт ATI для запуска игры необходимо всего лишь установить драйверы PhyX. Сам physxloader.dll подставится автоматически при установке драйвера.
- Иногда physxloader.dll нужно скопировать в корень с игрой, заменив уже существующий и в системную папку «C:WindowsSystem32».
- После чего это «*.dll» необходимо зарегистрировать, для этого:
- Нажмите «Win+R».
- Введите «regsvr32.exe physxloader.dll».
Режим совместимости
Некоторые старые игры не запускаются. Потому что при программировании не учитывались особенности новой версии Windows. Поэтому можно попробовать запустить игру в режиме совместимости.
Решение
- Конкретный метод заключается в том, чтобы щелкнуть правой кнопкой мыши значок игры.
- Выбрать «Свойства».
- Найти вкладку «Совместимость».
- Установить флажок «Запустить эту программу в режиме совместимости».
- Выбрать, какую операционную систему использовать.
Ваша игра для Windows Live установлена?
Сейчас многим старым играм нужна поддержка Game For Windows Live, и их надо установить (не запускать через ОЗУ, как раньше), чтобы играть. Иначе в некоторых системах будет указано, что файл xlive.dll отсутствует, в то время как в других системах будет указано 0xc000007b. Так что Game For Windows Live нельзя игнорировать.
Установлен ли ваш Microsoft .NET Framework?
В оригинальные Vista, и в Windows 7 встроен .NET Framework, а вот о пиратской версии сказать сложно. Взломки часто кастрируют некоторый контент, и никто не может узнать, как это повлияет на структуру системы. Так что если ваша система не официальная, то вы можете попробовать установить Фреймворк самостоятельно.
Решение
Кликните на ссылку и скачивайте .NET Framework с нашего сайта или испробуйте все способы из приведенной инструкции и перейдите на страницу загрузки платформы внизу инструкции.
Замена операционной системы
По запросам заметно, что эта проблема очень распространена на 64-битных компьютерах, и в редких случаях она встречается и на системах x32. Поэтому рассмотрите возможность перехода на 32-битную ОС. Вероятность этой проблемы будет значительно снижена.
Аппаратное обеспечение
Если эта проблема все еще возникает даже после смены операционной системы, она может быть вызвана оборудованием.
Как уже упоминалось в начале статьи, эта проблема может быть вызвана со стороны электронных компонентов. Если вышеуказанные шаги по-прежнему не работают, вы можете подумать, есть ли проблема с оборудованием. Рекомендуется вытащить видеокарту и разомкнуть другие контакты. Протереть их начисто перед тем, как вставить обратно, что может решить проблему.
Часто задаваемые вопросы
Игры, которые я запускаю, имеют спецэффекты DirectX 11, будет ли это иметь какое-то отношение к Дирекс 9?
На самом деле, ради совместимости приложений компании часто разрабатывают игрушки на основе 9-ой версии, а затем добавляют специальные эффекты от 10-ки и 11-ой.
Есть ли проблема с DirectX, которая влияет на последние игры?
Да, дело в том, что Windows старых версий поддерживают самые основные компоненты Дирекс, а игре часто нужны более продвинутые (такие как d3dx9_42.dll, xinput1_3.dll…). В системе отсутствуют эти ключевые файлы, из-за чего игра не запустится или появится ошибка 0xc000007b.
Некоторые люди могут спросить: я уже установил DirectX 9.0 и C++, но они все равно не работают?
Здесь кроется важная вещь: 32-битные системы должны устанавливать 32-битные файлы библиотек DirectX и C++, а 64-битные системы должны устанавливать файлы библиотек с типом разрядности данных как x32-а, так и x64-е бита, что является ключом к решению этой проблемы.
Ошибка при запуске Windows – 0xc000007b или установке ОС, или приложения появляется довольно часто. Давайте разберемся, как исправить данную проблему.
Содержание:
- Причины появления ошибки 0xc000007b
- Как исправить ошибку 0xc000007b при запуске приложения
- Переустановка программы при ошибке 0xc000007b
- Обновление, переустановка драйвера видеокарты
- Установка DirectX, NET Framework и Microsoft Visual C++
- Запуск программы от имени администратора
- Запуск приложения в режиме совместимости
- Проверка жесткого диска и Windows на ошибки
- Отключение антивируса во время установки программы
- Очистка системы от мусора и оптимизация реестра
- 0xc000007b при запуске системы Windows – как исправить
- Откат системы по точке восстановления
- Итоги
Недавно я столкнулся с неприятной проблемой при установке Windows. На нетбук я ставил версию XP и во время установки появился синий экран смерти с ошибкой 0xc000007b. Расшифровка BSoD сводится к тому, что есть проблемы с жёстким диском, но так ли это?
Начал разбираться, пробовал переводить режим HDD с SATA на IDE для Windows XP, много настроек перебрал в BIOS, но ничего не помогало.
Далее я установил на флешку утилиту Victoria для поверки жесткого диска и посмотрел на показатели SMART. Все параметры были зелеными. Тогда я начал полную проверку HDD на ошибки. После проверки, я использовал режим «Стирания», которые трижды перезаписывает диск и полностью его очистил.
Каков результат? При новой попытке установить XP снова появился этот экран. Решение было простым – заменить образ системы на другой. Я просто скачал другой образ Windows XP, и установка пошла.
Вывод здесь один – проблема в образе.
Конечно, это не единственный вариант, когда появляется ошибка 0xc000007b. Есть множество других, например, при запуске системы, программы или во время установки ПО. Вот несколько вариантов, почему появляется ошибка 0xc000007b:
- Программное обеспечение несовместимо с системой;
- Приложение может работать исключительно с повышенными привилегиями;
- Антивирусное ПО блокирует запуск конкретного приложения;
- Повреждение образа программы, установка прошла некорректно;
- Повреждение файлов драйверов устройств;
- Файлы операционной системы повреждены и требуют восстановления.
Это основные причины, почему появляется код ошибки 0xc000007b при запуске программ или Windows 7, 8 и 10.
Когда ошибка появляется во время запуска какой-то программы, то вы увидите соответствующие сообщение:
«Приложению не удалось запустить корректно (0xc000007b). Нажмите «ОК», чтобы закрыть приложение».
Что же, давайте разбираться что к чему.
Как исправить ошибку 0xc000007b при запуске приложения
Мы выяснили причины появления ошибки 0xc000007b. Но забыли отметить еще одну. Помимо программных неисправностей (ошибки Windows и программ) есть еще и аппаратная, которая заключается в поломке жесткого диска. В этом случае HDD необходимо проверить с помощью специальных программ – Victoria или CrystalDiskInfo, где выводится информация о текущем состоянии жесткого диска или SSD.
Если неисправности имеются, то следует использовать самый простой способ – полное стирание HDD с помощью программы Victoria, что иногда помогает исправить все ошибки диска. Второй путь, по которому можно пойти – купить новый диск.
А теперь разберем способы исправление ошибки 0xc000007b в Windows и программном обеспечении.
Переустановка программы при ошибке 0xc000007b
В редких случаях, но во время инсталляции приложения может возникнуть сбой, и установка пройдет некорректно. Тогда при запуске этой программы появится код 0xc000007b.
Это бывает в тех случаях, когда пользователь скачивает «битый» образ программы. Чаще всего они имеются на неофициальных сайтах или торрент трекерах.
Попробуйте скачать ПО с официального сайта или другой торрент и установите заново. Часто это помогает в решении проблемы. Так же внимательнее относитесь к выбору разрядности программы. Узнайте, какой разрядности ваша операционная система и выберите соответствующую битность программы.
Если же ошибка 0xc000007b снова появляется, видимо в системе не хватает каких-то важных компонентов и драйверов.
Обновление, переустановка драйвера видеокарты (видеоадаптера)
Если у вас старая версия драйвера видеокарты, то необходимо заняться поиском последней версии. Когда драйвер вообще не установлен, то неудивительно, что некоторые приложения не запускаются. Бегом устанавливать.
При наличии видеоадаптера от NVIDIA достаточно зайти на официальный ресурс и подобрать драйвер под видеокарту и систему. Далее скачиваем и устанавливаем.
Возможно, вы не в курсе, какая видеокарта у вас установлена. Тогда на помощь приходят программы, наподобие AIDA64, где указана подробная информация обо всех компонентах компьютера.
В данном случае ошибка 0xc000007b имеет место при установке программы, который работает с графикой и отсутствие драйвера может ее вызывать.
Обновление же драйвера происходит очень просто. На панели задач должно появиться уведомление, что драйвер требует обновления и появится желтый значок. Нажав по нему, действуйте инструкции.
Установка DirectX, NET Framework и Microsoft Visual C++
Это очень важные компоненты, без которых не будет работать большинство приложений. Не удивительно, если появляется ошибка 0xc000007b. Будем разбираться.
Данные библиотеки легко найти на официальном сайте Microsoft. Например, вам нужен DirectX. Вбиваем фразу в поисковике и переходим по ссылке «Download Веб-установщик исполняемых библиотек DirectX». Это будет сайт Microsoft.
Скачиваем и устанавливаем. Не забудьте включить интернет, так как скачивание осуществляется с серверов Microsoft.
Точно так же с другими библиотеками NET Framework и Microsoft Visual C++.
Запуск программы от имени администратора
Довольно простой в исполнении способ. Иногда для оптимальной работы ПО нужны повышенные привилегии. Тут все достаточно просто:
- Нажимаем правой кнопкой мышки по ярлыку программы.
- Выбираем пункт «Запуск от имени администратора».
Если это не помогло, переходим к следующему способу.
Запуск приложения в режиме совместимости
Иногда программы могут быть несовместимы с текущей версией системы. В этом случае существует режим совместимости, который, возможно, поможет исправить ошибку 0xc000007b. Вот, что для этого нужно сделать:
- Нажимаем по значку приложения правой кнопкой мышки и выбираем пункт «Свойства».
- Переходим на вкладку «Совместимость».
- Ставим галочку напротив опции «Запустить программы в режиме совместимости с:».
- Выбираем, например, более раннюю версию ОС.
- Применяем настройки и пробуем запустить.
Проверка жесткого диска и Windows на ошибки
Для начала стоит убедиться, что ваш диск работает исправно. Скачайте утилиту CrystalDiskInfo и посмотрите на показатели SMART. Если здоровье диска в зеленой зоне, то пока что с диском все нормально. Но данный показатель не на 100% отражает исправность работы диска.
Чтобы проверить и исправить возможные ошибки, которые являются виновником возникновения кода 0xc000007b, сделаем следующее:
Вдобавок можно воспользоваться социальной утилитой для проверки системных файлов:
- Запускаем командную строку или PowerShell с повышенными привилегиями (в Windows 10 нажимаем сочетание Win+X и выбираем соответствующий вариант).
- Прописываем команду sfc /scannow.
- Начнется проверка системы.
Если поврежденные файлы были найдены, они автоматически будут заменены на исправные, но так бывает не всегда. Сведения о не восстановленных файлах хранятся в логах, путь до которых будет указан в командной строке.
Отключение антивируса во время установки программы
Как еще исправить ошибку 0xc000007b? Конечно же, с помощью отключения антивируса. Это особенно актуально при установке программы с ключом (взломанная версия). На примере Защитника в Windows 10 покажу, как временно отключить защиту системы.
- Нажимаем на значок поиска, расположенный на панели задач.
- Вводим фразу «Защитник Windows».
- Выбираем из результата пункт «Параметры Защитника Windows».
- В открывшемся окошке справа нажимаем по пункту «Открыть службу “Безопасность Windows”».
- Слева щелкаем по разделу «Защита от вирусов и угроз».
- В подразделе «Параметры защиты от вирусов и других угроз» нажимаем ссылку «Управление настройками».
- Отключаем все синие опции.
Со своим антивирусом вам придется разобраться самостоятельно. После того, как вы его отключите, попробуйте заново установить проблемную программу с кодом 0xc000007b и запустить.
Очистка системы от мусора и оптимизация реестра
Для реализации этого будет использовать утилиту CCleaner. Скачайте и установите её, а затем запустите.
После запуска инструмента вы окажетесь в разделе «Очистка». В основном все важные галочки уже отмечены, поэтому достаточно нажать по кнопке «Анализ».
После анализа вы видите различные временные файлы и кэш, который нужно почистить. Нажимаем по кнопке «Очистка» и подтверждаем действие.
Теперь посетим раздел «Реестр». Жмем по кнопочке «Поиск проблем». По окончанию поиска нажимаем «Исправить выбранное».
Возможно, программа предложит сделать резервную копию. Соглашаемся с этим. Затем снова нажимаем по кнопке «Исправить выбранное.»
0xc000007b при запуске системы Windows – как исправить
Если ошибка появилась во время запуска системы, то виной может быть повреждение системных файлов или некорректная установка самой Windows. Например, битый образ.
При запуске Windows нажимаем многократно на клавишу F8, пока не появится меню дополнительных вариантов загрузки.
Выбираем пункт «Последняя удачная конфигурации», если он есть. Если же его нет, то можно выбрать «Безопасный режим» и проделать все те действия, которые указаны выше.
В безопасном режиме обязательно проверьте систему с помощью команды sfc / scannow.
Откат системы по точке восстановления
Если у вас включена функция восстановления, то в любом случае там будут ближайшие точки восстановления. Их стоит использовать. При невозможности использовать Windows, воспользуйтесь «Безопасным режимом».
- Далее заходим в панель управления, затем в раздел «Восстановление».
- В окошке нажимаем пункт «Запуск восстановления системы».
- Выбираем время, когда ошибка 0xc000007b еще не появлялась.
Подведение итогов
Отметим, что очень много пользователей устанавливает не официальные сборки Windows 7, 8 или 10, а сборки энтузиастов. В них могут быть косяки, которые если не сразу, то позже приводят к подобному роду ошибкам.
То же самое с программным обеспечением. Не редки случаи, когда приложение повреждено. Но ошибка чаще всего может появится еще на стадии установки. Если же 0xc000007b появился после запуска установленной программы, значит инсталляция прошла неудачно.
Что касается опять же операционных систем. Как в моем случае, установка ОС вообще не проходила, а синий экран смерти говорил о том, что есть вероятность выхода из строя жесткого диска. А дело было в самом образе, который был попросту поврежден. Вот так мы с вами избавились от ошибки 0xc000007b при запуске приложения или Windows. Будьте впредь внимательны, что устанавливаете.
Содержание
- Появляется сообщение о фатальной ошибке с кодом 0x0000007B (INACCESSIBLE_BOOT_DEVICE) после установки обновлений для Windows
- Решение
- Дополнительная информация
- Синий экран при загрузке. Как быть?
- Формат исполняемых файлов
- Процесс загрузки образа
- Как исправить ошибку BSOD 0x0000007b при загрузке Windows 7
- Причины возникновения ошибки 0x0000007B
- Включение режима SATA-контроллера в Биосе
- Установлен второй жесткий диск с ОС Windows
- Включение драйвера AHCI через реестр
- Сканирование утилитой CHKDSK
- Восстановление системы
- Синий экран смерти BSOD 0x0000007B: причины и решения.
- BSOD 0x0000007B может вернуться…
- Запрет со стороны групповой политики
Появляется сообщение о фатальной ошибке с кодом 0x0000007B (INACCESSIBLE_BOOT_DEVICE) после установки обновлений для Windows
Решение
Чтобы устранить эту ошибку, воспользуйтесь приведенными ниже способами. Если первый способ не позволяет устранить эту проблему, перейдите к следующему способу.
Способ 1. Использование последней удачной конфигурации для запуска Windows
При этом способе компьютер запускается, используя конфигурацию, которая была настроена при последней успешной загрузке системы. Чтобы воспользоваться этим способом, выполните следующие действия.
В процессе загрузки компьютера нажмите и удерживайте клавишу F8. Если появилась эмблема Windows, повторите попытку — завершите работу и перезагрузите компьютер.
На экране Дополнительные варианты загрузки выберите с помощью клавиш со стрелками пункт Последняя удачная конфигурация (дополнительно) и нажмите клавишу ВВОД. Windows загрузится в обычном режиме.
Если вы по-прежнему не сможете успешно загрузить Windows, перейдите к способу 2.
Способ 2: удаление вирусов из загрузочного сектора
Вирусы из загрузочного сектора заражают компьютер перед запуском Windows. Это может привести к ошибке, которую вы получаете. Автономная бета-версия защитника Windows поможет вам удалить вирусы из загрузочного сектора.
На другом компьютере перейдите на автономную бета-версию защитника Windows по адресу: что такое бета-версия защитник Windows Offline?
В зависимости от версии Windows нажмите загрузить 32-разрядную версию или загрузить 64-разрядную версию.
При появлении соответствующего запроса щелкните стрелку рядом с кнопкой сохранитьи выберите команду Сохранить как. После завершения загрузки удалите съемный носитель.
Вставка компакт-диска, DVD-диска или съемного USB-накопителя. В левой области окна Сохранить как выберите съемный носитель и нажмите кнопку сохранить.
Вставьте в компьютер, инфицированный вирусом, DVD-диск или USB-порт из автономного режима защитника Windows Перезагрузите компьютер.
Если ваш компьютер обнаружит мультимедиа автоматически, выполните указанные ниже действия. Если на вашем компьютере автоматическое обнаружение мультимедиа отсутствует, перейдите к действию 7.
Чтобы включить этот параметр, прочтите инструкции на экране. В некоторых случаях может потребоваться нажать любую клавишу, чтобы начать с компакт-диска, DVD-или USB-дисковода, либо нажать определенную клавишу, например F12.
Нажмите клавишу (обычно — F12). На экран выводится список доступных устройств. На каждом жестком диске будет храниться запись для каждого компакт-диска, DVD-дисковода и флэш-накопителя USB.
С помощью клавиш со стрелками перейдите к диску с загрузочным компакт-диском, DVD-или USB-проигрывателем, а затем нажмите клавишу Ввод.
КОМПЬЮТЕР начнет работу с компакт-диска, DVD-диска или USB-устройства, подключенного к Защитнику Windows. Сканирование займет несколько минут и удаляет все вредоносные программы, которые могут поразить компьютер.
Если компьютер не будет автоматически определять мультимедиа:
В процессе перезапуска прочтите инструкции, описывающие, как прервать нормальную загрузку и войти в программу BIOS Setup. На большинстве компьютеров используется клавиша F2, F10, ESCили Del для начала настройки BIOS.
Найдите вкладку в утилите BIOS Setup, обозначенную как последовательность загрузки, варианты загрузкии Загрузка. Следуя инструкциям на экране, с помощью клавиш со стрелками перейдите к последовательности загрузкии нажмите клавишу Ввод.
Найдите CD, DVD или USB-накопитель (это устройство может называться съемным устройством) в списке загрузки. Следуя инструкциям на экране, с помощью клавиш со стрелками переместите диск вверх, чтобы он отображался в списке загрузки. Нажмите клавишу Ввод. Последовательность загрузки будет изменена для загрузки с компакт-диска, DVD-дисков или USB-накопителя.
После завершения сканирования компьютер будет загружаться в Windows обычным способом.
Если вы по-прежнему не можете загрузить Windows, перейдите к способу 3.
Способ 3: использование функции восстановления при загрузке
Восстановление при загрузке может распознать и устранить некоторые виды системных ошибок, препятствующие запуску Windows.Чтобы запустить средство восстановления при запуске с помощью предварительно установленных параметров восстановления, выполните указанные ниже действия.
Перезагрузите компьютер с помощью кнопки включения на компьютере. Выполните одно из указанных ниже действий.
Если на компьютере установлена только одна операционная система, при перезагрузке компьютера нажмите и удерживайте клавишу F8. Клавишу F8 необходимо нажать до появления эмблемы Windows. В случае появления эмблемы Windows необходимо повторить попытку, дождавшись вывода приглашения войти в систему Windows, а затем заново перезагрузив компьютер.
Если на компьютере установлено несколько операционных систем, с помощью клавиш со стрелками выберите операционную систему, которую необходимо восстановить, а затем нажмите и удерживайте клавишу F8.
На экране Дополнительные варианты загрузки выберите с помощью клавиш со стрелками пункт Устранение неполадок компьютера и нажмите клавишу ВВОД.
Выберите раскладку клавиатуры и нажмите кнопку Далее.
В меню Параметры восстановления системы выберите пункт Восстановление при загрузкеи следуйте инструкциям на экране.
Чтобы запустить средство восстановления при запуске с помощью установочного диска Windows или диска восстановления системы, выполните указанные ниже действия.
Вставьте установочный диск Windows 7 или диск восстановления системы, а затем завершите работу компьютера.
Перезагрузите компьютер с помощью кнопки включения компьютера.
Нажмите любую клавишу при отображении соответствующего запроса, а затем следуйте инструкциям на экране.
На странице Установка Windows или Параметры восстановления системы выберите нужный язык и другие параметры, а затем нажмите кнопку Далее.
Если вы используете установочный диск Windows, нажмите кнопку восстановить компьютер.
Выберите установку Windows, которую вы хотите восстановить, и нажмите кнопку Далее.
В меню Параметры восстановления системы выберите пункт Восстановление при загрузкеи следуйте инструкциям на экране.
Дополнительная информация
Дополнительные сведения об ошибках запуска: (Windows 7) Устранение ошибок остановки (синий экран) в Windows 7или (Windows Vista) что делать, если Windows не запускается правильнодля получения дополнительных сведений о центре обновления Windows посетите веб-сайт: Центр обновления Windows: вопросы и ответы о автономной версии защитника Windows
Источник
Синий экран при загрузке. Как быть?
Сел сегодня за комп домашний. Спокойно работал минут 20. На рабочем столе была картинка одна. Решил ее открыть. Компьютер чет секунд 5 думал-думал, и вырубился. Не знаю есть ли связь между открытием этой картинки и выключением, но все же написал, на всякий случай.
Теперь ОС (Win7 64x) не загружается вовсе. Проходит этап с надписью Microsoft Windows и появляется синий экран после него. Надпись следующая на экране:
STOP: c000007b
Exception Processing Message c000007b Parameters fde540 0 0 0
Сначала подумал, что с видеокартой может что и проверил ее. Оказалось все ок.
Устранение неполадок системы ничего не может найти. Откатиться же путем восстановления не могу, так ка нет точки восстановления.
При этом нормально работал безопасный режим. Через него убрал все из автозагрузки ОС. Делал очистку диска. После сделал проверку диска С на ошибки с восстановлением поврежденных файлов. Но после этого уже в безопасный режим войти не могу. Сейчас загрузился через DrWeb LiveCD и с CureIt провожу полную проверку на всякую нечисть. Так как процесс будет длиться долго, решил вот спросить тут. Может кто сталкивался с подобным и находил решение какое-нибудь.
сделал проверку диска С на ошибки с восстановлением поврежденных файлов. Но после этого уже в безопасный режим войти не могу.
Источник
Не так давно я столкнулся с одной, достаточно редко встречающейся в моей практике, ошибкой. Она носит название «Ошибка при запуске приложения (0xc000007b)» и влечет за собой отказ в запуске приложения в операционной системе Windows. Проще говоря, некоторые приложения перестают запускаться вообще, либо всё же запускаются, но далеко не всегда. Щелкаешь в проводнике по имени запускного exe-модуля, либо пытаешься запустить исполняемый файл из командной строки, и наблюдаешь следующую картину:
Забавно, но что то в этой ошибке c000007b показалось мне знакомым, моя дырявая долговременная память сохранила смутные образы подобных проблем еще с незапамятных времен, при этом не оставив никаких ясных обстоятельств. Изучая информацию по данной ошибке в Сети я начал припоминать, что наблюдал подобные ошибки еще во времена Windows 2000, но на самом то деле характерны они были для исполняемых бинарных модулей аж со времен Windows 98, просто формулировались иначе. Начиная с версии Windows 2000 и по сей день ошибка c000007b выглядит в точности так, как представлено выше, и, скорее всего, на протяжении нескольких поколений ОС имеет родственные причины возникновения. Специфика найденного мной в Сети материала заключалась в том, что давались многочисленные рекомендации по исправлению, однако не было никакой конкретики по причинам, в связи с чем появилось желание попытаться изучить проблему самостоятельно.
Знаете, мне порой достаточно сложно так вот «с ходу» понять происходящее, я думаю вся загвоздка тут заключается в ограниченности моих знаний по архитектуре операционной системы, их явно не достаточно для того, чтобы понять, где находится источник ошибки, на каком уровне кода она возникла, какая подсистема обработала и вывела ошибку на экран. В конечном счете ведь именно подобные, глубокие знания системы и позволяют нам понимать принципы функционирования и причины тех или иных системных ошибок. Поэтому, сегодня мы будем изучать данный вопрос сообща, так сказать «на живую», так что будьте готовы ко всякого рода неточностям. Что мы можем сказать о проблеме? Судя по всему, она может лежать как внутри так и вне конкретного исполняемого образа, поскольку в наблюдаемой мной однажды, затронутой проблемой системе, ошибка возникала при запуске абсолютно разных приложений. К сожалению, проблемную систему необходимо было «поднимать» в кратчайшие сроки, поэтому не было возможности продолжить детальное изучение, и позже я вынужден был воспроизводить ошибку на другой, абсолютно здоровой системе.
Формат исполняемых файлов
Приступим. Для начала давайте посмотрим, что же нам сообщают разработчики об ошибке со статусом c000007b на официальной странице значений NTSTATUS? Ошибка носит символическое имя STATUS_INVALID_IMAGE_FORMAT (НЕКОРРЕКТНЫЙ ФОРМАТ ОБРАЗА), а в описании к ней присутствует следующая формулировка: «Образ либо не предназначен для выполнения в Windows или содержит ошибку..», ну и далее даются общие рекомендации. Как всегда, довольно пространное определение, не содержащее в себе значимых подробностей, однако уже позволяющее нам сделать как минимум два предположения:
Ну хорошо, а что же в себе таит утверждение о некорректном формате? Возможно, подразумевается некое повреждение структуры PE-образа? Но ведь близких по природе ошибок в PE-образе, чисто теоретически, может быть великое множество, и скорее всего так оно и есть. Одним словом, это утверждение о повреждении структуры исполняемого образа требует проверки и аргументации!! В свою очередь, для проверки следовало бы отследить, какой именно код ядра и на каком этапе выводит данное сообщение. Вероятно, если мы наблюдаем подобную ошибку до запуска приложения, то от момента щелчка правой кнопкой мыши по бинарному исполняемому файлу (например: exe-файл) в проводнике Windows ( explorer.exe ) и до непосредственного начала выполнения кода приложения, проходит некая скрытая от глаз пользователя работа на уровне ядра операционной системы и вот как раз эта самая работа иногда завершается с ошибкой. Одни вопросы порождают другие. Думаю, для лучшего понимания того, какая именно логика скрывается за безмолвием загрузки, надо сперва задаться вопросом «что же вообще такое представляет из себя исполняемый файл в среде Windows и как он загружается»? Всякий бинарный исполняемый файл в Windows построен на основе формата под названием PE (Portable Executable, переносимый исполняемый), который содержит в себе великое множество разнообразных секций, предназначенные для подготовки участков файла (они же блоки кода и данных), критичных для непосредственного выполнения приложения.
Выходит, в системе имеется некий загрузчик образов (PE-загрузчик), естественно, ведь кто-то должен подготавливать код и данные к непосредственному исполнению. Это отлично укладывается в логику функционирования операционной системы, к тому же я про него время от времени краем уха слышал. Но это, извините, закопано где-то системе, с чего нам начать? Давайте начнем с малого, с формирования тестовой среды:
Процесс загрузки образа
Основной экран программы Procmon моментально заполняется событиями.
Изучая получившийся у нас лог событий, можно увидеть следующие этапы запуска приложения:
Мы получили имена двух функций, которые, судя по всему, имеют отношение к созданию потока и подготовке его к выполнению. Теперь можно переходить непосредственно к практической части исследования. Надеюсь, перед началом экспериментов у Вас уже готова тестовая среда и установлены Debugging Tools for Windows из комплекта Windows SDK и в системную переменную Path добавлен путь к необходимой версии каталога с отладчиками. Теперь задача перед нами стоит не совсем тривиальная, поскольку нам необходимо поймать момент запуска приложения, до его непосредственного выполнения и даже до момента подготовки адресного пространства процесса. К превеликой нашей радости, основными отладчиками от Microsoft поддерживаются фильтры событий, которые включают отладочный сценарий начальной стадии загрузки приложения. Насколько я понял, он может быть активирован двумя путями:
Например, следующая команда позволяет изучить процесс и установить точку останова до того, как код пользовательского режима запустится:
опция xe подразумевает останов после того, как библиотека ntdll.dll будет загружена в адресное пространство процесса. И не спроста, потому как в самом отладчике, в командной строке, мы должны поставить точку останова:
Источник
Как исправить ошибку BSOD 0x0000007b при загрузке Windows 7
Синий экран (BSOD) с кодом ошибки 0x0000007B возникает при загрузке операционной системы. Больше всего с ней сталкиваются пользователи Windows 7. В основном ошибка возникает, когда компьютер внезапно теряет доступ к системному разделу во время запуска.
Причины возникновения ошибки 0x0000007B
По информации пользователей из различных сообществ можно выделить несколько возможных причин, из-за которых внезапно возникает синий экран с ошибкой STOP 0x0000007B, прерывающий загрузку Windows.
Включение режима SATA-контроллера в Биосе
Для начала нужно проверить, верно ли включен в Биосе режим SATA контроллера (ATA или AHCI). Если установлен неправильно, Windows не сможет взаимодействовать с контроллером SATA, поскольку два режима используют разные драйверы и каналы связи.
Включите компьютер и начните нажимать на клавишу для входа в настройки BIOS (SETUP), которая отображается на первом экране.
Обычно клавиша должна отображаться на экране инициализации, но если ее пропустили или мешает заставка, то можете найти в инструкции на сайте производителя материнской платы.
Перейдите в раздел Advanced — IDE Configuration. В зависимости от версии BIOS, меню может выглядеть иначе. Настройки контроллера могут быть в разделах IDE Controller или SATA Configuration.
Установите значение на AHCI.
Сохраните текущую конфигурацию BIOS и перезагрузите компьютер, чтобы посмотреть, возникает ли ошибка на синем экране 0x0000007B.
Установлен второй жесткий диск с ОС Windows
Как оказалось, проблема может возникнуть при подключении двух жестких дисков (или SSD), на которых установлена ОС Windows. Иногда загрузчик при обнаружении второй ОС не может выстроить последовательность загрузки и прерывает запуск, выбрасывая ошибку синего экрана 0x0000007b. Поэтому, если недавно подключили дополнительный жесткий диск с Windows или установили на нем копию системы, отключите его и попробуйте загрузить компьютер.
Если загрузка прошла успешно, то для дальнейшего использования второго диска нужно удалить с него копию Windows. Если такое решение не применимо, перейдите к следующему способу.
Включение драйвера AHCI через реестр
После переключения в BIOS режима SATA-контролера на AHCI или RAID, при загрузке может отобразиться другое уведомление об ошибке — STOP 0x0000007B INACCESSABLE_BOOT_DEVICE. Эта проблема возникает в Windows 7 и указывает, что драйвер диска фактически отключен. Чтобы использовать интерфейс SATA/RAID, нужно активировать драйвер.
Включите компьютер, при появлении первого экрана нажмите несколько раз F8, чтобы открыть дополнительные параметры загрузки.
С помощью клавиш со стрелками выберите безопасный режим (или с поддержкой драйверов сети) и нажмите Enter.
После загрузки компьютера откройте диалоговое окно «Выполнить» нажатием на клавиши Win + R. Наберите команду regedit для входа в «Редактор реестра». При возникновении запроса контроля учетных записей нажмите «Да».
В левой части окна Редактора реестра перейдите по пути:
С правой стороны дважды кликните на параметр Start, измените значение на «0» и нажмите ОК для сохранения изменений.
Затем перейдите в раздел:
Также дважды кликните по параметру Start, установите значение «0» и сохраните изменения нажатием на «ОК».
Закройте редактор реестра, и перезагрузите компьютер. Посмотрите, возникает ли ошибка синего экрана 0x0000007B.
Сканирование утилитой CHKDSK
Также возможно, что синий экран возникает из-за повреждения системных файлов. Сбой в системной области может повлиять на последовательность загрузки и вызвать циклическую ошибку BSOD 0x0000007B. Проблему можно решить путем сканирования CHKDSK из безопасного режима.
Утилита проверки диска проверит целостность файлов и метаданных, и исправит любые ошибки файловой системы, которые ей удастся найти. Это могут быть поврежденные записи в таблице файлов тома (MFT), сбойные дескрипторы безопасности, несогласованные отметки времени или сведения о файле.
Включите компьютер и на первом экране нажмите несколько раз F8 для входа в расширенные параметры загрузки. Переместите курсор клавишами со стрелками на безопасный режим и нажмите Enter.
В консоли командной строки наберите следующую команду и подтвердите ее запуск на Enter:
После завершения сканирования перезапустите компьютер и проверьте, устранена ли ошибка синего экрана 0x0000007B
Восстановление системы
Если не удалось обойти синий экран указанными способами, попробуйте запустить восстановление системы, в ходе которого будут перезаписаны компоненты Windows, включая процессы, связанные с загрузкой. Эта процедура предпочтительнее за чистую установку, поскольку сбрасывает все компоненты Windows, сохраняя при этом все личные данные (фото, видео, приложения и игры).
Источник
Синий экран смерти BSOD 0x0000007B: причины и решения.
Синий экран смерти BSOD 0x0000007B.
После замены критически важных с точки зрения операционной системы компонентов компьютера (материнская плата, жёсткий диск и т.п.), восстановления из системного образа, а также при переезде физического хоста на виртуальную платформу, администратора почти гарантийно встретит ошибка синего экрана BSOD 0x0000007B. На страницах этого блога тема была частично раскрыта (по мере возникновения проблем) в статьях
равно как и предлагались решения по конкретным случаям. В этой статье я попробую систематизировать подход к решению проблемы BSOD 0x0000007B для большинства сборок.
Итак, имеем синий экран смерти
или такой — всё равно:
с ошибкой (на последнем фото)
При этом в описании ошибки появляется информация о INACCESSABLE_BOOT_DEVICE (загрузочное устройство недоступно). Что является намёком именно на «подменённый» контроллер жёсткого диска компьютера или сервера (в т.ч. виртуального). Это означает, что во время загрузки системы драйвер жёсткого диска просто не появился. Windows без этого, мягко говоря, работать не сможет. Таким образом, наиболее частыми причинами BSOD 0x0000007B видятся:
Как и в прошлых статьях, я предлагаю к работе загрузочный/аварийный диск с возможностью редактирования удалённого реестра. В нашем случае подойдёт даже загрузочное устройство с Windows, так что запасайтесь и приступайте.
режим работы контроллера SATA у меня
HKEY_LOCAL_MACHINE
Буква-локального-дискаWindowsSystem32configsystem
Редактор запросит имя куста. Введите local_hkey:
Таким образом, нам удалось смонтировать куст системного реестра с «неисправного» жёсткого диска в редакторе загрузочного устройства (local_hkey). Да, и ещё:
старайтесь сейчас не терять питание к ноутбуку (если работаете с ним) и не перезагружаться: иначе к BSOD добавится ещё одна ошибка
Но мы продолжаем работу. В загруженном кусте реестра нам нужен ключ
HKEY_LOCAL_MACHINElocal_hkeyControlSet001services
Нам нужны три подраздела (все — в левой части):
Если перед ошибкой вы переводили SATA в режим AHCI и в BIOS после этого не лазали, то вам нужен ещё и раздел
В любом случае обратите на него особое внимание, ибо…
HKEY_LOCAL_MACHINElocal_hkey
и выберем Выгрузить куст… (Unload Hive):
Всё. Перезагружаемся на жёсткий диск и проверяем. Сейчас Windows должна загрузиться, найти нужные драйверы к диску и установить их.
BSOD 0x0000007B может вернуться…
Если после проделанных изменений ошибка продолжает вас преследовать, это означает, что на компьютере используется другой тип контроллера. Но в любом случае при исправлении ошибки BSOD 0x0000007B (в том числе и в виртуальных машинах) вам понадобятся параметры Start в разделе
HKEY_LOCAL_MACHINElocal_hkeyControlSet001services
с такими итоговыми значениями указанных ключей:
Запрет со стороны групповой политики
Ошибка Stop 0x0000007B здесь описана подробно и официально. Её суть в том, что, если администратором Windows выставляются запреты на установку некоторых устройств и драйверов к ним (или принадлежащих тому же классу), после перезагрузки ваш может встретить BSOD 0x0000007B. Такие же неприятности могут случиться и в случае наложения запрета на установку переносных устройств хранения информации и любых других, информация о которых не содержится в настройках политики. В общем, в настройках по пути
Конфигурация компьютера — Административные шаблоны — Система — Установка устройства — Ограничения на установку устройств
будьте по-аккуратнее. После подобных изменений изменятся и значения параметров в реестре (они по умолчанию отсутствуют вовсе):
HKEY_LOCAL_MACHINESYSTEMControlSet001ControlPnPDisableCDDB
HKEY_LOCAL_MACHINESYSTEMControlSet001ControlPnPDontStartRawDevices
из-за которых «под замес» могут попасть абсолютно все устройства хранения информации на компьютере. Для исправления ситуации оба указанных значения нужно перевести в 0, используя тот же алгоритм, что описан выше. Или удалить оба.
Источник
Не так давно я столкнулся с одной, достаточно редко встречающейся в моей практике, ошибкой. Она носит название «Ошибка при запуске приложения (0xc000007b)» и влечет за собой отказ в запуске приложения в операционной системе Windows. Проще говоря, некоторые приложения перестают запускаться вообще, либо всё же запускаются, но далеко не всегда. Щелкаешь в проводнике по имени запускного exe-модуля, либо пытаешься запустить исполняемый файл из командной строки, и наблюдаешь следующую картину:
Забавно, но что то в этой ошибке c000007b показалось мне знакомым, моя дырявая долговременная память сохранила смутные образы подобных проблем еще с незапамятных времен, при этом не оставив никаких ясных обстоятельств. Изучая информацию по данной ошибке в Сети я начал припоминать, что наблюдал подобные ошибки еще во времена Windows 2000, но на самом то деле характерны они были для исполняемых бинарных модулей аж со времен Windows 98, просто формулировались иначе. Начиная с версии Windows 2000 и по сей день ошибка c000007b выглядит в точности так, как представлено выше, и, скорее всего, на протяжении нескольких поколений ОС имеет родственные причины возникновения. Специфика найденного мной в Сети материала заключалась в том, что давались многочисленные рекомендации по исправлению, однако не было никакой конкретики по причинам, в связи с чем появилось желание попытаться изучить проблему самостоятельно.
Знаете, мне порой достаточно сложно так вот «с ходу» понять происходящее, я думаю вся загвоздка тут заключается в ограниченности моих знаний по архитектуре операционной системы, их явно не достаточно для того, чтобы понять, где находится источник ошибки, на каком уровне кода она возникла, какая подсистема обработала и вывела ошибку на экран. В конечном счете ведь именно подобные, глубокие знания системы и позволяют нам понимать принципы функционирования и причины тех или иных системных ошибок. Поэтому, сегодня мы будем изучать данный вопрос сообща, так сказать «на живую», так что будьте готовы ко всякого рода неточностям. Что мы можем сказать о проблеме? Судя по всему, она может лежать как внутри так и вне конкретного исполняемого образа, поскольку в наблюдаемой мной однажды, затронутой проблемой системе, ошибка возникала при запуске абсолютно разных приложений. К сожалению, проблемную систему необходимо было «поднимать» в кратчайшие сроки, поэтому не было возможности продолжить детальное изучение, и позже я вынужден был воспроизводить ошибку на другой, абсолютно здоровой системе.
Данная статья представляет собой всего-лишь теоретические выкладки по исследованию загрузчика образов операционной системы Windows. Изучение проводилось с целью создать базис для предполагаемого дальнейшего изучения особенностей кода загрузчика. На данный момент рекомендаций по исправлению ошибки c000007b в данной статье не предоставлено, поскольку практика показала неоднозначность популярных решений с использованием утилит Dependency Walker и Process Monitor.
Формат исполняемых файлов
Приступим. Для начала давайте посмотрим, что же нам сообщают разработчики об ошибке со статусом c000007b на официальной странице значений NTSTATUS? Ошибка носит символическое имя STATUS_INVALID_IMAGE_FORMAT
(НЕКОРРЕКТНЫЙ ФОРМАТ ОБРАЗА), а в описании к ней присутствует следующая формулировка: «Образ либо не предназначен для выполнения в Windows или содержит ошибку..», ну и далее даются общие рекомендации. Как всегда, довольно пространное определение, не содержащее в себе значимых подробностей, однако уже позволяющее нам сделать как минимум два предположения:
- ошибка может содержаться в служебных структурах заголовка основного запускаемого модуля (exe-файл);
- ошибка может содержаться в подключаемых образах (dll-библиотеках);
Ну хорошо, а что же в себе таит утверждение о некорректном формате? Возможно, подразумевается некое повреждение структуры PE-образа? Но ведь близких по природе ошибок в PE-образе, чисто теоретически, может быть великое множество, и скорее всего так оно и есть. Одним словом, это утверждение о повреждении структуры исполняемого образа требует проверки и аргументации!! В свою очередь, для проверки следовало бы отследить, какой именно код ядра и на каком этапе выводит данное сообщение. Вероятно, если мы наблюдаем подобную ошибку до запуска приложения, то от момента щелчка правой кнопкой мыши по бинарному исполняемому файлу (например: exe-файл) в проводнике Windows (explorer.exe) и до непосредственного начала выполнения кода приложения, проходит некая скрытая от глаз пользователя работа на уровне ядра операционной системы и вот как раз эта самая работа иногда завершается с ошибкой. Одни вопросы порождают другие. Думаю, для лучшего понимания того, какая именно логика скрывается за безмолвием загрузки, надо сперва задаться вопросом «что же вообще такое представляет из себя исполняемый файл в среде Windows и как он загружается»? Всякий бинарный исполняемый файл в Windows построен на основе формата под названием PE
(Portable Executable, переносимый исполняемый), который содержит в себе великое множество разнообразных секций, предназначенные для подготовки участков файла (они же блоки кода и данных), критичных для непосредственного выполнения приложения.
Portable Executable (PE) — формат исполняемых файлов и динамических библиотек, используемый в операционных системах Microsoft Windows. Фактически это довольно сложная структура данных, в которой содержится информация, необходимая системному загрузчику исполняемых образов, то есть коду ядра, который производит всю необходимую работу по подготовке исполняемого файла к непосредственному запуску (создание адресного пространства процесса, отображение файла в память, создание всех необходимых для функционирования системных конструкций и прч). В операционных системах Windows описываемый формат PE применяется при создания таких исполняемых файлов как:
.exe
,.dll
,.sys
и некоторых других.
Выходит, в системе имеется некий загрузчик образов (PE-загрузчик), естественно, ведь кто-то должен подготавливать код и данные к непосредственному исполнению. Это отлично укладывается в логику функционирования операционной системы, к тому же я про него время от времени краем уха слышал. Но это, извините, закопано где-то системе, с чего нам начать? Давайте начнем с малого, с формирования тестовой среды:
- Операционная система: Windows 7 Профессиональная (Русская), 32-разрядная (6.1.7601) (32-битную среду я выбрал для простоты, дабы WOW64 не вносил свои коррективы);
- Простой исполняемый модуль lasterr.exe из комплекта примеров FASM (EXAMPLESDLL) с минимумом подключаемых библиотек. Опять же, для простоты;
- Отладчик WinDbg (версия 10.0.14321.1024) из комплекта Debugging Tools for Windows (x86);
- Утилита Process Monitor;
Процесс загрузки образа
В моем случае, при отсутствии необходимых знаний, придется двигаться с самого начала, при этом интуитивно выискивая направления по косвенным признакам. Все те данные, которыми мы обладаем на текущий момент, подводят нас к мысли, что надо каким-то образом зацепиться за этот пресловутый загрузчик образов, но как? Единственное, что приходит в голову, так это использовать всеми нами любимую утилиту Process Monitor. Зная специфику программы, можно заранее предположить, что это будут лишь поверхностные сведения, поскольку утилита не покажет нам подробности многих этапов загрузки образа на выполнение. Но ведь что-то она нам все же даст, ведь пока мы идем в темноте и пытаемся нащупать хотя бы какие-то ориентиры для дальнейшего продвижения. Просто будем надеяться, что информация, предоставляемая нам утилитой Procmon поможет нам двинуться дальше, найти зацепку в виде каких-нибудь малозаметных деталей. Тут стратегия у нас будет достаточно простая, ничего необычного.
- Из-под учетной записи с правами локального администратора запускаем утилиту Procmon;
- В разделе Filter создаем фильтр на наше приложение lasterr.exe;
- Останавливаем захват событий (Ctrl+E или иконка лупы на панели);
- Очищаем лог (Ctrl+X или значок ластика на панели);
- Снова включаем захват (Ctrl+E) событий;
- Стартуем наблюдаемое приложение lasterr.exe, как обычно двойным щелчком из проводника;
Основной экран программы Procmon моментально заполняется событиями.
Изучая получившийся у нас лог событий, можно увидеть следующие этапы запуска приложения:
- Образ приложения lasterr.exe загружается в адресное пространство собственного процесса по адресу
0x400000
. То есть мы наблюдаем какой-то из этапов уже работающего загрузчика образов; - Образ системной библиотеки ntdll.dll загружается в адресное пространство процесса по адресу
0x77c30000
. Эта библиотека всегда загружается первой? - Активизируется ускоритель
prefetcher
. В системной директории C:WindowsPrefetch проверяется.pf
-файл(ы) для запускаемого приложения; - Чуть ниже мы можем увидеть группу событий по операциям (
CreateFile
,SetBasicInformationFile
,QueryAttributeTagFile
,CreateFileMapping
,QueryStandardInformationFile
) с библиотеками ntdll.dll, kernel32.dll, apisetschema.dll, kernelbase.dll, locale.nls, errormsg.dll, user32.dll и прочими. Судя по всему это не проецирование образов, а события, генерируемые prefetcher’ом; - Ниже по списку мы наблюдаем первые события с операцией
Load Image
, которые знаменуют собой загрузку необходимых приложению DLL библиотек в адресное пространство процесса; - Еще ниже по списку событий мы наблюдаем чтение ветки HKLMSOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options. Имеется в виду механизм, которых позволяет запускать образы под отладчиком;
- Далее мы видим считывание ключа реестра HKLMSOFTWAREMicrosoftWindows NTCurrentVrsionWindowsLoadAppInit_DLLs. Ключ ответственен за механизм AppInit_DLLs, который позволяет определить списки DLL, загружаемые в адресное пространство «каждого» процесса;
- Далее идет работа с различными языковыми опциями и MUI;
Это все, что предоставляет нам Procmon. Но на самом деле в приведенном выше списке мы видим очень малую часть логики, так сказать её вершину. Обусловлено это тем, что Process Monitor показывает лишь то, до чего может сам дотянуться, и не отображает всего многообразия операций по подготовке приложения к запуску. (прим.: хотя, возможно я забыл отключить какие-то встроенные фильтры). Но даже малое порой представляет собой большое, все дело в точке зрения Давайте посмотрим, о чем на могут рассказать захваченные Process Monitor’ом события? Например, событие Load Image
применительно к образу lasterr.exe по загрузке себя же самого по базовому адресу 0x400000
в адресное пространство процесса, определенно будет нам интересно. Щелкнем по нему пару раз и перейдем во вкладку Stack. Стек вызовов начинается с функции RtlUserThreadStart
, которая является частью системной библиотеки ntdll.dll. Библиотека ntdll.dll предоставляет собой «родной» интерфейс (Native API) пользовательского режима для функций ядра, это своеобразный «мост» между функциями библиотек пользовательского режима и кодом, который реализует соответствующий функционал в ядре. Функция RtlUserThreadStart
именуется подобным образом не спроста, название говорит само за себя, намекая нам на назначение данной функции. Предположительно она предназначена для старта потока внутри процесса, при содержит функционал части пользовательского режима.
RtlUserThreadStart
— общая стартовая функция для всех потоков в Windows.
Вот уже есть у нас какая-никакая а зацепка в виде данной функции, с которой стартуют все потоки в Windows. Проходим далее по списку событий и в общем потоке обращаем своё внимание на событие Load Image
, которое относится к загрузке библиотеки kernel32.dll. Поступаем аналогичным образом, выполняем двойной щелчок левой кнопкой мыши, открываем дополнительную информацию о событии, переходим на вкладку Stack и наблюдаем следующее:
Тут уже у нас в начале стека вызовов присутствует фрейм функции LdrInitializeThunk
из библиотеки ntdll.dll. Странно, в этот раз стек начинается с другой функции, хотя, поскольку нам не известна взаимосвязь функций в библиотеке ntdll.dll, это мало нам о чем-то говорит, поскольку LdrInitializeThunk
может вызываться позже, то есть во многих случаях мы можем иметь дело с одной и той же логикой.
LdrInitializeThunk
— функция обратного вызова (режим ядра -> режим пользователя) в составе библиотеки ntdll.dll, которая не столько обратный вызов, сколько точка входа, с которой все потоки пользовательского режима начинают свое выполнение. Другими словами, создание любого потока пользовательского режима всегда происходит посредством данной функции. В некоторых источниках фигурирует как процедура инициализация загрузчика, начальный его этап, отвечает за инициализацию непосредственно загрузчика, менеджера кучи, таблиц FLS, NLS, TLS, структур критической секции. Судя по всему они сRtlUserThreadStart
работают в связке, но как именно, пока не ясно.
Мы получили имена двух функций, которые, судя по всему, имеют отношение к созданию потока и подготовке его к выполнению. Теперь можно переходить непосредственно к практической части исследования. Надеюсь, перед началом экспериментов у Вас уже готова тестовая среда и установлены Debugging Tools for Windows из комплекта Windows SDK и в системную переменную Path добавлен путь к необходимой версии каталога с отладчиками. Теперь задача перед нами стоит не совсем тривиальная, поскольку нам необходимо поймать момент запуска приложения, до его непосредственного выполнения и даже до момента подготовки адресного пространства процесса. К превеликой нашей радости, основными отладчиками от Microsoft поддерживаются фильтры событий, которые включают отладочный сценарий начальной стадии загрузки приложения. Насколько я понял, он может быть активирован двумя путями:
- Настройка отладчика через GUI: через меню Debug — Event Filters. На фильтре события Create process указываем опцию Execution: Enabled. После перезапуска процесса отладчик остановится до функции
LdrInitializeThunk
. - Запуском отладчика со специальными опциями командной строки.
Например, следующая команда позволяет изучить процесс и установить точку останова до того, как код пользовательского режима запустится:
windbg.exe -xe ld:ntdll.dll lasterr.exe
опция xe
подразумевает останов после того, как библиотека ntdll.dll будет загружена в адресное пространство процесса. И не спроста, потому как в самом отладчике, в командной строке, мы должны поставить точку останова:
bp ntdll!LdrInitializeThunk
а затем продолжить выполнение командой «g». Для чего это все? А для того, чтобы пропустить некоторое количество кода, которое выполняется до функции LdrInitializeThunk
. Мы бы в любом случае вышли на неё, однако потратили бы дополнительное время.
Отладчик останавливается на точке остановка в самом начале функции:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
ntdll!LdrInitializeThunk: 77c934a6 8bff mov edi,edi 77c934a8 55 push ebp 77c934a9 8bec mov ebp,esp 77c934ab ff750c push dword ptr [ebp+0Ch] ss:0023:0006fd1c={ntdll!`string‘ (ntdll+0x0) (77c30000)} 77c934ae ff7508 push dword ptr [ebp+8] 77c934b1 e816000000 call ntdll!LdrpInitialize (77c934cc) 77c934b6 6a01 push 1 77c934b8 ff7508 push dword ptr [ebp+8] 77c934bb e8101cfeff call ntdll!ZwContinue (77c750d0) 77c934c0 50 push eax 77c934c1 e87f37feff call ntdll!RtlRaiseStatus (77c76c45) 77c934c6 cc int 3 77c934c7 90 nop 77c934c8 90 nop 77c934c9 90 nop 77c934ca 90 nop 77c934cb 90 nop |
Ну, судя по всему, функция LdrInitializeThunk
содержит (на верхнем уровне) вызовы всего трех функций: LdrpInitialize
, ZwContinue
, RtlRaiseStatus
, причем, я так понимаю, две последних функции являются для нас не значимыми. Выполнив отладчиком по клавише F10 команду call ntdll!LdrpInitialize
я убедился, что приложение запустилось. Получается, вся работа происходит в глубинах функции Ldrpinitialize
, надо идти внутрь. Первым параметром в функцию LdrpInitialize
передается адрес дампа PE-файла в адресном пространстве процесса, а вторым адрес какой-то неизвестной структуры (?). Судя по всему, когда я впервые остановился на точке останове в начале функции, в первом параметре я увидел адрес подмапленной в память библиотеки ntdll.dll, поскольку она загружается самой первой. С этого момента я опускаю ряд подробностей нахождения мест кода, которые могли быть ответственны за генерацию ошибки c000007b, поскольку описание всего процесса отладки превратило бы повествование в бесконечное. Скажу лишь, что всю работу по анализу кода я проводил при помощи отладчика WinDbg и дизассемблера IDA.
Первая причина
Первая удача сопутствовала мне при обработке функции LdrpSnapIAT
. Очередной раз анализируя код я поставил точку останова на данную функцию, и при выполнении отладчик остановился на следующем коде:
ntdll!LdrpSnapIAT: 77c94ca1 6a24 push 24h 77c94ca3 68f808c877 push offset ntdll! ?? ::FNODOBFM::`string‘+0x542 (77c808f8) 77c94ca8 e847dbfeff call ntdll!_SEH_prolog4 (77c827f4) 77c94cad 8d45d8 lea eax,[ebp—28h] 77c94cb0 50 push eax 77c94cb1 6a00 push 0 77c94cb3 6a01 push 1 77c94cb5 8b7508 mov esi,dword ptr [ebp+8] 77c94cb8 ff7618 push dword ptr [esi+18h] 77c94cbb e8caa7ffff call ntdll!RtlImageDirectoryEntryToData (77c8f48a) 77c94cc0 8945d4 mov dword ptr [ebp—2Ch],eax 77c94cc3 85c0 test eax,eax 77c94cc5 0f843dc50100 je ntdll!LdrpSnapIAT+0x26 (77cb1208) |
Самое последнее условие je ntdll!LdrpSnapIAT
должно уводить нас на следующую ветку кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
77cb1208 a17473c877 mov eax,dword ptr [ntdll!LdrpLogLevelStateTable (77c87374)] 77cb120d 83c801 or eax,1 77cb1210 8505c0f9d077 test dword ptr [ntdll!LdrpDebugFlags (77d0f9c0)],eax 77cb1216 7422 je ntdll!LdrpSnapIAT+0x58 (77cb123a) 77cb1218 83c624 add esi,24h 77cb121b 56 push esi 77cb121c 688491c777 push offset ntdll! ?? ::FNODOBFM::`string‘ (77c79184) 77cb1221 6a00 push 0 77cb1223 687891c777 push offset ntdll! ?? ::FNODOBFM::`string’ (77c79178) 77cb1228 6877080000 push 877h 77cb122d 688c8ec777 push offset ntdll! ?? ::FNODOBFM::`string‘ (77c78e8c) 77cb1232 e813e10100 call ntdll!LdrpLogDbgPrint (77ccf34a) 77cb1237 83c418 add esp,18h 77cb123a a1c0f9d077 mov eax,dword ptr [ntdll!LdrpDebugFlags (77d0f9c0)] 77cb123f 85057873c877 test dword ptr [ntdll!LdrpLogLevelStateTable+0x4 (77c87378)],eax 77cb1245 7401 je ntdll!LdrpSnapIAT+0x66 (77cb1248) 77cb1247 cc int 3 77cb1248 b87b0000c0 mov eax,0C000007Bh 77cb124d e9f93afeff jmp ntdll!LdrpSnapIAT+0x129 (77c94d4b) |
Понятное дело, что в штатном режиме управление туда не передается, поэтому я просто взвел флаг zero
, чтобы принудительно инициировать переход. Ну и в самом конце фрагмента кода мы видим долгожданную команду mov eax, 0C000007Bh
, после чего я запускаю выполнение командой g
и.. вот оно:
Первая ласточка! Теперь осталось выяснить, что же это за фрагмент кода и что проверяют данные условия. Изначально условия перехода на код с генерацией ошибки содержат проверку возвращаемого из функции RtlImageDirectoryEntryToData
значения.
Судя по описанию с MSDN, данная функция ищет запись внутри PE-заголовка и возвращает адрес данных для этой записи (при наличии возвращает заголовок секции (
IMAGE_SECTION_HEADER
)) и длину, а случае ошибки возвращает ноль. Используется для поиска различных таблиц в PE-файлах.
Получается эта функция предназначена для получения секций подключаемых библиотек? Ничего не понятно, необходимо как то понять все происходящее в целом, так сказать откатиться назад, а для этого нам надо посмотреть стек вызовов:
ntdll!LdrpSnapIAT+0x2b ntdll!LdrpHandleOneOldFormatImportDescriptor+0x120 ntdll!LdrpHandleOldFormatImportDescriptors+0x1f ntdll!LdrpProcessStaticImports+0x25c ntdll!LdrpLoadDll+0x33d ntdll!LdrLoadDll+0xaf ntdll!LdrpInitializeProcess+0xfe7 ntdll!_LdrpInitialize+0x78 ntdll!LdrInitializeThunk+0x10 |
Похоже что за инициализацию процесса отвечает функция LdrpInitializeProcess
, которая, на определенном этапе своей работы начинает загружать библиотеки, необходимые для работы основного приложения, при помощи функции LdrLoadDll
, а та, в свою очередь, начинает просматривать таблицу импорта и заполнять Import Address Table (IAT) через функцию LdrpSnapIAT
. Однако стек не всегда остается подобным, при прогоне программы по команде g
и остановке на точке останова, стек вызовов иногда меняется, показывая, что код загружает модули, присутствующие в таблице импорта.
Функция LdrpSnapIAT «связывает» таблицу адресов импорта с импортируемыми DLL библиотеками, перезаписывает каждую запись в таблице адресов импорта актуальным адресом импортируемой функции.
В коде функции LdrpSnapIAT
имеется вызов функции RtlImageDirectoryEntryToData
, которая, в свою очередь, использует RtlImageDirectoryEntryToDataEx
, а та вызывает функцию RtlpImageDirectoryEntryToData32
, которая уже проверяет следующие условия:
- Если значение входного параметра
DirectoryEntry
(Порядковый номер требуемой записи каталога) больше или равно (>=) значенияPeHeader.OptionalHeader.NumberOfRvaAndSizes
(число записей в массиве DataDirectory. обычно имеет значение 16); ПосколькуDirectoryEntry
может иметь только определенные значения: IMAGE_DIRECTORY_ENTRY_ARCHITECTURE (7), IMAGE_DIRECTORY_ENTRY_BASERELOC (5), IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (11), IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR (14), IMAGE_DIRECTORY_ENTRY_DEBUG (6), IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT (13), IMAGE_DIRECTORY_ENTRY_EXCEPTION (3), IMAGE_DIRECTORY_ENTRY_EXPORT (0), IMAGE_DIRECTORY_ENTRY_GLOBALPTR (8), IMAGE_DIRECTORY_ENTRY_IAT (12), IMAGE_DIRECTORY_ENTRY_IMPORT (1), IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG (10), IMAGE_DIRECTORY_ENTRY_RESOURCE (2), IMAGE_DIRECTORY_ENTRY_SECURITY (4), IMAGE_DIRECTORY_ENTRY_TLS (9), он действительно не должен быть >=16! - Если значение поля
PeHeader.DataDirectory.Export
библиотеки = 0. В коде функции для поиска местоположения структуры Object Table используется yнивеpсальная формула: pe_header_offset + rva_entries_number*8 + 78h; здесь: pe_header_offset — смещение от начала файла до PE-заголовка (смещение 3Ch), rva_entries_number — количество записей в таблице объектов. После вычисления мы попадаем на первую запись структуры IMAGE_DATA_DIRECTORY, которая содержит относительный адрес (RVA) таблицы экспорта. Предположение: в уже загруженной в адресное пространство процесса DLL, которая должна предоставлять экспортируемые функции нашей основной программе (иначе бы она не была загружена), отсутствует таблица экспорта? Подобная ситуация не допустима и явно ошибочна.
Вот по этим то условиям на выходе мы и видим ошибку c000007b. Чтобы понять что же происходит в глобальном плане, следует принимать во внимание, что нашему приложению требуются внешние DLL, которые содержат функции, необходимые для выполнения. В свою очередь сама подключаемая DLL может импортировать функции из других библиотек, что создает своеобразный каскад загрузок. Загрузчик должен пройти по таблице импорта каждой библиотеки и понять её зависимости. Вот именно на определенных моментах этих проходов и возникают описанные выше проверки различных структур библиотек.
Когда после запуска исследуемого приложения под отладчиком, при первом останове на функции LdrpSnapIAT
пытаешься принудительно выйти на данную ветку кода, то ошибка не появляется! Могу предположить, что при первом вызове функции анализируется какая-то важная системная библиотека, поскольку из данных Procmon было видно, что первой загружается ntdll.dll, то можно предположить что так оно и есть. Соответственно, отказ в загрузке её самой (вероятно) не может быть завершен ошибкой, и загрузка приложения lasterr.exe в этом случае просто «тихо» завершается не выводя никаких сообщений, иными словами приложение не запускается без каких-либо ошибок, просто ничего не происходит. Поэтому, я несколько раз выполнил команду g и начал анализировать функцию со второго и последующих её вызовов, что дало видимые результаты.
В дополнение к вышеизложенному, ветвления кода, приводящие к генерации приложением ошибки c000007b удалось найти в следующих функциях:
Наименование функции | Предполагаемая причина |
---|---|
LdrpResGetMappingSize | Проверка кода NTSTATUS при возврате из функции RtlImageNtHeaderEx . Если он не нулевой (ошибочный), то проверяются первые два байта опционального заголовка на значение 10Bh (32-битный заголовок) и 20Bh (64-битный заголовок), если не соответствует ни одной из них — ошибка. |
LdrpResGetResourceDirectory | Код функции уходит на ошибку после нулевого результата выполнения вложенной функции LdrpSectionTableFromVirtualAddress , которая возвращает 0 в случае нулевого смещения PE-заголовка (в нормальной ситуации должно быть 00400080) и нулевого значения слова по смещению в заголовке = начало PE заголовка (00400080) + SizeOfOptionalHeaders + 18h, то есть первое слово Таблицы Секций (Section Table). Опять же, если мы получили Section Table, далее выполняется еще несколько проверок уже непосредственно над полями самой секции, и c000007b генерируется если некоторые поля (SizeOfRawData и прочие) в Section Table некорректны. |
LdrpResCompareResourceNames | Ошибка генерируется внутри функции по нескольким условиям, в основном это некорректные значения смещений и имен (длин имен) секций ресурсов. |
LdrpResSearchResourceInsideDirectory | Ошибка генерируется внутри функции по нескольким условиям, в основном это некорректные значения смещений и имен (длин имен) секций ресурсов. |
RtlImageNtHeaderEx | Ошибка генерируется внутри функции по нескольким условиям, скорее всего сюда же попадает попытка загрузки библиотеки «иной» (нежели основной модуль) разрядности. Предположение: при попытке запуска 64-битного приложения, у которого в импорте оказывается функция из 32-битной библиотеки или наоборот? |
Код, подобный тому, что был обнаружен в описанных выше функциях, при определенных условиях приводящих к ошибке c000007b, я встречал и в других функциях библиотеки ntdll.dll, однако не смог заставить его сгенерировать ошибку. Поэтому, количество причин, приводящих к возникновению ошибки, может быть несколько больше, что-то я мог и упустить. Однако даже те условия, которые были мной озвучены, уже могут подвести нас к определенным выводам.
Общее решение
Можно встретить две основные рекомендации по устранению ошибки c000007b:
- В некоторых случаях для решения подобной проблемы предлагается использовать утилиту Dependency Walker, которая позволяет просматривать импортируемые и экспортируемые сбойным модулем библиотеки, и, соответственно, выявить библиотеки, которые по тем или иным причинами не смогли подгрузиться. Но средство позволяет выявить лишь часть причин возникновения ошибки c000007b, поскольку:
как было показано выше, ошибка c000007b может генерироваться по нескольким условиям внутри кода загрузчика исполняемых образов операционной системы Windows, и не все из этих условий напрямую связаны с [недоступностью] импортируемых и экспортируемых функций подключаемых к модулю библиотек.
..к тому же, DW грешит еще и тем, что иногда не обнаруживает всех импортируемых модулем библиотек.
- Еще одним решением служит утилита Process Monitor, которая позволяет собирать события по деятельности загрузчика исполняемых модулей и выявлять некоторые проблемы. Но и он зачастую не видит всех деталей работы кода загрузчика, к тому же не способен найти проблемы в ресурсных секциях и заголовках.
Тем не менее, описанные инструменты позволяют обнаруживать большинство причин возникновения ошибки c000007b, они могут быть использованы в качестве стартового инструментария, и уже при невозможности решить проблему с их помощью, единственным средством остается отладчик. Лишний раз хочется кинуть камень в огород разработчиков, поскольку они могли бы значительно облегчить определение причины ошибки c000007b путем расширения статусных кодов и введения подробного описания, однако это потребовало бы доработки загрузчика образов. Но поскольку подобная глобализация множества разнородных ошибок под одним статусным кодом в программах под Windows характерна еще со времен Windows 2000, думаю, что ситуация в ближайшее столетие не поменяется
Ошибка 0x0000007B (INACCESSABLE_BOOT_DEVICE) при загрузке компьютеру указывает на то, что Windows не может получить доступ к загрузочному диску из-за отсутствия необходимого драйвера или повреждения носителя.
Администратор может столкнуться с ошибкой 0x0000007B в следующих случаях:
- При восстановлении Windows из бэкапа на другой физический компьютер или виртуальную машину Hyper-V, VMware или VirtualBox (как частный случай восстановление из Bare Metal Recovery на другое железо);
- После переносе (клонировании) Windows на новый диск или новый компьютер;
- При миграции физической системы с помощью создании образа компьютера (например, с помощью disk2vhd) и разворачивании из этого vhd образа новой виртуальной машины;
- При переключении режима работы SATA контроллера в BIOS с AHCI на IDE/RAID, или наоборот (в этом случае достаточно открыть настройки BIOS и вернуть исходный режим SATA);
- При замене материнской платы и / или контроллера жесткого диска;
- После обновления BIOS/UEFI или смене настроек.
Чаще всего я сталкивался с ошибкой 0x7b после конвертации физического компьютера с Windows Server 2008 R2/ Windows 7 в виртуальную машину с помощью VMware vCenter Converter. После окончания конвертации Windows на новой ВМ не загружается и на экране появляется BSOD со стоп-кодом:
STOP: 0x0000007B (0xFFFFF880009A9928, 0xFFFFFFFFC0000034, 0x0000000000000000, 0x0000000000000000).
Ошибка INACCESSABLE_BOOT_DEVICE в этом случае вызвана тем, что контроллер жесткого диска нового сервера (компьютера или виртуальной машины) отличается от исходного оборудования. Например, в большинстве гипервизоров для подключения дисков по умолчанию используется SCSI или SAS контроллер, который обычно отключен в исходном образе Windows. Т.е. драйвер lsi_sas.sys установлен, но служба, которая его запускает – отключена. В результате операционная системе не может загрузить необходимый драйвер и загрузка Windows прерывается с BSOD.
В режиме отладки видно, что загрузка Windows останавливается на этапе загрузки драйвера CLASSPNP.SYS.
Для исправления проблемы, нужно загрузиться с установочного диска/ USB флешки с Windows или загрузочного диска (например, MsDaRT). Если вы загрузили компьютер с установочного диска, нужно на первом экране начала установки (выбор языка и раскладки клавиатуры) нажать сочетание клавиш Shift+F10. Должно открыться окно командной строки, в котором нужно выполнить команду:
Regedit.exe
В открывшемся окне редактора реестра выберите на раздел HKEY_LOCAL_MACHINE и нажмите меню File -> Load Hive. На локально диске сервера (не перепутайте его с диском со средой WinPE) выберите файл WindowsSystem32configSYSTEM. В этом файле хранится системная часть реестра вашей Windows.
Эти действия смонтируют в редактор реестра куст реестра вашей системы с жесткого диска. Укажите временное имя новой ветки (например, local_hkey).
В загруженной ветке перейдите в раздел HKEY_LOCAL_MACHINElocal_hkeyControlSet001services.
Найдите следующие ключи реестра:
- Atapi
- Intelide
- LSI_SAS
В каждом из этих ключей найдите параметр типа REG_DWORD с именем Start и измените его значение на 0 (0x00000000).
Примечание. Значение Start=0, означает что данная служба (и соответвующий драввер) будут загружаться при загрузке Windows. Start=3 – ручной запуск службы.
Если перед возникновением проблемы вы переключили режим работы SATA контроллера на AHCI, нужно также в разделе msahci установить Start=0 (см. статью Как включить AHCI в Windows без переустановки).
Для сохранения изменений в файле реестра на диске нужно выбрать ваш HKEY_LOCAL_MACHINElocal_hkey и в меню выбрать Unload Hive.
Теперь можете перезагрузить сервер в обычном режиме. Windows должна загрузится нормально, при загрузке будет выполнен автоматический поиск и установка драйверов для нового контроллера диска.
Если после данных изменений ваша Windows так и не загрузилась с той же ошибкой INACCESSABLE_BOOT_DEVICE, значит у вас используются какой-то другой тип контроллера. Попробуйте в ветке HKEY_LOCAL_MACHINElocal_hkeyControlSet001services изменить значение параметра Start в соответствии с таблицей.
Служба Windows | Виртуальная машина VMWare или HyperV | Физический ПК с Windows x64 с нативным SATA адаптером | Физический ПК с RAID контроллером |
aliide | 3 | 3 | 3 |
amdide | 3 | 3 | 3 |
atapi | 0 | 0 | 0 |
cmdide | 3 | 3 | 3 |
iastorv | 3 | 3 | 3 |
intelide | 0 | 3 | 3 |
msahci | 3 | 0 | 0 |
pciide | 3 | 0 | 3 |
viaide | 3 | 3 | 3 |
LSI_SAS | 0 | 3 | 3 |
Ручная установка драйвера при возникновении ошибки INACCESSABLE_BOOT_DEVICE
Вы можете вручную установить драйверы в ваш офлайн образ Windows. Например, после выполнения миграции хоста через P2V вы можете установить в офлайн образ драйвер для VMware SCSI Disk Controller или драйвер VirtIO (для KVM виртуализации). Для этого скопируйте необходимые драйвера на загрузочную USB флешку и загрузитесь с нее.
Для установки драйвера в офлайн образ Windows (в этом примере он находитмя на диске F:), выполните команду:
dism /image:f: /add-driver /driver:vioscsi.inf
В некоторых организациях настроены групповые политики, которые ограничивают установку сторонних драйверов в Windows. Например, с помощью следующих параметров в разделе Computer Configuration -> Administrative Templates -> System -> Device Installation -> Device Installation Restrictions:
- Prevent installation of devices that match any of these device IDs
- Prevent installation of devices using drivers that match these device setup classes
- Prevent installation of removable devices
- Prevent installation of devices not described by other policy settings.
Если эти политики включены, Windows не сможет выполнить автоматическую установки драйвера контроллера. В этом случае нужно
- Загрузить с диска ветку реестра WindowsSystem32configSYSTEM (как описано выше);
- Затем перейдите в ветку
HKEY_LOCAL_MACHINElocal_hkeySystemControlSet001ControlPnP
- Измените значения параметров реестра DisableCDDB и DontStartRawDevices на 0
- Выгрузите куст реестра и перезагрузите компьютер.