2009-06-15 18 views
26

Napisałem wcześniej w C/C++, ale obecnie potrzebuję go przekonwertować na C#.Pisanie sterowników w C#

Czy ktoś może mi powiedzieć kod/sposób Jak napisać sterowniki w C#?

Aktualnie mam pewne problemy z moją starą aplikacją napisaną w C++ i musimy napisać sterowniki naszych drukarek LPT1, COM i innych sterowników USB w C#.

Odpowiedz

22

Po prostu nie możesz. C# tworzy język pośredni, który jest interpretowany przez maszynę wirtualną (.NET). Wszystkie te rzeczy działają w trybie użytkownika, a sterowniki WDM działają w trybie jądra.

Istnieje DDK, ale nie jest on obsługiwany w VStudio (ale można utworzyć projekt makefile dla kompilacji).

Rozwój sterowników jest złożony, ma skłonność do niebieskiego ekranu i wymaga dobrego zrozumienia C, struktur jądra i manipulacji memem. Żadna z tych umiejętności nie jest wymagana dla C# i .NET, dlatego istnieje długa i bolesna ścieżka szkolenia.

+0

Biorąc pod uwagę, że kod musi zostać podpisany przed wykonaniem, nie jest możliwe utworzenie podpisanego sterownika (chociaż IL może być), jeśli kod jest JITted. (Na Xboksie 360 ​​cały kod XNA/.NET działa w przestrzeni użytkownika w przeciwieństwie do natywnych gier kodowych, więc najwyraźniej Microsoft nie ma dla niego "rozwiązania"). Istnieje jednak kilka C# systemów, w których sterowniki są wykonywane w języku C#, całkiem schludne. –

+2

Nie wszystkie sterowniki urządzeń w systemie Windows wymagają trybu jądra. Sterowniki wideo i uważam, że sterowniki audio działają teraz w trybie użytkownika zarówno w systemie Windows Vista, jak i Windows 7.Istnieje również struktura sterowników trybu użytkownika dostępna w firmie Microsoft. Pamiętaj, że jeśli działa z .NET, prawdopodobnie nadal jest oparty na C/C++. http://www.microsoft.com/whdc/driver/wdf/UMDF.mspx –

1

Nie można pisać sterowników w języku C#; kierowcy muszą działać z podniesionymi uprawnieniami, aby móc rozmawiać ze sprzętem; kod zarządzany nie może być uruchomiony w odpowiednim środowisku.

+0

W przeciwnym razie, czy jest jakiś sposób aby obsłużyć mój poprzedni kod w C#? –

+0

Cóż, tak naprawdę nie wiemy, co robi twój kod. Czy mówisz o pisaniu sterowników urządzeń w języku C#, co nie jest możliwe (jak wspomniano) lub czy mówisz o otwieraniu urządzeń w języku C# i przesyłaniu do nich danych (co powinno być możliwe, ponieważ powinieneś być w stanie je otworzyć jako plik i po prostu odczytaj/zapisz do uchwytu). –

10

Nie można pisać sterowników trybu jądra w języku C# (środowisko wykonawcze działa w trybie użytkownika, dlatego nie można uzyskać dostępu do pierścienia0). Ten tak Q/A zapewnia kilka linków można znaleźć pomocne:

C# driver development?

26

Właściwie można napisać kilka sterowników w C# jeśli używasz UMDF ponieważ działa w UserMode (patrz Getting Started with UMDF). Ale moim zaleceniem jest użycie C/C++.

+0

Ten link nie jest już przesyłany bezpośrednio do UMDF, a mój Google-fu nie wyświetla niczego, co wskazuje, że możesz pisać sterowniki trybu użytkownika w C# dzisiaj. –

+0

@Oran: Dzięki, zaktualizowałem link. Myślę, że C# nie jest używane dla UMDF, ponieważ Microsoft nie zapewnia gotowego wsparcia i musisz sam zrobić wiele rzeczy (deklarując funkcje, stałe, strukturę i inne). –

8

Na podstawie Twojego opisu nie jest jasne, czy zamierzasz opracowywać sterowniki urządzeń Windows, czy współpracować ze sprzętem za pośrednictwem istniejących sterowników urządzeń.

Na przykład, aby wchodzić w interakcje z urządzeniami podłączonymi do portu szeregowego, nie trzeba pisać własnego sterownika, a w rzeczywistości można uzyskać do niego dostęp za pośrednictwem klasy .NET o numerze SerialPort.

Nawet Urządzenia USB można uzyskać z przestrzeni użytkownika (i, ostatecznie, kod zarządzany) przez ram takich jak libusb-win32, WinUSB itp