gpt4 book ai didi

c++ - 设置跨多个桌面广播消息的权限

转载 作者:行者123 更新时间:2023-11-30 05:43:22 27 4
gpt4 key购买 nike

你好,

我正在尝试在位于不同桌面上的应用程序之间发送消息。为了完成这个,我正在使用 BroadCastSystemMessage使用 BSM_ALLDESKTOPS设置为 LPDWORD lpdwRecipients参数。

正如 MSDN 文档所说,BSM_ALLDESKTOPS - 广播到所有桌面。需要 SE_TCB_NAME 权限。

为了满足此要求,我找到了以下生成 ERROR_NOT_ALL_ASSIGNED 的示例, 代码 1300 - Not all privileges or groups referenced are assigned to the caller ,在最后一个 if 语句中:

BOOL GrantPrivilege::SetPrivilege(HANDLE hToken, LPCTSTR lpszPrivilege, BOOL bEnablePrivilege)
{
TOKEN_PRIVILEGES tp;
LUID luid;

if (!LookupPrivilegeValue(NULL, lpszPrivilege, &luid))
{
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)NULL,
(PDWORD)NULL))
{
printf("AdjustTokenPrivileges error: %u\n", GetLastError());
return FALSE;
}

if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)

{
printf("The token does not have the specified privilege. %u\n ", GetLastError());
return FALSE;
}

return TRUE;
}

也许这个错误是由我调用这个函数的方式引起的:

HANDLE hToken;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
printf("%u", GetLastError());
GrantPrivilege gPriv;
gPriv.SetPrivilege(hToken, L"SeTcbPrivilege", true);

P.S. 我试过从提升的提示符运行这个应用程序,但结果是一样的,1300错误代码。

最佳答案

这个错误代码意味着当前的windows用户不允许使用这个权限(这就是为什么这些是权限,毕竟:不是每个人都有)。 It is possible to grant a user such privilege ,但我强烈反对。相反,您应该使用某种其他形式的进程间通信。如果你只需要一个没有数据的信号,命名事件应该是好的。否则,它可能是命名管道、套接字或共享内存部分。

关于c++ - 设置跨多个桌面广播消息的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30236947/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com