7

C:\ ドライブのルート (例: ) などの保護された場所にファイルを作成しようとすると、プログラムでエラーがスローされるようにしたいと考えていますFILE* FileHandle = fopen("\\file.txt", a)。代わりに、ファイルは %APPDATA% の下の仮想ストアに作成されます。

その仮想ストアを無効にするにはどうすればよいですか?

ありがとう

編集: 明確にするために、セキュリティを回避して保護された場所にファイルを作成する方法を尋ねているわけではありません。ファイルの作成を失敗させて、ユーザーに彼がばかだったことを伝えることができるようにします。

4

3 に答える 3

17

アプリケーション マニフェストを追加します。asInvoker、highestAvailable、または requireAdministrator を選択します。asInvoker が必要なようです。

http://msdn.microsoft.com/en-us/library/bb756929.aspxから:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  <assemblyIdentity version="1.0.0.0"
     processorArchitecture="X86"
     name="IsUserAdmin"
     type="win32"/> 
  <description>Description of your application</description> 
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
  </trustInfo>
</assembly>
于 2011-01-18T23:11:44.977 に答える
6

MSDNから:

仮想化は以下に対してのみ有効です。

  • 32 ビットの対話型プロセス
  • 管理者が書き込み可能なファイル/フォルダーとレジストリ キー

次の仮想化は無効になっています。

  • 64 ビット プロセス
  • 非対話型プロセス
  • 偽装するプロセス
  • カーネル モードの呼び出し元
  • requestedExecutionLevel を持つ実行可能ファイル

Adam Maras が指摘したように、最善の策は、マニフェストを追加してアプリケーションに requestedExecutionLevel を設定することです。"asInvoker" の requestedExecutionLevel は、仮想ストアへのリダイレクトや昇格のプロンプトではなく、保護された場所でのファイル操作の失敗を引き起こします。

于 2011-01-19T21:07:33.710 に答える
3

これは、仮想化をオフにする方法を示す記事です。

http://www.interworks.com/blogs/dsmith/2011/09/21/disabling-windows-7-virtual-store

それの短いです:

- Windows 7 のスタート オーブから、ローカル セキュリティ ポリシーを検索して選択します。

-[ローカル ポリシー] を展開し、[セキュリティ オプション] をクリックします。右側のペインで、一番下までスクロールすると、「ユーザー アカウント制御: ユーザーごとの場所へのファイルとレジストリの書き込みエラーを仮想化する」という設定が見つかります。その設定をダブルクリックして、無効に変更します。

于 2013-12-29T23:14:29.270 に答える