Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Неполучается получить отладочные привелегии (https://forum.antichat.xyz/showthread.php?t=148366)

_nic 14.10.2009 23:25

Неполучается получить отладочные привелегии
 
Собственно вот код по кусочкам нарыт из гугла и форумов
Код:

HANDLE hToken;
TOKEN_PRIVILEGES Priv,PrivOld;
DWORD cbPriv = sizeof(PrivOld);
 ZeroMemory(&Priv,sizeof(Priv));
if (!OpenThreadToken(GetCurrentThread(),TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES,FALSE, &hToken))
 {
OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES,&hToken );
SetLastError(0);
 }
_ASSERTE(ANYSIZE_ARRAY > 0);
Priv.PrivilegeCount = 1;
Priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if(!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&Priv.Privileges[0].Luid))
{
        WaitForSingleObject(&Priv.Privileges[0].Luid,INFINITE);
}
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&Priv.Privileges[0].Luid);
AdjustTokenPrivileges(hToken,FALSE,&Priv,sizeof(Priv),&PrivOld,&cbPriv);
AdjustTokenPrivileges(hToken,FALSE,&PrivOld,sizeof(PrivOld),NULL,NULL);
CloseHandle(hToken);

На строчке LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&Priv.Priv ileges[0].Luid); получаю ошибку ERROR_IO_PENDING, у пользователя под которым собирается код есть админские права.В чем может быть дело?

slesh 15.10.2009 00:06

вот попробуй мой код. Для проверки корректности работы использую ProcessExplorerNT - он показывает наличие отдочных привилегий
DebugPrivilege(true) - поставить
DebugPrivilege(false) - убрать

Код:

BOOL DebugPrivilege(BOOL Enable)
{
        HANDLE hToken;
        TOKEN_PRIVILEGES tp;
        ULONG d;
        ULONG ret = false;

        if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
        {
                tp.PrivilegeCount = 1;
                LookupPrivilegeValueA(0, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
                if (Enable)
                {
                        tp.Privileges[0].Attributes = 0x00000002;
                }
                else
                {
                        tp.Privileges[0].Attributes = 0x80000000;
                }

                ret = AdjustTokenPrivileges(hToken, false, &tp, sizeof(TOKEN_PRIVILEGES), 0, &d);
               
                CloseHandle(hToken);
        }

        return ret;
}

Если не помогает, значит стоит какаято защита которая это не дает тебе сделать. Кстати каспер при некоторых настройках орет на программы которые пытаются получить эти привилегии )
Еще может быть из-за политики безопасности, так что на вся случай проверь работу еще и на учетке главного админа

_nic 15.10.2009 03:07

Та же самая ошибка :( ВОт ведь хрень непонятная.И защите такой не откудого взятся.Мне как то по пиду процесса надо узнать путь к его исполняему файлу.А как я его узнаю если указатель на процесс хрен получишь =/

BrainDeaD 15.10.2009 03:37

сам компайлер должен быть запущен с пвышенными привилегиями (run as). во всяком случае у меня так на висте + visual studio

Ra$cal 15.10.2009 08:19

Цитата:

Мне как то по пиду процесса надо узнать путь к его исполняему файлу
http://msdn.microsoft.com/en-us/library/ms686701%28VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/ms684839%28VS.85%29.aspx

Gar|k 15.10.2009 08:49

http://www.wasm.ru/article.php?article=hiddndt


Время: 10:41