2017-01-19 12 views
-1

Мне было интересно, знает ли кто-нибудь, где контекст потока, запущенного в usermode, хранится в ядре? и если есть какие-либо API для работы с получением и установкой контекста потока usermode? я знаю, что вы не должны делать это по какой-либо причине, поэтому, пожалуйста, не заходите в это. Это исключительно ради исследований и не будет использоваться ни чем иным, как мои собственные собственные проекты.Где хранится контекст потока usermode, и можно ли его изменить?

В usermode у нас есть GetThreadContext и SetThreadContext, но мне нужно сделать это из драйвера устройства в ядре, я хочу, чтобы у меня было больше, чтобы писать, но я вообще не могу найти какую-либо информацию по этой теме, поэтому я хочу кого-то более образованный, чем я, может просветить меня на некоторых внутренних окнах.

С уважением, Пазе.

ответ

2

Когда поток вводится в режиме ядра, в нем хранится контекст, хранящийся в нем стек ядра, в struct _KTRAP_FRAME - он объявлен в ntdkk.h. в ntoskrnl.exe (всех версиях от win2000 до win10) существует на экспорт апи

NTKERNELAPI 
NTSTATUS 
NTAPI 
PsGetContextThread(
    __in PETHREAD Thread, 
    __inout PCONTEXT ThreadContext, 
    __in KPROCESSOR_MODE Mode 
    ); 

вы можете использовать его для контекста прибудет потоки (и PsSetContextThread для контекста потока набора).

о том, как эта работе - смотрите в wrk - при попытке получить/установить контекст из другого потока специального режима ядра APC вставляются на эту тему с указателем на внутреннюю GETSETCONTEXT структуры, после этого запроса начинает ждать по событию (OperationComplete) из эта структура. когда нить (для которых мы запрашиваем контекст) в следующий раз начать выполнение в ядре - APC рутина (PspGetSetContextSpecialApc) выполняется - это заполнить контекст из _KTRAP_FRAME и установить событие (OperationComplete)

+0

Да, когда поток находится в режиме ядра, но как насчет поток работает в usermode? делает то же самое применимо для потоков usermode? – Paze

+0

@Paze - вы вообще понимаете, что я пишу, и у вас есть внутренние окна знаний?! о чем вы спрашиваете? – RbMm

+0

чувак, вам не обязательно быть грубым об этом .. да, у меня есть знания о внутренних окнах .. Я не эксперт, и я все еще участвую. Вы сказали, что когда поток входит в режим ядра, его контекст хранится в стеке ядра, в структуре _KTRAP_FRAME, мой вопрос в том, сохраняется ли контекст в той же структуре, когда поток входит в usermode? или где хранится контекст? – Paze