API de Windows - Windows API

La API de Windows , informalmente WinAPI , es el conjunto básico de interfaces de programación de aplicaciones (API) de Microsoft disponibles en los sistemas operativos Microsoft Windows . El nombre API de Windows se refiere colectivamente a varias implementaciones de plataforma diferentes a las que a menudo se hace referencia por sus propios nombres (por ejemplo, API Win32 ); ver la sección de versiones . Casi todos los programas de Windows interactúan con la API de Windows. En la línea de sistemas operativos Windows NT, un pequeño número (como los programas que se iniciaron al principio del proceso de inicio de Windows ) utilizan la API nativa .

El soporte para desarrolladores está disponible en forma de un kit de desarrollo de software , Microsoft Windows SDK , que proporciona la documentación y las herramientas necesarias para crear software basado en la API de Windows y las interfaces de Windows asociadas.

La API de Windows (Win32) se centra principalmente en el lenguaje de programación C, ya que sus funciones y estructuras de datos expuestas se describen en ese lenguaje en versiones recientes de su documentación. Sin embargo, la API puede ser utilizada por cualquier compilador o ensamblador de lenguaje de programación capaz de manejar las estructuras de datos de bajo nivel (bien definidas) junto con las convenciones de llamada prescritas para llamadas y devoluciones de llamada . Asimismo, la implementación interna de la función de la API se ha desarrollado en varios lenguajes, históricamente. A pesar de que C no es un lenguaje de programación orientado a objetos, la API de Windows y Windows se han descrito históricamente como orientados a objetos. También ha habido muchas clases contenedoras y extensiones (de Microsoft y otros) para lenguajes orientados a objetos que hacen que esta estructura orientada a objetos sea más explícita ( Microsoft Foundation Class Library (MFC), Visual Component Library (VCL), GDI + , etc.) . Por ejemplo, Windows 8 proporciona la API de Windows y la API de WinRT , que se implementa en C ++ y está orientada a objetos por diseño.

Visión general

Las funciones proporcionadas por la API de Windows se pueden agrupar en ocho categorías:

Servicios base
Proporcionar acceso a los recursos básicos disponibles para un sistema Windows. Se incluyen cosas como sistemas de archivos , dispositivos , procesos , subprocesos y manejo de errores . Estas funciones residen enkernel.exe, krnl286.exe o krnl386.exe archivos en Windows de 16 bits y kernel32.dll y KernelBase.dllen Windows de 32 y 64 bits. Estos archivos residen en la carpeta\ Windows \ System32 en todas las versiones de Windows.
Servicios avanzados
Proporcione acceso a funciones más allá del kernel. Se incluyen cosas como el registro de Windows , apagar / reiniciar el sistema (o cancelar), iniciar / detener / crear un servicio de Windows , administrar cuentas de usuario. Estas funciones residen enadvapi32.dll y advapires32.dll en Windows de 32 bits.
Interfaz de dispositivo gráfico
Proporciona funciones para enviar contenido gráfico a monitores , impresoras y otros dispositivos de salida . Reside engdi.exe en Windows de 16 bits y gdi32.dllen Windows de 32 bits en modo de usuario. Se proporciona soporte GDI en modo kernel mediante el win32k.syscual se comunica directamente con el controlador de gráficos.
Interfaz de usuario
Proporciona las funciones para crear y administrar ventanas de pantalla y la mayoría de los controles básicos, como botones y barras de desplazamiento , recibir entrada de mouse y teclado, y otras funciones asociadas con la parte de la interfaz gráfica de usuario (GUI) de Windows. Esta unidad funcional reside enuser.exe en Windows de 16 bits y user32.dllen Windows de 32 bits. Desde las versiones de Windows XP , los controles básicos residen encomctl32.dll, junto con los controles comunes (Common Control Library).
Biblioteca de cuadros de diálogo común
Proporciona a las aplicaciones los cuadros de diálogo estándar para abrir y guardar archivos, elegir el color y la fuente, etc. La biblioteca reside en un archivo llamadocommdlg.dll en Windows de 16 bits y comdlg32.dllen Windows de 32 bits. Está agrupado en la categoría Interfaz de usuario de la API.
Biblioteca de control común
Da a las aplicaciones acceso a algunos controles avanzados proporcionados por el sistema operativo. Estos incluyen cosas como barras de estado , barras de progreso , barras de herramientas y pestañas . La biblioteca reside en un archivo de biblioteca de vínculos dinámicos (DLL) llamadocommctrl.dll en Windows de 16 bits y comctl32.dllen Windows de 32 bits. Está agrupado en la categoría Interfaz de usuario de la API.
Shell de Windows
El componente de la API de Windows permite que las aplicaciones accedan a las funciones proporcionadas por el shell del sistema operativo , y las modifiquen y mejoren. El componente reside enshell.dll en Windows de 16 bits y shell32.dllen Windows de 32 bits. Las funciones de utilidad ligera de Shell están enshlwapi.dll. Está agrupado en la categoría Interfaz de usuario de la API.
Servicios de red
Dar acceso a las diversas capacidades de red del sistema operativo. Sus subcomponentes incluyen NetBIOS , Winsock , NetDDE , llamada a procedimiento remoto (RPC) y muchos más. Este componente reside ennetapi32.dll en Windows de 32 bits.

Web

El navegador web Internet Explorer (IE) también expone muchas API que las aplicaciones utilizan con frecuencia y, como tal, podrían considerarse parte de la API de Windows. IE se ha incluido en el sistema operativo desde Windows 95 OSR2 y ha proporcionado servicios relacionados con la web a aplicaciones desde Windows 98 . Específicamente, se utiliza para proporcionar:

  • Un control de navegador web integrable, contenido en shdocvw.dll y mshtml.dll.
  • El servicio de moniker de URL, que se encuentra en urlmon.dll, que proporciona objetos COM a las aplicaciones para resolver URL. Las aplicaciones también pueden proporcionar sus propios controladores de URL para que otros los utilicen.
  • Una biblioteca de cliente HTTP que también tiene en cuenta la configuración de proxy de todo el sistema (wininet.dll); sin embargo, Microsoft ha agregado otra biblioteca de cliente HTTP llamada winhttp.dll que es más pequeña y más adecuada para algunas aplicaciones.
  • Una biblioteca para ayudar en el soporte de texto internacional y en varios idiomas (mlang.dll).
  • DirectX Transforms, un conjunto de componentes de filtro de imágenes.
  • Soporte XML (los componentes MSXML, contenidos en msxml * .dll).
  • Acceso a las libretas de direcciones de Windows.

Multimedia

La API multimedia de Windows clásica se coloca en winmm.dll y contiene funciones para reproducir archivos de sonido, enviar y recibir mensajes MIDI, acceder a los joysticks y facilitar todas las demás funciones del llamado subsistema MCI de Windows, que se origina en el Extensiones multimedia disponibles para Windows 3.0 por separado y como parte integral del sistema operativo desde Windows 3.1, momento en el que se encontraban en mmsystem.dll.

Aparte de eso, como parte de cada versión de Windows desde Windows 95 OSR2, Microsoft ha proporcionado las API de DirectX , un conjunto de gráficos y servicios de juegos poco relacionados, que incluye:

  • Direct2D para gráficos vectoriales 2D acelerados por hardware.
  • Direct3D para gráficos 3D acelerados por hardware.
  • DirectSound para acceso a tarjetas de sonido acelerado por hardware de bajo nivel.
  • DirectInput para la comunicación con dispositivos de entrada como joysticks y gamepads.
  • DirectPlay como infraestructura de juegos multijugador. Este componente ha quedado obsoleto a partir de DirectX 9 y Microsoft ya no recomienda su uso para el desarrollo de juegos.
  • DirectDraw para gráficos 2D en versiones anteriores de DirectX, ahora en desuso y reemplazado por Direct2D.
  • WinG para gráficos 2D en juegos de 16 bits escritos para versiones de Windows 3.x. En desuso con la versión de Windows 95.

Microsoft también proporciona varias API para la codificación y reproducción de medios:

  • DirectShow , que crea y ejecuta canalizaciones multimedia genéricas. Es comparable al marco GStreamer y se usa a menudo para renderizar videos en el juego y construir reproductores multimedia ( Windows Media Player se basa en él). DirectShow ya no se recomienda para el desarrollo de juegos.
  • Media Foundation , una API de medios digitales más nueva destinada a reemplazar DirectShow.

Interacción del programa

La API de Windows está diseñada principalmente para la interacción entre el sistema operativo y una aplicación. Para la comunicación entre diferentes aplicaciones de Windows, Microsoft ha desarrollado una serie de tecnologías junto con la API principal de Windows. Esto comenzó con Dynamic Data Exchange (DDE), que fue reemplazado por Object Linking and Embedding (OLE) y luego por Component Object Model (COM), Automation Objects , ActiveX controls y .NET Framework . No siempre hay una distinción clara entre estas tecnologías y hay mucha superposición.

