При каких обстоятельствах следующий код может возвратить NULL?: Код (Text): ;Открываем процесс куда будем внедрять DLL invoke OpenProcess,\ PROCESS_CREATE_THREAD or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,0,PID PID правильный. Процесс, PID которого передается создан мной. У меня привилегии админа. GetLastError возвращает ERROR_NOACCESS. Может это фишки XP SP2?
Попробуй добавить SeDebugPrivilege: Код (Text): ;===================================================================== TOKEN_QUERY = 8 TOKEN_ADJUST_PRIVILEGES = 20h SE_PRIVILEGE_ENABLED = 2 ;===================================================================== struct LUID .LowPart dd ? .HighPart dd ? ends struct LUID_AND_ATTRIBUTES .Luid LUID .Attributes dd ? ends struct TOKEN_PRIVILEGES .PrivilegeCount dd ? .Privileges LUID_AND_ATTRIBUTES ends ;===================================================================== tp TOKEN_PRIVILEGES ht dd 0 priv db 'SeDebugPrivilege',0 ;===================================================================== entry $ call [GetCurrentProcess] invoke OpenProcessToken,eax,TOKEN_ADJUST_PRIVILEGES+\ TOKEN_QUERY,ht test eax,eax jz exit invoke LookupPrivilegeValue,0,priv,tp.Privileges.Luid test eax,eax jz exit mov [tp.PrivilegeCount], 1 mov [tp.Privileges.Attributes],SE_PRIVILEGE_ENABLED invoke AdjustTokenPrivileges,[ht],FALSE,tp,0,0,0 test eax,eax jz exit invoke CloseHandle,[ht] ;=====================================================================
Bill_Prisoner Попробуй комбинацию флажков PROCESS_ALL_ACCESS или хотябы те же, но без PROCESS_VM_WRITE. [edited] Хотя у меня в XP-SP2 все нормально открывается и с этими флагами. Ты точно уверен что это id процесса, не потока?
Bill_Prisoner А еще проверь, не защищена ли программа ринг0 протектором типа xprot'а. Они часто перехватывают ZwOpenProcess в ядре. Еще это может мешать руткит установленный в системе.
alpet Точно уверен, что ID процесса. Комбинация флажков PROCESS_ALL_ACCESS пробовал. Результат такой же. Ms Rem Про Root kit идея хорошая, но если я просто пишу программу и в самом начале вызываю OpenProcess, то все нормально. А если у меня OpenProcess вызывается в WinMain, то функция возвращает NULL. bogrus Debug привилегии включаю, но результат такой же. В WinMain OpenProcess возвращает NULL. Я тут хочу новую тему сейчас начать. Она сходиться с этой но более глобальна и думаю все на этом спотыкались.
Перед OpenProcess обнули SetLastError(ERROR_SUCCESS) и проверь топик ERROR_NOACCESS (000003E6), больно похож
Bill_Prisoner 1. Можешь выложить бинарник запускаемой программы, если она безопасна (не вирь) ? 2. Из WinMain другие процессы открываются (например калькулятор) или сбой на всех ?
alpet Сбой на всех. Вот сейчас начитался тут, попробую если не получиться вышлю бинарник. Это не вирь, а просто тестовый пример
Ms Rem Извините не в WinMain, а в WndProc. Регистры esi,edi,ebx,ebp восстанавливаю. Но все равно OpenProcess возвращает NULL
Bill_Prisoner Из оконной процедуры и с ошибкой? Весьма и весьма странно, однако. По идее 99% HLL кода обычно выполняется как обработчики вызываемые из оконной процедуры, так что проблем с вызовом быть не должно. Может лучше исходный код процедуры представишь целиком?
Ну вот наконец дошло и все разрешилось. Не без помощи васмовцев Оказывается, что у меня не было выровнено значение esp. А оно должно быть выровнено на 4!!!!!