CreateFile() を呼び出して、Program Data ディレクトリにファイルを作成しています。ディレクトリ名を取得するために SHGetSpecialFolderPath() を使用しています。
CreateFile() がエラー 5 (アクセスが拒否されました) を返す Vista のユーザーがいます。CreateFile() が実際にファイルを作成しようとした場所を知っていれば、フォルダーのアクセス許可を確認できるので助かります。Vista (UAC) の問題は、渡されたディレクトリにファイルを作成しようとしていないことです。VirtualStore ディレクトリにある可能性もあります。追加の混乱の原因は、このユーザーがドイツ人であることです。SHGetSpecialFolderPath() はパスとして「C:\Program Data\blah blah」を返しますが、パスが実際にどこにあるかはわかりません。ドイツ語の Vista では、「プログラム データ」のドイツ語を使用していると思います。ユーザーに「これは、ファイルを作成しようとしている正確なパスです。このフォルダーに対するアクセス許可を確認してください。」
開いているファイル ハンドルからパスを取得できることはわかっていますが、この場合は CreateFile() が失敗しているため、開いているハンドルがありません。ファイルを作成しようとしている実際のパスを Vista に教えてもらうにはどうすればよいですか?