Como o “explorer.exe” funciona e controla a GUI? [fechadas]

-1

Todas as informações indicam que este é o shell principal das versões do Windows 3.x e do Windows OS.

A minha pergunta é: como este programa tem acesso a toda a GUI e aos dados do screen / framebuffer para desenhar e alterar coisas, e por que outros programas não fazem o que ele faz, como o menu Iniciar e outras coisas normais? programas aparentemente não podem tocar?

Por exemplo, verificar o programa em um editor hexadecimal mostra que ele é um formato executável normal de PE de 32 bits comum a todos os executáveis do Windows; no entanto, todos os programas não podem tocar nos dados da tela onde o menu inicial, a barra de tarefas, etc. é.

Ouvi dizer que é possível substituí-lo, mas então é possível que um programa normal em nível de usuário o altere? Se não, por que e por que simplesmente substituí-lo por outro trabalho de programa?

Detalhes mais específicos:

Como o explorer.exe toca partes da memória de tela que programas normais não podem? Por exemplo, eu escrevo um aplicativo SDL / C ++ que envolve a API do Windows. O WinAPI não tem controle sobre o menu Iniciar, etc., e nem outras bibliotecas que conheço. Como o explorer.exe altera a memória de tela dessas regiões que outros programas não conseguem?

    
por Double Teamer 16.10.2014 / 21:55

1 resposta

3

how does this program have access to the entire GUI and screen/framebuffer data to draw and change stuff on it.

Ele usa chamadas para a API para controlar o subsistema gráfico, que usa drivers para controlar o hardware do adaptador de vídeo.

and why can't other programs do what it does

Eles podem e fazem. O Explorer.exe não gera geração de gráficos.

like start menu and other stuff that normal programs seemingly can't touch?

O menu iniciar e a barra de tarefas ARE explorer.exe.

I heard it's possible to replace it,

Você ouviu corretamente, é substituível.

but then so is it possible for a normal user-level program to alter it?

Não, porque você não pode alterar o shell, a menos que tenha acesso de administrador para editar o registro. Então, uma vez que um EXE tenha sido configurado como o shell e executado automaticamente pelo Windows, ele agora está sendo executado em um contexto de nível de sistema, não em um contexto de usuário.

How does explorer.exe touch portions of screen memory that normal programs cannot?

Isso não acontece. Na melhor das hipóteses, ele pode proteger sua própria forma de espaços de memória sendo alterada por outros programas, e o SO fornece essa proteção para a maior parte de qualquer maneira. Qualquer programa pode tocar em qualquer área da tela. Acessando "memória de tela" diretamente não vai acontecer no Windows, devido à abstração de hardware. A menos que você esteja falando sobre um motorista, o que você não é.

The WinAPI has no control over the start menu, etc., and neither do any other libraries that I'm aware of. How does explorer.exe alter screen memory from these regions that other programs cannot?

Novamente, o Explerer.exe é o menu Iniciar, "etc.". O Explorer usa o WinAPI para exibir suas janelas e controles (o Menu Iniciar e a Barra de Tarefas são apenas janelas com controles).

Tente este experimento: Abra o Gerenciador de Tarefas e mate todas as cópias do Explorer.exe que você vê. Quando você mata o último, você notará que o menu iniciar e a barra de tarefas desaparecerão.

No entanto, outros programas ainda estão sendo executados e ainda estão visíveis, mesmo sem o Explorer.exe em execução. Você pode até usar o Gerenciador de Tarefas para almoçar novos programas; e eles serão lançados e estarão visíveis, com janelas e botões e tudo mais. :)

Esta postagem do CodeProject pode ajudá-lo a começar e ajudá-lo a modificar seus elementos do Explorer (botão Iniciar neste caso), do ponto de vista da programação: Ocultando a barra de tarefas e o menu Iniciar (iniciar o orb) no Windows Vista e no Windows 7

    
por 16.10.2014 / 22:30