Вы когда-нибудь наблюдали при загрузке компьютера надпись, которая бы говорила о том, что файл hal.dll отсутствует или поврежден? Если - "да" и Вы хотите научиться самостоятельно устранять данную проблему, то эта статья поможет Вам в этом.
Для наглядности, отсутствующий файл hal.dll мы организуем себе сами. Я зайду по пути C:\Windows\system32 (туда, где он и располагается) и просто удалю его из системной директории. Перезагрузимся.
После этого система сообщит нам, что файл hal.dll отсутствует или поврежден. Замечательно! :) Вот как выглядит подобная надпись:
Естественно, после этого - система на запускается, поскольку ее загрузка повреждена, и повторный рестарт ничего не дает.
Процедура "лечения" состоит в том, что поврежденный или отсутствующий файл hal.dll достаточно легко возвращается на свое место с помощью консоли восстановления Windows. И ниже мы подробно разберем этот момент.
Но пока давайте напомним себе, что же такое этот файл «hal» и что такое «dll»?
Что такое HAL ?
HAL - Hardware Abstraction Layer - уровень (слой) аппаратных абстракций. Это - слой программного кода, который скрывает (абстрагирует) нюансы аппаратной реализации компонентов компьютера (его "железа") от верхних уровней операционной системы и прикладных программ, запускаемых ее пользователем.
Это - своеобразное промежуточное звено между программным обеспечением и аппаратурой. Оно, к примеру, позволяет разработчику программы обращаться к различным функциям устройства, не зная его марку, модель и нюансы работы.
Операционные системы, в которых качественно реализован уровень аппаратных абстракций, могут быть легко перенесены (портированы) на различное оборудование (банкоматы, планшеты, телефоны и т.д.) Слой HAL как бы виртуализирует все аппаратное оборудование платформы, поэтому драйверы устройств также могут быть перенесены с минимальными изменениями.
Давайте обозначим место уровня аппаратных абстракций в иерархии взаимодействия программ и компьютерных комплектующих. Рассмотрим на примере видеокарты и программы, которая ее использует (например - компьютерная игра).
Игра не "знает" всех возможностей и функций дискретной видеокарты, поэтому она просто передает запросы на выполнение того или иного действия на уровень ниже (до слоя HAL), который работает с драйвером устройства. А вот драйвер уже точно "знает", на что способен наш графический ускоритель и как именно он работает.
Примечание: «Direct3D» - компонент интерфейса программирования приложений, работающих с графикой.
Теперь давайте порассуждаем о том, что же такое есть вторая часть нашего файла - компонент «DLL».
Что такое DLL ?
Аббревиатура переводится так - DLL (dynamic link library - динамически подключаемая библиотека). Это - автономный блок исполняемого кода программы, который подключается к ней по мере необходимости. Причем одна и та же dll, уже загруженная в оперативную память, может быть многократно использована различными программными приложениями, не создавая ее дополнительные копии и экономя ресурсы компьютера.
Динамически подключаемые библиотеки - очень удобное решение, которое позволило программистам (наконец-то :) ) каждый раз заново не "изобретать велосипед". Теперь можно однажды написанный участок исполняемого кода поместить в dll и многократно использовать ее в своих будущих проектах. Со временем можно, к примеру, просто обновить версии библиотек, добавив, таким образом, необходимый функционал в программу.
Давайте рассмотрим изложенное выше не примере: запустим текстовый редактор (например - Microsoft Word или Open Office) и посмотрим сколько времени уйдет на его загрузку? Теперь - полностью закроем его. И - снова запустим. Во второй раз он откроется очень быстро. Почему это происходит? Потому что после закрытия приложения его динамические библиотеки (dll-ки) не выгружаются из оперативной памяти (это происходит только при ее крайней нехватке), а кешируются в ней. Отсюда - быстрый повторный запуск редактора.
С "философской" точки зрения, разница между dll и exe файлом - не большая. Просто первый не может быть запущен автономно. Динамические библиотеки, включаясь в работу по мере необходимости, предоставляют приложению дополнительную функциональность, которую запрашивает пользователь.
Можно создать программу (тот же MS Word) и без использования библиотек (в виде одного исполняемого «exe» файла). Чем это может нам повредить? Просто тогда он будет загружаться очень долго. Ведь это не просто редактор текста, а - многомодульная структура, в которую входит построитель диаграмм, редактор формул, модуль проверки орфографии, инструмент работы с графикой и т.д.
Эти замечательные возможности не нужны пользователю все и сразу (загруженные в память одним исполняемым файлом), они подключаются по мере необходимости, в виде dll библиотек. Таким образом общая скорость загрузки программы резко сокращается.
Чтобы закончить с данной темой, хочу сказать следующее: динамические библиотеки это не обязательно только те файлы, которые имеют расширение "dll". К примеру, апплеты панели управления (с "родным" расширением cpl) также являются специализированными dll библиотеками.
HAL.dll отсутствует или поврежден
С необходимой теорией закончили, возвращаемся к практике! Теперь мы понимаем, когда данный файл отсутствует это - не есть хорошо. Мало того, операционная система просто не запустится и выдаст нам нехорошую надпись следующего содержания: "не удается запустить windows из за испорченного или отсутствующего файла hal.dll".
Нам нужно с помощью консоли восстановления исправить ситуация. Саму работу с консолью я описывать не буду (мы разбирали ее в предыдущей статье), но покажем весь процесс с самого начала.
Берем установочный диск с Windows XP (или 2000), выставляем в BIOS с него загрузку и перегружаемся. Внимательно понаблюдав за начальным процессом инициализации, мы можем увидеть вот такую интересную надпись внизу окна:
Как видите, операционная система загружает HAL еще до начала своей установки.
Но не отвлекаемся, а - продвигаемся! :) Входим в консоль восстановления, нажав клавишу «R» в соответствующем окне установщика.
Поскольку файл hal.dll отсутствует или поврежден, то нам необходимо заменить его такой же, но исправной копией.
Где его взять? Один из способов - зайти на очень полезный сайт: dll точка ru. Там буквально по алфавиту отсортированы различные динамические библиотеки, которые нам могут понадобиться для восстановления системы. Можно прямо оттуда загрузить любую и подставить вместо отсутствующей или поврежденной.
Но мы ведь - идейные администраторы! Мы таким легким способом пользоваться не станем, а "честно" восстановим Windows, получив дополнительный опыт и подтвердив свое право называться таковыми :)
Нам надо рассуждать примерно так: поскольку с установочного диска производилась инсталляция всех компонентов операционной системы, то, скорее всего, и отсутствующий файл hal.dll там же и находится. И его прямо оттуда можно скопировать.
Проверим это предположение. Перейдем в консоли восстановления на наш DVD-Rom оптический привод в директорию установки Windows (I386) и выполним команду обзора ее содержимого - «dir».
Примечание: у меня диск имеет букву «D», у Вас - может быть по другому. Также можете ввести команду в формате «dir /p» (без кавычек). Это позволит "пролистывать" содержимое директории по одному экрану за одно нажатие любой клавиши.
В ее недрах находим то, что нам нужно:
Как видим, название файла имеет вид: HAL.DL_ (не DLL). Почему? Это - запакованный cab-архив (Windows Cabinet File), подобный тип архивов часто используется для установки на жесткий диск компьютера компонентов самой ОС от Microsoft и набора драйверов к ней.
Для его распаковки мы с успехом можем использовать команду «expand», которая применяется самой ОС.
Примечание: для того, чтобы увидеть все возможности по использованию той или иной консольной команды, наберите ее, поставьте пробел, затем - правый слеш и знак вопроса.
На скриншоты выше Вы можете видеть все доступные параметры (ключи) с которыми может запускаться данная команда.
Распаковать и скопировать по нужному пути наш файл hal.dll мы можем теперь буквально в одну командную строчку:
expand d:\i386\hal.dl_ c:\windows\system32 Естественно, вместо «d» подставляете букву диска своего оптического привода.
Рассмотрим сам формат набора. Распаковать (expand) откуда - диск «d» папка «i386» - файл «hal.dl_» - куда: диск «c», папка «windows» и в ней - «system32» (именно туда, где и должен находиться данный файл).
Проверим результат наших трудов. Зайдем по пути: C:\Windows\system32 и, применив команду «dir /p», поищем скопированный нами файл hal.dll
Как видите, он - на своем месте. Теперь - перезагрузимся и посмотрим на общий результат.
Как видите - операционная система успешно загружается. Наша миссия - выполнена!
Теперь - пару слов о том, по какой причине, собственно может быть поврежден или вообще отсутствовать данный системный файл? Тут есть несколько причин:
- компьютерный вирус
- сбойные сектора на жестком диске
-
неудачное изменение конфигурации оборудования
Итак, друзья, мы успешно решили проблему, когда hal.dll отсутствует или поврежден и теперь можем по праву собой гордиться! Мы - сами себе админы ! :)