Использование NtGetContextThread в kernel mode

Тема в разделе "WASM.WIN32", создана пользователем Zufyxe, 14 фев 2005.

  1. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia
    В kernel mode коде необходимо получить CONTEXT для потока работающего в ring 3. Используем:
    Код (Text):
    1.  
    2. NTSTATUS
    3. NtGetContextThread(
    4.  IN HANDLE ThreadHandle,
    5.  OUT PCONTEXT Context
    6.  );
    7.  


    функция выдает STATUS_ACCESS_VIOLATION. При детальном рассмотрении видно, что параметр Context несмотря на явный вызов из ring0 сравнивается, почему-то с MmUserProbeAddress.

    Кто-нибудь сталкивался? И как еще можно достать этот CONTEXT?
     
  2. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia
    Господа, может кто-нибудь пробовал создавать из ядра thread в ring3 процессе?
     
  3. je_

    je_ New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    143
    а надо смотреть - как сам NTOSK..exe достаёт сontext.



    попробуй: продебугровав, найти внутреннюю процедуру и прямо звать его;



    я делаю так:

    KTEB.StackTop - sz (как сам NTOSK)



    но в ентом случае, имеем другой формат NTсontext-а,

    но нетрудно с ним разобраться ведь..
     
  4. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia
    Да, но насколько я знаю, KTEB меняется с версией ОС :dntknw:



    Я сделал так:

    1. выставляю MmUserProbeAddress, скажем в 0C8000000h.

    2. вызываю NtGetContextThread

    3. возвращаю MmUserProbeAddress

    Но кажется, это технически не грамотно...