Итог: в трезвом уме перечитав вот этот блог получил вот этот код на родном С++ undoc::PETHREAD pEThread = (undoc::PETHREAD)PsGetCurrentThread();...
хм... все таки в ebx не адрес оригинального обработчика =) там же адрес текущего... В Shadow XP еще 667 NtGdi и NtUser сервисов которые с...
Только сейчас дошло - индекс вообще ненужен получается =)
Да ассемблерную вставку то без проблем, если это поможет. Я сейчас ebx так и извлекаю: __asm { mov SavedEbx, ebx }
Пробовал вот так PETHREAD pEThread = PsGetCurrentThread(); PKTHREAD pKThread = &pEThread->Tcb; PKTRAP_FRAME pKTrapFrame =...
Ну в общем Ваш код работает, но это ведь получается почти то же самое что ULONG GetId(ULONG ebx) { ULONG n =...
Все равно непонятно как это должно работать (с ассемблером не дружу к сожалению) если вот так: sub edi,dword ptr ds:[pSST] mov ecx,dword ptr...
Пока что работает только вот так: ULONG Id; ULONG SavedEbx = 0; __asm { mov SavedEbx, ebx } ULONG n =...
А не подскажете как это дело перевести на C или хотя бы asm? Просто я про трап фрейм (Т-фрейм?) впервые слышу...
Теперь Вы сомневаетесь? Думаю если система знала какой сейчас надо вызвать адрес из таблицы, значит и индекс где-то хранится. Как минимум вроде...
А если все обработчики будут мои, он все равно может оказаться не первым? Собственно, если предположить, что он будет первый, то где смотреть индекс?
Добрый день! Пытаюсь сделать один свой обработчик на несколько сервисов SSDT с одинаковым числом аргументов. Массив оригинальной ServiceTable...
В первом посте во втором варианте как раз пытался это осуществить....
Попробовал сделать так: pBuffer = ExAllocatePoolWithTag(PagedPool, PAGE_SIZE, 0); pMdl = IoAllocateMdl(pBuffer, PAGE_SIZE, FALSE, FALSE,...
Имена участников (разделяйте запятой).