CopyFileAを呼び出すことによってファイルをC:\ windows \ system32にコピーしようとしています - デバッグでは実際に "C:\ windows \ system32 \ filename"という文字列がCopyFileAに送信されますが、 :\ windows \ system32 \ sysWOW64 \ filename "と入力します。誰がなぜそれが起こるのか知っていますか?なぜsystem32へのコピーが自動的にsysWOW64にコピーされるのですか?
6
A
答えて
5
64ビットWindowsでは、Windowsは32ビットプロセスのファイルシステムリダイレクトを行います。無効にするにはWow64DisableWow64FsRedirection
アプリを32ビットWindows XPでも実行するには、実行時にWow64DisableWow64FsRedirectionを動的にリンクする必要があります。ここ は、私が使用するコードです:
BOOL DisableWow64FsRedirection(PVOID* OldValue)
{
#ifdef WIN64
UNREFERENCED_PARAMETER(OldValue);
return TRUE;
#else
typedef BOOL (WINAPI * LPWOW64DISABLEWOW64FSREDIRECTION)(PVOID *);
LPWOW64DISABLEWOW64FSREDIRECTION fnWow64DisableWow64FsRedirection;
HMODULE kernelMod;
BOOL success = TRUE;
kernelMod = GetModuleHandleW(L"kernel32");
if (kernelMod)
{
fnWow64DisableWow64FsRedirection = (LPWOW64DISABLEWOW64FSREDIRECTION)GetProcAddress(kernelMod, "Wow64DisableWow64FsRedirection");
if (fnWow64DisableWow64FsRedirection)
success = fnWow64DisableWow64FsRedirection(OldValue);
}
return success;
#endif
}
BOOL RevertWow64FsRedirection(PVOID OldValue)
{
#ifdef WIN64
UNREFERENCED_PARAMETER(OldValue);
return TRUE;
#else
typedef BOOL (WINAPI * LPWOW64REVERTWOW64FSREDIRECTION)(PVOID);
LPWOW64REVERTWOW64FSREDIRECTION fnWow64RevertWow64FsRedirection;
HMODULE kernelMod;
BOOL success = TRUE;
kernelMod = GetModuleHandleW(L"kernel32");
if (kernelMod)
{
fnWow64RevertWow64FsRedirection = (LPWOW64REVERTWOW64FSREDIRECTION)GetProcAddress(kernelMod, "Wow64RevertWow64FsRedirection");
if (fnWow64RevertWow64FsRedirection)
success = fnWow64RevertWow64FsRedirection(OldValue);
}
return success;
#endif
}
+0
もう1つの解決策は、アプリケーションを64ビットとして構築することです。どちらが好ましいかは、文脈によって異なる。 –
2
オペレーティングシステムを確認したいだけならば、それをチェックして、フォルダのSYSTEM32が似ているアクセス:これにより
string os = Environment.GetEnvironmentVariable("WINDIR") + "\\SysWOW64";
if (Directory.Exists(os))
{
destinationDir = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "sysnative\\");
}
あなたがファイルをコピーすることができますsystem32フォルダー。
は、楽しみなさい: アリラザ
1
このソリューションは、私にとっては良さそうです: クレジットをビーヴァンコリンズに。
BOOL changeWow64Redirection(PVOID& param, BOOL toDisable = true)
{
#ifdef WIN64
UNREFERENCED_PARAMETER(OldValue);
return TRUE;
#else
typedef BOOL (WINAPI * LPWOW64CHANGEWOW64FSREDIRECTION)(PVOID *);
LPWOW64CHANGEWOW64FSREDIRECTION fnWow64ChangeWow64FsRedirection;
HMODULE kernelMod;
BOOL success = FALSE;
kernelMod = GetModuleHandle(_T("kernel32"));
if (kernelMod)
{
if (toDisable)
fnWow64ChangeWow64FsRedirection = (LPWOW64CHANGEWOW64FSREDIRECTION)GetProcAddress(kernelMod, "Wow64DisableWow64FsRedirection");
else
fnWow64ChangeWow64FsRedirection = (LPWOW64CHANGEWOW64FSREDIRECTION)GetProcAddress(kernelMod, "Wow64RevertWow64FsRedirection");
if (fnWow64ChangeWow64FsRedirection)
success = fnWow64ChangeWow64FsRedirection(¶m);
}
return success;
#endif //WIN64
}
関連する問題
- 1. Installerを介してINFをインストールする際にSystem32の代わりにSysWOW64にファイルがコピーされる
- 2. Sharepointワークフローへのコピーが正しく自動的に実行されない
- 3. Hadoop - HDFSへのコピー時に自動的にデータのバランスが取れますか?
- 4. C#File.Copy()を使用してファイルを%systemroot%\ system32にコピーします。その結果、ファイルは%systemroot%\ SysWOW64にコピーされていますか?
- 5. Excel VBAのコピー行が自動的に
- 6. windows/System32またはwindows/SysWOW64
- 7. ビットマップファイルをWindows system32ディレクトリのサブディレクトリにコピーするのにxcopyコマンドが機能しないのはなぜですか?
- 8. なぜdbを文書フォルダにコピーするのにコードを使用するのですか?Xcodeは自動的にdbをコピーし、それは空ですか?
- 9. 64ビットOS上でSystem32にファイルをコピー
- 10. Linuxのbashで自動的にusbにファイルをコピーする
- 11. System32 DLLにアクセスできない場合のMSVCR120.dllのコピー
- 12. Eclipse:クリップボードへの自動コピーの選択
- 13. クリップボードへの自動コピーActionscript 3.0
- 14. ローカルからHadoopにファイルを自動的にコピーする
- 15. Sheet1のSheet2からSheet1のカスタムセルに自動的にコピー
- 16. C#プログラムの起動時に、Debugフォルダにコピーされたファイルが自動的に削除されます。
- 17. std :: threadなぜオブジェクトが2回コピーされるのですか?
- 18. AWS - スナップショットを別の領域に自動的にコピーする
- 19. ウェブサイトアドレスのURLを自動的にコピーするには
- 20. Googleシートで自動的に数式をコピーするには
- 21. SQL:あるデータベースのレコードを別のデータベースに自動的にコピー
- 22. javascriptの自動コピー
- 23. 数値が自動的に倍にキャストされるのはなぜですか?
- 24. WordPressにメニューが自動的に表示されるのはなぜですか?
- 25. 自動的にコピーするときにURLを追加する
- 26. コンパイラは自動的にブロックプロパティをヒープにコピーしますか?
- 27. USBデータをデスクトップに自動的にコピーするには?
- 28. 自動ハイライト/コピー
- 29. ファイルの内容がtarファイルにコピーされないのはなぜですか?
- 30. アプリのデータベースがアンドロイドデバイスにコピーされないのはなぜですか?
1.おそらくファイルをコピーしてはいけません。 2.おそらく、32ビットアプリケーションが32ビットDLLを64ビットsystem32から保護するためのリダイレクトです。 –