다음을 통해 공유


SetDefaultDllDirectories 함수(libloaderapi.h)

호출 프로세스가 DLL을 로드할 때 검색할 기본 디렉터리 집합을 지정합니다. 이 검색 경로는 LOAD_LIBRARY_SEARCH 플래그 없이 LoadLibraryEx를 호출할 때 사용됩니다.

구문

BOOL SetDefaultDllDirectories(
  [in] DWORD DirectoryFlags
);

매개 변수

[in] DirectoryFlags

검색할 디렉터리입니다. 이 매개 변수는 다음 값의 조합일 수 있습니다.

의미
LOAD_LIBRARY_SEARCH_APPLICATION_DIR
0x00000200
이 값을 사용하면 애플리케이션의 설치 디렉터리가 검색됩니다.
LOAD_LIBRARY_SEARCH_DEFAULT_DIRS
0x00001000
이 값은 LOAD_LIBRARY_SEARCH_APPLICATION_DIR, LOAD_LIBRARY_SEARCH_SYSTEM32LOAD_LIBRARY_SEARCH_USER_DIRS 조합합니다.

이 값은 애플리케이션이 DLL 검색 경로에 포함해야 하는 권장되는 최대 디렉터리 수를 나타냅니다.

LOAD_LIBRARY_SEARCH_SYSTEM32
0x00000800
이 값을 사용하면 %windows%\system32가 검색됩니다.
LOAD_LIBRARY_SEARCH_USER_DIRS
0x00000400
이 값을 사용하면 AddDllDirectory 또는 SetDllDirectory 함수를 사용하여 명시적으로 추가된 모든 경로가 검색됩니다. 둘 이상의 디렉터리가 추가된 경우 해당 디렉터리를 검색하는 순서는 지정되지 않습니다.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

DLL 검색 경로는 LoadLibrary 또는 LoadLibraryEx 함수 호출에서 전체 경로를 지정하지 않았거나 DLL에 대한 전체 경로가 지정되었지만 시스템에서 종속 DLL을 검색해야 하는 경우 DLL을 검색하는 디렉터리 집합입니다. 표준 DLL 검색 경로에 대한 자세한 내용은 Dynamic-Link 라이브러리 검색 순서를 참조하세요.

표준 DLL 검색 경로에는 DLL 사전 로드 공격에 취약할 수 있는 디렉터리를 포함합니다. 애플리케이션은 SetDefaultDllDirectories 함수를 사용하여 가장 취약한 디렉터리를 제거하고 검색되는 다른 디렉터리를 제한하는 프로세스에 대한 기본 DLL 검색 경로를 지정할 수 있습니다. 프로세스 DLL 검색 경로는 호출 프로세스에만 적용되며 프로세스 수명 동안 유지됩니다.

DirectoryFlags 매개 변수가 둘 이상의 플래그를 지정하는 경우 디렉터리가 다음 순서로 검색됩니다.

  • DLL(LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR)이 포함된 디렉터리입니다. 이 디렉터리가 로드되는 DLL의 종속성에 대해서만 검색됩니다.
  • 애플리케이션 디렉터리(LOAD_LIBRARY_SEARCH_APPLICATION_DIR)입니다.
  • AddDllDirectory 함수(LOAD_LIBRARY_SEARCH_USER_DIRS) 또는 SetDllDirectory 함수를 사용하여 애플리케이션 검색 경로에 명시적으로 추가된 경로입니다. 둘 이상의 경로가 추가된 경우 경로를 검색하는 순서가 지정되지 않습니다.
  • 시스템 디렉터리(LOAD_LIBRARY_SEARCH_SYSTEM32)입니다.
SetDefaultDllDirectoriesLOAD_LIBRARY_SEARCH_USER_DIRS 지정하지 않으면 AddDllDirectory 함수로 지정된 디렉터리는 LOAD_LIBRARY_SEARCH_USER_DIRS 지정하는 LoadLibraryEx 함수 호출에만 사용됩니다.

표준 DLL 검색 경로에 되돌리기 또는 검색 경로에서 SetDefaultDllDirectories로 지정된 디렉터리를 제거할 수 없습니다. 그러나 하나 이상의 LOAD_LIBRARY_SEARCH 플래그를 사용하여 LoadLibraryEx를 호출하여 프로세스 DLL 검색 경로를 재정의할 수 있으며 RemoveDllDirectory를 호출하여 AddDllDirectory로 추가된 디렉터리를 제거할 수 있습니다.

Windows 7, Windows Server 2008 R2, Windows Vista 및 Windows Server 2008: 애플리케이션에서 이 함수를 호출하려면 GetProcAddress 함수를 사용하여 Kernel32.dll 주소를 검색합니다. 대상 플랫폼에 KB2533623을 설치해야 합니다.

요구 사항

   
지원되는 최소 클라이언트 Windows 8 [데스크톱 앱만 해당], Windows 7의 KB2533623, Windows Server 2008 R2, Windows Vista 및 Windows Server 2008
지원되는 최소 서버 Windows Server 2012 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 libloaderapi.h(Windows.h 포함)
DLL Kernel32.dll

참고 항목

AddDllDirectory

동적 연결 라이브러리 검색 순서

Dynamic-Link 라이브러리 보안

LoadLibrary

LoadLibraryEx

RemoveDllDirectory