2010-12-17 11 views
0

私はwin7のサービスアプリケーションでQLocalServerを使用しようとしています。 QLocalServerのWindows実装では、名前付きパイプを使用します.WinVistaがGUIからアクセスしようとすると、エラーが発生します。それについてもQTバグがありましたが、トロールは何も修正することなくそれを閉じました。 私の質問は次のとおりです: サービス名付きパイプで既に作成されたセキュリティ属性を変更して、GUIアプリケーションからアクセスできるようにする方法はありますか? または、唯一の方法は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のユーザーで変更することはできませんパイプが... はので、私は私がやってみたかったしませんでしたQLocalServerを編集:(

0

私は多分それはすでに修正しました。数年前に同じ問題に直面して最新の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; 
} 
関連する問題