![]() |
eXeL@B —› Крэки, обсуждения —› PAGEIN addr |
Посл.ответ | Сообщение |
|
Создано: 15 сентября 2005 10:37 · Личное сообщение · #1 У меня, время от времени, при использовании даной команды бывает крах системы. Поэтому вопрос адресуется людям, которые знают что такое PAGEIN, swap, WinDbgExtensionDllInit, BSOD ;) В книге Р.А. АЙРАПЕТЯНА сказано следующее: "команду PAGEIN следует использовать с мерами предосторожности, так как если текущий поток не находится в контексте, которому доступна область подгружаемой памяти, то даное действие может вызвать крах системы". Вот именно у меня это "МОЖЕТ" занимает где то 40%. Если всё я правильно понял, то поток исполняющийся на IRQL > IRQL_PASSIVE_LEVEL (APC_LEVEL) и является причиной сбоя. Наконец вопрос: насколько реально создание расширения отладчика на уровне ядра с приблизительно таким кодом: KIRQL new, oldIrql; KeLowerIrql(old); ...PAGEIN KeRaiseIrql(new, &oldIrql); Я ещё никогда не писал "расширения", поэтому перед началом взрывных робот хочу проконсультироватся. ![]() |
|
Создано: 15 сентября 2005 11:03 · Личное сообщение · #2 |
|
Создано: 15 сентября 2005 11:07 · Личное сообщение · #3 |
|
Создано: 15 сентября 2005 11:43 · Личное сообщение · #4 PAGEIN на самом деле выполняет команду mov eax, [addr] Если IRQL >= DISPATCH_LEVEL, то обращаться к подкачиваемой памяти нельзя и поэтому происходит бсод. Понизить IRQL возможно путем модификации поля Irql структуры ETHREAD связаной с текущим потоком, но как показывает практика, ни к чему хорошему это не приведет. С помощью KeLowerIrql понизить irql нельзя, так как ядро просто не даст это сделать. Единственный нормальный вариант - установить Kernel Mode APC какому-нибудь потоку, в котором он обратиться к этой памяти. Если нужно синхронизировать поток на DISPATCH_LEVEL, то нельзя использовать функции ожидания. Единственно возможный вариант - KeStallExecutionProcessor ----- Скажем дружно - нафиг нужно. ![]() |
|
Создано: 15 сентября 2005 11:44 · Личное сообщение · #5 |
|
Создано: 15 сентября 2005 11:54 · Личное сообщение · #6 Ms-Rem пишет: Понизить IRQL возможно путем модификации поля Irql структуры ETHREAD связаной с текущим потоком Вот это уже идея. Это легко и в тоже время не требует написания "расширения" (достаточно двух макросов). Насчёт проблемы, в таком случае, с понижением Irql - это можно пережить, если не перестаратся с взаимоблокировками отлажываемых потоков. Как я раньше не сообразил... Теперь вперёд и с песней... Благодарю всех за ответы. ![]() |
|
Создано: 15 сентября 2005 11:59 · Личное сообщение · #7 Barakuda пишет: Вот это уже идея. Это легко и в тоже время не требует написания "расширения" (достаточно двух макросов). Насчёт проблемы, в таком случае, с понижением Irql - это можно пережить, если не перестаратся с взаимоблокировками отлажываемых потоков. Лучше так не делай. Оно работать будет, но после этого система начинает падать в случайный момент времени. С чем это связвно я не разбирался, а просто сделал второй поток для подкачки. ----- Скажем дружно - нафиг нужно. ![]() |
|
Создано: 15 сентября 2005 12:10 · Личное сообщение · #8 |
![]() |
eXeL@B —› Крэки, обсуждения —› PAGEIN addr |