Articulo de referencia

Archivos de biblioteca de Microsoft Windows

El sistema operativo Microsoft Windows y el SDK de Microsoft Windows son compatibles con un conjunto de bibliotecas compartidas que el software puede usar para acceder a la API ...

El sistema operativo Microsoft Windows y el SDK de Microsoft Windows son compatibles con un conjunto de bibliotecas compartidas que el software puede usar para acceder a la API de Windows . Este artículo ofrece una descripción general de las bibliotecas principales incluidas en las instalaciones modernas de Windows , sobre las cuales se basan la mayoría de las aplicaciones de Windows.

Fuentes de la biblioteca

El sistema operativo Windows contiene versiones compiladas de estas bibliotecas, conocidas como bibliotecas de enlace dinámico ( .dll ), que son bibliotecas ejecutables que pueden ser utilizadas por múltiples programas , aunque solo una copia de la biblioteca se carga en la memoria . Estas se denominan comúnmente bibliotecas del sistema y todos los programas instalados en el sistema pueden utilizarlas.

El SDK de Windows también distribuye versiones compiladas de estas bibliotecas, conocidas como bibliotecas de enlace estático ( .lib ), que son bibliotecas no ejecutables que, total o parcialmente, pueden integrarse en un programa al compilarlo. Los compiladores de Windows más comunes son Microsoft Visual Studio y MinGW .

Componentes internos

NTDLL.DLL

NTDLL.DLL exporta la API nativa de Windows . La API nativa es la interfaz utilizada por los componentes en modo de usuario del sistema operativo que deben funcionar sin soporte de Win32 u otros subsistemas de API. La mayor parte de esta API se implementa en NTDLL.DLL y en el borde superior de ntoskrnl.exe (y sus variantes), y la mayoría de los símbolos exportados dentro de estas bibliotecas tienen el prefijo Nt , por ejemplo. Las API nativas también se utilizan para implementar muchas de las "API del kernel" o "API base" exportadas por KERNEL32.DLL . [ 1 ] [ 2 ] [ 3 ] La gran mayoría de las aplicaciones de Windows no llaman a NTDLL.DLL directamente. [ 4 ]NtDisplayString()

Se dice que las aplicaciones vinculadas directamente a esta biblioteca utilizan el subsistema nativo ; su principal razón de ser es realizar tareas que deben ejecutarse al inicio del sistema, antes de que el subsistema Win32 esté disponible. Un ejemplo obvio pero importante es la creación del proceso del subsistema Win32, csrss.exe . Antes de que exista el proceso csrss.exe , no se pueden crear procesos Win32; por lo tanto, el proceso que lo crea ( Smss.exe , el "administrador de sesiones") debe utilizar el subsistema nativo. El propio csrss.exe es una de estas aplicaciones.

A pesar de tener la extensión de archivo " .exe ", las aplicaciones nativas no pueden ser ejecutadas por el usuario (ni por ningún programa en Win32 u otros subsistemas). Un ejemplo es el binario autochk.exe que ejecuta chkdsk durante la pantalla azul de inicialización del sistema . Otros ejemplos destacados son los servicios que implementan los distintos subsistemas, como csrss.exe .

A diferencia de las aplicaciones Win32 , las aplicaciones nativas se instancian dentro del código de tiempo de ejecución del kernel ( ntoskrnl.exe ) y, por lo tanto, deben tener un punto de entrada diferente ( en lugar de como se encuentra en una aplicación Win32), [ 2 ] obtienen sus argumentos de línea de comandos a través de un puntero a una estructura en memoria, administran su propia memoria usando la API de montón Rtl (de la cual las API de montón Win32 son solo envoltorios; no hay diferencia real allí) y devuelven la ejecución con una llamada (en lugar de ). Una biblioteca común vinculada con las aplicaciones nativas es nt.lib , que contiene código de inicio para aplicaciones nativas, de manera similar a como el tiempo de ejecución C proporciona código de inicio para aplicaciones Win32. [ 2 ]NtProcessStartup()WinMainCRTStartup()RtlExitUserProcess()ExitProcess()

