Home | Info | Community | Development | myReactOS | Contact Us
[static]
Definition at line 105 of file profile.c.
Referenced by CreateUserProfileW(), LoadUserProfileW(), and UnloadUserProfile().
{ HANDLE Process; HANDLE Token; PTOKEN_PRIVILEGES TokenPriv; BOOL bRet; DPRINT("AcquireRemoveRestorePrivilege(%d)\n", bAcquire); Process = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId()); if (!Process) { DPRINT1("OpenProcess() failed with error %lu\n", GetLastError()); return FALSE; } bRet = OpenProcessToken(Process, TOKEN_ADJUST_PRIVILEGES, &Token); CloseHandle(Process); if (!bRet) { DPRINT1("OpenProcessToken() failed with error %lu\n", GetLastError()); return FALSE; } TokenPriv = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(TOKEN_PRIVILEGES, Privileges) + sizeof(LUID_AND_ATTRIBUTES)); if (!TokenPriv) { DPRINT1("Failed to allocate mem for token privileges\n"); CloseHandle(Token); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } TokenPriv->PrivilegeCount = 1; TokenPriv->Privileges[0].Attributes = bAcquire ? SE_PRIVILEGE_ENABLED : 0; if (!LookupPrivilegeValue(NULL, SE_RESTORE_NAME, &TokenPriv->Privileges[0].Luid)) { DPRINT1("LookupPrivilegeValue() failed with error %lu\n", GetLastError()); HeapFree(GetProcessHeap(), 0, TokenPriv); CloseHandle(Token); return FALSE; } bRet = AdjustTokenPrivileges( Token, FALSE, TokenPriv, 0, NULL, NULL); HeapFree(GetProcessHeap(), 0, TokenPriv); CloseHandle(Token); if (!bRet) { DPRINT1("AdjustTokenPrivileges() failed with error %lu\n", GetLastError()); return FALSE; } return TRUE; }