2009-06-15 13 views
26

में ड्राइवरों को लिखना मैंने पहले सी/सी ++ में लिखा है लेकिन वर्तमान में, मुझे इसे सी # में बदलने की आवश्यकता है।सी #

क्या कोई मुझे कोड/रास्ता बता सकता है सी # में ड्राइवर कैसे लिखें?

असल में वर्तमान में मुझे सी ++ में लिखे गए मेरे पुराने एप्लिकेशन के साथ कुछ समस्याएं हैं और हमें सी # में हमारे एलपीटी 1, कॉम प्रिंटर और अन्य यूएसबी ड्राइवरों के ड्राइवर लिखना है।

उत्तर

22

बस आप नहीं कर सकते। सी # इंटरमीडिएट भाषा का उत्पादन करता है जिसे वर्चुअल मशीन (.NET) द्वारा व्याख्या किया जाता है। ये सभी सामान उपयोगकर्ता मोड और डब्ल्यूडीएम ड्राइवरों में कर्नेल मोड में चलते हैं।

एक डीडीके है लेकिन यह VStudio में समर्थित नहीं है (लेकिन आप यद्यपि संकलन के लिए मेकफ़ाइल प्रोजेक्ट बना सकते हैं)।

चालक विकास जटिल है, नीली स्क्रीन के लिए प्रवण है और सी, कर्नेल संरचनाओं और मेम हेरफेर की अच्छी समझ की आवश्यकता है। सी # और .NET के लिए उन कौशल में से कोई भी आवश्यक नहीं है इसलिए एक लंबा और दर्दनाक प्रशिक्षण पथ है।

+0

निष्पादन से पहले उस कोड को हस्ताक्षरित किया जाना चाहिए, यदि कोड JITted है तो हस्ताक्षर किए गए ड्राइवर को (हालांकि आईएल हो सकता है) बनाना संभव नहीं है। (Xbox 360 पर सभी एक्सएनए/.NET कोड उपयोगकर्ता कोड में मूल कोड गेम के विपरीत चलता है, इसलिए स्पष्ट रूप से माइक्रोसॉफ्ट के पास इसके लिए कोई "समाधान" नहीं है)। कुछ सी # ओएस हैं, हालांकि, जिसमें चालक सी # में किए जाते हैं, बहुत साफ है। –

+2

विंडोज़ पर सभी डिवाइस ड्राइवरों को चलाने के लिए कर्नेल मोड की आवश्यकता नहीं है। वीडियो ड्राइवर, और मुझे लगता है कि ऑडियो ड्राइवर, अब विंडोज विस्टा और विंडोज 7 दोनों में उपयोगकर्ता मोड में चलते हैं।इसके अलावा अब माइक्रोसॉफ्ट से एक उपयोगकर्ता-मोड ड्राइवर फ्रेमवर्क उपलब्ध है। ध्यान दें कि यह .NET के साथ काम करता है, शायद अभी भी सी/सी ++ आधारित है। http://www.microsoft.com/whdc/driver/wdf/UMDF.mspx –

1

आप सी # में ड्राइवर नहीं लिख सकते हैं; हार्डवेयर से बात करने में सक्षम होने के लिए ड्राइवरों को उन्नत विशेषाधिकार के साथ चलाने की आवश्यकता है; प्रबंधित कोड उचित वातावरण में नहीं चलाया जा सकता है।

+0

अन्यथा, वहाँ किसी भी तरह से सी # में मेरे पिछले कोड को संभालने के लिए है? –

+0

ठीक है, हम वास्तव में नहीं जानते कि आपका कोड क्या करता है। क्या आप सी # में डिवाइस ड्राइवर लिखने के बारे में बात कर रहे हैं, जो संभव नहीं है (जैसा कि बताया गया है) या आप सी # में डिवाइस खोलने और उन्हें डेटा भेजने के बारे में बात कर रहे हैं (जो संभव हो सकता है क्योंकि आप उन्हें फ़ाइल के रूप में खोलने में सक्षम होना चाहिए और केवल हैंडल को पढ़ें/लिखें)। –

10

आप सी # में कर्नेल मोड ड्राइवर नहीं लिख सकते हैं (उपयोगकर्ता मोड में रनटाइम निष्पादित करता है इसलिए आप ring0 में नहीं जा सकते हैं)। यह इतना क्यू/ए कुछ लिंक आपको उपयोगी लग सकता है प्रदान करता है:

C# driver development?

26

असल में, आप सी # में कुछ ड्राइवरों लिख सकते हैं अगर आप UMDF उपयोग करें, क्योंकि यह usermode में चलता है (Getting Started with UMDF देखें)। लेकिन मेरी सिफारिश सी/सी ++ का उपयोग करना है।

+0

वह लिंक अब सीधे यूएमडीएफ पर नहीं जाता है, और मेरा Google-fu कुछ भी नहीं बदलता है जो इंगित करता है कि आप आज सी # में उपयोगकर्ता-मोड ड्राइवर लिख सकते हैं। –

+0

@ ओरेन: धन्यवाद, मैंने लिंक अपडेट किया है। मुझे लगता है कि सी # का उपयोग यूएमडीएफ के लिए नहीं किया जाता है क्योंकि माइक्रोसॉफ्ट आउट ऑफ़ द बॉक्स समर्थन प्रदान नहीं करता है और आपको अपने आप से कई चीजें करने की ज़रूरत है (कार्यों, स्थिरांक, संरचना और आदि घोषित करना)। –

8

यह आपके वर्णन से अस्पष्ट है कि क्या आप विंडोज डिवाइस ड्राइवर विकसित करना चाहते हैं या मौजूदा डिवाइस ड्राइवरों के माध्यम से हार्डवेयर से बातचीत करना चाहते हैं।

उदाहरण के लिए, अपने सीरियल पोर्ट से जुड़े उपकरणों के साथ बातचीत करने के लिए, आपको अपना खुद का ड्राइवर लिखने की आवश्यकता नहीं है और वास्तव में, आप इसे .NET के SerialPort कक्षा के माध्यम से एक्सेस कर सकते हैं।

भी यूएसबी उपकरणों उपयोगकर्ता अंतरिक्ष से पहुँचा जा सकता (और, अंततः, कोड प्रबंधित) इस तरह के libusb-win32 के रूप में चौखटे के माध्यम से, WinUSB आदि