La mayor parte de la API nativa no está documentada ni cuenta con soporte público. Esto permite que la API evolucione sin tener que garantizar la compatibilidad con versiones anteriores , por lo que es posible que se produzcan cambios incompatibles sin previo aviso. Las aplicaciones nativas se pueden crear utilizando el Kit de desarrollo de controladores de Windows. [ 5 ]

API de Win32

Cada una de las bibliotecas de esta sección implementa diversos subconjuntos de la API de Win32.

KERNEL32.DLL

KERNEL32.DLL expone a las aplicaciones la mayoría de las API base de Win32, como la administración de memoria , las operaciones de entrada/salida (E/S), la creación de procesos e hilos y las funciones de sincronización. [ 6 ]

GDI32.DLL

GDI32.DLL exporta funciones de la Interfaz de Dispositivos Gráficos (GDI) que realizan funciones de dibujo primitivas para su salida a pantallas de vídeo e impresoras. Se utiliza, por ejemplo, en la versión XP de Paint. Las aplicaciones llaman directamente a las funciones GDI para realizar dibujos de bajo nivel (línea, rectángulo, elipse), salida de texto, gestión de fuentes y funciones similares. [ 6 ] [ 7 ]

Inicialmente, GDI admitía tarjetas gráficas EGA / VGA de 16 y 256 colores e impresoras monocromáticas . La funcionalidad se ha ampliado con los años y ahora incluye compatibilidad con elementos como fuentes TrueType , canales alfa y múltiples monitores . [ 8 ]

USER32.DLL

USER32.DLL implementa el componente USER de Windows, que crea y manipula los elementos estándar de la interfaz de usuario de Windows, como el escritorio, las ventanas y los menús. De esta forma, permite que los programas implementen una interfaz gráfica de usuario (GUI) que se ajusta a la apariencia de Windows. Los programas llaman a funciones de USER de Windows para realizar operaciones como crear y administrar ventanas, recibir mensajes de ventana (que en su mayoría son entradas del usuario, como eventos del ratón y el teclado, pero también notificaciones del sistema operativo), mostrar texto en una ventana y mostrar cuadros de mensaje.

Muchas de las funciones de USER32.DLL recurren a las funciones GDI exportadas por GDI32.DLL para realizar la representación gráfica de los distintos elementos de la interfaz de usuario. Algunos programas también llaman directamente a las funciones GDI para realizar operaciones de dibujo de bajo nivel dentro de una ventana creada previamente mediante funciones de USER32.

COMCTL32.DLL

COMCTL32.DLL implementa una amplia variedad de controles estándar de Windows, como barras de progreso y vistas de lista. Llama a funciones de USER32.DLL y GDI32.DLL para crear y administrar las ventanas de estos elementos de la interfaz de usuario, colocar diversos elementos gráficos dentro de ellas y recopilar la entrada del usuario.

COMDLG32.DLL

COMDLG32.DLL , la Biblioteca de Cuadros de Diálogo Comunes, implementa una amplia variedad de cuadros de diálogo de Windows destinados a realizar lo que Microsoft considera "tareas comunes de la aplicación", como los cuadros de diálogo Abrir, Guardar y Guardar como. [ 9 ] A partir del lanzamiento de Windows Vista, Microsoft considera que los cuadros de diálogo "Abrir" y "Guardar como" proporcionados por esta biblioteca están obsoletos y han sido reemplazados por la "API de Cuadros de Diálogo de Elementos Comunes". [ 10 ]

WS2_32.DLL

WS2_32.DLL implementa la API de Winsock , que proporciona funciones de red TCP/IP y ofrece compatibilidad parcial e imperfecta con otras API de red. wsock.dll y wsock32.dll son versiones anteriores para compatibilidad con Windows 3.11 y Windows 95.

ADVAPI32.DLL

ADVAPI32.DLL , la DLL de la API base avanzada de Windows 32, [ 11 ] proporciona llamadas y funciones de seguridad para manipular el Registro de Windows .

NETAPI32.DLL

NETAPI32.DLL proporciona funciones para consultar y administrar interfaces de red.

OLE32.DLL

OLE32.DLL proporciona el modelo de objetos de componentes , así como la vinculación e incrustación de objetos .

Otras API

SHSCRAP.DLL

SHSCRAP.DLL forma parte del mecanismo de vinculación e incrustación de objetos (OLE) . Implementa la compatibilidad con archivos de datos de shell , que se crean automáticamente al arrastrar contenido seleccionado desde una aplicación compatible con OLE a una ventana del Explorador o al escritorio, [ 12 ] pero también se pueden crear con el Empaquetador de objetos . Posteriormente, se pueden arrastrar a otra aplicación compatible con OLE.

Esta funcionalidad se eliminó de Windows Vista (y por lo tanto de versiones posteriores) para mejorar la seguridad y eliminar del sistema operativo funcionalidades generalmente no utilizadas. [ 13 ] Los virus han utilizado archivos Scrap ( .shs ) porque pueden contener una amplia variedad de archivos (incluido código ejecutable), y la extensión del archivo no se muestra incluso cuando la opción "Ocultar extensiones de archivo de tipos de archivo conocidos" está desactivada. [ 14 ] La funcionalidad se puede restaurar copiando las entradas del registro y la DLL de un sistema Windows XP . [ 15 ]

WINMM.DLL

WINMM.DLL proporciona acceso a la API de audio original de WinMM .

IMM32.DLL

IMM32 es responsable de invocar e interactuar con el Editor de métodos de entrada .

Bibliotecas de tiempo de ejecución

MSVCRT.DLL, MSVCP*.DLLyCRTDLL.DLL

MSVCRT.DLL es la biblioteca estándar de C para el compilador Visual C++ (MSVC) de la versión 4.2 a la 6.0. Proporciona a los programas compilados con estas versiones de MSVC la mayoría de las funciones de la biblioteca estándar de C. Estas incluyen manipulación de cadenas, asignación de memoria, llamadas de entrada/salida al estilo de C, entre otras. MSVCP*.DLL es la biblioteca de C++ correspondiente.

Se incluye en las versiones de Windows desde Windows 95 OSR2.5 para su uso por otros componentes de Windows; las versiones anteriores incluían la biblioteca CRTDLL.DLL . En versiones anteriores de Windows, se esperaba que los programas que se vinculaban con MSVCRT.DLL instalaran una copia compatible en la carpeta System32, pero esto contribuía al problema de las DLL, ya que muchos instaladores no verificaban la versión de la biblioteca con la versión instalada antes de reemplazarla.

Las versiones de MSVC anteriores a la 4.0 y de la 7.0 a la 12.0 utilizaban DLL con nombres diferentes para cada versión ( MSVCRT20.DLL , MSVCR70.DLL , MSVCR71.DLL , MSVCP110.DLL , etc.). Las aplicaciones deben instalar la versión adecuada, [ 16 ] y Microsoft ofrece paquetes redistribuibles de Visual C++ para este fin, aunque Windows normalmente viene con una versión preinstalada.

Esta biblioteca de tiempo de ejecución la utilizan programas escritos en Visual C++ y algunos otros compiladores (por ejemplo, MinGW ). Algunos compiladores tienen sus propias bibliotecas de tiempo de ejecución.

UCRT

Con la versión 14.0 ( Visual Studio 2015 ), la mayor parte del entorno de ejecución de C/C++ se trasladó a una nueva DLL, UCRTBASE.DLL, que se ajusta estrechamente a C99. [ 17 ] Universal C Run Time ( UCRT ) desde Windows 10 en adelante se convirtió en un componente de Windows, [ 17 ] por lo que cualquier compilador (ya sea que no sea de MS, como GCC o Clang / LLVM ) puede enlazar con UCRT. [ 18 ] Además, los programas de C/C++ que usan UCRTBASE.DLL necesitan enlazar con otra nueva DLL, Visual C++ Runtime. En la versión 14.0, esta era VCRUNTIME140.DLL. [ 19 ] El nombre podría cambiar en versiones futuras, pero no lo ha hecho hasta la versión 17.0.

El código fuente de las bibliotecas de tiempo de ejecución se incluye en Visual C++ [ 20 ] para referencia y depuración (por ejemplo, en C:\Program Files\Microsoft Visual Studio 11.0\VC\crt\src).

Otras bibliotecas de tiempo de ejecución

Bibliotecas de .NET Framework

Los programas escritos en C# , Visual Basic.NET , C++/CLI y otros lenguajes .NET requieren .NET Framework . Tiene muchas bibliotecas (una de ellas es mscorlib.dll Multilanguage Standard Common Object Runtime Library, anteriormente Microsoft Common Object Runtime Library [ 21 ] ) y los llamados ensamblados (por ejemplo, System.Windows.Forms.dll ). 

Véase también

Referencias

  1. Eilam, Eldad (2011). Reversing: Secrets of Reverse Engineering . John Wiley & Sons. pp. 68–69 . ISBN  978-1-118-07976-8.
  2. 1 2 3 "Dentro de las aplicaciones nativas" . Microsoft Learn . Consultado el 21 de julio de 2025 .
  3. Russinovich, Mark A. y Solomon, David A. (2009). Windows® Internals . O'Reilly Media. pág. 136. ISBN  978-0-7356-3796-2.
  4. Marceau, Carla y Stillerman, Matt (2006). «Perfiles de comportamiento modular en sistemas con bibliotecas compartidas» . En Neng, Peng; et al. (eds.). Seguridad de la información y las comunicaciones: 8.ª Conferencia Internacional, ICICS 2006 Raleigh, NC, EE. UU., 4-7 de diciembre de 2006 actas . Springer. p. 371. ISBN     978-3-540-49496-6.
  5. "Windows Server 2003 DDK" . Microsoft .
  6. 1 2 "Identificación de funciones en DLL" . Documentación de .NET Framework . Microsoft. 11 de marzo de 2022 vía Microsoft Learn .
  7. Véase también la documentación de laimplementación de Wine de GDI32.DLL : API de Wine: gdi32.dll
  8. Yuan, Feng (2001). Programación gráfica de Windows: Win32 GDI y DirectDraw . Prentice Hall Professional. pág . 71. ISBN  978-0-13-086985-2.
  9. "Encabezado Commdlg.h - Aplicaciones Win32" . Microsoft Learn . Consultado el 11 de julio de 2026 .
  10. "Biblioteca de cuadros de diálogo comunes - Aplicaciones Win32" . Microsoft Learn . Consultado el 21 de julio de 2025 .
  11. Microsoft (8 de octubre de 2009). "Cómo funciona RPC: Llamada a procedimiento remoto (RPC) | Microsoft Learn" . Consultado el 11 de septiembre de 2023 .
  12. "WD: ¿Qué es un archivo Scrap (.shs)? . Base de conocimientos de Microsoft . Archivado del original el 11/08/2015.
  13. Raymond Chen. "Windows Confidential: Scrapping the Scraps" . Consultado el 21 de julio de 2025 .
  14. "VBS.Stages.A" . Symantec . Archivado del original el 10 de noviembre de 2006.
  15. "Cómo abrir archivos SHS" . Consultado el 14 de diciembre de 2011 .
  16. "Bibliotecas de tiempo de ejecución de C" . Archivado del original el 7 de diciembre de 2011. Consultado el 14 de diciembre de 2011 .
  17. 1 2 "Actualice su código a la CRT universal" .
  18. "MSYS2 - Entornos" .
  19. "Compatibilidad binaria de C++ 2015-2022" . 30 de enero de 2025.
  20. "Código fuente para las funciones de tiempo de ejecución de C" . 15 de septiembre de 2006.
  21. "¿Qué significan las siglas "ms" en "mscorlib"? - Pista: No significa "Microsoft"" . 31 de enero de 2004.
  • Lista de llamadas a la API (USER32.DLL) Archivada el 21/11/2015 en Wayback Machine : consejos para usar la biblioteca cliente de la API de usuario con Visual Basic. 
  • Lista de llamadas a la API (KERNEL32.DLL) Archivada el 21/11/2015 en Wayback Machine : consejos para usar la biblioteca cliente de la API del kernel con Visual Basic. 
  • Referencia de la API nativa
  • Sitio web no oficial que documenta la mayoría de los métodos de la API nativa.
  • Obteniendo la dirección base de KERNEL32.DLL