From: Eric Biggers Date: Wed, 14 Aug 2013 16:40:38 +0000 (-0500) Subject: wimlib-imagex: Correctly detect failure to acquire privileges X-Git-Tag: v1.5.0~77 X-Git-Url: https://wimlib.net/git/?p=wimlib;a=commitdiff_plain;h=6a0d181ed78580b86fb7abb05a9879a8a1d7cba4 wimlib-imagex: Correctly detect failure to acquire privileges --- diff --git a/programs/imagex-win32.c b/programs/imagex-win32.c index e6e751aa..146e07f0 100644 --- a/programs/imagex-win32.c +++ b/programs/imagex-win32.c @@ -127,30 +127,34 @@ win32_modify_privilege(const wchar_t *privilege, bool enable) HANDLE hToken; LUID luid; TOKEN_PRIVILEGES newState; - bool ret = false; + bool ret = FALSE; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) goto out; - if (!LookupPrivilegeValueW(NULL, privilege, &luid)) - goto out; + if (!LookupPrivilegeValue(NULL, privilege, &luid)) + goto out_close_handle; newState.PrivilegeCount = 1; newState.Privileges[0].Luid = luid; newState.Privileges[0].Attributes = (enable ? SE_PRIVILEGE_ENABLED : 0); + SetLastError(ERROR_SUCCESS); ret = AdjustTokenPrivileges(hToken, FALSE, &newState, 0, NULL, NULL); + if (ret && GetLastError() == ERROR_NOT_ALL_ASSIGNED) + ret = FALSE; +out_close_handle: CloseHandle(hToken); out: - if (!ret) { - fwprintf(stderr, L"WARNING: Failed to %ls privilege %s\n", - enable ? L"enable" : L"disable", privilege); + if (!ret && enable) { fwprintf(stderr, - L"WARNING: The program will continue, " - L"but if permission issues are\n" - L"encountered, you may need to run " - L"this program as the administrator\n"); + L"WARNING: Failed to enable %ls!\n" + " The program will continue, but if " + "permission issues are\n" + " encountered, you may need to run " + "this program as the Administrator.\n", + privilege); } return ret; } diff --git a/programs/imagex.c b/programs/imagex.c index 788ba904..d5abe37e 100644 --- a/programs/imagex.c +++ b/programs/imagex.c @@ -3767,8 +3767,8 @@ main(int argc, char **argv) exit(2); } - /* Enable warning and error messages in the library to be more - * user-friendly. */ + /* Enable warning and error messages in wimlib be more user-friendly. + * */ wimlib_set_print_errors(true); /* Initialize wimlib. */