EreTIk's Box » Внешние ссылки


Эта страница содержит ссылки на некоторые публичные ресурсы, которыми я часто пользуюсь. Для некоторых из них (особенно англоязычных) приведены основные выдержки из текта, и ссылка на источник.




Официальная документация на Intel 64 and IA-32 и AMD




Увеличение таймаута старта служб




Mapping NT Status Error Codes to Win32 Error Codes




Передача параметров для архитектуры amd64 Calling Conventions: x64 Architecture




MSDN'новская статья о том, как поймать утечку (аллокацию памяти) по ее номеру выделения




Настройка отладочной конфигурации с использованием bcdedit (ОС Vista и старше)




Описание констант RPC-транспортов в MSDN: Protocol Sequence Constants.




Разбор IOCTL на составляющие. Страница OSR'а где вбиваем численный код IOCTL и получаем все параметры: тип устройсва, номер функции, режим доступа, метод доступа.




Если возникают какие-то вопросы по написанию драйвера фаловой системы или ее фильтра, то перед тем, как терзать людей своими вопросами нужно посмотреть OSR'овский FAQ по FSD или WiKi-вариант




Генерация падения системы с клавиатуры. Иногда возникает необходимость посмотреть, что же твориться в ядре машины, к которой нет возможности подключить отладчик в определенный момент времени. Один из способов – генерация crash-дампа «руками» (т.е. клавиатурой). Для это необходимо выставить нужные параметры генерации дампов в настройках системы. Далее необходимо прописать REG_DWORD-значение CrashOnCtrlScroll равным 0x01. Ключ реестра выбирается в зависимости от типа клавиатуры: для PS\2 это

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\i8042prt\Parameters,

а для USB:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\kbdhid\Parameters.

Перезагружаемся, и теперь для генерации crash’а системы необходимо нажать два раза на ⟨SCROLL LOCK⟩ при зажатом правом ⟨CTRL⟩. Статья в MSDN’е описывает дополнительные параметры и совместимость на различных версиях Windows.




Методы доступа к буферам данных при обработке IRP'ов. Основы основ для человека, пишущего драйвера. Три метода доспупа к входному\выходному буферам данных запроса.


  • Buffered I/O. Метод буферизации данных. Ядро операционной системы определяет максимальный размер данных (входные/выходные) и выделяет буфер в пуле. Входной буфер копируется ядром при формировании запроса. Выходные данные формирует драйвер по тому же адресу. Указатель на буфер располагается в в поле AssociatedIrp.SystemBuffer IRP'а. Используется для передачи небольших объемов данных.
  • Direct I/O. Метод прямого доступа к страницам памяти буфера. Доступ осуществляется через механизмы MDL. Адрес структуры MDL располагается в поле MdlAddress IRP'а. Используется для передачи больших объемов данных.
  • Neither Buffered Nor Direct I/O. «Третий» (не buffered и не direct) метод доступа к данным. В этом случае, указатель на пользовательский буфер с данными передается без изменений. Адрес входной буфера располагается в поле Parameters.DeviceIoControl.Type3InputBuffer текущей ячейки стека IRP'а. Адрес выходного буфера помещается менеджером I/O поле UserBuffer IRP'а. При обработке такого рода запросов, драйвер должен сам вызывать Probe-функции, следить за текущим контекстом пользовательского процесса и обращаться данным внутри блока структурной обработки исключений (__try/__except).



Начиная с Windows Vista, по умолчанию отладочная печать ядра отключена. Для того, что бы ее включить, необходимо произвести небольшую модификацию реестра. В ключе

"HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter"

создать REG_DWORD-значение "DEFAULT". И присвоить ему значение 0xFFFFFFFF. Оригинальная статья на OSR'е (Hector's Memos:Getting DbgPrint Output To Appear In Longhorn) описывает так же включение отладочной печати динамически, изменяя глобальные переменные ядра.


ΞρεΤΙκ