[C] system32 경로 syswow64로 리다이렉트 되지 않도록 하는 예제 코드

출처 - http://www.codeproject.com/tips/55290/Disabling-Windows-file-system-redirection-on-a-CFi.aspx

https://github.com/MoongStory/WindowsController
int _tmain()
{
	FILE *fp = NULL;
	BOOL bOpenFile = TRUE;

	PVOID oldValue;

	Wow64DisableWow64FsRedirection(&oldValue);
	fp = _tfopen(SYSTEM32_FILE_PATH, _T("r") );
	Wow64RevertWow64FsRedirection(&oldValue);

	if(fp == NULL){
		_tprintf(_T("fp is null.\n"));
	}
	else{
		_tprintf(_T("fp is not null.\n"));
		fclose(fp);
	}

	return EXIT_SUCCESS;
}

typedef BOOL (WINAPI *FWOW64DISABLEWOW64FSREDIRECTION)(PVOID *);
typedef BOOL (WINAPI *FWOW64REVERTWOW64FSREDIRECTION)(PVOID);

FWOW64DISABLEWOW64FSREDIRECTION fWow64DisableWow64FsRedirection = NULL;
FWOW64REVERTWOW64FSREDIRECTION fWow64RevertWow64FsRedirection = NULL;
HMODULE hMod = NULL;
PVOID pOldValue = NULL;

hMod = GetModuleHandle("Kernel32.dll");
if( !hMod )
{
	printf("GetModuleHandle : %d\n", GetLastError());

	return 0;
}

fWow64DisableWow64FsRedirection = (FWOW64DISABLEWOW64FSREDIRECTION)GetProcAddress(hMod, "Wow64DisableWow64FsRedirection");
if( fWow64DisableWow64FsRedirection )
{
	// Disable Redirection
	if( !fWow64DisableWow64FsRedirection(&pOldValue) )
	{
		printf("fWow64DisableWow64FsRedirection : %d\n", GetLastError());

		return 0;
	}
}



fWow64RevertWow64FsRedirection = (FWOW64REVERTWOW64FSREDIRECTION)GetProcAddress(hMod, "Wow64RevertWow64FsRedirection");
if( fWow64RevertWow64FsRedirection )
{
	// Revert Redirection
	if( !fWow64RevertWow64FsRedirection(&pOldValue) )
	{
		printf("fWow64RevertWow64FsRedirection : %d\n", GetLastError());

		return 0;
	}
}

댓글

이 블로그의 인기 게시물

[NSIS] 32비트와 64비트 모듈 등록하는 법. (regsvr32)

[Visual Studio] Windows 7 에서 Visual Studio 6.0 디버그 시 프로세스 좀비되는 증상 해결 방법