繁体   English   中英

通过QtService使用QLocalServer:如何将安全属性设置为QLocalServer创建的命名管道?

[英]Using QLocalServer over QtService : how to set security attributes to named pipe created by QLocalServer?

我正在尝试在win7的服务应用程序中使用QLocalServer。 QLocalServer的Windows实现使用命名管道,并且由于winVista尝试从GUI访问它会导致错误。 甚至有关于QT的错误,但是巨魔关闭了它,没有进行任何修复。 所以我的问题是:是否可以更改已在服务命名管道中创建的安全属性,以使其可从gui应用程序访问? 还是唯一的方法是复制粘贴QT QLocalServer对象并将安全属性添加到创建管道的代码中? 我授予访问管道句柄的权限

template <class To, class From> inline To* d_ptr(From* ptr)
{
    return (To*)QObjectPrivate::get(ptr);
}
...
QLocalServerPrivate* p=d_ptr<QLocalServerPrivate>(this);

但是现在该怎么办?

几年前,我面临着同样的问题。 也许它已经在最新的Qt版本中修复了。 我通过下一个解决方法解决了该问题:

bool fixLocalServerPermissions(QLocalServer *server)
{
    QString pipeName = server->fullServerName();

    HANDLE h = CreateNamedPipeA(pipeName.toStdString().c_str(), PIPE_ACCESS_DUPLEX | WRITE_DAC,
            PIPE_TYPE_MESSAGE, PIPE_UNLIMITED_INSTANCES, 1024*16, 1024*16, 0, NULL);

    if (h == INVALID_HANDLE_VALUE)
        return false;

    bool status = SetSecurityInfo(h, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, NULL, NULL) == ERROR_SUCCESS;
    CloseHandle(h);

    return status;
}

如果相信此管道安全属性不能在LocalAdmin用户下更改...,那么我编辑了QLocalServer,我不想这样做:(

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM