将权限设置为在多个台式机上广播消息

Setting permissions to broadcast messages across multiple desktops

本文关键字:台式机 广播 消息 权限 设置      更新时间:2023-10-16

嗨,

我正在尝试在不同台式机上的应用程序之间发送消息。为了实现此目的,我使用BSM_ALLDESKTOPS set for LPDWORD lpdwRecipients参数使用了广播节目。

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

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

BOOL GrantPrivilege::SetPrivilege(HANDLE hToken, LPCTSTR lpszPrivilege, BOOL bEnablePrivilege)
{
    TOKEN_PRIVILEGES tp;
    LUID luid;
    if (!LookupPrivilegeValue(NULL, lpszPrivilege, &luid))
    {
        printf("LookupPrivilegeValue error: %un", 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: %un", GetLastError());
        return FALSE;
    }
    if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
    {
        printf("The token does not have the specified privilege. %un ", 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用户使用此特权(这就是为什么这些是特权的原因,毕竟:不是每个人都有它们)。可以授予用户这样的特权,但是我强烈建议您反对。相反,您应该使用其他一些形式的过程间通信。如果您只需要没有数据的信号,则命名事件应该很好。否则,它可以是命名的管道,套接字或共享内存部分。