C ++プログラムのVirtualStoreを無効にする方法は?
-
12-10-2019 - |
質問
C: Driveのルートなどの保護された場所でファイルを作成しようとしたときに、私のプログラムをスローしたいです(例: FILE* FileHandle = fopen("\\file.txt", a)
)。代わりに、ファイルは%AppData%の下の仮想ストアで作成されます。
その仮想ストアを無効にするにはどうすればよいですか?
ありがとう
編集:明確にするために、セキュリティを回避し、保護された場所でファイルを作成する方法を尋ねていません。ファイルの作成に失敗したいので、ユーザーに彼がばかだったと伝えることができます。
解決
アプリケーションマニフェストを追加します。 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>
他のヒント
から MSDN:
仮想化は次のように有効になります。
- 32ビットインタラクティブプロセス
- 管理者の書き込み可能なファイル/フォルダーとレジストリキー
仮想化が無効になっています:
- 64ビットプロセス
- 非対話プロセス
- なりすましするプロセス
- カーネルモード発信者
- RequestedExecutionLevelを持つ実行可能ファイル
Adam Marasが指摘したように、あなたの最善の策は、マニフェストを追加して、アプリケーションにRequiredExecutionLevelを設定することです。 「asinvoker」の要求の解決策は、仮想ストアにリダイレクトしたり、標高を求めたりするのではなく、保護された場所でファイル操作に失敗します。
仮想化をオフにする方法を示す記事を以下に示します。
http://www.interworks.com/blogs/dsmith/2011/09/21/disabling-windows-7-virtual-store
それ以外は次のとおりです。
- Windows 7からORBを開始し、ローカルセキュリティポリシーを検索して選択します。
- ローカルポリシーを拡張し、セキュリティオプションをクリックします。右ペインには、下までずっとスクロールすると、「ユーザーアカウントコントロール:ファイルとレジストリの障害をユーザーごとに書き留める」という設定があり、その設定をダブルクリックして無効に変更します。