Короче, я уже голову сломал. Или лыжи не едут... Собственно перехватываем NtWriteVirtualMemory с целью защиты от инжекта таким спосообом. И нужно определить не является ли процесс, в АП которого происходит вторжение одним из тех, которые мы хотим прикрыть. Соответственно, необходимо найти PID, чтобы плясать дальше... , для этого используется ProcessHandle, который приходит в первом параметре. Пробовал найти PID таким образом: Код (Text): ObReferenceObjectByHandle (ProcessHandle, 0, NULL, KernelMode, &eprocess, NULL); pid = PsGetProcessId (eprocess); вроде бы нормальный способ, но PID возвращаются какие-то странные. Смотрю в ProcessExplorer и там замечаю, что 100 < PID < 9999. однако мне приходит то 0, то какие-то большие числа, явно больше 9999. Решил попробовать иначе: Код (Text): ZwQueryInformationProcess (ProcessHandle, ProcessBasicInformation, &pbi, sizeof (pbi), &suc); возвращает STATUS_OBJECT_TYPE_MISMATCH. Я так понимаю, что хэндлы которые я туда сую - не хэндлы процессов, а какие-то левые хэндлы. Я в шоке. Просмотрел значения приходящих хэндлов: есть такие типа 0x8000345 - это я так понял KernelHandle , а есть юзермодные типа 0x0000124... Просто как бэ NtWriteVirtualMemory хавает и те и другие нормально... Как же мне получить PID из этих хэндлов?
квери может и не сработать - права на запись АП не обязательно будут соседствовать с правами на получение инфы. хендл может быть открыт только с правами на запись ап. в любом случае, это логически не правильно. референс + PsGetProcessId нормальный способ. а у тебя где-то что-т не так, если получаешь кривые числа. давай полный исходник. без разницы какие хендлы.
Great Он результат исполнения ObReferenceObjectByHandle() не проверяет, левые числа это произвольные значения из стека, где локальные переменные не зануляются. krabz Желательно тип обьекта указать и тип доступа к нему.
krabz Смотрите, что возвращает ObReferenceObjectByHandle. Может она ошибкой завершается? У меня такое подозрение, что вы передаете неверный хендл.
Да что вы, проверяю конечно - STATUS_SUCCESS там, и указатель как бэ адекватный... А ZwQueryInformationProcess рекомендуете фтопку? Ну тогда щас попробую снова тот способ реализовать - если что выложу код
krabz Если всё исполняется какбэ успешно, тоесть по внешнему виду скрипта определить ошибку нельзя, то выкиньте нафиг свой компилятор. Ну или не приводите более этих скриптов.
Дико извиняюсь, но баг был совершенно в другом месте. Оказывается была перехвачена другая функция поскольку там было такое же количество параметров, то ничего не рушилось.
Ну сообщала ведь винда, что тип не соответствует. Стоит больше доверять статусу результата // написано с мобилы