2017-01-19 17 views
-1

usermode에서 실행되는 스레드의 컨텍스트가 커널에 저장되는 위치를 아는 사람이 있는지 궁금합니다. usermode 스레드 컨텍스트를 가져오고 설정하는 데 필요한 API가 있다면? 어떤 이유로 든이 일을해서는 안되는 것을 알고 있습니다. 그러니 그 일에 몰래 들어 가지 마십시오. 이는 전적으로 조사 목적으로 사용되며 내 프로젝트의 로컬 프로젝트 이외에는 사용되지 않습니다.usermode 스레드 컨텍스트는 어디에 저장되며 수정할 수 있습니까?

우리는 GetThreadContext와 SetThreadContext를 가지고 있지만 커널의 장치 드라이버에서이 작업을 수행해야합니다. 더 쓸 일이 있었지만이 주제에 대한 정보를 전혀 찾을 수 없기를 바랍니다. 나보다 교육받은 사람들은 여기에있는 창 내부의 일부에 대해 나를 가르쳐 줄 수있다.

감사합니다.

답변

2

스레드가 커널 모드에서 커널 스택에 입력 할 때 커널 스택 struct _KTRAP_FRAME에 저장 - ntdkk.h에 선언 됨. ntoskrnl.exe (win10까지 WIN2000에서 모든 버전)에서 API (세트 스레드 컨텍스트 및 PsSetContextThread)

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

당신이 얻을 스레드 컨텍스트에 사용할 수 있습니다 수출 존재한다. wrk 보면 - -이 작업 방법에 대한

이 요청 후, APC 내부 GETSETCONTEXT 구조에 대한 포인터로이 글에 삽입되어 다른 스레드 특별한 커널 모드에서 얻을 설정/컨텍스트를하려고 할 때 이벤트 (OperationComplete)에 대기에서 시작 이 구조. 스레드 (있는 우리가 상황을 조회) 다음은 커널에서 실행 시작할 때 - APC 루틴 (PspGetSetContextSpecialApc가) 실행 - 그것은 _KTRAP_FRAME에서 컨텍스트 및 이벤트 세트 (OperationComplete)

+0

스레드가 커널 모드에있을 때 네를 작성하지만, 방법에 대한 Usermode에서 실행중인 스레드? 같은 usermode 스레드에 적용됩니까? – Paze

+0

@Paze - 내가 뭘 쓰는지 이해하고 있습니까? 지식 창 내부가 있습니까? 네가 묻는 것에 대해? – RbMm

+0

젠장, 너는 그것에 대해 무례하지 않아도 돼 .. 네, 창문 내부에 대한 지식이 있어요. 당신은 스레드가 커널 모드로 들어가면 그 컨텍스트가 _KTRAP_FRAME 구조체의 커널 스택에 저장 될 것이고, 내 질문은 스레드가 usermode에 들어갈 때 컨텍스트가 같은 구조체에 여전히 저장되어 있는지 여부입니다. 또는 컨텍스트는 어디에 저장됩니까? – Paze