Pergunta

Antes de mergulhar de cabeça no C#...

Sempre achei que C, ou talvez C++, era melhor para desenvolver drivers no Windows.Não estou interessado na ideia de desenvolver um driver em uma máquina .NET.

Mas o .NET parece ser o caminho que a MS está seguindo para o desenvolvimento de aplicativos, e agora estou me perguntando:

  • As pessoas estão usando C# para desenvolver drivers?
  • Você precisa fazer muitos ganchos de API ou o C# tem recursos para interagir com o kernel sem muitos hackers?
  • Alguém pode falar sobre a confiabilidade e segurança da execução de um programa C# mais próximo do Anel 0 do que normalmente seria o caso?

Quero que meus dispositivos possam ser usados ​​em C#, e se o desenvolvimento do driver em C# estiver maduro, esse é obviamente o caminho a seguir, mas não quero gastar muito esforço nisso se não for recomendado.

  • Quais são alguns bons recursos para começar, digamos, a desenvolver um driver de porta serial virtual simples?

-Adão

Foi útil?

Solução

Você não pode criar drivers de dispositivo no modo kernel em C#, pois o tempo de execução não pode ser carregado com segurança no ring0 e operar conforme o esperado.

Além disso, o C# não cria binários adequados para carregamento como drivers de dispositivo, principalmente em relação aos pontos de entrada que os drivers precisam expor.A dependência do tempo de execução para entrar e analisar e JIT o binário durante o carregamento proíbe o acesso direto que o subsistema do driver precisa para carregar o binário.

Há trabalho em andamento, no entanto, para colocar alguns drivers de dispositivo no modo de usuário, você pode ver uma entrevista aqui com Peter Wieland da equipe UDMF (User Mode Driver Framework).

Os drivers de modo de usuário seriam muito mais adequados para trabalho gerenciado, mas você precisará pesquisar um pouco no Google para descobrir se C# e .NET terão suporte direto.Tudo o que sei é que os drivers de nível de kernel não são viáveis ​​apenas em C#.

No entanto, você provavelmente pode criar um driver C/C++ e um serviço C# (ou similar) e fazer com que o driver se comunique com o código gerenciado, se for absolutamente necessário escrever muito código em C#.

Outras dicas

Isso deve ajudá-lo de certa forma: Kit de drivers do Windows

Não é uma resposta direta à sua pergunta, mas se você estiver interessado, pode consultar Projeto de singularidade.

Alguém pode falar sobre a confiabilidade e segurança da execução de um programa C# mais próximo do Anel 0 do que normalmente seria o caso?

C# é executado na máquina virtual .NET, você não pode movê-lo para mais perto do anel 0 do que a VM e a VM é executada no espaço do usuário.

Se você estiver disposto a experimentar uma estrutura proprietária, Kit de ferramentas WinDriver de Jungo oferece suporte ao desenvolvimento de driver no modo de usuário (mesmo em código gerenciado) para dispositivos USB, PCI e PCI-E.

A Microsoft tem vários projetos de pesquisa na área de sistema operacional de código gerenciado, ou seja, matar com API Win32.

Veja o artigo de Mary Jo Foley: Reconstruindo um Legado

Escrever drivers de dispositivo em .net não faz sentido para as versões atuais do Windows.

<especulação>
Os rumores são de que a MS está investindo muito dinheiro para levar o Singularity ao próximo nível.Basta procurar Midori.Mas isso é 2015+
</especulação>

Se bem me lembro, o Projeto Dokan é um driver de sistema de arquivos em modo de usuário, que também permite que o código .NET seja executado por um driver de sistema: https://github.com/dokan-dev/dokan-dotnet.

Portanto, você pode desenvolver um "driver" C # (aplicativo em modo de usuário, na verdade), que é então chamado/invocado por um driver em modo kernel C++.O driver do kernel poderia simplesmente transmitir tudo sem manipular os dados e atuar como um simples wrapper.
Desnecessário mencionar que é muito inseguro e você provavelmente terminaria com um BSOD (eu tentei).


Ligeiramente relacionado:

O Projeto Cosmos é um sistema operacional de código aberto, desenvolvido em C# e executado
"Drivers (kernel)" e aplicativos de nível de usuário escritos completamente em C#/F#/VB.NET/...

Embora estes sejam tecnicamente drivers de nível de kernel, o sistema operacional não é mais o Windows, mas o seu, então acho que esta não é uma resposta correta ......

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top