Computer >> 컴퓨터 >  >> 시스템 >> Windows

Windows 10에서 LoadLibrary 함수 오류 STATUS_DLL_NOT_FOUND 원인과 해결 방법

이번 글에서는 Windows 10에서 가장(impersonate) 스레드에서 LoadLibrary 함수를 사용해 DLL을 로드할 때 STATUS_DLL_NOT_FOUND 오류가 반환되는 이유와, 이 문제를 해결하는 실질적인 방법을 알아보겠습니다.

가장(Impersonation)은 하나의 스레드가 자신을 소유한 프로세스와는 다른 보안 정보를 사용하여 실행될 수 있도록 하는 기능입니다. 주로 서버 애플리케이션이 클라이언트의 보안 컨텍스트를 대신하여 작업을 수행해야 할 때 활용됩니다.

STATUS_DLL_NOT_FOUND 오류란?

오류 코드 0xC0000135 – STATUS_DLL_NOT_FOUND

Windows 10 환경에서 LoadLibrary 함수를 통해 DLL(동적 연결 라이브러리)을 로드할 때, 프로세스 토큰 자체에 해당 DLL에 대한 접근 권한이 부여되어 있지 않으면 가장 스레드에서 "STATUS_DLL_NOT_FOUND" 오류 메시지가 표시됩니다.

오류가 발생하는 주요 원인

일반적으로 Windows 기반 운영 체제에서는 프로세스 토큰이 참조하는 DLL에 대한 접근 권한을 기본적으로 갖추고 있다고 가정합니다. 그러나 실제로는 이 가정이 깨지는 경우가 있으며, 특히 이전 버전의 Windows에 비해 Windows 10, Windows Server 2016, Windows Server 2019, Windows Server 버전 1909에서 이 문제가 더 자주 보고됩니다.

즉, 프로세스 토큰이 로드하려는 DLL 파일에 대한 읽기·실행 권한을 가지고 있지 않거나, 보안 소프트웨어나 잘못된 권한 설정으로 인해 접근이 차단된 경우 이 오류가 나타날 수 있습니다.

해결 방법

특정 프로그램 실행 시 이 오류가 발생한다면, 먼저 해당 소프트웨어를 제거한 후 재설치하여 문제가 해결되는지 확인해 보세요. 손상된 설치 파일이나 누락된 DLL이 원인인 경우에는 재설치만으로도 해결되는 경우가 많습니다.

다만 주목할 점은, 이 동작 자체는 Windows의 의도된 설계(by design)라는 사실입니다. 따라서 근본적인 우회 방법은 다음과 같습니다.

  • 프로세스가 로드하는 모든 실행 파일(EXE) 및 DLL에 대해 프로세스 토큰이 접근 권한을 갖도록 구성합니다.
  • DLL 파일의 NTFS 권한을 검토하여 해당 프로세스가 실행되는 계정에 읽기 및 실행 권한을 부여합니다.
  • 필요한 DLL이 시스템 경로 또는 애플리케이션 디렉터리에 올바르게 존재하는지 확인합니다.

Microsoft 역시 공식적으로 프로세스 토큰이 프로세스가 로드하는 모든 실행 파일에 대한 접근 권한을 확실히 보유하도록 설정할 것을 권장하고 있습니다.

이 글이 문제 해결에 도움이 되기를 바랍니다!