Vistaでの共有メモリ作成 – プログラミング – Home

Vistaでの共有メモリ作成
 
通知
すべてクリア

Vistaでの共有メモリ作成


NEO
 NEO
(@NEO)
ゲスト
結合: 21年前
投稿: 18
Topic starter  

CreateFileMapping関数で共有メモリを作成して使用するプログラムを作成しています。
実はこのプログラムはDLLで、このDLLを使用してWindowsサービスプログラムとWindowsア
プリケーションとでプロセス間通信を実現させようとしています。

CreateFileMapping関数では、Globalのプレフィックスを付けた名前で作成しています。
セキュリティ識別子(SECURITY_ATTRIBUTES構造体)も渡しています。

この仕組みですが、WindowsXPでなら問題なく動作するのですが、
WindowsVistaだと、管理者権限のないユーザーでログインしてWindowsアプリケーション
を起動すると、CreateFileMapping関数がERROR_ACCESS_DENIED(アクセス拒否)で失敗し
ます。
管理者権限のないユーザーでログインしていると、Globalのプレフィックスを付けた名前
では共有メモリは作成できないのでしょうか?
Globalのプレフィックスを付けないと、Windowsサービスプログラムとはメモリを共有で
きませんし・・・。

何か良い解決策があれば教えてください。


引用解決済
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

MSDN にある通り
http://msdn.microsoft.com/en-us/library/aa366537.aspx

> 管理者権限のないユーザーでログインしていると、Globalのプレフィックスを付けた
> 名前では共有メモリは作成できないのでしょうか?

はい。
正確には、SeCreateGlobalPrivilege 特権が必要です。

解決策は3つ。

1:その DLL を使うアプリを要昇格にする。
2:そのアプリを使うユーザーに SeCreateGlobalPrivilege を付与する
3:アプリではなくサービス側で共有メモリを作成し、アプリは OpenFileMapping する

個人的には 3 をお勧めします。


返信引用
NEO
 NEO
(@NEO)
ゲスト
結合: 21年前
投稿: 18
Topic starter  

ありがとうございました。とても参考になります。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました