Arquivos de biblioteca do Microsoft Windows - Microsoft Windows library files

O sistema operacional Microsoft Windows oferece suporte a uma forma de bibliotecas compartilhadas conhecidas como " bibliotecas de vínculo dinâmico ", que são bibliotecas de código que podem ser usadas por vários processos enquanto apenas uma cópia é carregada na memória . Este artigo fornece uma visão geral das bibliotecas principais incluídas em todas as instalações modernas do Windows, sobre as quais a maioria dos aplicativos do Windows são criados.

Componentes internos

HAL.DLL é um arquivo de biblioteca do modo kernel e não pode ser usado por nenhum programa do modo usuário. NTDLL.DLL é usado apenas por alguns programas, mas é uma dependência da maioria das bibliotecas Win32 usadas por programas.

HAL.DLL

A camada de abstração de hardware do Windows (HAL) é implementada em hal.dll . O HAL implementa uma série de funções que são implementadas de maneiras diferentes por diferentes plataformas de hardware, que, neste contexto, se referem principalmente ao chipset . Outros componentes do sistema operacional podem então chamar essas funções da mesma maneira em todas as plataformas, independentemente da implementação real.

Por exemplo, responder a uma interrupção é bastante diferente em uma máquina com um controlador de interrupção programável avançado (APIC) do que em uma sem. O HAL fornece uma função única para este propósito que funciona com todos os tipos de interrupções por vários chipsets, de forma que outros componentes não precisem se preocupar com as diferenças.

O HAL é carregado no espaço de endereço do kernel e executado no modo kernel, portanto, as rotinas no HAL não podem ser chamadas diretamente pelos aplicativos e nenhuma API do modo de usuário corresponde diretamente às rotinas HAL. Em vez disso, o HAL fornece serviços principalmente para o executivo e kernel do Windows e para drivers de dispositivo do modo kernel. Embora os drivers da maioria do hardware estejam contidos em outros arquivos, geralmente do tipo de arquivo .sys , alguns drivers principais são compilados em hal.dll .

Os drivers de dispositivo do modo kernel para dispositivos em barramentos, como PCI e PCI Express, chamam rotinas diretamente no HAL para acessar portas de E / S e registros de seus dispositivos. Os drivers usam rotinas HAL porque diferentes plataformas podem exigir diferentes implementações dessas operações. O HAL implementa as operações apropriadamente para cada plataforma, de modo que o mesmo arquivo executável do driver pode ser usado em todas as plataformas usando a mesma arquitetura de CPU , e o arquivo de origem do driver pode ser portátil em todas as arquiteturas.

Em sistemas x86 , existem vários arquivos HAL diferentes na mídia de instalação. O procedimento de instalação do Windows determina quais são os apropriados para a plataforma atual e os copia para o disco rígido, renomeando-o para hal.dll se necessário. Entre os critérios para esta seleção estão: a presença de um BIOS compatível com ACPI , a presença de um APIC e se vários processadores estão presentes e habilitados ou não. (Os vários núcleos de uma CPU de vários núcleos e até mesmo os "processadores lógicos" implementados por uma CPU de hyperthreading , todos contam como "processadores" para essa finalidade.) Em plataformas x86-64 e Itanium , há apenas um hal.dll possível para cada arquitetura de CPU.

O HAL é mesclado (ou vinculado estaticamente) ao ntoskrnl.exe a partir da versão 2004 do Windows 10, e a dll serve apenas como um esboço para compatibilidade com versões anteriores.

NTDLL.DLL

NTDLL.DLL exporta a API nativa do Windows . A API nativa é a interface usada pelos componentes do modo de usuário do sistema operacional que deve ser executado sem suporte do Win32 ou de outros subsistemas da API. A maior parte dessa API é implementada em NTDLL.DLL e na borda superior de ntoskrnl.exe (e suas variantes), e a maioria dos símbolos exportados dentro dessas bibliotecas tem o prefixo Nt , por exemplo NtDisplayString . APIs nativas também são usadas para implementar muitas das "APIs de kernel" ou "APIs de base" exportadas por KERNEL32.DLL. A grande maioria dos aplicativos do Windows não chama NTDLL.DLL diretamente.

Os aplicativos vinculados diretamente a essa biblioteca usam o subsistema nativo ; o principal motivo de sua existência é a execução de tarefas que devem ser executadas no início da seqüência de inicialização do sistema antes que o subsistema Win32 esteja disponível. Um exemplo óbvio, mas importante, é a criação do processo do subsistema Win32, csrss.exe . Antes que o processo csrss.exe exista, nenhum processo Win32 pode ser criado, portanto, o processo que o cria (Smss.exe, o "gerenciador de sessão") deve usar o subsistema nativo. O próprio csrss.exe é um desses aplicativos.

