.data
module db "help.exe",0h
....
....
....
invoke OpenSCManager,0h,0h,SC_MANAGER_ALL_ACCESS
.if eax==0
invoke Beep,40h,1000h
.endif
invoke OpenService,eax,offset module,DELETE
.if eax==0
invoke Beep,40h,100h ;Вот тут ошибка возникает!!!
.endif ;Не могу получить handle процесса!!!
push eax
invoke DeleteService, eax
call CloseServiceHandle
Завершить процесс!
Код:
Как получить handle процесса и его грохнуть!?
Кстати лучше TerminateProcess или DeleteService?
Код:
//-----------------------------------------------------------------------
void DebugPrivileges()
{
HANDLE hToken=NULL;
TOKEN_PRIVILEGES tp;
DWORD ret=0;
tp.PrivilegeCount=1;
if (OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
{
bool f=false;
f=LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&(tp.Privileges[0].Luid));
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
f=AdjustTokenPrivileges(hToken,false,&tp,0,NULL,&ret);
}
}
//------------------------------------------------------------------------
void DebugPrivileges()
{
HANDLE hToken=NULL;
TOKEN_PRIVILEGES tp;
DWORD ret=0;
tp.PrivilegeCount=1;
if (OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
{
bool f=false;
f=LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&(tp.Privileges[0].Luid));
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
f=AdjustTokenPrivileges(hToken,false,&tp,0,NULL,&ret);
}
}
//------------------------------------------------------------------------
Как найти процесс см. Toolhelp32:
Код:
#include <tlhelp32.h>
bool FindProcess(const char *name, PROCESSENTRY32 *pEntry)
{ // на выходе дает pEntry, нам интересно pInfo.th32ProcessID
HANDLE hSnapshot;
PROCESSENTRY32 pe;
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE) return 0;
memset(&pe, 0, sizeof(pe));
pe.dwSize = sizeof(pe);
if (!Process32First(hSnapshot, &pe))
{
CloseHandle(hSnapshot);
return 0; //опять не срослось;
}
do
{
if (!lstrcmpi(pe.szExeFile,name)) // вот он
{*pEntry=pe;CloseHandle(hSnapshot);return true;}
}
while (Process32Next(hSnapshot, &pe));
CloseHandle(hSnapshot);
return 0;
}
bool FindProcess(const char *name, PROCESSENTRY32 *pEntry)
{ // на выходе дает pEntry, нам интересно pInfo.th32ProcessID
HANDLE hSnapshot;
PROCESSENTRY32 pe;
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE) return 0;
memset(&pe, 0, sizeof(pe));
pe.dwSize = sizeof(pe);
if (!Process32First(hSnapshot, &pe))
{
CloseHandle(hSnapshot);
return 0; //опять не срослось;
}
do
{
if (!lstrcmpi(pe.szExeFile,name)) // вот он
{*pEntry=pe;CloseHandle(hSnapshot);return true;}
}
while (Process32Next(hSnapshot, &pe));
CloseHandle(hSnapshot);
return 0;
}
Далее открываем процесс
Код:
HANDLE hProcess = OpenProcessPROCESS_ALL_ACCESS, FALSE, dwProcessId);
И потом маленький штрих
Код:
TerminateProcess(hProcess,ExitCode);
Другой вопрос, как перевести это на асму... =)
ну если пишешь проги на асме, то ты хоть немного шаришь в асме, следовательно ты должен сам перевести всё это на асм