説明が下手かもしれませんが、ご意見を頂きたくよろしくお願いします。
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
深くは知りませんが
サービス起動時のアクセス権限の設定が実際にログインしているIDでは利用できない
ようになっているのではないでしょうか
>サービスに登録する前はデータがダイアログの方で見れたのですが
同じユーザログイン上で実施しているため利用可能なのではないでしょうか?
マルチポスト関心しませんね!
このスレは捨てハンですかね!
みなさん、マルチポスト申し訳ありませんでした。
今後は、行いません。
woodさん申し訳ありませんでした。
>サービス起動時のアクセス権限の設定が実際にログインしている
>IDでは利用できないようになっているのではないでしょうか
woodさんのご意見を調査してみましたところ、
タスクマネージャのプロセスのユーザ名が
サービスで起動するとプログラムがSYSTEMになっていました。
実際自分がログインしているのはAdministratorなので
この部分でアクセス拒否となったのかもしれません。
今回プログラムは、ダイアログからはメモリへ書き込みが
ないので下記の通り”FILE_MAP_READ”でアクセスすることにしました。
今後の利用も考えなんとか打開してみたいと思います。
とりあえず、解決とのことで・・
hFileMap= CreateFileMapping(
(HANDLE)0xFFFFFFFF,
NULL,
FILE_MAP_READ,
0,
MAPPING_MAX,
MAPPING_NAME);