sawamail
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору mihas83 В Visual C++ 6.0 был пример TaskList в нем перед убиванием процесса выполняется ф-я BOOL EnableDebugPriv(VOID) { HANDLE hToken; LUID DebugValue; TOKEN_PRIVILEGES tkp; // Retrieve a handle of the access token if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken)) { printf("OpenProcessToken failed with %d\n", GetLastError()); return FALSE; } // Enable the SE_DEBUG_NAME privilege if(!LookupPrivilegeValue((LPSTR)NULL,SE_DEBUG_NAME,&DebugValue)) { printf("LookupPrivilegeValue failed with %d\n", GetLastError()); return FALSE; } tkp.PrivilegeCount=1; tkp.Privileges[0].Luid=DebugValue; tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken,FALSE,&tkp,sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES)NULL,(PDWORD)NULL); // The return value of AdjustTokenPrivileges can't be tested if(GetLastError()!=ERROR_SUCCESS) { printf("AdjustTokenPrivileges failed with %d\n",GetLastError()); return FALSE; } return TRUE; } а сам процесс убития реализован сл. образом (несколько странноват) BOOL KillProcess(PTASK_LIST tlist,BOOL fForce) { HANDLE hProcess; if(fForce || !tlist->hwnd) { hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,tlist->dwProcessId); if(hProcess) { hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,tlist->dwProcessId); if(hProcess==NULL) return FALSE; if(!TerminateProcess(hProcess,1)) { CloseHandle(hProcess); return FALSE; } CloseHandle(hProcess); return TRUE; } } // kill the process PostMessage(tlist->hwnd,WM_CLOSE,0,0); return TRUE; } если хочешь могу выслать весь пример | Всего записей: 1467 | Зарегистр. 22-04-2002 | Отправлено: 11:58 14-11-2003 | Исправлено: sawamail, 12:00 14-11-2003 |
|