VS.NET2003:MFCアプリケーション
Windows Vista(32ビット版)上で動作する
MFCアプリケーションを作成しています。
名前付きのファイルマッピングオブジェクトを作成すると、
Vista以前のOSでは問題なかったパターンで、Win32API関数が
エラーを返してきています。
以下、プログラムの流れです。
1.GetTempPath()にて、ログオンユーザーのテンポラリフォルダ
のパスを取得。
2.1.で取得したパス(例:C\:Users\[ユーザー名]\AppData\Local\Temp)
のフォルダにCreateFile()でファイルを作成し、共有データを書き込み。
3.CreateFileMapping()で、2.で作成したファイルに対して、
名前付きマッピングオブジェクトを作成する。
このとき、オブジェクト名にGlobal\...というように、グローバル名前空間で
オブジェクトを作成しようとすると、CreateFileMapping()が失敗します。
GetLastError()のエラー情報は(5:アクセスが拒否されました。 )
が返ってきています。
4.3.でマッピングオブジェクトの作成に成功した場合は、
別のプログラムのプロセスから作成されたオブジェクトを
OpenFileMapping()で開く。
3.でグローバル名前空間でマッピングオブジェクトを作成している理由は、
「ユーザーの簡易切り替え(Fast user switching)」によって、
他のユーザーでログオンしてから同じプログラムを実行し、
別のプロセスからOpenFileMapping()で作成された
ファイルマッピングオブジェクト開こうとしたときに、
Globol\..でオブジェクトを作成しておかないと失敗するためです。
(「ユーザーの簡易切り替え」を利用しない限りは、Global\..で
作成しなくても問題ありませんでした。)
同じコードがWindowsXP上では、3.のCreateFileMapping()は
成功していました。
ただし、XPでは1.で取得したテンポラリフォルダのパスは
C:\Documents and Settings\[ユーザー名]\Local Settings\Temp
となっており、でVistaからアクセス権まわりの仕様が変更された(?)
ことにより、上述のような問題が起きているのだと想像しています。
以上について、何か情報や回避方法などご存知でしたら、
ご教授いただけないでしょうか?
http://forums.belution.com/ja/vc/000/353/76.shtml
> 発言される前に「使用上の注意」を必ずお読み下さい。
> ■ マルチポストについて
>
> マルチポストとは、「同じ内容の質問などを複数の掲示板等に書き込むこと」です。
> この行為はマナー違反として嫌われています。マルチポストは行わないで下さい。
>
>
> 誤ってマルチポストしてしまった場合には、必ず全ての掲示板にどのように
> 解決したかを記述し、かつお礼を書き込んで下さい。
ついでなので。
> Windows Vista(32ビット版)上で動作する
> MFCアプリケーションを作成しています。
環境の情報が不足していると思います。
Windows Vistaはまだ、一般に正式リリースされておらず、現状はβ版等であり、
配布時期等によりシステムの状況が異なっていると思います。
今回のWindowsのバージョンアップに関しては、システム部分の変更もかなりあるようなので、
どの段階のバージョンかによって、システム周辺の動作も異なる可能性がありそうです。
#すいません。Vista関係の情報はもっておりません。
#βテスターの不具合報告等をおこなっているところでたずねるしかないのでは?
http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=300494&SiteID=7
> マルチポストとは、「同じ内容の質問などを複数の掲示板等に書き込むこと」です。
> この行為はマナー違反として嫌われています。マルチポストは行わないで下さい。
同時に3つ以上とは..........
#msがNEWS以外に掲示板の行ってたとは知りませんでした。
修正
正
#msがNEWS以外に掲示板もおこなってたとは知りませんでした。