Windows NT는 32-비트와 16-비트 응용프로그램에대해 다른 접근 방법을 사용한다. Windows NT는 읽혀진 DLL 파일을 다음 디렉토리에서 검색한다.
- .exe 파일의 디렉토리
- 현재 디렉토리
- %SystemRoot%\SYSTEM32 디렉토리
- %SystemRoot% 디렉토리
- 경로에 등록된 디렉토리
만약 이 DLL이
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager
레지스트리의 KnownDLLs에 열거되어 였다면(REG_SZ형으로 확장자가 없는 DLL의 이름을 값으로, 확장자가 있는 DLL의 이름을 데이타의 값으로 하는), 다음 디렉토리를 검색한다.
- %SystemRoot%\SYSTEM32 디렉토리
- .exe 파일의 디렉토리
- 현재 디렉토리
- %SystemRoot% 디렉토리
- 경로에 등록된 디렉토리
KnownDLLs은 부트시 매핑된다. 따라서 임의의 세션동안 이름을 변경하고, 이동시키는 것은 어떠한 영향도 미치지 못한다.
ExcludeFromKnownDlls 항목(REG_MULTI_SZ 형의 값이며, 행당 한 항목씩)에 8.3 DLL 이름을 포함 시킴으로서 이러한 특징을 변경할 수 있다. 이 것으로 NT는 이 DLL이 KnownDLLs에 열거되지 않은 것으로 믿게된다.
16-비트 응용 프로그램의 경우, Windows NT는 함축적, 명시적으로 읽혀진 DLL 모두 KnownDLLs를 사용한다. 값은
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\WOW
에 존재한다. 이 키에서 KnownDLLs은 REG_SZ 형으로 공백으로 분리된 8.3 DLL의 이름을 포함한다. KnownDLLs 항목에 없으면 WOW는 다음 디렉토리를 검색한다.
- 현재 디렉토리
- %SystemRoot% 디렉토리
- %SystemRoot%\SYSTEM 디렉토리
- %SystemRoot%\SYSTEM32 디렉토리
- .exe 파일의 디렉토리
- 경로에 등록된 디렉토리
KnownDLLs 항목에 존재하면, WOW는 단지 %SystemRoot%\SYSTEM32 디렉토리만 검색한다.
댓글: