Неполучается получить отладочные привелегии

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _nic, 14 Oct 2009.

  1. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Собственно вот код по кусочкам нарыт из гугла и форумов
    Code:
    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.Privileges[0].Luid); получаю ошибку ERROR_IO_PENDING, у пользователя под которым собирается код есть админские права.В чем может быть дело?
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    вот попробуй мой код. Для проверки корректности работы использую ProcessExplorerNT - он показывает наличие отдочных привилегий
    DebugPrivilege(true) - поставить
    DebugPrivilege(false) - убрать

    Code:
    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;
    }
    
    Если не помогает, значит стоит какаято защита которая это не дает тебе сделать. Кстати каспер при некоторых настройках орет на программы которые пытаются получить эти привилегии )
    Еще может быть из-за политики безопасности, так что на вся случай проверь работу еще и на учетке главного админа
     
  3. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Та же самая ошибка :( ВОт ведь хрень непонятная.И защите такой не откудого взятся.Мне как то по пиду процесса надо узнать путь к его исполняему файлу.А как я его узнаю если указатель на процесс хрен получишь =/
     
  4. BrainDeaD

    BrainDeaD Elder - Старейшина

    Joined:
    9 Jun 2005
    Messages:
    774
    Likes Received:
    292
    Reputations:
    214
    сам компайлер должен быть запущен с пвышенными привилегиями (run as). во всяком случае у меня так на висте + visual studio
     
  5. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    http://msdn.microsoft.com/en-us/library/ms686701%28VS.85%29.aspx
    http://msdn.microsoft.com/en-us/library/ms684839%28VS.85%29.aspx
     
  6. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    http://www.wasm.ru/article.php?article=hiddndt
     
    _________________________