我是否需要SE_SHUTDOWN_NAME权限才能注销用户? 我需要从C++程序中注销一个用户。我使用API来实现这一点,但从文档中我不确定我是否需要任何特权。这里有一个例子 bool ShutdownWindows(void) { HANDLE hToken = NULL; TOKEN_PRIVILEGES tkp = {0}; bool bRet = false; // Get a token for this process. if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { if (LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid)) { tkp.PrivilegeCount = 1; // one privilege to set tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; // Get the shutdown privilege for this process. if (AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0)) { ::CloseHandle(hToken); if (ERROR_SUCCESS == GetLastError()) { DWORD dwFlags = EWX_POWEROFF; DWORD dwReason = SHTDN_REASON_MAJOR_SYSTEM; if (ExitWindowsEx(dwFlags, dwReason)) { bRet = true; } } } } } return bRet;

我是否需要SE_SHUTDOWN_NAME权限才能注销用户? 我需要从C++程序中注销一个用户。我使用API来实现这一点,但从文档中我不确定我是否需要任何特权。这里有一个例子 bool ShutdownWindows(void) { HANDLE hToken = NULL; TOKEN_PRIVILEGES tkp = {0}; bool bRet = false; // Get a token for this process. if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { if (LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid)) { tkp.PrivilegeCount = 1; // one privilege to set tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; // Get the shutdown privilege for this process. if (AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0)) { ::CloseHandle(hToken); if (ERROR_SUCCESS == GetLastError()) { DWORD dwFlags = EWX_POWEROFF; DWORD dwReason = SHTDN_REASON_MAJOR_SYSTEM; if (ExitWindowsEx(dwFlags, dwReason)) { bRet = true; } } } } } return bRet;,c++,winapi,logoff,C++,Winapi,Logoff,}//关闭Windows不,据我所知,您不需要任何额外的特权。在我的学校,我可以有特权关机,不用登录。谢谢。你可能想把它作为一个答案张贴。还有一个问题——在企业活动目录环境中,没有GPO或特权可以限制用户使用该API注销,是吗?我对此深表怀疑。如果我是正确的,那么一个策略很可能不会让用户自己注销。不过,我不想再谈我的经历了,所以我想听听那些更自信的人的意见是个好主意,他们肯定知道这一点。谢谢你的帮助。因此,希望其他人也能阅读此线程)首先,最初的问题是关于注销用户(EWX_注销flag),而不是关

}//关闭Windows

不,据我所知,您不需要任何额外的特权。在我的学校,我可以有特权关机,不用登录。谢谢。你可能想把它作为一个答案张贴。还有一个问题——在企业活动目录环境中,没有GPO或特权可以限制用户使用该API注销,是吗?我对此深表怀疑。如果我是正确的,那么一个策略很可能不会让用户自己注销。不过,我不想再谈我的经历了,所以我想听听那些更自信的人的意见是个好主意,他们肯定知道这一点。谢谢你的帮助。因此,希望其他人也能阅读此线程)首先,最初的问题是关于注销用户(
EWX_注销
flag),而不是关闭工作站(
EWX_关机
参数)。如果您这样做,那么确实需要
SE_关机_名称
权限。如果只是
EWX\u注销
,则不是。请注意,您提出的解决方案仍然有效,您只会给您的进程一个不必要的特权。此外,您用于调整令牌特权的代码是错误的。您应该调用
GetLastError()
,并确保在调用
AdjustTokenPrivileges()
后返回
ERROR\u SUCCESS
,以确保请求的权限确实被授予。在释放
hToken
句柄的过程中也存在内存泄漏。。。。所以我就到此为止。