うーむ。そうなのか・・・
WindowsVistaだと、管理者権限のないユーザーでログインしてWindowsアプリケーション を起動すると、CreateFileMapping関数がERROR_ACCESS_DENIED(アクセス拒否)で失敗し ます。 管理者権限のないユーザーでログインしていると、Globalのプレフィックスを付けた名前 では共有メモリは作成できないのでしょうか? Globalのプレフィックスを付けないと、Windowsサービスプログラムとはメモリを共有で きませんし・・・。
MSDN にある通り http://msdn.microsoft.com/en-us/library/aa366537.aspx > 管理者権限のないユーザーでログインしていると、Globalのプレフィックスを付けた > 名前では共有メモリは作成できないのでしょうか? はい。 正確には、SeCreateGlobalPrivilege 特権が必要です。 解決策は3つ。 1:その DLL を使うアプリを要昇格にする。 2:そのアプリを使うユーザーに SeCreateGlobalPrivilege を付与する 3:アプリではなくサービス側で共有メモリを作成し、アプリは OpenFileMapping する 個人的には 3 をお勧めします。
ネタ元