0

まず、これを読んでいただきありがとうございます:)

私は DLL 共有メモリを使用し、interlocked~ 関数を使用しています。(勝利7)

サービス exe およびユーザー アプリ exe によって読み込まれる DLL。

ご存知のように、サービス セッションは 0、ユーザー セッションは 1 です。

DLL の共有メモリ値がユーザー アプリ exe によって変更された場合、サービスの DLL 共有メモリ値が反映されません。

サービスとユーザー アプリの DLL 共有メモリを同期する方法はありますか?

4

3 に答える 3

2

共有セクションは、セッションの境界を越えて機能しなくなりました。マイクロソフトはこれをセキュリティ上の問題と見なし、メモリが機能する場合はかなり前に、意図的に機能を壊しました。各セッションでセクションの独自のコピーが表示されるようになったと思います。

ただし、メモリ マップ ファイル (MMF) は問題なく動作するので、共有セクションの代わりにこれを使用しています。唯一の欠点は、グローバルに利用可能な MMF を高い特権で作成する必要があることです。そのため、サービスを使用して MMF を作成します。

于 2012-08-16T10:10:48.487 に答える
1

グローバル共有メモリを使用してみてください。 Microsoft のドキュメントには次のように書かれています。

ファイル マッピング オブジェクト名の前に "Global\" を付けると、プロセスが異なるターミナル サーバー セッションにある場合でも、プロセスが相互に通信できるようになります。

于 2012-05-31T05:23:53.187 に答える
0

セッション間でメモリを共有する場合、資格情報も役割を果たすことを忘れないでください。

これには、最初のプロセスに SeCreateGlobalPrivilege 権限が必要です

于 2012-05-31T05:34:42.333 に答える