サービスで作ったMutexがアプリケーションで作れない。。

[戻る]
Q 2005/06/16(木) 18:09:13
Win32サービスとMFCアプリケーション間で、FileMappingを使ったプロセス間通信を作成
しています。
プロセス間通信のためのMemoryMappedFileの読み書きの排他制御のため、Mutexを使おう
と思うのですが、MFCアプリケーション側でサービスで作成したMutexと同じ名前のMutex
を作成することができません。(最初の所有権は両方ともFALSE)で作成しています。

ちなみにWin32サービスではなく、アプリケーション&アプリケーションでは問題なく作
成できます。
どうやらWin32サービスであることが鍵のようですが・・。
何か御存知の方いらっしゃいましたら、御教授頂ければ幸いです。
よろしくお願いいたします。

開発環境:VC++6.0
Win32サービス作成にはATLは使用せず、Win32APIを使って作成しています。

シャノン 2005/06/16(木) 20:23:19
"Global\" プリフィクスをつけてみるとか。
…ハズしてたらごめんなさい。

Q 2005/06/17(金) 08:39:43
レス有難うございます。
Mutex名はGlobal\XXXXX.cccみたいな感じで、グローバルMutexにしています。
試した環境はWinXP professionalです

あ、ひょっとしたら、システム権限で作成するカーネルオブジェクトはユーザー権限の
ものと重複しないようにしているのかもしれません。。
(システム権限のものと重複を許すとシステムに支障をきたすため、作成すらできない
ようになっているとか・・)
あくまで推測ですが・・

サービス&サービスで試してみます。

そらぱ 2005/06/17(金) 09:02:08
CreateFileMapping() SECURITY_ATTRIBUTES の設定が必要なはずです。
この情報を参考にして見てください。

http://support.microsoft.com/kb/106387/en-us

IIS の ASP用の COM で、起動中のアプリケーションと FileMapping による
共有をさせたときにこの方法でうまくいきました。

# 外していたらごめんなさい。

Q 2005/06/17(金) 12:00:44
>そらばさん

ビンゴっぽいです^^
早速試してみます!!

Q 2005/06/17(金) 18:13:38
[[解決]]
解決しました!
SecurityDescripterの指定でサービスのMutexをアプリケーションで取得することに成功
しました。
ただ、MFCのCMutexでは何故か失敗するみたいです。。

回答頂いたみなさん、
情報有難うございました!!

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