Головна сторінка
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);
}
ще {
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.59 MB
Час: 0.045 c
3-74592
skiph
2002-12-04 07:29
2002.12.23
Trigger for Delete


1-74695
DAT
2002-12-11 11:44
2002.12.23
PopUpMenu РґР »СЏ СЃР ° РјРѕРіРѕ РјРμРЅСЋ


14-74974
хватка
2002-12-01 12:05
2002.12.23
У чому сила Delphi


3-74574
OlegLeontev
2002-12-03 17:07
2002.12.23
підказати максимальну кількість записів в Paradox 7


14-74901
Микола Биков
2002-12-01 12:02
2002.12.23
Порадьте принтер до 3000 рублів, але можна і до 3500 р.





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в'єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська