다음을 통해 공유


DisableThreadLibraryCalls 함수(libloaderapi.h)

지정된 DLL(동적 연결 라이브러리)에 대한 DLL_THREAD_ATTACH 및 DLL_THREAD_DETACH 알림을 사용하지 않도록 설정합니다. 이렇게 하면 일부 애플리케이션에 대한 작업 집합의 크기를 줄일 수 있습니다.

구문

BOOL DisableThreadLibraryCalls(
  [in] HMODULE hLibModule
);

매개 변수

[in] hLibModule

DLL_THREAD_ATTACH 및 DLL_THREAD_DETACH 알림을 사용하지 않도록 설정할 DLL 모듈에 대한 핸들입니다. LoadLibrary, LoadLibraryEx 또는 GetModuleHandle 함수는 이 핸들을 반환합니다. 를 사용하여 GetModuleHandleNULL 호출할 수 없습니다. 이는 DLL 이미지가 아닌 실행 파일 이미지의 기본 주소를 반환하기 때문입니다.

반환 값

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

함수가 실패하면 반환 값은 0입니다. hModule에 지정된 DLL에 활성 정적 스레드 로컬 스토리지가 있거나 hModule이 잘못된 모듈 핸들인 경우 DisableThreadLibraryCalls 함수가 실패합니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

DisableThreadLibraryCalls 함수를 사용하면 DLL이 DLL_THREAD_ATTACH 사용하지 않도록 설정하고 알림 호출을 DLL_THREAD_DETACH 수 있습니다. 이는 DLL이 많고, 스레드를 자주 만들고 삭제하며, DLL에 첨부/분리에 대한 이러한 스레드 수준 알림이 필요하지 않은 다중 스레드 애플리케이션에 대한 유용한 최적화일 수 있습니다. RPC(원격 프로시저 호출) 서버 애플리케이션은 이러한 애플리케이션의 예입니다. 이러한 종류의 애플리케이션에서 DLL 초기화 루틴은 종종 메모리에서 서비스 DLL_THREAD_ATTACH 및 DLL_THREAD_DETACH 알림에 남아 있습니다. 알림을 사용하지 않도록 설정하면 스레드가 만들어지거나 삭제되므로 DLL 초기화 코드가 페이징되지 않으므로 애플리케이션의 작업 코드 집합 크기가 줄어듭니다. 최적화를 구현하려면 DLL의 DLL_PROCESS_ATTACH 코드를 수정하여 DisableThreadLibraryCalls를 호출합니다.

정적 C CRT(런타임 라이브러리)에 연결된 DLL에서 이 함수를 호출하지 마세요. 정적 CRT를 사용하려면 DLL_THREAD_ATTACH 및 DLL_THREAD_DETATCH 알림이 제대로 작동해야 합니다.

정적 TLS(스레드 로컬 스토리지) 를 사용하는 경우 이 함수는 최적화를 수행하지 않습니다. 정적 TLS는 thread_local 변수, __declspec( 스레드 ) 변수 또는 함수 로컬 정적을 사용할 때 사용하도록 설정됩니다.

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 libloaderapi.h(Windows.h 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

동적 링크 라이브러리 Entry-Point 함수

동적 링크 라이브러리 함수

FreeLibraryAndExitThread

VBS Enclave에서 사용할 수 있는 Vertdll API