La variedad de términos es básicamente el resultado de agrupar los mecanismos de software que se relacionan con un aspecto dado del desarrollo de software. La automatización se relaciona específicamente con la exportación de la función de una aplicación o componente (como una interfaz de programación de aplicaciones (API)) para que pueda ser controlada por otras aplicaciones en lugar de solo por usuarios humanos, .NET es una metodología y tecnología general autónoma para Desarrolle aplicaciones web y de escritorio escritas en una variedad de lenguajes compilados Just-In-Time (JIT) .

Windows.pas es una unidad Pascal / Delphi que contiene las declaraciones API específicas de Windows . Es el equivalente en Pascal de windows.h , utilizado en C.

Bibliotecas de envoltorios

Microsoft desarrolló varios contenedores que asumieron algunas de las funciones de nivel más bajo de la API de Windows y permitieron que las aplicaciones interactuaran con la API de una manera más abstracta. Microsoft Foundation Class Library (MFC) envolvió la funcionalidad de la API de Windows en las clases de C ++ y, por lo tanto, permite una forma más orientada a objetos para interactuar con la API. El Active Template Library (ATL) es una plantilla envoltorio orientado para COM. La biblioteca de plantillas de Windows (WTL) se desarrolló como una extensión de ATL y se pensó como una alternativa más pequeña a MFC.

La mayoría de los marcos de aplicaciones para Windows (al menos en parte) envuelven la API de Windows. Por lo tanto, .NET Framework y Java , al igual que cualquier otro lenguaje de programación en Windows, son (o contienen) bibliotecas contenedoras.

Historia

La API de Windows siempre ha expuesto a los programadores una gran parte de la estructura subyacente de los sistemas Windows. Esto tenía la ventaja de darles mucha flexibilidad y poder sobre sus aplicaciones, pero también crea una gran responsabilidad en cómo las aplicaciones manejan varias operaciones de bajo nivel, a veces tediosas, que están asociadas con una interfaz gráfica de usuario .

Por ejemplo, un programador principiante en C a menudo escribirá el simple "hola mundo" como su primera tarea. La parte de trabajo del programa es solo una línea printf dentro de la subrutina principal. La sobrecarga para vincular a la biblioteca de E / S estándar también es solo una línea:

#include <stdio.h>

int main(void) {
    printf("Hello, World!\n");
}

La versión de Windows seguía siendo solo una línea de código en funcionamiento, pero requería muchas, muchas más líneas de sobrecarga. Charles Petzold , que escribió varios libros sobre programación para la API de Windows, dijo: "El programa hello world original en el SDK de Windows 1.0 fue un poco escándalo. HELLO.C tenía unas 150 líneas de largo, y el script de recursos HELLO.RC tenía otras 20 o más líneas. (...) Los programadores veteranos a menudo se acurrucaban horrorizados o de risa cuando se encontraban con el programa Hola mundo de Windows ".

A lo largo de los años, se realizaron varios cambios y adiciones a los sistemas Windows, y la API de Windows cambió y creció para reflejar esto. La API de Windows para Windows 1.0 admitía menos de 450 llamadas a funciones , mientras que las versiones modernas de la API de Windows admiten miles. Sin embargo, en general, la interfaz se mantuvo bastante consistente, y una aplicación antigua de Windows 1.0 todavía le resultará familiar a un programador que esté acostumbrado a la API de Windows moderna.

Microsoft se ha esforzado por mantener la compatibilidad con versiones anteriores . Para lograr esto, al desarrollar nuevas versiones de Windows, Microsoft a veces implementó soluciones para permitir la compatibilidad con software de terceros que usaba la versión anterior de una manera no documentada o incluso desaconsejada. Raymond Chen , un desarrollador de Microsoft que trabaja en la API de Windows, ha dicho: "Probablemente podría escribir durante meses únicamente sobre las cosas malas que hacen las aplicaciones y lo que tuvimos que hacer para que vuelvan a funcionar (a menudo a pesar de sí mismas). Por eso me enfurezco especialmente cuando la gente acusa a Microsoft de romper aplicaciones maliciosamente durante las actualizaciones del sistema operativo. Si alguna aplicación no se ejecutaba en Windows 95, lo tomé como un error personal ".

