La API nativa es una interfaz de programación de aplicaciones (API) ligera que utilizan las aplicaciones de modo usuario y kernel de Windows NT . 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 ejecución de cliente/servidor (CSRSS), se implementan utilizando la API nativa. La API nativa también la utilizan subrutinas como las de kernel32.dll que implementan la API de Windows , la API en base a 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 se exponen al modo de usuario mediante ntdll.dll . El punto de entrada de ntdll.dll es LdrInitializeThunk
. Las llamadas a la API nativa se gestionan mediante el núcleo 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 en 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 desde el que asignar memoria y el segundo y el tercero porque utilizan la consola, a la que se accede solo a través de KERNEL32.DLL). La gran mayoría de otras rutinas de API nativas, por convención, tienen un prefijo de 2 o 3 letras, que es:
- Nt o Zw son llamadas del sistema declaradas en ntdll.dll y ntoskrnl.exe. Cuando se llaman desde ntdll.dll en modo de usuario, estos grupos son casi exactamente iguales; ejecutan una interrupción en modo kernel y llaman a la función equivalente en ntoskrnl.exe a través de SSDT . Cuando se llaman las funciones directamente en ntoskrnl.exe (sólo es posible en modo kernel), las variantes Zw garantizan el modo kernel, mientras que las variantes Nt no lo hacen. [1] El prefijo Zw no significa nada. [2]
- Rtl es el segundo grupo más grande de llamadas ntdll. Comprende la biblioteca de tiempo de ejecución de C (extendida), que incluye muchas funciones de utilidad que pueden ser utilizadas por aplicaciones nativas, pero que no involucran directamente el soporte del núcleo.
- Csr son funciones cliente-servidor que se utilizan para comunicarse con el proceso del subsistema Win32, csrss.exe ( csrss significa subsistema de ejecución de 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 carga para el manejo de archivos PE y el inicio de nuevos procesos.
- Nls para soporte de idiomas nacionales (similar a las páginas de códigos).
- Pfx para manejo de prefijos.
- Tp para manejo de grupos de subprocesos.
user32.dll y gdi32.dll incluyen otras llamadas que ejecutan una interrupción en el modo kernel. Estas no eran 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. Por lo tanto, las llamadas del 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 API nativas incluyen, entre otros:
- Habilitar y deshabilitar privilegios (RtlAdjustPrivilege)
- Creación de subprocesos remotos dentro de procesos que se ejecutan en diferentes sesiones (RtlCreateUserThread)
- Ejecución de aplicaciones nativas (RtlCreateUserProcess)
- Realizar un apagado forzado (NtShutdownSystem)
- Provocando un BSOD en modo de usuario (NtRaiseHardError)
- Visualización de una cadena en modo nativo (NtDisplayString)
Véase también
Referencias
- ^ The NT Insider (27 de agosto de 2003). "Nt vs. Zw - Aclarando la confusión sobre la API nativa". OSR Online . 10 (4). Recursos de sistemas abiertos de OSR . Consultado el 16 de septiembre de 2013 .
- ^ Raymond Chen (2009). "Lo nuevo de siempre: ¿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
- Compilación de programas Free Pascal para la API nativa
- Herramientas nativas de Windows NT: una herramienta gratuita para el desarrollo de aplicaciones nativas
- Shell nativo: símbolo del sistema de Windows que puede iniciarse antes que Winlogon y el subsistema Win32 Archivado el 11 de agosto de 2015 en Wayback Machine