![](/img/trans.png)
[英]how to transfer QImage from QLocalServer to QLocalSocket
[英]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.