Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.23;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2002.12.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
3-74585
Zn
2002-12-04 09:52
2002.12.23
Не работает SELECT ... INTO TABLE в ADOQuery


6-74871
Mikel
2002-09-04 20:09
2002.12.23
Download


7-75026
Aleksey Pavlov
2002-10-17 12:11
2002.12.23
root CIMV2 -> Win32_*


14-74907
Delph
2002-11-29 17:23
2002.12.23
Delphi... ОН? ОНА? ОНИ? Как првильно?


7-75014
Sergey V. Shadrin
2002-10-16 17:52
2002.12.23
свободное место