Microsoft Windows 라이브러리 파일

Microsoft Windows library files

Microsoft Windows operating system은, 「다이나믹 링크 라이브러리」라고 불리는 공유 라이브러리의 형태를 서포트하고 있습니다.이것은, 1개의 카피만이 메모리에 로드되고 있는 동안, 복수의 프로세스에서 사용할 수 있는 코드 라이브러리입니다.이 문서에서는 모든 최신 Windows 설치와 더불어 대부분의 Windows 응용 프로그램이 구축되어 있는 핵심 라이브러리의 개요를 설명합니다.

내부 컴포넌트

HAL.DLL은 커널 모드라이브러리 파일이며 사용자 모드프로그램에서는 사용할 수 없습니다.NTDLL.DLL은 일부 프로그램에서만 사용되지만 프로그램에서 사용되는 대부분의 Win32 라이브러리에 종속되어 있습니다.

HAL.DLL

Windows Hardware Abstraction Layer(HAL)는 hal.[1]dll로 구현됩니다.HAL은 다양한 하드웨어 플랫폼에 의해 다양한 방식으로 구현되는 많은 기능을 구현합니다.이러한 상황에서는 대부분 칩셋을 말합니다.운영체제 내의 다른 컴포넌트는 실제 구현에 관계없이 모든 플랫폼에서 동일한 방법으로 이러한 기능을 호출할 수 있습니다.

예를 들어 Advanced Programmable Interrupt Controller(APIC; Advanced Programmable Interrupt Controller)를 탑재한 머신에서는 인터럽트에 대한 응답이 없는 머신과 크게 다릅니다.HAL은 이 목적을 위해 다양한 칩셋에 의한 모든 종류의 인터럽트에 대해 동작하는 단일 기능을 제공하므로 다른 컴포넌트가 그 차이를 걱정할 필요가 없습니다.

HAL은 커널 주소 공간에 로드되어 커널 모드로 실행되므로 HAL 내의 루틴은 응용 프로그램에서 직접 호출할 수 없으며 HAL 루틴에 직접 대응하는 사용자 모드 API는 없습니다.대신 HAL은 주로 Windows 이그제큐티브와 커널 및 커널 모드 디바이스 드라이버에 서비스를 제공합니다.대부분의 하드웨어용 드라이버는 다른 파일(일반적으로 .sys 파일 형식)에 포함되어 있습니다만, 몇 개의 코어 드라이버는 hal.dll로 컴파일 되어 있습니다.

PCI 및 PCI Express 의 버스상의 디바이스용 커널 모드 디바이스 드라이버는 HAL 내의 루틴을 직접 호출하여 디바이스의 I/O 포트 및 레지스터에 액세스합니다.플랫폼에 따라 HAL 루틴을 사용해야 하는 경우가 있기 때문에 드라이버는 HAL 루틴을 사용합니다.HAL은 각 플랫폼에 대해 적절하게 작업을 구현하므로 동일한 CPU 아키텍처를 사용하는 모든 플랫폼에서 동일한 드라이버 실행 파일을 사용할 수 있으며 드라이버 소스 파일을 모든 아키텍처에서 이식할 수 있습니다.

x86 시스템에서는 설치 미디어에 몇 가지 다른 HAL 파일이 있습니다.Windows 의 인스톨 순서에서는, 현재의 플랫폼에 적절한 것을 특정해, HDD 에 카피하고, 필요에 따라서 이름을 hal.dll변경합니다.이 선택 기준으로는 ACPI 호환 BIOS의 존재 여부, APIC의 존재 여부, 여러 프로세서가 존재하여 활성화되어 있는지 여부 등이 있습니다.(멀티 코어 CPU의 복수 코어, 하이퍼스레딩 CPU에 의해 실장된 「논리 프로세서」도, 이 목적을 위해서 「프로세서」로 간주됩니다).x86-64Itanium 플랫폼에서는 각 CPU 아키텍처에 대해 hal.dll을 1개만 사용할 수 있습니다.