Uno de los cambios más importantes en la API de Windows fue la transición de Win16 (incluido en Windows 3.1 y versiones anteriores) a Win32 (Windows NT y Windows 95 y versiones posteriores). Aunque Win32 se introdujo originalmente con Windows NT 3.1 y Win32s permitía el uso de un subconjunto de Win32 antes de Windows 95, no fue hasta Windows 95 que comenzó la migración generalizada de aplicaciones a Win32. Para facilitar la transición, en Windows 95, para los desarrolladores fuera y dentro de Microsoft, se utilizó un esquema complejo de procesadores de API que podría permitir que el código de 32 bits llame al código de 16 bits (para la mayoría de las API de Win16) y viceversa. Los procesadores planos permitían que el código de 32 bits llamara a bibliotecas de 16 bits, y el esquema se usó ampliamente dentro de las bibliotecas de Windows 95 para evitar portar todo el sistema operativo a Win32 en un solo lote. En Windows NT, el sistema operativo era puro de 32 bits, excepto partes por compatibilidad con aplicaciones de 16 bits, y solo estaban disponibles procesadores genéricos para procesar de Win16 a Win32, como para Windows 95. El Platform SDK se envió con un compilador que podía producir el código necesario para estos procesadores. Las versiones de Windows de 64 bits también pueden ejecutar aplicaciones de 32 bits a través de WoW64 . La carpeta SysWOW64 ubicada en la carpeta de Windows en la unidad del sistema operativo contiene varias herramientas para admitir aplicaciones de 32 bits.

Versiones

Casi todas las versiones nuevas de Microsoft Windows han introducido sus propias adiciones y cambios a la API de Windows. Sin embargo, el nombre de la API se mantuvo constante entre las diferentes versiones de Windows, y los cambios de nombre se mantuvieron limitados a cambios importantes en la arquitectura y la plataforma de Windows. Microsoft finalmente cambió el nombre de la familia de API de Win32 actual a API de Windows y lo convirtió en un término general para las versiones de API pasadas y futuras.

  • Win16 es la API para las primeras versiones de 16 bits de Microsoft Windows . Inicialmente, se los denominó simplemente API de Windows , pero luego se les cambió el nombre a Win16 en un esfuerzo por distinguirlos de la versión más reciente de 32 bits de la API de Windows. Las funciones de la API de Win16 residen principalmente en los archivos principales del sistema operativo: kernel.exe (o krnl286.exe o krnl386.exe ), user.exe y gdi.exe . A pesar de la extensión de archivo deexe, en realidad se trata de bibliotecas de vínculos dinámicos .
  • Win32 es la interfaz de programación de aplicaciones (API) de 32 bits para las versiones de Windows a partir de la 95. La API consta de funciones implementadas, como con Win16, en archivos DLL del sistema. Las DLL principales de Win32 son kernel32.dll , user32.dll y gdi32.dll . Win32 se introdujo con Windows NT . La versión de Win32 incluida con Windows 95 se denominó inicialmente Win32c, y c significa compatibilidad . Este término fue posteriormente abandonado por Microsoft a favor de Win32.
  • Win32s es una extensión para lafamilia Windows 3.1x de Microsoft Windows que implementó un subconjunto de la API de Win32 para estos sistemas. La "s" significa "subconjunto".
  • Win64 es la variante de la API implementada en plataformas de 64 bits de la arquitectura de Windows (a partir de 2021 x86-64 y AArch64 ). Tanto las versiones de 32 bits como las de 64 bits de una aplicación aún se pueden compilar a partir de una base de código , aunque algunas API más antiguas han quedado obsoletas y algunas de las API que ya estaban obsoletas en Win32 se eliminaron. Todos los punteros de memoria son de 64 bits de forma predeterminada (el modelo LLP64 ), por lo que se debe verificar la compatibilidad del código fuente con la aritmética de punteros de 64 bits y reescribir según sea necesario.
  • WinCE es la implementación de la API de Windows para el sistema operativo Windows CE .

Otras implementaciones

El proyecto Wine proporciona una capa de compatibilidad de API Win32 para plataformas similares a Unix , entre la API del kernel de Linux y los programas escritos para la API de Windows. ReactOS va un paso más allá y tiene como objetivo implementar el sistema operativo Windows completo, trabajando en estrecha colaboración con el proyecto Wine para promover la reutilización y la compatibilidad del código. DosWin32 y HX DOS Extender son otros proyectos que emulan la API de Windows para permitir la ejecución de programas simples de Windows desde una línea de comandos de DOS . Odin es un proyecto para emular Win32 en OS / 2 , reemplazando la emulación original de Win-OS / 2 que se basaba en el código de Microsoft. Otras implementaciones menores incluyen las bibliotecas MEWEL y Zinc que estaban destinadas a implementar un subconjunto de la API Win16 en DOS (consulte la Lista de bibliotecas GUI independientes de la plataforma ).

Windows Interface Source Environment (WISE) era un programa de licencias de Microsoft que permitía a los desarrolladores recompilar y ejecutar aplicaciones basadas en Windows en plataformas Unix y Macintosh . Los SDK de WISE se basaron en un emulador de la API de Windows que podía ejecutarse en esas plataformas.

Los esfuerzos hacia la estandarización incluyeron la Interfaz pública de Windows (PWI) de Sun para Win16 (consulte también: Interfaz binaria de aplicaciones de Windows Sun ( Wabi )), la Interfaz de programación de aplicaciones de Willows Software para Windows (APIW) para Win16 y Win32 (consulte también: Willows TWIN ), y ECMA-234 , que intentó estandarizar la API de Windows de forma vinculante.

Soporte del compilador

Para desarrollar software que use la API de Windows, un compilador debe poder usar las DLL específicas de Microsoft enumeradas anteriormente (los objetos COM están fuera de Win32 y asumen un cierto diseño de vtable). El compilador debe manejar los archivos de encabezado que exponen los nombres de las funciones de la API interior o proporcionar dichos archivos.

Para el lenguaje C ++, Zortech (más tarde Symantec , luego Digital Mars ), Watcom y Borland han producido compiladores comerciales bien conocidos que se han utilizado a menudo con Win16, Win32s y Win32. Algunos de ellos suministraron extensores de memoria , lo que permite que los programas Win32 se ejecuten en Win16 con la DLL Win32s redistribuible de Microsoft. El compilador de Zortech fue probablemente uno de los primeros compiladores de C ++ estables y utilizables para la programación de Windows, antes de que Microsoft tuviera un compilador de C ++.

Para ciertas clases de aplicaciones, el sistema compilador también debería poder manejar archivos de lenguaje de descripción de interfaz (IDL). En conjunto, estos requisitos previos (compiladores, herramientas, bibliotecas y encabezados) se conocen como Microsoft Platform SDK . Durante un tiempo, Microsoft Visual Studio y el sistema de desarrollo integrado de Borland fueron los únicos entornos de desarrollo integrados (IDE) que podían proporcionar esto (aunque, el SDK se puede descargar de forma gratuita por separado de toda la suite IDE, desde Microsoft Windows SDK para Windows 7 y .NET Framework 4 ).

A partir de 2016, los proyectos MinGW y Cygwin también proporcionan un entorno de este tipo basado en GNU Compiler Collection (GCC), utilizando un conjunto de archivos de encabezado independiente, para simplificar la vinculación con las DLL específicas de Win32. LCC-Win32 es un compilador de C mantenido por Jacob Navia, software gratuito para uso no comercial. Pelles C es un compilador gratuito de C mantenido por Pelle Orinius. Free Pascal es un compilador de Object Pascal de software gratuito que admite la API de Windows. El paquete MASM32 es un proyecto maduro que proporciona compatibilidad con la API de Windows en Microsoft Macro Assembler (MASM) mediante el uso de bibliotecas y encabezados personalizados o convertidos del Platform SDK. El ensamblador plano FASM permite crear programas de Windows sin utilizar un enlazador externo, incluso cuando se ejecuta en Linux.

También se necesita compatibilidad con el compilador específico de Windows para el Manejo de excepciones estructurado (SEH). Este sistema tiene dos propósitos: proporciona un sustrato sobre el cual se puede implementar el manejo de excepciones específicas del lenguaje , y es la forma en que el kernel notifica a las aplicaciones sobre condiciones excepcionales, como desreferenciar un puntero no válido o desbordamiento de pila. Los compiladores de Microsoft / Borland C ++ tenían la capacidad de utilizar este sistema tan pronto como se introdujo en Windows 95 y NT, sin embargo, la implementación real no estaba documentada y tuvo que someterse a ingeniería inversa para el proyecto Wine y los compiladores gratuitos. SEH se basa en insertar marcos de manejo de excepciones en la pila y luego agregarlos a una lista vinculada almacenada en el almacenamiento local de subprocesos (el primer campo del bloque de entorno de subprocesos). Cuando se lanza una excepción, el núcleo y las bibliotecas base desenrollan los controladores y filtros en ejecución de la pila a medida que se encuentran. Eventualmente, todas las excepciones no controladas por la aplicación serán tratadas por el controlador de backstop predeterminado, que muestra el cuadro de diálogo de bloqueo común de Windows.

Ver también

Notas

enlaces externos