• Дата официального выхода Windows 8 все ближе и ближе, так что нужно поскорее подготовить всю необходимую инфраструктуры для их полноценного внедрения в корпоративную сеть. Сегодня мы поговорим о системе централизованного управления и установки обновлений Microsoft – WSUS и ее использовании для (далее…)


  • В отличии от большинства языков программирования, где присутствует директива/функция include (C, C++, PHP), VBScript лишен такой замечательной возможности включения кода из другого файла. Для реализации подобного функционала в VBScript (далее…)


  • В этой статье постараюсь описать методику диагностики проблем с неподписанными файлами драйверов в x64 битной версии Windows систем, из-за которых компьютер перестает загружаться и при загрузке падает в BSOD. Но систему все-таки можно загрузить, отключив проверку цифровой подписи при загрузке (F8 -> Disable Driver Signature Enforcement). В качестве примера в этой статье я буду работать с Windows Server 2008 R2 (которая, напомню, бывает только в 64-разрядной редакции), но данная методика подойдет так и для Windows 7 x64 и Vista x64.

    Если вернуться к предыстории вопроса, то вспомним, что Microsoft приняла решение о том, что в 64-битных системах, начиная с Windows Vista, Windows загружает драйвера в режим ядра только в том случае, если драйвер имеет цифровую подпись. Если же цифровая подпись драйвера отсутствует, то при загрузке системы случается критическая ошибка (зависит от типа драйвера, загрузка которого заблокирована) и появляется экран BSOD. Конкретная ошибка и ее код зависят от конкретного драйвера, который заблокирован в процессе загрузки. Некоторые ошибок прямо на экране BSOD могут указывать на файл неподписанного драйвера.

    В моем случае после обновления драйверов на сервере Windows 2008 r2 при обычной загрузки машины появился синий экран смерти с текстом:

    STOP: c000021a (fatal System Error)

    The initial session process or system process terminated unexpectedly with a status of 0x00000000 (0xc000428 0x00100448). The system has been shut down

    Попробуем выяснить что это за ошибка, какой драйвер ее вызывает т определим по драйверу конкретное устройство.

    Для декодирования ошибки нам нужен второй параметр (он выделен жирным) — 0xc000428.

    Преобразуем hex код ошибки в более удобочитаемую форму. Для этого можно воспользоваться встроенной в Windows утилитой SLUI.EXE или же сопоставить код этой ошибки в файле ntstatus.h, найти который можно в Windows SDK. Воспользуемся первым способом, для чего в командной строке выполним:

    slui.exe 0x2a 0xC0000428

    Как вы видите на скриншоте, мы убедились в том, что BSOD вызвана невозможностью проверить цифровую подпись драйвера (“Windows cannot verify digital signature for this file”)

    Перезагружаем наш компьютер и при загрузке жмем клавишу F8. В расширенном загрузочном меню (Advanced Boot Options) отключаем проверку цифровой подписи, выбрав Disable Driver Signature Enforcement .

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

    Следующий шаг – определение файла проблемного модуля или драйвера. Откроем консоль журнал событий (Event Viewer) и перейдем в раздел Applications and Services Logs -> Microsoft -> Windows -> CodeIntegrity -> Operational.

    Примечание: если при доступе к логам в этой ветке появляется ошибка “access denied”, создайте на диске c: каталог, предоставив группе Everyone полный доступ. Затем измените путь к файлу ETL на новый каталог, и отключите и заново включите логирование.

    В моем случае, в журнале есть событие EventID 3001 с текстом «Code Integrity determined an unsigned kernel module DeviceHarddiskVolume1WindowsSystem32win32k.sys is loaded into the system. Check with the publisher to see if a signed version of the kernel module is available». Вот мы и нашли проблемный драйвер!

    Данный драйвер может быть как родным драйвером Microsoft, так и драйвером стороннего разработчика. Удостоверимся, что данный драйвер действительно не имеет цифровой подписи. Для этого нам понадобится утилита от Sysinternals под названием SIGCHECK.EXE (взять ее можно тут http://technet.microsoft.com/en-us/sysinternals/bb897441).

    Проверку наличия цифровой подписи выполним командой:

    c:TOOLS>sigcheck.exe -i c:WindowsSystem32win32k.sys

    Если подпись отсутствует, то в поле Verified будет указано Unsigned (в противном случае, соответственно Signed).

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

    1. Найти подписанную версию драйвера
    2. Отказаться от использования данного драйвера (и устройства)
    3. отключить проверку цифровой подписи драйвера в Windows

    Третий вариант может не подойти по тем или иным причинам. В первых двух случаях нам нужно определить к какому конкретному устройству относится данный файл драйвера .sys.

    Как же определить устройство, зная лишь имя sys-файла? Я использую следующую методику (пусть нам нужно определить устройство, драйвер которого имеет имя HpCISSs2.sys):

    1) Открываем редактор реестра и поиском по ветке HKEY_LOAL_MACHINESYSTEMControlSet001 ищем ключ со значением HpCISSs2.sys

    2) В моем случае он нашелся в ветке HKEY_LOAL_MACHINESYSTEMControlSet001servicesHpCISSs2

    3) Разворачиваем вложенную ветку с названием ENUM, нас интересует значение ключа 0, в моем случае это PCIVEN_103C&DEV_3230&SUBSYS_3235103C&REV_014&3b416f2c&0&0018

    4) Определяем, что производитель устройства имеет ID 103C, а код устройства 3230

    5) Далее на сайте указываем в полях Vendor Search и Device Search найденные нами коды.

    6) Получаем что искомое нами устройство контроллер жестких дисков HP Smart Array P400 Controller.

    Нам осталось лишь найти новую версию драйвера на сайте производителя оборудования (внимательно смотрите для каких версий ОС подходит нужный вам драйвер) и обновить драйвер на компьютере.



  • Скрипт с использованием утилит logoff и qwinsta

    Администрируя терминальные сервера с Windows, не редко возникает надобность завершить сеанс локального пользователя компьютера на удаленном терминальном сервере. (далее…)


  • Служба Remote Desktop Services (RDS) в Windows Server 2008 R2 это не просто ребрендинг своего предшественника – службы Terminal Services. Новые функции, часть из которых появилась еще в Windows Server 2008, такие как RemoteApp, RD Gateway и RD Virtualization Host, позволяют просто и удобно (далее…)


  • Выход из экранной лупы

    Запустив случайно экранную лупу, в операционных системах Windows, может получиться так, что закрыть её будет весьма проблематично — изображение на экране гигантское, мышка (далее…)


  • Сегодня на нескольких компьютерах пользователей встретились со следующей ошибкой, появляющейся при попытке удаленного rdp подключения к серверу терминалов Windows 2008 Server.

    Ошибка выглядит так: The remote computer disconnected the session because of an error in the licensing protocol. Please (далее…)


  • Использование shutdown

    Программа shutdown появилась только в Windows XP, по этому для более старых операционных систем, ниже описанный способ будет не актуален! Для старых версий Windows, смотрите следующий пункт (далее…)

  • В этой заметке мы поговорим о замечательной надстройке над службой Internet Information Services (IIS) под названием WebDAV. WebDAV это протокол для доступа к общим файлам и папкам через интернет, чем то похожий на FTP. Передача файлов по протоколу WebDAV может быть осуществлена через различные (далее…)


  • При планировании сетевой инфраструктуры даже опытные системные администраторы могут допустить досадные ошибки. Однако, преимущество опытного администратора перед неопытным в том, что он может обнаружить и исправить их. В нашем случае ошибка заключается в том, что KMS (Key Management Server) сервер был поднят на одном из application серверов, который со временем начал испытывать существенные проблемы с производительностью, в результате чего служба KMS работала нестабильно. И мы решили перенести службу KMS на другой инфраструктурный сервер (у нас существует выделенные сервер для управления различными лицензиями на ПО и их ключами – т.н. сервер лицензий).

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

    (старый KMS) slmgr

    cdns Отключаем публикацию в DNS (старый KMS) slmgr
    upk Удаляем ключ Product Key

    (старый KMS) slmgrcpky Удаляем ключ из реестра

    (новый KMS) slmgrupk
    Удаляем ключ продукта (новый KMS) slmgripk <ВАШ KMS КЛЮЧ> Устанавливаем ключ KMS. Этим самым мы делаем этот сервер новым сервером лицензий KMS.

    (новый KMS) slmgrato Активируем Windows.

    (новый KMS) slmgrsdns Включаем публикацию в DNS.

    (новый KMS) slmgrdlv
    Вывод лицензионной информации.

    (новый KMS) slmgrxpr Проверка даты окончании лицензии.

    (новый KMS) Перзагружаемся

    (старый KMS) Перзагружаемся

    (старый KMS) slmgr — ipk <KMS_Client_ Key >. KMS ключи перечислены здесь. После перезагрузки, возможно появится сообщение об ошибке активации, нужно просто ввести KMS ключ из ссылки указанной выше.

    (старый KMS) ipconfig/flushdns сбросить локальный кэш DNS. (старый KMS) nbtstatRR сбросить локальный кэш NETBIOS.

    (старый KMS) slmgrato Активировать Windows. Активируем нашу ОС на новом сервере KMS.

    (старый KMS) slmgrdlv Отобразить параметры лицензии.

    Не забудьте, что если у вас в сети есть несколько серверов, активированных на старом KMS сервере, придется активировать их вновь на новом сервере лицензий (в противном случае при очередной проверки лицензии, активация сервера может слететь)