Windows 네이티브 API
Windows Native API![]() |
Native API는 Windows NT 및 사용자 모드 응용 프로그램에서 사용되는 경량 응용 프로그램 프로그래밍 인터페이스(API)입니다.이 API는 다른 컴포넌트와 API를 사용할 수 없는 Windows NT 시작 프로세스의 초기 단계에서 사용됩니다.따라서 클라이언트/서버 런타임 서브시스템(CSRSS) 등의 Windows 컴포넌트는 Native API를 사용하여 구현됩니다.Native API는 대부분의 Windows 컴포넌트가 생성되는 API인 Windows API를 구현하는 커널32.dll과 같은 서브루틴에서도 사용됩니다.
대부분의 네이티브 API 콜은 ntoskrnl.exe로 구현되며 ntdll.dll에 의해 사용자 모드에 노출됩니다.ntdll.dll의 엔트리 포인트는 다음과 같습니다.LdrInitializeThunk
네이티브 API 콜은 시스템서비스 기술자 테이블(SSDT)을 통해 커널에 의해 처리됩니다.
기능 그룹
Native API는 많은 기능으로 구성됩니다.여기에는 strlen(), sprintf(), memcpy() 및 floor()와 같은 매우 기본적인 C 런타임 실행에 필요한 C 런타임 함수가 포함됩니다.malloc(), printf(), scanf()와 같은 다른 일반적인 프로시저는 누락되어 있습니다(첫 번째 프로시저는 메모리를 할당할 힙을 지정하지 않았기 때문에 첫 번째 프로시저와 두 번째 및 세 번째 프로시저는 KERNAL32를 통해서만 액세스할 수 있는 콘솔을 사용하기 때문에 누락되어 있습니다.DLL) 기타 네이티브 API 루틴의 대부분은 일반적으로 2 또는 3글자 프리픽스를 가집니다.이것은 다음과 같습니다.
- Nt 또는 Zw는 ntdl.dll 및 ntoskrnl.exe로 선언된 시스템콜입니다사용자 모드의 ntdll.dll에서 호출할 때 이들 그룹은 거의 동일합니다.이 그룹은 커널 모드로 트랩되어 SSDT를 통해 ntoskrnl.exe에서 동등한 함수를 호출합니다.함수를 직접 ntoskrnl.exe로 호출할 때(커널 모드에서만 가능), Zw 베리안트는 커널 모드를 보증하지만 Nt 베리안트는 보증하지 않습니다.[1]Zw 프리픽스는 아무것도 [2]나타내지 않습니다.
- Rtl은 ntdll 콜의 두 번째로 큰 그룹입니다.이것들은 (확장된) C 런타임 라이브러리로 구성되어 있습니다.C 런타임 라이브러리는 네이티브 어플리케이션에서 사용할 수 있는 많은 유틸리티 기능을 포함하고 있지만 커널 지원은 직접 수반되지 않습니다.
- csrs는 Win32 서브시스템프로세스 csrss.exe(csrs는 클라이언트/서버 런타임서브시스템)와의 통신에 사용되는 클라이언트 서버 함수입니다.
- dbg는 소프트웨어 중단점과 같은 디버깅 함수입니다.
- Ki는 APC 디스패치 등의 이벤트를 위한 커널모드로부터의 업콜입니다
- Ldr은 PE 파일 처리 및 새로운 프로세스 시작을 위한 로더 기능입니다.
- 국가 언어 지원용 Nls(코드 페이지와 유사)
- 프리픽스 처리용 Pfx.
- 스레드풀 처리용 Tp.
user32.disc 및 gdi32.disc에는 커널 모드로 트랩되는 다른 콜이 몇 개 포함되어 있습니다.이것들은 Windows NT 3.5에서 볼 수 있듯이 원래의 Windows NT 설계의 일부가 아닙니다.그러나 그 시대의 하드웨어 성능 문제로 인해 그래픽 서브시스템을 커널 모드로 전환하기로 결정했습니다.이와 같이 0x1000~0x1FF 범위의 시스템콜은 win32k.sys(0~0x0FF에 대해 실행된ntosknl.exe가 아닌)로 충족되며 user32.dll 및 gdi32.dll로 선언됩니다.이러한 함수에는 NtUser 및 NtGdi 접두사(예: NtUserLockWorkStation 및 NtGdiEnableEudc)가 있습니다.
사용하다
네이티브 API 기능의 사용에는 다음이 포함되지만 이에 한정되지 않습니다.
- 권한 활성화 및 비활성화(RtlAdjustPrivilege)
- 다른 세션에서 실행 중인 프로세스 내에서 원격 스레드 생성(RtlCreateUserThread)
- 네이티브 애플리케이션 실행(Rtl Create User Process)
- 강제 종료 실행 중(NtShutdown System)
「 」를 참조해 주세요.
레퍼런스
- ^ The NT Insider (August 27, 2003). "Nt vs. Zw - Clearing Confusion On The Native API". OSR Online. OSR Open Systems Resources. 10 (4). Retrieved 2013-09-16.
- ^ Raymond Chen (2009). "The Old New Thing : What does the "Zw" prefix mean?". Microsoft Corporation. Retrieved 2009-06-13.