HAL은 Windows 10 버전 2004부터ntoskrnl.exe에[2] Marge(또는 스태틱 링크)되어 있으며 dll은 하위 호환성을 위한 stub 역할만 합니다.

NTDLL.DLL

NTDLL.DLL은 Windows Native API를 내보냅니다.Native API는 Win32 또는 기타 API 서브시스템에서 지원되지 않고 실행해야 하는 운영체제 사용자 모드컴포넌트에 의해 사용되는 인터페이스입니다.이 API의 대부분은 NTDLL로 구현되어 있습니다.DLLntoskrnl.exe의 위쪽 가장자리(및 그 바리안트)에는 NtDisplayString과 같이 대부분의 내보내기 심볼이 Nt 에 붙습니다.네이티브 API는 KERNAL32에 의해 내보낸 "커널 API" 또는 "베이스 API"의 많은 구현에도 사용됩니다.DLL.[3][4][5] 대부분의 Windows 응용 프로그램은 NTDLL을 호출하지 않습니다.DLL [6]다이렉트

이 라이브러리에 직접 링크되어 있는 애플리케이션은 네이티브 서브시스템을 사용하는 것으로 알려져 있습니다.그 주된 이유는 Win32 서브시스템을 사용하기 전에 시스템 부팅 시퀀스에서 초기에 실행해야 하는 태스크를 실행하기 위해서입니다.명백하지만 중요한 예로는 Win32 서브시스템 프로세스인 csrss.exe를 작성하는 것입니다.csrss 앞.exe 프로세스가 존재하기 때문에 Win32 프로세스를 생성할 수 없습니다.따라서 이 프로세스를 작성하는 프로세스(Smss.exe, "세션 매니저")는 네이티브 서브시스템을 사용해야 합니다.csrss.exe 자체가 그런 응용 프로그램입니다.

.exe 파일 확장자를 사용해도 사용자(또는 Win32 또는 기타 서브시스템 내의 프로그램)는 네이티브 애플리케이션을 실행할 수 없습니다.예를 들어 시스템 초기화 중에 chkdsk를 실행하는 autochk.exe 바이너리가 있습니다.기타 중요한 예로는 csrss.exe 등 다양한 서브시스템을 구현하는 서비스가 있습니다.

Win32응용 프로그램과 달리, 네이티브 응용 프로그램은 커널 런타임 코드(ntoskrnl.exe)이내로 Win32어플리케이션에서 발견된다 그래서 그들은),[4]메모리 내 구조체에 대한 포인터를 통해 그들의 명령줄 인수를 가져오는, 자신들의 기억 usin의 관리를 다른 진입점(NtProcessStartup보다는(w)(윈)MainCRTStartup이 있어야 한다 예를 들어 설명하다.gtRtl heap API(Win32 heap API는 랩퍼일 뿐 실제 차이는 없습니다) 및 NtTerminate Process에 대한 호출과 함께 실행을 반환합니다(Exit Process와는 반대).네이티브 어플리케이션과 링크되어 있는 일반적인 라이브러리는 nt.lib입니다.이 라이브러리에는 네이티브 어플리케이션의 스타트업 코드가 포함되어 있습니다.이것은 C 런타임에서 Win32 [7]어플리케이션의 스타트업 코드가 제공되는 것과 비슷합니다.

대부분의 API는 문서화되어 있지 않지만 Windows 드라이버 개발 키트를 사용하여 네이티브 애플리케이션을 구축할 수 있습니다.많은 안티바이러스 소프트웨어 및 기타 유틸리티 소프트웨어 벤더는 보통 사용자 [citation needed]공간에서 실행할 수 없는 부팅 시 태스크를 수행하기 위해 네이티브 애플리케이션을 자사 제품에 내장하고 있습니다.

Win32 API

이 섹션의 라이브러리는 각각 Win32 API의 다양한 서브셋을 구현합니다.

커널32.DLL

커널32.DLL은 메모리 관리, 입출력(I/O) 조작, 프로세스 스레드 작성, 동기화 기능 등 대부분의 Win32 기반 API를 애플리케이션에 제공합니다.이들 중 대부분은 KERNAL32 내에 구현되어 있습니다.NTDLL에 의해 공개되는 네이티브 API 내의 대응하는 함수를 호출하는 DLL.DLL.[8][failed verification]

GDI32.DLL

GDI32.DLL은 출력용 원시 그리기 기능을 수행하는 그래픽스 디바이스 인터페이스(GDI) 기능을 비디오 디스플레이 및 프린터로 내보냅니다.예를 들어 페인트의 XP 버전에서 사용됩니다.응용 프로그램은 GDI 함수를 직접 호출하여 낮은 수준의 그리기(선, 직사각형, 타원), 텍스트 출력, 글꼴 관리 및 유사한 [8][9]기능을 수행합니다.

처음에 GDI는 16색 및 256색 EGA/VGA 디스플레이 카드와 흑백 프린터를 지원했습니다.이 기능은 수년간 확장되어 TrueType 글꼴, 알파 채널, 다중 모니터 등의 [10]기능을 지원합니다.

USER32.DLL

USER32.DLL은 데스크톱, 창 및 메뉴와 같은 Windows 사용자 인터페이스의 표준 요소를 생성하고 조작하는 Windows USER 구성 요소를 구현합니다.따라서 프로그램에서 Windows의 모양과 느낌에 맞는 그래픽 사용자 인터페이스(GUI)를 구현할 수 있습니다.Windows USER에서 기능을 호출하여 윈도 작성 및 관리, 윈도 메시지(주로 마우스나 키보드이벤트 등 사용자 입력이지만 운영체제로부터의 알림) 수신, 윈도 텍스트 표시, 메시지박스 표시 등의 조작을 수행합니다.

USER32의 많은 기능.GDI32에 의해 내보낸 GDI 함수에 대한 DLL 호출.사용자 인터페이스의 다양한 요소를 실제로 렌더링하는 DLL.또한 일부 유형의 프로그램은 GDI 함수를 직접 호출하여 USER32 함수를 통해 이전에 생성된 창 내에서 하위 수준의 그리기 작업을 수행합니다.

COMCTL32.DLL

COMCTL32.DLL은 파일 열기, 저장 및 다른 이름으로 저장 대화 상자, 진행 표시줄 및 목록 보기와 같은 다양한 표준 윈도우즈 컨트롤을 구현합니다.양쪽 USER32에서 함수를 호출합니다.DLL 및 GDI32.DLL: 이러한 UI 요소의 창을 만들고 관리하고, 그 안에 다양한 그래픽 요소를 배치하고, 사용자 입력을 수집합니다.

COMDLG32.DLL

COMDLG32.DLL(Common Dialog Box Library)은 Microsoft가 '공통 응용 프로그램 태스크'로 간주하는 작업을 수행하기 위해 다양한 Windows 대화 상자를 구현합니다.Windows Vista 릴리스 이후 Microsoft는 이 라이브러리에서 제공되는 "열기" 및 "다른 이름으로 저장" 대화 상자를 더 이상 사용하지 않고 "공통 항목 대화 상자 API"[11]로 대체했습니다.

WS2_32.DLL

WS2_32.DLL은 TCP/IP 네트워킹 기능을 제공하고 다른 네트워크 API와의 부분적인 호환성을 제공하는 Winsock API를 구현합니다.wsock.dllwsock32.dll은 Win3.11 및 Win95 호환성의 오래된 버전입니다.

ADVAPI32.DLL

ADVAPI32.DLL은 Windows 레지스트리를 조작하기 위한 보안 호출 및 함수를 제공합니다.

NETAPI32.DLL

NETAPI32.DLL은 네트워크인터페이스를 쿼리 및 관리하기 위한 기능을 제공합니다.

OLE32.DLL

OLE32.DLL은 오브젝트 연결 및 임베딩과 함께 구성요소 오브젝트 모델을 제공합니다.

기타 API

SSCRAPDLL

SSCRAPDLL은 OLE(Object Linking and Embedding) 메커니즘의 일부입니다.OLE 지원 응용 프로그램에서 선택한 내용을 탐색기 창이나 [12]데스크톱으로 끌면 자동으로 생성되는 셸 스크랩 파일에 대한 지원을 구현하지만 개체 패키지 관리자를 사용하여 파일을 생성할 수도 있습니다.그런 다음 다른 OLE 지원 응용 프로그램으로 끌어다 놓을 수 있습니다.

이 기능은 보안을 강화하고 일반적으로 사용되지 않는 운영 체제의 [13]기능을 제거하기 위해 Windows Vista(및 그 이후 버전)에서 삭제되었습니다.스크랩(.shs) 파일은 다양한 파일(실행 가능 코드 포함)을 포함할 수 있고 "알려진 파일 형식에서 파일 확장자 숨기기"를 사용하지 않도록 [14]설정한 경우에도 파일 확장자가 표시되지 않기 때문에 바이러스에 의해 사용되어 왔습니다. 기능은 Windows [15]XP 시스템에서 레지스트리 항목 및 DLL을 복사하여 복원할 수 있습니다.

WINMM.DLL

WINMM.DLL은 원래의 WinMM 오디오 API에 대한 액세스를 제공합니다.

IMM32.DLL

IMM32Input Method Editor를 호출하고 상호 작용하는 역할을 합니다.

런타임 라이브러리

MSVCRT.DLL, MSVCP*DLL 및 CRTDLLDLL

MSVCRT.DLL은 버전 4.2에서 6.0까지의 Visual C++(MSVC) 컴파일러용 C 표준 라이브러리입니다.이러한 버전의 MSVC에 의해 컴파일된 프로그램과 대부분의 표준 C 라이브러리 기능을 제공합니다.여기에는 문자열 조작, 메모리 할당, C 스타일의 입출력 콜 등이 포함됩니다.MSVCP*DLL은 대응하는 C++ 라이브러리입니다.

다른 Windows 컴포넌트에서 사용하기 위해 Windows 95 OSR 2.5 이후 Windows 버전과 함께 출고되었으며 이전 버전은 CRTDLL과 함께 출고되었습니다.대신 DLL 라이브러리.이전 버전의 Windows에서는 MSVCRT에 대해 링크된 프로그램입니다.DLL은 System32 폴더에 호환되는 복사본을 설치할 것으로 예상되었지만 많은 설치 관리자가 라이브러리 버전을 교체하기 전에 설치된 버전과 비교하지 못했기 때문에 DLL Hell이 발생하게 되었습니다.

4.0 이전 버전 및 7.0 ~13.0 버전의 MSVC에서는 각 버전(MSVCR20)에 대해 다른 이름의 DLL이 사용되었습니다.DLL, MSVCR70.DLL, MSVCR71DLL, MSVCP110DLL 등).적절한 [16]버전을 설치하려면 응용 프로그램이 필요하며 Microsoft는 이를 위해 Visual C++ 재배포 가능 패키지를 제공합니다. 단, 일반적으로 Windows에는 이미 설치된 버전이 하나 있습니다.

