понедельник, 30 мая 2011 г.

Microsoft Certified Technology Specialist: Windows Internals

На днях сдал сертификационный экзамен 70-660: TS: Windows® Internals.

К экзамену не готовился. Во-первых, некогда; а, во-вторых, так даже интереснее. В итоге, набрал 783 балла из 1000 (необходимый минимум - 700).

Хочу сказать что экзамен вполне адекватен. Затрагивается масса аспектов системной разработки а так же содержится очень много вопросов практического характера. Попадались вопросы на которые затруднялся дать однозначный ответ. Выводы сделал, пробелы в знаниях восполняю по мере возможности :)

Собственно, сертификат:

четверг, 26 мая 2011 г.

WinError.exe

Кому из разработчиков не доводилось расшифровать коды ошибок WINERROR или NTSTATUS?

Для быстрого получения вменяемого описания, я, как правило, пользовался поиском в заголовочных файлах:
  • %WDKPATH%\inc\api\ntstatus.h для NTSTATUS.
  • %WDKPATH%\inc\api\WINERROR.H для WINERROR.

Но есть более простой и удобный способ - использовать WinError.exe из набора WDK. Утилита отображает название констант(ы) для указанного кода ошибки. Кроме этого, она так-же показывает соответствие между кодом ошибки WINERROR и NTSTATUS.

Пример использования (если передаваемое значение представляет собой NTSTATUS, следует указать ключ -s):
%WDKPATH%\tools\Other\i386\WinError.exe -s 0xC000000D
    87 ERROR_INVALID_PARAMETER <--> c000000d STATUS_INVALID_PARAMETER

Updated 7.06.2011

А так же можно воспользоваться расширением !error из WinDbg (спасибо Volodymyr Pikhur за подсказку).

Схожие публикации

понедельник, 23 мая 2011 г.

Установка pykd (updated)

Начиная с версии 0.0.17, расширения pykd, был существенно переработан инсталлятор. Не смотря на то, что релиз состоялся более месяца тому, данная публикация не утратила своей актуальности.

Попав в раздел Downloads, главной страницы проекта, можно немного растеряться. Поэтому, приведу краткое описание возможных вариантов:
  • pykd-0.0.XX-python-2.6.zip - расширение без каких-либо дополнительных файлов. Для работы требуется Microsoft Visual C++ 2005 SP1 Redistributable Package и Python 2.6.
  • pykd_x86_0.0.0.XX_setup.exe - инсталлятор для 32-х битной версии WinDbg.
  • pykd_x64_0.0.0.XX_setup.exe - инсталлятор для 64-х битной версии WinDbg.
  • pykd-0.0.XX-python-2.7-vc90.zip - то же что и первый пункт, но для работы требуется Microsoft Visual C++ 2008 Redistributable Package и Python 2.7.

Расширение из архива устанавливается вручную.

Далее будет рассмотрено как это сделать с помощью инсталлятора.

Перед тем как продолжить, хочу обратить особое внимание на то что разрядность pykd, соответственно, Python, VC++ Runtime и инсталлятора должна соответствовать разрядности WinDbg. Например, Вы ставите 64-х битную версию расширения и у Вас уже стоит Python для x86. Расширение не будет работать если не установить соответствующую версию Python как предложит инсталлятор.

Возможности инсталлятора:
  • Собственно, установка расширения.
  • Установка скриптов и примеров (в директорию Мои документы\pykd).
  • Добавление пути к директории скриптов в PYTHONPATH. Что бы не вводить полный путь к нужному скрипту.
  • Добавление пути к расширению в PYTHONPATH. Для использования pykd из интерпретатора Python.
  • Проверка наличия Python-а и VC++ Runtime. При необходимости автоматическая загрузка и установка.
  • Запоминание директории установки расширения.
Возможности деинсталлятора:
  • Удаление расширения.
  • Опционально, удаление Python и VC++ Runtime.

суббота, 7 мая 2011 г.

Cmd: Backup/Clear/Restore environment variables

Публикация в первую очередь будет интересна тем, кто использует WDK/DDK для сборки чего-либо (например, драйверов). Но возможно пригодится ещё кому-то.

Проблема

При сборке из командной строки setenv.bat устанавливает переменные окружения таким образом что повторный вызов этого командного файла генерирует сообщение:
ERROR: This window already has the DDK build environment set.  Please open 
       a new window if you want to change or reset your build environment.
Как правило, для сборки под несколько платформ из одного командного файла нужно создавать дополнительные скрипты, что не всегда удобно.

Решение