Здравствуйте, WM_SASHA, Вы писали:
WM_>Нужно включить привелегию отладчика, находясь в сеансе учётной записи "ГОСТЬ".
Функция:
bool __fastcall EnablePrivilege(const char* privName)
{
HINSTANCE hLib = LoadLibrary("advapi32.dll");
if(!hLib)
return false;
// set up functions
typedef BOOL (WINAPI *PLookupPrivilegeValue)(LPCTSTR,LPCTSTR,PLUID);
typedef BOOL (WINAPI *POpenProcessToken)(HANDLE,DWORD,PHANDLE);
typedef BOOL (WINAPI* PAdjustTokenPrivileges)(HANDLE,BOOL,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
PLookupPrivilegeValue lpv = (PLookupPrivilegeValue) GetProcAddress(hLib,"LookupPrivilegeValueA");
POpenProcessToken opt = (POpenProcessToken) GetProcAddress(hLib,"OpenProcessToken");
PAdjustTokenPrivileges atp = (PAdjustTokenPrivileges) GetProcAddress(hLib,"AdjustTokenPrivileges");
if(!lpv || !opt || !atp)
{
FreeLibrary(hLib);
return FALSE;
}
LUID luid = {0};
if(!lpv(NULL,privName,&luid))
{
FreeLibrary(hLib);
return FALSE;
}
HANDLE hToken = NULL;
if(!opt(GetCurrentProcess(),TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES,&hToken))
{
FreeLibrary(hLib);
return FALSE;
}
BOOL retval = FALSE;
TOKEN_PRIVILEGES tp = {0};
tp.PrivilegeCount = 1;
tp. Privileges[0].Luid = luid;
tp. Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
retval = atp(hToken, FALSE, &tp, sizeof(tp),
NULL, NULL);
if(hToken)
CloseHandle(hToken);
FreeLibrary(hLib);
return retval;
}
И пример использования:
EnablePrivilege(SE_DEBUG_NAME);
По уму надо функцию переписать на использование TCHAR — дело пяти минут

<< Существует и лучший мир, но там все очень дорого. >>