|
|
| Посл.отвђт | Сообщен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 |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.087 |