CreateFileMapping()のアクセス拒否について

[戻る]
hiro 2002/10/09(水) 11:32:29
説明が下手かもしれませんが、ご意見を頂きたくよろしくお願いします。

CreateFileMapping()関数を用いた共有メモリーアクセスプログラムを
サービスに登録し、このプログラムがメモリーに書き込み、
もう一つのMFCダイアログで作成したプログラムでメモリーを読む
プログラムを作成しました。

ここで問題が発生し、
サービスに登録する前は、データがダイアログの方で見れたのですが、
サービスに登録したら、CreateFileMapping()関数の戻り値が
GetLastError()で見るとアクセス拒否のエラーが帰ってきます。

どのようなことが考えられるでしょうか?
サービスに登録すると、他のプログラムからサービスに登録したプログラムへの
アクセスは不能なのでしょうか?


マッピングの関数の引数の記述は以下の通りです。

#define MAPPING_MAX  1000   //マッピングオブジェクトの最高値(変更可能)
#define MAPPING_NAME "hoge" //マッピングオブジェクト名(変更可能)

hFileMap= CreateFileMapping(
(HANDLE)0xFFFFFFFF,
NULL,
PAGE_READWRITE,
0,
MAPPING_MAX,
MAPPING_NAME);




開発環境:VC.NET
OS:WindowsXP or 2000

wood 2002/10/09(水) 12:25:02
深くは知りませんが
サービス起動時のアクセス権限の設定が実際にログインしているIDでは利用できない
ようになっているのではないでしょうか

>サービスに登録する前はデータがダイアログの方で見れたのですが
同じユーザログイン上で実施しているため利用可能なのではないでしょうか?

wood 2002/10/09(水) 12:40:00
マルチポスト関心しませんね!
このスレは捨てハンですかね!

hiro 2002/10/09(水) 16:14:52
[[解決]]
みなさん、マルチポスト申し訳ありませんでした。
今後は、行いません。

woodさん申し訳ありませんでした。
>サービス起動時のアクセス権限の設定が実際にログインしている
>IDでは利用できないようになっているのではないでしょうか

woodさんのご意見を調査してみましたところ、
タスクマネージャのプロセスのユーザ名が
サービスで起動するとプログラムがSYSTEMになっていました。
実際自分がログインしているのはAdministratorなので
この部分でアクセス拒否となったのかもしれません。
今回プログラムは、ダイアログからはメモリへ書き込みが
ないので下記の通り”FILE_MAP_READ”でアクセスすることにしました。
今後の利用も考えなんとか打開してみたいと思います。
とりあえず、解決とのことで・・

hFileMap= CreateFileMapping(
(HANDLE)0xFFFFFFFF,
NULL,
FILE_MAP_READ,
0,
MAPPING_MAX,
MAPPING_NAME);

古いスレッドには追加発言できません。