CopyFileA를 호출하여 C : \ windows \ system32로 파일을 복사하려고합니다. "C : \ windows \ system32 \ filename"문자열이 실제로 CopyFileA로 전송되지만 내 파일은 "C : \ windows \ system32 \ sysWOW64 \ filename "대신 사용하십시오. 아무도 왜 그런 일이 일어날 지 알고 있습니까?왜 system32로 복사하면 대신 자동으로 sysWOW64로 복사됩니까?
6
A
답변
5
64 비트 Windows에서 Windows는 32 비트 프로세스 용 파일 시스템 리디렉션을 수행합니다. 사용을 중지하려면 Wow64DisableWow64FsRedirection
앱을 32 비트 Windows XP에서도 실행하려면 런타임에 Wow64DisableWow64FsRedirection을 동적으로 연결해야합니다. 이로써
string os = Environment.GetEnvironmentVariable("WINDIR") + "\\SysWOW64";
if (Directory.Exists(os))
{
destinationDir = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "sysnative\\");
}
당신이에서 파일을 복사 할 수 있습니다 : 당신이 다음 운영 체제를 확인을 확인하고 폴더 system32를 같은입니다 액세스 할 간단히 경우
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
다른 솔루션은 물론 애플리케이션을 64 비트로 빌드하는 것입니다. 어떤 것이 문맥에 의존하는 것이 바람직합니다. –
2
: 여기 내가 사용하는 코드입니다 system32 폴더에 있습니다.
는 즐기십시오 : 알리 라자
1
이 솔루션은 나를 위해 더 나은 것 같다 신용 Bevan에 콜린스에.
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. SVN 트렁크를 지점으로 복사하면 트렁크 폴더도 너무 복사됩니까?
- 2. 왜 대신 +
- 3. 왜 컴파일러가 자동으로 자유롭게 정의 된 함수를 인라인하지 않습니까? 대신
- 4. MySQL 인덱스가 자동으로 비활성화됩니다 - 왜?
- 5. 왜 2가 자동으로 299로 변환됩니까?
- 6. 왜 자식 대신 darcs가 필요합니까?
- 7. 왜 unordered_set 대신 set을 사용합니까?
- 8. 왜 TestClass 대신 testFixture가 필요한가요?
- 9. 왜 retainCount가 1 대신 0입니까?
- 10. 왜 마이너스 대신 System.Threading.Interlocked.Decrement를 사용합니까?
- 11. 왜 형식 대신 var을 사용해야합니까?
- 12. C++에서 포인터를 전달해도 여전히 개체가 복사됩니까?
- 13. 임시 테이블을 선택할 때 데이터가 복사됩니까?
- 14. Symfony에서 결과 세트 대신 자동으로 쿼리 받기
- 15. ActiveRecord : 왜 자기. @ 대신 @ 대신 Model의 열 값에 액세스 하시겠습니까?
- 16. Documents 디렉토리로 파일을 복사하면 오류가 발생합니다.
- 17. 웹 사이트에서 텍스트를 복사하면 텍스트가 복사 된 상태로 링크가 연결됩니까?
- 18. Eclipse에서 "자동으로 빌드"가 왜 불가사의하게 비활성화됩니까?
- 19. 왜 Rhino.ServiceBus가 자동으로 모든 대기열을 생성하지 않습니까?
- 20. 왜 ActiveRecord는 가끔 상호 연관성을 자동으로 제공합니까?
- 21. 왜 수직 스크롤 막대가 자동으로 움직입니까?
- 22. 왜 Bing Maps의 VEMap.Find가 자동으로 실패하지 않습니까?
- 23. WAR 파일이 Tomcat에서 자동으로 왜 폭발합니까?
- 24. 왜 동시 프로그래밍을위한 Java 대신 Clojure
- 25. 왜 jQuery 대신 CakePhp AJAX 도우미를 사용합니까?
- 26. 왜 일부 사이트에서는 $ 대신 $ j로 jquery를 사용합니까?
- 27. 왜 컴파일러가 이것이 DataRow 대신 Object라고 생각합니까?
- 28. 왜 new 대신 GWT.create()를 사용합니까?
- 29. 왜 MySql API 대신 ActiveRecord를 사용합니까?
- 30. 왜 myMyInstance = nil 대신 myInstance = nil입니까?
1. 어쨌든 파일을 복사해서는 안됩니다. 2. 아마 64 비트 시스템 32에서 32 비트 DLL을 방지하기 위해 32 비트 응용 프로그램의 리디렉션 일 것입니다. –