Apesar de ter uma extensão de arquivo ".exe", os aplicativos nativos não podem ser executados pelo usuário (ou qualquer programa no Win32 ou outros subsistemas). Um exemplo é o binário autochk.exe que executa chkdsk durante a inicialização do sistema "Tela azul". Outros exemplos proeminentes são os serviços que implementam os vários subsistemas, como csrss.exe .

Ao contrário dos aplicativos Win32 , os aplicativos nativos se instanciam no código de tempo de execução do Kernel ( ntoskrnl.exe ) e, portanto, devem ter um ponto de entrada diferente ( NtProcessStartup , em vez de (w) (Win) MainCRTStartup como é encontrado em um aplicativo Win32), obtenha seu comando -line argumentos por meio de um ponteiro para uma estrutura na memória, gerenciar sua própria memória usando a API de heap Rtl , (que as APIs de heap Win32 são apenas empacotadores - nenhuma diferença real aqui) e retornar a execução com uma chamada para NtTerminateProcess (em oposição para ExitProcess ). Uma biblioteca comum vinculada a aplicativos nativos é nt.lib, que contém código de inicialização para aplicativos nativos, semelhante a como o tempo de execução C fornece código de inicialização para aplicativos Win32.

Embora a maior parte da API não seja documentada, os Aplicativos Nativos podem ser construídos usando o Windows Driver Development Kit ; muitos softwares antivírus e outros fornecedores de software utilitário incorporam aplicativos nativos em seus produtos, geralmente para executar alguma tarefa de inicialização que não pode ser realizada no espaço do usuário .

API Win32

Cada uma das bibliotecas nesta seção implementa vários subconjuntos da API Win32.

KERNEL32.DLL

KERNEL32.DLL expõe a aplicativos a maioria das APIs de base do Win32, como gerenciamento de memória , operações de entrada / saída (E / S) , criação de processos e threads e funções de sincronização. Muitos deles são implementados em KERNEL32.DLL chamando funções correspondentes na API nativa , exposta por NTDLL.DLL.

GDI32.DLL

GDI32.DLL exporta funções de interface de dispositivo gráfico (GDI) que executam funções de desenho primitivas para saída em monitores de vídeo e impressoras. É usado, por exemplo, na versão XP do Paint. Os aplicativos chamam funções GDI diretamente para executar desenho de baixo nível (linha, retângulo, elipse), saída de texto, gerenciamento de fonte e funções semelhantes.

Inicialmente, GDI suportado 16 e 256 cores EGA / VGA placas de vídeo e monocromáticas impressoras. A funcionalidade se expandiu ao longo dos anos e agora inclui suporte para coisas como fontes TrueType , canais alfa e monitores múltiplos .

USER32.DLL

USER32.DLL implementa o componente Windows USER que cria e manipula os elementos padrão da interface de usuário do Windows, como a área de trabalho, janelas e menus. Assim, permite que os programas implementem uma interface gráfica do usuário (GUI) que corresponda à aparência do Windows. Os programas chamam funções do USUÁRIO do Windows para realizar operações como criar e gerenciar janelas, receber mensagens da janela (que são principalmente entradas do usuário, como eventos do mouse e do teclado, mas também notificações do sistema operacional), exibir texto em uma janela e exibir mensagens caixas.

Muitas das funções em USER32.DLL chamam funções GDI exportadas por GDI32.DLL para fazer a renderização real dos vários elementos da interface do usuário. Alguns tipos de programas também chamarão funções GDI diretamente para executar operações de desenho de nível inferior em uma janela criada anteriormente por meio de funções USER32.

COMCTL32.DLL

COMCTL32.DLL implementa uma ampla variedade de controles padrão do Windows, como abrir arquivos, salvar e salvar como caixas de diálogo, barras de progresso e exibições de lista. Ele chama funções de USER32.DLL e GDI32.DLL para criar e gerenciar as janelas para esses elementos de interface do usuário, colocar vários elementos gráficos dentro deles e coletar a entrada do usuário.

COMDLG32.DLL

COMDLG32.DLL , a Common Dialog Box Library, implementa uma ampla variedade de caixas de diálogo do Windows destinadas a realizar o que a Microsoft considera 'tarefas comuns de aplicativos'. A partir do lançamento do Windows Vista, a Microsoft considera as caixas de diálogo "Abrir" e "Salvar como" fornecidas por esta biblioteca como obsoletas e substituídas pela 'API de diálogo de item comum'.

WS2_32.DLL

WS2_32.DLL implementa a API Winsock , que fornece funções de rede TCP / IP e oferece compatibilidade parcial e interrompida com outras APIs de rede. wsock.dll e wsock32.dll são versões mais antigas para compatibilidade com Win3.11 e Win95.

ADVAPI32.DLL

ADVAPI32.DLL fornece chamadas de segurança e funções para manipular o Registro do Windows .

NETAPI32.DLL

NETAPI32.DLL fornece funções para consultar e gerenciar interfaces de rede.

OLE32.DLL

OLE32.DLL fornece o Component Object Model , bem como Object Linking and Embedding .

Outras APIs

SHSCRAP.DLL

SHSCRAP.DLL é parte do mecanismo OLE (Object Linking and Embedding) . Ele implementa suporte para arquivos de sucata de shell , que são criados automaticamente quando você arrasta o conteúdo selecionado de um aplicativo compatível com OLE para uma janela ou área de trabalho do Explorer, mas você também pode usar o Object Packager para criá-los. Eles podem então ser arrastados para outro aplicativo compatível com OLE.

Essa funcionalidade foi removida do Windows Vista (e, portanto, das versões posteriores) para melhorar a segurança e livrar o sistema operacional de funcionalidades geralmente não utilizadas. Arquivos de sucata (.shs) têm sido usados ​​por vírus porque podem conter uma grande variedade de arquivos (incluindo código executável) e a extensão do arquivo não é exibida mesmo quando "Ocultar extensões de arquivos de tipos de arquivo conhecidos" está desabilitado. A funcionalidade pode ser restaurada copiando as entradas do registro e a DLL de um sistema Windows XP .

WINMM.DLL

WINMM.DLL fornece acesso à API de áudio WinMM original .

IMM32.DLL

IMM32 é responsável por chamar e interagir com o Input Method Editor .

Bibliotecas de tempo de execução

MSVCRT.DLL, MSVCP * .DLL e CRTDLL.DLL

MSVCRT.DLL é a biblioteca padrão C para o compilador Visual C ++ (MSVC) da versão 4.2 a 6.0. Ele fornece programas compilados por essas versões do MSVC com a maioria das funções da biblioteca C padrão. Isso inclui manipulação de string, alocação de memória, chamadas de entrada / saída de estilo C e outros. MSVCP * .DLL é a biblioteca C ++ correspondente.

É fornecido com versões do Windows desde o Windows 95 OSR2.5 para uso por outros componentes do Windows; versões anteriores fornecidas com a biblioteca CRTDLL.DLL . Em versões anteriores do Windows, esperava-se que os programas vinculados a MSVCRT.DLL instalassem uma cópia compatível na pasta System32, mas isso contribuiu para o DLL Hell porque muitos instaladores não conseguiram verificar a versão da biblioteca em relação à versão instalada antes de substituí-la.

As versões do MSVC anteriores à 4.0 e de 7.0 a 13.0 usavam DLLs com nomes diferentes para cada versão (MSVCR20.DLL, MSVCR70.DLL, MSVCR71.DLL, MSVCP110.DLL, etc.). Os aplicativos são necessários para instalar a versão apropriada, e a Microsoft oferece pacotes redistribuíveis do Visual C ++ para essa finalidade, embora o Windows normalmente venha com uma versão já instalada.

Com a versão 14.0, a maior parte do tempo de execução C / C ++ foi movido para uma nova DLL, UCRTBASE.DLL. No entanto, os programas C / C ++ usando UCRTBASE.DLL são forçados a se vincular a outra DLL nova, a VCRuntime, cujo nome continua a mudar a cada versão do MSVC (por exemplo, VCRUNTIME140.DLL).

O código-fonte para bibliotecas de tempo de execução está incluído no Visual C ++ para referência e depuração (por exemplo, em C:\Program Files\Microsoft Visual Studio 11.0\VC\crt\src).

Esta biblioteca de tempo de execução é usada por programas escritos em Visual C ++ e alguns outros compiladores (por exemplo, MinGW ). Alguns compiladores possuem suas próprias bibliotecas de tempo de execução.

Outras bibliotecas de tempo de execução

  • ATL * .DLL - Biblioteca de modelos ativa
  • MFC * .DLL - Microsoft Foundation Classes
  • MSVBVM60.DLL - Máquina Virtual Visual Basic 6.0 ( programas Visual Basic.NET requerem .NET Framework )
  • VCOMP * .DLL - Microsoft OpenMP runtime
  • VCRUNTIME * .DLL - Microsoft VCRuntime, para MSVC 14.0+
  • MSVCIRT.DLL - Biblioteca C ++ da Microsoft, contém as classes C ++ obsoletas de <iostream.h> (observe a extensão do arquivo) para MS C 9 e 10 (MSVC 2.x, 4.x) (Naquela época, o rascunho da Biblioteca Padrão C ++ foi integrado ao MSVCRT.DLL. Ele foi dividido com o lançamento do Visual C ++ 5.0)

Bibliotecas .NET Framework

Os programas escritos em C # , Visual Basic.NET , C ++ / CLI e outras linguagens .NET requerem o .NET Framework . Ele tem muitas bibliotecas (uma delas é mscorlib.dll  - Biblioteca de Tempo de Execução de Objeto Comum Padrão Multilanguage, anteriormente Microsoft Common Object Runtime Library) e os chamados assemblies (por exemplo, System.Windows.Forms.dll ).

Veja também

Referências

links externos