Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-74731
RAA
2002-12-13 23:11
2002.12.23
Создание формы без использования модуля forms


14-74977
Anatoly Podgoretsky
2002-12-02 07:36
2002.12.23
Именинники 2 декабря


3-74568
Natalie
2002-12-04 09:33
2002.12.23
проблемы с репортом!!!!!


6-74882
Rob
2002-10-28 10:23
2002.12.23
D7 и TClient&Server Socket


3-74566
Belov
2002-12-04 13:57
2002.12.23
SQL 2000 + ADO + Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский