네이티브 API

Native API

네이티브 API윈도 NT사용자 모드 애플리케이션에서 사용하는 경량 애플리케이션 프로그래밍 인터페이스(API)이다.이 API는 윈도 NT 시작 프로세스의 초기 단계에서 사용되는데, 이때 다른 컴포넌트와 API를 여전히 사용할 수 없다.따라서 CSRSS(클라이언트/서버 런타임 서브시스템)와 같은 몇 가지 윈도우즈 구성 요소는 네이티브 API를 사용하여 구현된다.네이티브 API는 윈도 API를 구현하는 커널32.dll과 같은 서브루틴에서도 사용되며, 대부분의 윈도 구성요소가 생성되는 기반 API이다.

네이티브 API 호출의 대부분은 ntoskrnl.exe로 구현되며 ntdll.dll로 사용자 모드에 노출된다.ntdll.dll의 진입점은LdrInitializeThunk. 네이티브 API 호출은 시스템 서비스 설명자 테이블(SSDT)을 통해 커널에서 처리한다.

함수 그룹

네이티브 API는 많은 기능으로 구성된다.여기에는 strlen(), sprintf(), memcpy() 및 floor()와 같은 매우 기본적인 C 런타임 실행에 필요한 C 런타임 기능이 포함된다.malloc(), printf(), scanf()와 같은 다른 일반적인 절차는 누락되었다(첫 번째 이유는 메모리를 할당할 을 지정하지 않았기 때문이며, 두 번째와 세 번째 절차는 커널32를 통해서만 액세스되는 콘솔을 사용하기 때문에 누락되었다.DLL). 다른 네이티브 API 루틴의 대부분은 관례에 따라 2-3자 접두사를 가지고 있는데, 다음과 같다.

  • Nt 또는 Zw는 ntdll.dll 및 ntoskrnl.exe로 선언된 시스템 호출이다.사용자 모드에서 ntdll.dll에서 호출될 때, 이 그룹들은 거의 정확히 같다; 그들은 커널 모드로 들어가 SSDT를 통해 ntoskrnl.exe로 동등한 기능을 호출한다.ntoskrnl.exe(커널 모드에서만 가능)로 함수를 직접 호출할 때, Zw 변형은 커널 모드를 보장하지만 Nt 변형은 그렇지 않다.[1]Zw 접두사는 어떤 것을 의미하지 않는다.[2]
  • Rtl은 ntdll 통화 중 두 번째로 큰 그룹이다.이것들은 (확장된) C 런타임 라이브러리로 구성되어 있는데, 여기에는 기본 애플리케이션에서 사용할 수 있는 많은 유틸리티 기능이 포함되어 있지만 커널 지원은 직접적으로 관련되지 않는다.
  • csr은 Win32 서브시스템 프로세스, csrss.exe(csrss는 클라이언트/서버 런타임 하위 시스템을 의미한다)와 통신하는 데 사용되는 클라이언트-서버 기능이다.
  • dbg는 소프트웨어 중단점과 같은 기능을 디버깅하고 있다.
  • KiAPC 발송과 같은 이벤트에 대한 커널 모드의 업콜이다.
  • LdrPE 파일 처리 및 새로운 프로세스 시작을 위한 로더 기능이다.
  • Nls for National Language Support(코드 페이지와 유사)
  • 접두사 처리용 Pfx.
  • 나사산 풀 취급용 TP.

user32.properties와 gdi32.properties는 커널 모드에 트랩되는 몇 개의 다른 통화를 포함한다.이것들은 윈도우 NT 3.5에서 볼 수 있는 원래의 윈도우 NT 설계의 일부가 아니었다.그러나, 그 시대의 하드웨어의 성능 문제 때문에, 그래픽 서브시스템을 커널 모드로 이동시키기로 결정했다.이와 같이 0x1000-0x1FF 범위의 시스템 호출은 win32k.sys(0-0x0FFFF에 대해 수행된 ntoskrnl.exe 대신)로 충족되며 user32.dll 및 gdi32.dll로 선언된다.이러한 기능에는 NtUserNtGdi 접두사(예: NtUserLockWorkStationNtGdiEnableEudc)가 있다.

사용하다

네이티브 API 기능의 사용에는 다음이 포함되지만 이에 국한되지는 않는다.

  • 권한 사용 및 사용 안 함(RtlAdjustPrivilege)
  • 다른 세션에서 실행되는 프로세스(RtlCreateUserThread) 내에서 원격 스레드 생성
  • 기본 응용 프로그램 실행(RtlCreateUserProcess)
  • 강제 종료 수행 중(NtShutdownSystem)

참고 항목

참조

  1. ^ 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.
  2. ^ Raymond Chen (2009). "The Old New Thing : What does the "Zw" prefix mean?". Microsoft Corporation. Retrieved 2009-06-13.

외부 링크