Привет всем, пишу вот драйвер на с++, целей у него много, но обо всем по порядку. Вообще задумка простая: запускается прога А, запускается драйвер, запускается прога Б, прога А передает драйверу PID проги Б.. после этого драйвер блочит обращение к проге Б(зная его PID) через OpenProcess на ХР все работает как надо(и события, и общение прога-драйвер), а вот в висте трабла за траблой... решил я не мало проблем уже, однако вот эту побороть пока не в силах драйвер хукает ntOpenprocess допустим через SDT: Код (Text): NTSTATUS NewNtOpenProcess ( OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN PCLIENT_ID ClientId OPTIONAL){ HANDLE ProcessId; __try{ ProcessId = (HANDLE)ClientId->UniqueProcess; } __except(EXCEPTION_EXECUTE_HANDLER){ DPRINT("Exception"); return STATUS_INVALID_PARAMETER; } DPRINT("ntop: proc=%d, pid_b=%d, pid=%d",PsGetCurrentProcessId(), PID_B,ProcessId); //PID_B глобальная переменная в которой находится "защищаемый" процесс return TrueNtOpenProcess(ProcessHandle, DesiredAccess, ObjectAttributes, ClientId); } Допустим: - пид программы Б - 4084 - пид программы которая вызывает ntopenprocess - 1136 Смотри что вывелось после выполнения функции: в ХР: ntop: proc=1136, pid_b=4084, pid=4084 - все верно в Vista: ntop: proc=1136, pid_b=4084, pid=1242508 - не верный ProcessID почему так в висте? Почему в висте в ClientID->UniqueProcess лежит что-то явно на пид не похожее? Я чего-то упустил? p.s. если что, то NtBuildNumber - 6001, начало функции беру по адресу: 0x0bf Заранее спасибо
нет лучшей помощи, чем помощи от себя ) проблема решилась достаточно просто... копированием с виртуалки(где стоит виста) ntdll.dll и засовыванием его в IDA. хоть пользоваться идой, олей и почти не умею, да и что скрывать, Си и Асм я тоже под ноль знаю, но верный адрес я все-таки нашел минут так за 10.. гы..