Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SeDebugPrivilege [D6, Win2k]


Frostik ©   (2002-11-05 15:26:00) 

Привет всем!
В примере по ВинАПИ дано описание привилегии "SeDebugPrivilege", там написана функция, которой
передается PID, привилегия которую надо дать и параметр типа BOOL, так вот:
в Дельфи так не получается, потому что SE_DEBUG_NAME нигде не указана и при попытке его впихать компилер
пишет, что это неизвестная переменная... Что делать? Или, может быть, надо по-другому писАть?
Всяким моралистам говорю сразу: это НЕ ТРОЯН И НЕ КАКАЯ-НИБУДЬ ГАДОСТЬ, просто обычного TaskMgr.exe мне
мало :( От него защититься проще, чем два байта переслать... Например у моего друга висит процесс
"r_server" я, в принципе, догадываюсь, что это такое, но при попытке убить мне винда говорит, что
Access is denided (у него, как и у меня, английский Win2000 Advanced Server)... Знаю, что есть проги
которые могут убивать все процессы, если кто такую знает, киньте линк, плз... Но все же хотца самому...

Заранее благодарен...


McSimm   (2002-11-08 11:01:00) [1]


> этот форум (как и все прочие) был создан для того, чтобы ПОМОГАТЬ людям...

Поэтому, будь добр, оставь свои замашки, напрягись и помоги.

:-)


Игорь Шевченко   (2002-11-08 10:55:00) [2]

Frostik © (06.11.02 20:01)


> Ладно, проще:
> кто может перевести этот код с С++ на Дельфи?

....

> Мораль сей басни такова: если лень (ну или ещё чего) отвечать,
> то не захламляй форум, плз...

Таблеток от наглости вам доктор не прописывал ?

Вы эта...приучайтесь, что за услуги надо платить. Или делать что-то самостоятельно. С, например, изучить, чтобы самому перевести, а не просить людей напрягаться.

И напоследок, почитайте наизусть
http://ln.com.ua/~openxs/articles/smart-questions-ru.html


Василий2   (2002-11-07 21:17:00) [3]

Если надо хороший TaskMgr, то качай ProcessExplorer (www.sysinternals.com)! Убивает ВСЕ ПРОЦЕССЫ, даже системные (кроме "System Idle Process" и "System")!!!


Набережных С.   (2002-11-06 21:20:00) [4]

>Frostik © (06.11.02 20:01)

Два твоих последних поста - это и есть захламление форума. А Внук абсолютно прав. Форумы - чтобы желающие могли помочь тем, кому помочь можно. А не для того, чтобы халяву получать.


Frostik   (2002-11-06 20:01:00) [5]

Дорогой Внук, по-моему этот форум (как и все прочие) был создан для того, чтобы ПОМОГАТЬ
людям... На знания денег мне не жалко, т.е. если бы ты жил в Саратове, то я бы тебе
заплатил за эту помощь, но скорее всего мы находимся в разных городах...
Мораль сей басни такова: если лень (ну или ещё чего) отвечать, то не захламляй форум, плз...


Внук   (2002-11-06 19:12:00) [6]

Я могу...
Но не буду. Вопрос задать - это одно, а выполнять бесплатную (хоть и не сложную) работу - это из другой серии :)


Frostik   (2002-11-06 19:01:00) [7]

Ладно, проще:
кто может перевести этот код с С++ на Дельфи?
Заранее спасибо!

А вот и обещанный код:

// начало

#define RTN_OK 0
#define RTN_USAGE 1
#define RTN_ERROR 13

#include
#include

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-05 21:18:00) [8]

SE_DEBUG_NAME = "SeDebugPrivilege"#0


Игорь Шевченко   (2002-11-05 15:54:00) [9]

kill.exe из Windows 2000 resource kit


Наверх

Титульная страница Поиск, карта сайта Написать письмо