Win32サービスとMFCアプリケーション間で、FileMappingを使ったプロセス間通信を作成
しています。
プロセス間通信のためのMemoryMappedFileの読み書きの排他制御のため、Mutexを使おう
と思うのですが、MFCアプリケーション側でサービスで作成したMutexと同じ名前のMutex
を作成することができません。(最初の所有権は両方ともFALSE)で作成しています。
ちなみにWin32サービスではなく、アプリケーション&アプリケーションでは問題なく作
成できます。
どうやらWin32サービスであることが鍵のようですが・・。
何か御存知の方いらっしゃいましたら、御教授頂ければ幸いです。
よろしくお願いいたします。
開発環境:VC++6.0
Win32サービス作成にはATLは使用せず、Win32APIを使って作成しています。
Global\ プリフィクスをつけてみるとか。
…ハズしてたらごめんなさい。
レス有難うございます。
Mutex名はGlobal\XXXXX.cccみたいな感じで、グローバルMutexにしています。
試した環境はWinXP professionalです
あ、ひょっとしたら、システム権限で作成するカーネルオブジェクトはユーザー権限の
ものと重複しないようにしているのかもしれません。。
(システム権限のものと重複を許すとシステムに支障をきたすため、作成すらできない
ようになっているとか・・)
あくまで推測ですが・・
サービス&サービスで試してみます。
CreateFileMapping() SECURITY_ATTRIBUTES の設定が必要なはずです。
この情報を参考にして見てください。
http://support.microsoft.com/kb/106387/en-us
IIS の ASP用の COM で、起動中のアプリケーションと FileMapping による
共有をさせたときにこの方法でうまくいきました。
# 外していたらごめんなさい。
>そらばさん
ビンゴっぽいです^^
早速試してみます!!
解決しました!
SecurityDescripterの指定でサービスのMutexをアプリケーションで取得することに成功
しました。
ただ、MFCのCMutexでは何故か失敗するみたいです。。
回答頂いたみなさん、
情報有難うございました!!