2008-09-16 30 views
12

इससे पहले कि मैं सी # में हेडलॉन्ग कूदूं ...सी # चालक विकास?

मैंने हमेशा महसूस किया है कि सी, या शायद सी ++, विंडोज़ पर ड्राइवरों के विकास के लिए सबसे अच्छा था। मैं एक .NET मशीन पर ड्राइवर विकसित करने के विचार पर उत्सुक नहीं हूं।

लेकिन नेट रास्ता एमएस अनुप्रयोगों के विकास के लिए बढ़ रहा है हो रहा है, और इसलिए मैं अब सोच रहा हूँ:

  • लोगों सी # का उपयोग कर रहे हैं ड्राइवरों विकसित करने के लिए?
  • क्या आपको बहुत सारे एपीआई हुक करना है, या सी # में हैकरी के बिना कर्नेल के साथ इंटरफेस करने की सुविधा है?
  • क्या कोई सामान्य रूप से मामले की तुलना में रिंग 0 के करीब एक सी # प्रोग्राम चलाने की विश्वसनीयता और सुरक्षा से बात कर सकता है?

मैं अपने उपकरणों सी # में प्रयोग करने योग्य होना चाहता हूँ, और अगर सी # में चालक देव परिपक्व है कि स्पष्ट रूप से जाने का रास्ता है, लेकिन मैं अगर यह सिफारिश नहीं कर रहा है वहाँ प्रयास का एक बहुत खर्च करने के लिए नहीं करना चाहती।

  • सरल वर्चुअल सीरियल पोर्ट ड्राइवर विकसित करने, कहने, शुरू करने के लिए कुछ अच्छे संसाधन क्या हैं?

-Adam

+0

मुझे संदेह है कि जब तक ओएस ढांचे के शीर्ष पर बनाया गया है तब तक हम प्रबंधित कोड ड्राइवर देखेंगे - जो वर्तमान में – RobS

उत्तर

24

आप के रूप में क्रम सुरक्षित रूप से ring0 में लोड किया जा सकता है और उम्मीद के रूप में काम कर्नेल-मोड डिवाइस ड्राइवर को नहीं बना सकते सी # में।

इसके अतिरिक्त, सी # डिवाइस ड्राइवरों के रूप में लोड करने के लिए उपयुक्त द्विआधारी नहीं बनाता है, विशेष रूप से उन प्रविष्टियों बिंदुओं के संबंध में जिन्हें ड्राइवरों को बेनकाब करने की आवश्यकता होती है। रनटाइम पर कूदने और विश्लेषण करने के लिए रनटाइम पर निर्भरता और जेआईटी लोडिंग के दौरान द्विआधारी को प्रत्यक्ष पहुंच को प्रतिबंधित करता है, ड्राइवर उपप्रणाली को बाइनरी लोड करने की आवश्यकता होती है।

वहाँ काम चल रहा है, हालांकि, उपयोगकर्ता मोड में कुछ डिवाइस ड्राइवर को लिफ्ट करने के लिए, आप एक साक्षात्कार here UDMF के पीटर Wieland (उपयोगकर्ता मोड ड्राइवर फ्रेमवर्क) टीम के साथ देख सकते हैं।

उपयोगकर्ता-मोड ड्राइवर प्रबंधित काम के लिए अधिक उपयुक्त होंगे, लेकिन आपको यह पता लगाने के लिए कुछ करना होगा कि सी # और .NET सीधे समर्थित होंगे या नहीं। मुझे पता है कि कर्नेल स्तर के ड्राइवर केवल सी # में करने योग्य नहीं हैं।

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

+1

का मामला नहीं है, मैं यह जोड़ना चाहता हूं कि कुछ ड्राइवरों को एमएस द्वारा कर्नेल मोड ड्राइवर होने की अनुमति नहीं है , इसलिए उस स्थिति में उपयोगकर्ता मोड प्रबंधित या अप्रबंधित कोड ठीक होगा। –

2

यह अपने सवाल का सीधा जवाब नहीं है, लेकिन अगर आप रुचि रखते हैं आप Singularity project पर लग सकता है।

1

माइक्रोसॉफ्ट में दूसरे शब्दों Win32 एपीआई के साथ मारने प्रबंधित-कोड ओएस होने के क्षेत्र में अनुसंधान परियोजनाओं की एक संख्या है,।

मैरी देखें जो फोले के लेख: Rebuilding a Legacy

2

क्या कोई सामान्य रूप से मामले की तुलना में रिंग 0 के करीब एक सी # प्रोग्राम चलाने की विश्वसनीयता और सुरक्षा से बात कर सकता है?

सी # .NET वर्चुअल मशीन में चलाता है, तो आप इसे वीएम की तुलना में रिंग 0 के करीब नहीं ले जा सकते हैं, और वीएम उपयोगकर्ता स्पेस में चलता है।

+3

कोई * .NET वर्चुअल मशीन * नहीं है। उदाहरण के लिए, .NET निष्पादन वातावरण जावा के विपरीत वर्चुअल मशीन को नियोजित नहीं करता है। निष्पादन से पहले सीआईएल हमेशा देशी कोड में संकलित किया जाता है। कोई आभासीकरण शामिल नहीं है। – IInspectable

1

.net में डिवाइस ड्राइवरों को लिखना विंडोज के मौजूदा संस्करणों के लिए कोई समझ नहीं आता है।

< अटकलें >
अफवाह है कि एमएस अगले स्तर तक विलक्षणता लाने में बहुत सारा पैसा निवेश कर रही है कर रहे हैं। बस Midori देखें। लेकिन उस 2015+
</अटकलें >

1

है आप एक मालिकाना ढांचे पर एक जाना है करने के लिए तैयार हैं, तो Jungo's WinDriver toolkit यूएसबी, पीसीआई के लिए उपयोगकर्ता के मोड ड्राइवर विकास (यहां तक ​​कि प्रबंधित कोड में) का समर्थन करता है, और पीसीआई-ई उपकरण।