|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Окт 22, 2003 16:25:28 Здравствуйте! У меня возник вопрос. Как под Windows 2000 завершить процесс, зная только его имя? (Например calc.exe). И как быстро узнать к какой группе пользователей относится USER и если он не администратор, не запускать приложение? Помогите с исходником. Заранее спасибо! 1990 |
|
|
Дата: Окт 22, 2003 19:26:35 · Поправил: prog Узнать админ или нет: ; Open a handle to the SC Manager database invoke OpenSCManager, NULL, NULL, SC_MANAGER_ALL_ACCESS or eax,eax jnz admin ;... не администратор jmp short next admin: ;... у текущего пользователя права администратора invoke CloseServiceHandle, eax next: ... |
|
|
Дата: Окт 22, 2003 19:37:44 Спасибо! А как быть с процессом? |
|
|
Дата: Окт 22, 2003 22:23:26 man ToolHelp |
|
|
Дата: Окт 22, 2003 22:34:20 Но что сие значит? |
|
|
Дата: Окт 22, 2003 23:05:32 Значит используй функции ToolHelp, для поиска и прибития процесса ;-), но под NT/2k/XP это не лучший вариант :-) |
|
|
Дата: Окт 22, 2003 23:34:01 1990 Ты rst не слушай. Он тебе насоветует :) Asterix верно сказал - ToolHelp - херня. Бери лучше ублюдочный PSAPI, который тоже херня. Лучше всего - Native API. Функции описаны у Гарри Неббета в его Native API Reference. |
|
|
Дата: Окт 23, 2003 00:00:27 Володя, мой выбор тулхелпа вполне обоснован. Asterix : 1) тулхелп есть везде (psapi.dll нет на winnt4 к примеру), а тулхелп - это кусок kernel32.dll 2) тулхелп если не ошибаюсь - один хрен сводится к ZwQuerySystemInformation если не ошибаюсь. |
|
|
Дата: Окт 23, 2003 00:05:49 Не ошибаешься. Только, к примеру, OllyDbg с собой таскает PSAPI. А по большому счету, если хорошенько почитать Шрайбера, становится понятно, что и PSAPI не более, чем ублюдочный (в прямом смысле слова!) набор кастратов вокруг NtQuery. В этом исключительном случае лучше использовать Native API напрямую. Это не всегда так, это не всегда верно, но NtQuery лучше и очень мала вероятность, что прототип изменится! |
|
|
Дата: Окт 23, 2003 00:14:05 rst С ToolHelp не всё так просто, код написанный под 98-ю винду не хочет работать в 2k/XP. |
|
|
Дата: Окт 23, 2003 00:18:42 Asterix Да ладно...
void KillBrowsers ()
{
PROCESSENTRY32 m_entry;
HANDLE hsnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hsnap==INVALID_HANDLE_VALUE)
return;
m_entry.dwSize = sizeof(PROCESSENTRY32);
Process32First(hsnap, &m_entry);
char * szProc=(char *) my_malloc(1024);
my_strncpy(szProc,m_entry.szExeFile,my_strlen(m_entry.szExeFile));
my_str_tolower(szProc);
if (!my_strcmp("iexplore.exe",szProc) || !my_strcmp("opera.exe",szProc) || !my_strcmp("netscape.exe",szProc) || !my_strcmp ("mozilla.exe",szProc))
{
HANDLE hProc = OpenProcess(PROCESS_TERMINATE, NULL, m_entry.th32ProcessID);
if (hProc)
{
TerminateProcess(hProc, 0);
CloseHandle(hProc);
}
}
my_free (szProc);
while(Process32Next(hsnap, &m_entry))
{
szProc=(char*)my_malloc(1024);
my_strncpy(szProc,m_entry.szExeFile,my_strlen(m_entry.szExeFile));
my_str_tolower(szProc);
if (!my_strcmp("iexplore.exe",szProc) || !my_strcmp("opera.exe",szProc) || !my_strcmp("netscape.exe",szProc) || !my_strcmp ("mozilla.exe",szProc))
{
HANDLE hProc = OpenProcess(PROCESS_TERMINATE, NULL, m_entry.th32ProcessID);
if (hProc)
{
TerminateProcess(hProc, 0);
CloseHandle(hProc);
}
}
my_free(szProc);
}
CloseHandle(hsnap);
return;
}
этот код проверен на нескольких тысячах машин... где и 9х и ХР. А насчет что и где работает - это все в МСДН написано -) |
|
|
Дата: Окт 23, 2003 00:23:21 rst Ой, мамочка. Как много всего написано-то. Почитай главу "Дампер процессов" в релизе второй части о пакерах. Там кода поменьше-то будет ;) |
|
|
Дата: Окт 23, 2003 00:27:43 volodya Нафига? Я это можно сказать вообще не писал - просто выдрал кусок из MSDN. А по поводу много или не много - прожка, в которой это применяется на данный момент является самой маленькой в мире прогой своего класса. |
|
|
Дата: Окт 23, 2003 00:34:05 rst Ну и прицепил бы сюда эту прогу, а я проверю под разными виндами ;-) |
|
|
Дата: Окт 23, 2003 00:50:48 Asterix - нахрена? я итак оттестил её.. Не зря SQA Engineer отработал три года в Аэлите -) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.058 |