Please advise why the AdjustTokenPrivileges function below always returns true, thus giving: "AdjustTokenPrivileges error 6" (ie invalid handle)?

stackoverlow is complaining that I didn't explain this enough

I don't know what else to add. I'm new to c++.

HANDLE hToken; OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, &hToken); SetPrivilege(hToken,L"SeBackupPrivilege",1 ); CloseHandle(hToken); 

BOOL SetPrivilege( HANDLE hToken, // access token handle LPCTSTR lpszPrivilege, // name of privilege to enable/disable BOOL bEnablePrivilege // to enable or disable privilege ) { TOKEN_PRIVILEGES oldtp; /* old token privileges */ TOKEN_PRIVILEGES tp; DWORD dwSize = sizeof (TOKEN_PRIVILEGES); LUID luid; if ( !LookupPrivilegeValue( NULL, // lookup privilege on local system lpszPrivilege, // privilege to lookup &luid ) ) // receives LUID of privilege { printf("LookupPrivilegeValue error: %u\n", GetLastError() ); return FALSE; } tp.PrivilegeCount = 1; tp.Privileges[0].Luid = luid; if (bEnablePrivilege) tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; else tp.Privileges[0].Attributes = 0; // Enable the privilege or disable all privileges. if ( !AdjustTokenPrivileges( &hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) &oldtp, (PDWORD) &dwSize) ) { printf("AdjustTokenPrivileges error: %u\n", GetLastError() ); //Get error 6 here (ie invalid handle) return FALSE; } if (GetLastError() == ERROR_NOT_ALL_ASSIGNED) { printf("The token does not have the specified privilege. \n"); return FALSE; } return TRUE; } 
2

2 Answers

You should request for TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY and correctly call the function:

if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) return FALSE; 

And please: Always check for valid return values!

For a complete example see also: How to Shut Down the System

And just for reference: Your function SetPrivilege was copied from Enabling and Disabling Privileges in C++

&hToken -> hToken if ( !AdjustTokenPrivileges( hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) &oldtp, (PDWORD) &dwSize) ) 
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.