2010-12-17 2 views
0

win7에서 서비스 응용 프로그램에서 QLocalServer를 사용하려고합니다. QLocalServer의 Windows 구현은 명명 된 파이프를 사용하며 winVista가 GUI에서 액세스하려고하므로 오류가 발생합니다. 그것에 대해 QT 버그도 있었지만, 트롤은 아무런 수정없이 그것을 닫았습니다. 내 질문은 : 서비스 명명 된 응용 프로그램에서 액세스 할 수 있도록 명명 된 파이프 서비스에서 이미 만든 보안 특성을 변경하는 방법이 있습니까? 아니면 Qt QLocalServer 개체를 복사하여 파이프를 만드는 코드에 보안 특성을 추가해야합니까? 나는 부여 파이프에 대한 액세스가QtService에서 QLocalServer 사용 : QLocalServer에서 만든 명명 된 파이프에 보안 특성을 설정하는 방법?

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

으로 처리하지만 지금은 그들과 함께 무엇을?

답변

0

if believe to this 파이프 보안 속성 localadmin으로 사용자에 따라 변경 될 수 없습니다 ... 그래서 내가 할 :(

나는 몇 년 전 같은 문제에 직면
0

. 어쩌면 이미 고정 싶어하지 않았다 QLocalServer을 편집 최신 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; 
} 
관련 문제