· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Call user from Kernel...

<< . 1 . 2 .

Посл.отвђт Сообщенiе


Дата: Июл 1, 2004 21:02:56

Прошу прощения. Вот тока очухался. NtDll уже спроецирована.


Дата: Июл 1, 2004 22:56:39

Боже! Крыша едет! У ntdll в экспортах указана ф-я, например ZwCreateThread – она ч/з SDT уходит в ntoskrnl; Драйвер компилирую – всё путем, но вот когда запускаю – StartService выдает ошибку: «Не найдена указанная процедура».
Что делать посоветуете? Рад любым ответам.


Дата: Июл 2, 2004 03:13:56

[ PavPS: Так что же теперь: проецировать себе в адр. пр-во ntdll. ]

RtlCreateProcessParameters захватывает блокировку PEB, вызывая RtlAcquirePebLock, которая, в свою очередь вызывает PEB.FastPebLockRoutine. Что будет если вызвать её из ядра я не знаю, но думаю, что ничего хорошего. Скорее всего, тебе придется свою собственную реализацию RtlCreateProcessParameters делать :)


[ PavPS: Драйвер компилирую – всё путем ]

Да не может быть. У тебя такое есть?
include \masm32\include\w2k\ntdll.inc
includelib \masm32\lib\w2k\ntdll.lib

Если есть, убирай. ntdll это юзерная библиотека, она в ядро не мапится. Поэтому загрузчик, когда импорты резолвит не находит этой dll и, естественно, отказывается драйвер грузить.


Дата: Июл 2, 2004 12:13:48

Спасибо за ответ!

"Если есть, убирай"
Ага, дошло - линкеру пофиг где какая либу вписавать - если есть, то не жалко - приклеит. А вот в ядре его нет. Только вот не сходится чё-то: е процесса Idle - нет ntdll, а вот у System есть. Выесняется 2-я путями: SoftIce->mod->там видем ntdll, или просто - обращаемся по адресу, куда она проецируется в юзере - и нормально - всё есть. Никаких #PF - чистая ntdll. В чем же дело?

"Скорее всего, тебе придется свою собственную реализацию RtlCreateProcessParameters делать :)"
Уже плакать хочется... Но пока еще пороюсь, можа как нить по-дрегому...


Дата: Июл 2, 2004 16:27:55

[ PavPS: Никаких #PF - чистая ntdll. ]

Ну, могит быть, могит быть.


Дата: Июл 3, 2004 15:34:29 · Поправил: green

а нельзя ли так:
из драйвера выделить в user mode памяти тек. процесса кусок, в который скопировать структуру:
struct CUMPI
{
   PFN_CREATEPROCESSW pKernel32_CreateProcess;
   WCHAR ExeFileName[MAX_PATH];
};

и код типа:
void CreateUMProcess(struct CUMPI *pInfo)
{
   pInfo->pKernel32_CreateProcess(pInfo->ExeFileName, и.т.д.);
}

потом добавить в user mode APC очередь одного из потоков этого процесса ф-цию CreateUMProcess вместе с указателем на struct CUMPI.


Дата: Июл 3, 2004 17:41:35

green, чтобы APC сработала поток должен находиться в тревожном состоянии.

PavPS, действительно в процесс System мапится одна единственная юзерная длл - ntdll, но в любом случае, линковать с ней драйвер статически нельзя.


Дата: Июл 3, 2004 18:26:54 · Поправил: green

Four-F
а использовать ZwAlertThread нельзя ?
хотя наверно можно нарушить нормальную работу потока...


Дата: Июл 3, 2004 19:07:02

может быть внедрить эту ф-цию не в APC queue, а как одноразовый хук какой либо АПИшной ф-ции, активно используемой процессом ?

или поправить CONTEXT одного из ready потоков, чтобы при его активизации эта ф-ция получила управление ?


Дата: Июл 4, 2004 03:09:24

[ green: а использовать ZwAlertThread нельзя ? ]

Нет. Она всего лишь будит поток, если он уже в тревожном состоянии. Насчет всего остального надо пробовать, т.к. теоритически ещё много всяких вариантов придумать можно, но будут ли они работать хз.


Дата: Июл 4, 2004 22:06:04

Еще раз всем спасибо!


Дата: Июл 27, 2004 16:28:45

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.087