MoveFileEx : BOOL MoveFileEx(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, DWORD dwFlags);
MoveFile과 마찬가지로 파일이나 디렉토리를 다른 위치로 옮기되 세부적인 동작에 대해 몇가지 플래그를 지정할 수 있다는 점이 다르다. 특히 재부팅할 때 실제로 파일을 옮겨 주는 기능은 설치 프로그램이 이미 사용중인 DLL을 교체하는 용도로 자주 사용된다. 이 함수는 다음 부팅시 이동할 파일을 레지스트리의 다음 위치에 기록해 놓는다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
이 값은 복수개의 널 종료 문자열로 구성되는 REG_MULTI_SZ 타입으로 되어 있으며 이동 대상이 되는 파일 목록을 가진다. 재부팅할 때 AUTOCHK 후 이 레지스트리에 기록된 대로 파일을 이동시키는데 이 때는 페이징 파일도 생성되기 전이므로 페이징 파일까지도 삭제할 수 있다.
단 재부팅 시 파일 이동은 NT/2000 이상에서만 지원되며 95/98에서는 이 기능을 사용할 수 없다. 대신 WinInit.ini 파일에 이동할 파일이나 디렉토리를 적어주면 되다. 이 파일의 [rename]섹션에 "대상=원본" 형식으로 엔트리를 작성해 놓으면 파일명이 변경된다. 단, 이 동작은 운영체제가 보호 모드로 들어가기 전에 이루어지므로 파일명은 반드시 짧은 이름으로 작성해야 한다. 파일명을 변경한 후 시스템은 WinInit.ini를 WinInit.bak로 변경하여 이 파일을 무효화시킨다.
재부팅시 파일을 교체하는 방법이 운영체제 버전에 따라 상이하므로 GetVersionEx 함수로 운영체제의 버전을 판변한 후 적절한 방법을 사용해야 한다.

AND