Собственно вот код по кусочкам нарыт из гугла и форумов 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, у пользователя под которым собирается код есть админские права.В чем может быть дело?
вот попробуй мой код. Для проверки корректности работы использую 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; } Если не помогает, значит стоит какаято защита которая это не дает тебе сделать. Кстати каспер при некоторых настройках орет на программы которые пытаются получить эти привилегии ) Еще может быть из-за политики безопасности, так что на вся случай проверь работу еще и на учетке главного админа
Та же самая ошибка ВОт ведь хрень непонятная.И защите такой не откудого взятся.Мне как то по пиду процесса надо узнать путь к его исполняему файлу.А как я его узнаю если указатель на процесс хрен получишь =/
сам компайлер должен быть запущен с пвышенными привилегиями (run as). во всяком случае у меня так на висте + visual studio
http://msdn.microsoft.com/en-us/library/ms686701%28VS.85%29.aspx http://msdn.microsoft.com/en-us/library/ms684839%28VS.85%29.aspx