버전 14.0에서는 대부분의 C/C++ 런타임은 새로운 DLL인 UCRTBASE로 이동되었습니다.DLL. 단, UCRTBASE를 사용하는 C/C++ 프로그램.DLL은 다른 새로운 DLL인 VCRuntime에 대해 강제로 링크됩니다.버전 14.0에서는 VCRUNTIME140이었습니다.DLL.[17] 이 이름은 향후 버전에서 변경될 수 있지만 버전 17.0까지는 변경되지 않았습니다.

런타임 라이브러리의 소스 코드는 참조 및 디버깅을 위해 Visual C++[18]에 포함되어 있습니다(예:C:\Program Files\Microsoft Visual Studio 11.0\VC\crt\src).

이 런타임 라이브러리는 Visual C++로 작성된 프로그램 및 기타 컴파일러(MinGW 등)에 의해 사용됩니다.일부 컴파일러에는 자체 런타임 라이브러리가 있습니다.

기타 런타임 라이브러리

  • ATL**DLL –액티브 템플릿 라이브러리
  • MFC*.DLL – Microsoft Foundation 클래스
  • MSVBVM60.DLLVisual Basic 6.0 가상 머신(Visual Basic).NET 프로그램에는 가 필요합니다.대신 NET Framework)
  • VCOMP*.DLL – Microsoft OpenMP 런타임
  • VCRUNTIME*DLL – Microsoft VCRuntime (MSVC 14.0+용)
  • MSVCIRTDLL – Microsoft C++ 라이브러리.< iostream >에서 폐지된 C++ 클래스가 포함되어 있습니다.MS C 9 및 10(MSVC 2.x, 4.x)의 경우 (파일 확장자에 주의해 주세요) (당시 드래프트 C++ Standard Library는 MSVCRT 내에 통합되었습니다.DLL. Visual C++ 5.0 릴리즈와 함께 분할되었습니다.)

