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).
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)
^ 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