Форум: "WinAPI";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];
ВнизSeDebugPrivilege Найти похожие ветки
← →
Frostik (2002-11-05 15:26) [0]Привет всем!
В примере по ВинАПИ дано описание привилегии "SeDebugPrivilege", там написана функция, которой
передается PID, привилегия которую надо дать и параметр типа BOOL, так вот:
в Дельфи так не получается, потому что SE_DEBUG_NAME нигде не указана и при попытке его впихать компилер
пишет, что это неизвестная переменная... Что делать? Или, может быть, надо по-другому писАть?
Всяким моралистам говорю сразу: это НЕ ТРОЯН И НЕ КАКАЯ-НИБУДЬ ГАДОСТЬ, просто обычного TaskMgr.exe мне
мало :( От него защититься проще, чем два байта переслать... Например у моего друга висит процесс
"r_server" я, в принципе, догадываюсь, что это такое, но при попытке убить мне винда говорит, что
Access is denided (у него, как и у меня, английский Win2000 Advanced Server)... Знаю, что есть проги
которые могут убивать все процессы, если кто такую знает, киньте линк, плз... Но все же хотца самому...
Заранее благодарен...
← →
Игорь Шевченко (2002-11-05 15:54) [1]kill.exe из Windows 2000 resource kit
← →
Набережных С. (2002-11-05 21:18) [2]SE_DEBUG_NAME = "SeDebugPrivilege"#0
← →
Frostik (2002-11-06 19:01) [3]Ладно, проще:
кто может перевести этот код с С++ на Дельфи?
Заранее спасибо!
А вот и обещанный код:
// начало
#define RTN_OK 0
#define RTN_USAGE 1
#define RTN_ERROR 13
#include <windows.h>
#include <stdio.h>
BOOL SetPrivilege(
HANDLE hToken, // token handle
LPCTSTR Privilege, // Privilege to enable/disable
BOOL bEnablePrivilege // TRUE to enable. FALSE to disable
);
void DisplayError(LPTSTR szAPI);
int main(int argc, char *argv[])
{
HANDLE hProcess;
HANDLE hToken;
int dwRetVal=RTN_OK; // assume success from main()
// show correct usage for kill
if (argc != 2)
{
fprintf(stderr,"Usage: %s [ProcessId]\n", argv[0]);
return RTN_USAGE;
}
if(!OpenProcessToken(
GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
&hToken
)) return RTN_ERROR;
// enable SeDebugPrivilege
if(!SetPrivilege(hToken, SE_DEBUG_NAME, TRUE))
{
DisplayError("SetPrivilege");
// close token handle
CloseHandle(hToken);
// indicate failure
return RTN_ERROR;
}
// open the process
if((hProcess = OpenProcess(
PROCESS_ALL_ACCESS,
FALSE,
atoi(argv[1]) // PID from commandline
)) == NULL)
{
DisplayError("OpenProcess");
return RTN_ERROR;
}
// disable SeDebugPrivilege
SetPrivilege(hToken, SE_DEBUG_NAME, FALSE);
if(!TerminateProcess(hProcess, 0xffffffff))
{
DisplayError("TerminateProcess");
dwRetVal=RTN_ERROR;
}
// close handles
CloseHandle(hToken);
CloseHandle(hProcess);
return dwRetVal;
}
BOOL SetPrivilege(
HANDLE hToken, // token handle
LPCTSTR Privilege, // Privilege to enable/disable
BOOL bEnablePrivilege // TRUE to enable. FALSE to disable
)
{
TOKEN_PRIVILEGES tp;
LUID luid;
TOKEN_PRIVILEGES tpPrevious;
DWORD cbPrevious=sizeof(TOKEN_PRIVILEGES);
if(!LookupPrivilegeValue( NULL, Privilege, &luid )) return FALSE;
//
// first pass. get current privilege setting
//
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = 0;
AdjustTokenPrivileges(
hToken,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
&tpPrevious,
&cbPrevious
);
if (GetLastError() != ERROR_SUCCESS) return FALSE;
//
// second pass. set privilege based on previous setting
//
tpPrevious.PrivilegeCount = 1;
tpPrevious.Privileges[0].Luid = luid;
if(bEnablePrivilege) {
tpPrevious.Privileges[0].Attributes |= (SE_PRIVILEGE_ENABLED);
}
else {
tpPrevious.Privileges[0].Attributes ^= (SE_PRIVILEGE_ENABLED &
tpPrevious.Privileges[0].Attributes);
}
AdjustTokenPrivileges(
hToken,
FALSE,
&tpPrevious,
cbPrevious,
NULL,
NULL
);
if (GetLastError() != ERROR_SUCCESS) return FALSE;
return TRUE;
}
void DisplayError(
LPTSTR szAPI // pointer to failed API name
)
{
LPTSTR MessageBuffer;
DWORD dwBufferLength;
fprintf(stderr,"%s() error!\n", szAPI);
if(dwBufferLength=FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
GetSystemDefaultLangID(),
(LPTSTR) &MessageBuffer,
0,
NULL
))
{
DWORD dwBytesWritten;
//
// Output message string on stderr
//
WriteFile(
GetStdHandle(STD_ERROR_HANDLE),
MessageBuffer,
dwBufferLength,
&dwBytesWritten,
NULL
);
//
// free the buffer allocated by the system
//
LocalFree(MessageBuffer);
}
}
← →
Внук (2002-11-06 19:12) [4]Я могу...
Но не буду. Вопрос задать - это одно, а выполнять бесплатную (хоть и не сложную) работу - это из другой серии :)
← →
Frostik (2002-11-06 20:01) [5]Дорогой Внук, по-моему этот форум (как и все прочие) был создан для того, чтобы ПОМОГАТЬ
людям... На знания денег мне не жалко, т.е. если бы ты жил в Саратове, то я бы тебе
заплатил за эту помощь, но скорее всего мы находимся в разных городах...
Мораль сей басни такова: если лень (ну или ещё чего) отвечать, то не захламляй форум, плз...
← →
Набережных С. (2002-11-06 21:20) [6]>Frostik © (06.11.02 20:01)
Два твоих последних поста - это и есть захламление форума. А Внук абсолютно прав. Форумы - чтобы желающие могли помочь тем, кому помочь можно. А не для того, чтобы халяву получать.
← →
Василий2 (2002-11-07 21:17) [7]Если надо хороший TaskMgr, то качай ProcessExplorer (www.sysinternals.com)! Убивает ВСЕ ПРОЦЕССЫ, даже системные (кроме "System Idle Process" и "System")!!!
← →
Игорь Шевченко (2002-11-08 10:55) [8]Frostik © (06.11.02 20:01)
> Ладно, проще:
> кто может перевести этот код с С++ на Дельфи?
....
> Мораль сей басни такова: если лень (ну или ещё чего) отвечать,
> то не захламляй форум, плз...
Таблеток от наглости вам доктор не прописывал ?
Вы эта...приучайтесь, что за услуги надо платить. Или делать что-то самостоятельно. С, например, изучить, чтобы самому перевести, а не просить людей напрягаться.
И напоследок, почитайте наизусть
http://ln.com.ua/~openxs/articles/smart-questions-ru.html
← →
McSimm (2002-11-08 11:01) [9]
> этот форум (как и все прочие) был создан для того, чтобы ПОМОГАТЬ людям...
Поэтому, будь добр, оставь свои замашки, напрягись и помоги.
:-)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c