.NET Framework 라이브러리

Visual Basic의 C#으로 작성된 프로그램.NET, C++/CLINET 언어에는 가 필요합니다.NET 프레임워크많은 라이브러리(그 중 하나는 mscorlib.dll – Multilanguage Standard Common Object Runtime Library, 이전 Microsoft Common Object Runtime[19] Library)와 이른바 어셈블리(시스템)가 있습니다.윈도Forms.dll).

「 」를 참조해 주세요.

레퍼런스

  1. ^ Blunden, Bill (2009). The Rootkit Arsenal: Escape and Evasion in the Dark Corners of the System. Jones & Bartlett Learning. p. 101. ISBN 978-1-59822-061-2.
  2. ^ @PetrBenes (25 July 2019). "Did I miss something? Routines..." (Tweet) – via Twitter.
  3. ^ Eilam, Eldad (2011). Reversing: Secrets of Reverse Engineering. John Wiley & Sons. pp. 68–69. ISBN 978-1-118-07976-8.
  4. ^ a b "Inside Native Windows Applications". Microsoft. Archived from the original on 2010-09-12. Retrieved 2011-12-14.
  5. ^ Russinovich, Mark A. & Solomon, David A. (2009). Windows® Internals. O'Reilly Media. p. 136. ISBN 978-0-7356-3796-2.
  6. ^ Marceau, Carla & Stillerman, Matt (2006). "Modular behavior profiles in systems with shared libraries". In Neng, Peng; et al. (eds.). Information and Communications Security: 8th International Conference, ICICS 2006 – Raleigh, NC, USA, December 4–7, 2006 – proceedings. Springer. p. 371. ISBN 978-3-540-49496-6.
  7. ^ "Archived copy". Archived from the original on 2010-10-23. Retrieved 2017-08-26.{{cite web}}: CS1 maint: 제목으로 아카이브된 복사(링크)
  8. ^ a b Visual Studio Developer Center:DLL에서의 기능 식별
  9. ^ 또, GDI32 의 Wine 의 실장에 관한 메뉴얼도 참조해 주세요.DLL: 와인 API: gdi32.dll
  10. ^ Yuan, Feng (2001). Windows graphics programming: Win32 GDI and DirectDraw. Prentice Hall Professional. p. 71. ISBN 978-0-13-086985-2.
  11. ^ "Common Dialog Box Library (Windows)". msdn.microsoft.com. Retrieved 2017-10-25.
  12. ^ "WD: What is a Scrap (.shs) file?". Microsoft Knowledge Base.
  13. ^ Raymond Chen. "Windows Confidential: Scrapping the Scraps". Retrieved 2011-12-14.
  14. ^ "VBS.Stages.A". symantec.com.
  15. ^ "How to open SHS files". Retrieved 2011-12-14.
  16. ^ "C Run-Time Libraries". Archived from the original on 2011-12-07. Retrieved 2011-12-14.
  17. ^ "C++ binary compatibility 2015-2022".
  18. ^ "Source Code for the C Run-Time Functions".
  19. ^ "What does the "ms" in "mscorlib" stand for - hint: It's not "Microsoft"".

외부 링크