none
Windows 7 CreateFileで作ったファイルは鍵があるし、権限がないし、ファイルマッピングできない RRS feed

  • 質問

  • VC++6.0で開発したアプリサービスは、CreateFileでファイル生成し、CreateFileMappingでファイルマッピングなどの機能がある、XP上でうまくなります。けど、Windows 7 で CreateFile作ったファイルは鍵があるし、権限がない、CreateFileMappingもうまくなりませんです、だれか有識者が教えて頂けませんか、お先に有難うございます。
    2010年1月19日 0:57

回答

  • User Account Control(UAC)でしたら、以下を参照し、
    自分のApplicationが該当するか判断してください。

    [User Account Control]
      http://msdn.microsoft.com/en-us/library/aa511445.aspx

    [Teach Your Apps To Play Nicely With Windows Vista User Account Control]
      http://msdn.microsoft.com/en-us/magazine/cc163486.aspx

    ちなみに、VC++ 6.0だと、Manifestを簡単に埋め込むことができません。
    IDEをより新しいものに変更するなど、検討が必要になります。

    2010年1月19日 6:17
  • 言葉の使い方の特徴から、中国か韓国籍の方ではないかと思います。中文ハングルといった、ご自分の言語で質問される方がよいのではないでしょうか。


    まず、「アプリサービス」とは、なんでしょう?「Windows Service アプリケーション」ではないでしょうか。

    そう仮定して、最大限好意的に解釈すると、質問内容は次のようになりますか。

    VC++6.0 で、Windows Service アプリケーションを開発しました。このサービスの中で、CreateFile 関数にてファイルを生成し、他の Windows Form アプリケーションとファイル マップド メモリによる通信を行おうとしています。しかし、Windows 7 上で、サービスが作成したファイルには、Windows Explorer で見ると鍵のアイコンが追加で現れ、アプリケーションから開くことが出来ません。開こうとすると、ERROR_ACCESS_DENIED が出ます。XP では、この方法で出来ていました。Windows 7 にて、実現する方法を教えてください。


    質問がこの通りだと仮定して、答えます。

    Windows サービスは、デフォルトの設定では「ローカル システム アカウント」で起動します。そして、普通は、どの様なファイルも、ファイルを作ったアカウント(と同等以上の権限を持ったアカウント)にしか変更する権利を与えません。いわゆる「管理者」は、Windows Vista より、「管理者になることが出来るアカウント」に格下げされています。このため、ローカル システム アカウントにしか変更出来ないファイルを変更のために開くことが出来ません。

    これを解決するには、マッピングに使うファイルを Public の下に作る、明示的に他のアカウントに対して書き込み権を与える、Windows アプリケーションを昇格して実行する、といった事を行います。


    Jitta@わんくま同盟
    2010年1月19日 12:17

すべての返信

  • 質問したい事が書かれていないのですが、何をお聞きになりたいのでしょう?

    Windows 7でなぜうまく行かないのかを知りたいのですか?

    もしそうならば、UAC等で調べて見られてはどうかと思います。
    Vista以降は権限の管理が厳しくなっているのでXPと同じ感覚ではうまく行かない事が多いです。

    解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
    2010年1月19日 1:56
  • すみません、質問は「XPに作ったファイルは鍵がない(アクセス権限がある)、ファイルマッピングはOKです、けど、WINDOWS7上、作ったファイルは鍵が付けてあるし、ファイルマッピングはエラーになりました。WINDOWS7上はXPと同じ動くよう方法は教えて頂けませんか?」 実行ユーザはAdministratorです。いろいろUACなど調査しましたが、手がかりがまだありませんでした。すみません、まだ教えていただきたいんです、どうぞよろしくお願いいたします。

    2010年1月19日 2:31
  • 何かを教えてほしいということは伝わりますが、何を教えてほしいのかがさっぱりわかりません。
    また、急急急さんの言う「鍵」は一般に何と呼ばれるものなのかも想像がつきません。
    2010年1月19日 2:52
  • 用語についてはWindowsで用いられる一般的な用語を使わないと内容を伝えるのによけいなやり取りが必要になってしまいます。
    アクセス権限の有無の事を言っているのであれば、直接そう書いてください。
    鍵が付けてあるという表現に特別な意味があるのであれば、それを説明してください。

    アクセス権限が無いのであれば、Create出来ないのも、マッピングできないのも不思議では無いと思います。
    きちんと権限がある状態でCreateすれば、マッピングもできるのではないかと思うのですけれど、
    その方法が解らないと言う事なんでしょうか?

    わからないと言う状況と教えてほしいと言う気持ちは伝わりますけれど、
    それだけでは答えようが有りません。
    掲示板は文字だけのやり取りになりますから御本人が書かれた内容だけが頼りになります。
    自分の置かれた状況が目の前にいない事情を知らない人にも伝わるように頭の中でよく整理して
    書くようにしてみてください。
    掲示板では御本人が書いていない内容は相手には全く伝わらないと言う事をよく理解して説明をしてみてください。

    解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
    • 編集済み PATIO 2010年1月19日 5:17 追記
    2010年1月19日 5:11
  • User Account Control(UAC)でしたら、以下を参照し、
    自分のApplicationが該当するか判断してください。

    [User Account Control]
      http://msdn.microsoft.com/en-us/library/aa511445.aspx

    [Teach Your Apps To Play Nicely With Windows Vista User Account Control]
      http://msdn.microsoft.com/en-us/magazine/cc163486.aspx

    ちなみに、VC++ 6.0だと、Manifestを簡単に埋め込むことができません。
    IDEをより新しいものに変更するなど、検討が必要になります。

    2010年1月19日 6:17
  • 言葉の使い方の特徴から、中国か韓国籍の方ではないかと思います。中文ハングルといった、ご自分の言語で質問される方がよいのではないでしょうか。


    まず、「アプリサービス」とは、なんでしょう?「Windows Service アプリケーション」ではないでしょうか。

    そう仮定して、最大限好意的に解釈すると、質問内容は次のようになりますか。

    VC++6.0 で、Windows Service アプリケーションを開発しました。このサービスの中で、CreateFile 関数にてファイルを生成し、他の Windows Form アプリケーションとファイル マップド メモリによる通信を行おうとしています。しかし、Windows 7 上で、サービスが作成したファイルには、Windows Explorer で見ると鍵のアイコンが追加で現れ、アプリケーションから開くことが出来ません。開こうとすると、ERROR_ACCESS_DENIED が出ます。XP では、この方法で出来ていました。Windows 7 にて、実現する方法を教えてください。


    質問がこの通りだと仮定して、答えます。

    Windows サービスは、デフォルトの設定では「ローカル システム アカウント」で起動します。そして、普通は、どの様なファイルも、ファイルを作ったアカウント(と同等以上の権限を持ったアカウント)にしか変更する権利を与えません。いわゆる「管理者」は、Windows Vista より、「管理者になることが出来るアカウント」に格下げされています。このため、ローカル システム アカウントにしか変更出来ないファイルを変更のために開くことが出来ません。

    これを解決するには、マッピングに使うファイルを Public の下に作る、明示的に他のアカウントに対して書き込み権を与える、Windows アプリケーションを昇格して実行する、といった事を行います。


    Jitta@わんくま同盟
    2010年1月19日 12:17