プロセス間通信に共有メモリ---つまり---メモリマップトファイルを使用するWindowsアプリケーションを開発しました。いくつかの処理を実行し、メモリマップトファイルに定期的にデータを書き込むWindowsサービスがあります。メモリマップトファイルから読み取り、情報を表示する別のWindowsアプリケーションがあります。このアプリケーションは、Windows XP、XP Pro、およびServer 2003で期待どおりに動作しますが、Vistaでは動作しません。
テキストエディタでファイルを開いて保存されたメッセージを確認できるため、メモリマップトファイルに書き込まれているデータがWindowsサービスによって正しく行われていることがわかりますが、「消費者」アプリケーションはファイルから読み取ることができません。ここで注意すべき興味深い点の1つは、コンシューマーアプリケーションを閉じて再起動すると、以前にメモリマップトファイルに書き込まれたメッセージが消費されることです。
また、別の奇妙なことは、リモートデスクトップを使用してWindowsホストに接続し、リモートデスクトップを介してコンシューマーアプリケーションを呼び出し/使用したときに同じ動作が発生することです。ただし、リモートデスクトップを呼び出し、次のコマンドを使用してターゲットホストのコンソールセッションに接続するとmstsc -v:servername /F -console
、すべてが完全に機能します。
そのため、問題は権限に関連していると思います。誰かがこれについてコメントできますか?
編集:
メモリマップトファイルとアクセスを同期するMutexオブジェクトを作成するために使用しているACLは次のとおりです。
TCHAR * szSD = TEXT("D:")
TEXT("(A;;RPWPCCDCLCSWRCWDWOGAFA;;;S-1-1-0)")
TEXT("(A;;GA;;;BG)")
TEXT("(A;;GA;;;AN)")
TEXT("(A;;GA;;;AU)")
TEXT("(A;;GA;;;LS)")
TEXT("(A;;GA;;;RD)")
TEXT("(A;;GA;;;WD)")
TEXT("(A;;GA;;;BA)");
これは問題の一部かもしれないと思います。