Эта страница содержит ссылки на некоторые публичные ресурсы, которыми я часто пользуюсь. Для некоторых из них (особенно англоязычных) приведены основные выдержки из текта, и ссылка на источник.
Официальная документация на 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) описывает так же включение отладочной печати динамически, изменяя глобальные переменные ядра.
ΞρεΤΙκ