La API nativa es una interfaz de programación de aplicaciones (API) liviana utilizada por Windows NT y aplicaciones en modo de usuario . Esta API se utiliza en las primeras etapas del proceso de inicio de Windows NT , cuando otros componentes y API aún no están disponibles. Por lo tanto, algunos componentes de Windows, como el Subsistema de tiempo de ejecución de cliente / servidor (CSRSS), se implementan mediante la API nativa. La API nativa también es utilizada por subrutinas como las de kernel32.dll que implementan la API de Windows , la API basada en la cual se crean la mayoría de los componentes de Windows.
La mayoría de las llamadas a la API nativa se implementan en ntoskrnl.exe y ntdll.dll las expone al modo de usuario . El punto de entrada de ntdll.dll es LdrInitializeThunk
. Las llamadas de API nativas son manejadas por el kernel a través de la tabla de descriptores de servicios del sistema (SSDT).
Grupos de funciones
La API nativa comprende muchas funciones. Incluyen funciones de tiempo de ejecución de C que son necesarias para una ejecución de tiempo de ejecución de C muy básica , como strlen (), sprintf (), memcpy () y floor (). Faltan otros procedimientos comunes como malloc (), printf (), scanf () (el primero porque no especifica un montón para asignar memoria y el segundo y tercero porque usan la consola, a la que se accede solo a través de KERNEL32.DLL). La gran mayoría de las otras rutinas de API nativas, por convención, tienen un prefijo de 2 o 3 letras, que es:
- Nt o Zw son llamadas al sistema declaradas en ntdll.dll y ntoskrnl.exe. Cuando se llama desde ntdll.dll en modo de usuario, estos grupos son casi exactamente iguales; atrapan en modo kernel y llaman a la función equivalente en ntoskrnl.exe a través del SSDT . Al llamar a las funciones directamente en ntoskrnl.exe (solo es posible en modo kernel), las variantes Zw aseguran el modo kernel, mientras que las variantes Nt no. [1] El prefijo Zw no significa nada. [2]
- Rtl es el segundo grupo más grande de llamadas ntdll. Estos comprenden la biblioteca en tiempo de ejecución (extendida) de C, que incluye muchas funciones de utilidad que pueden ser utilizadas por aplicaciones nativas, pero que no involucran directamente el soporte del kernel.
- Csr son funciones cliente-servidor que se utilizan para comunicarse con el proceso del subsistema Win32, csrss.exe ( csrss significa subsistema de tiempo de ejecución cliente / servidor).
- Dbg son funciones de depuración como un punto de interrupción de software .
- Ki son llamadas ascendentes desde el modo kernel para eventos como el despacho de APC .
- Ldr son funciones de cargador para el manejo de archivos PE y el inicio de nuevos procesos.
- Nls para compatibilidad con idiomas nacionales (similar a las páginas de códigos).
- Pfx para el manejo de prefijos.
- Tp para manipulación de hilos.
user32.dll y gdi32.dll incluyen varias otras llamadas que atrapan en modo kernel. Estos no formaban parte del diseño original de Windows NT, como se puede ver en Windows NT 3.5 . Sin embargo, debido a problemas de rendimiento del hardware de esa época, se decidió mover el subsistema de gráficos al modo kernel. Como tal, las llamadas al sistema en el rango de 0x1000-0x1FFF son satisfechas por win32k.sys (en lugar de ntoskrnl.exe como se hizo para 0-0x0FFF), y se declaran en user32.dll y gdi32.dll. Estas funciones tienen el prefijo NtUser y NtGdi (por ejemplo, NtUserLockWorkStation y NtGdiEnableEudc ).
Usos
Los usos de las funciones de la API nativa incluyen, entre otros:
- Habilitación y deshabilitación de privilegios (RtlAdjustPrivilege)
- Creación de subprocesos remotos dentro de los procesos que se ejecutan en una sesión diferente (RtlCreateUserThread)
- Ejecución de una aplicación nativa (RtlCreateUserProcess)
- Realización de apagado forzado (NtShutdownSystem)
Ver también
Referencias
- ^ The NT Insider (27 de agosto de 2003). "Nt vs Zw - Despejar la confusión en la API nativa" . OSR en línea . Recursos de sistemas abiertos OSR. 10 (4) . Consultado el 16 de septiembre de 2013 .
- ^ Raymond Chen (2009). "Lo viejo y nuevo: ¿Qué significa el prefijo" Zw "?" . Microsoft Corporation . Consultado el 13 de junio de 2009 .
enlaces externos
- Un sitio web que documenta la mayoría de las funciones de la API nativa
- Dentro de las aplicaciones nativas
- Dentro de la API nativa
- Marco de desarrollo de aplicaciones nativas de código abierto
- Compilar programas Free Pascal para la API nativa
- Herramientas nativas de Windows NT: una utilidad gratuita de desarrollo de aplicaciones nativas
- Shell nativo: símbolo del sistema de Windows que puede iniciarse antes del subsistema Winlogon y Win32