2011-01-30 7 views
7

मैं Win7 DDK में कर्नेल ड्राइवर उदाहरणों में से किसी एक के साथ खेल रहा हूं। मैं संकलित संशोधित कर सकता हूं और अपनी * .sys फ़ाइल बना सकता हूं। मैं इसे अपने आईएनएफ (डिवाइस मैनेजर या डेकॉन का उपयोग करके) या सीधे सेवा नियंत्रण प्रबंधक का उपयोग कर इंस्टॉल कर सकता हूं। जब मैं अगला परिवर्तन करता हूं और अद्यतन * .sys फ़ाइल उत्पन्न करता हूं तो मुझे इस नई फ़ाइल के बीच एक संघर्ष मिल रहा है और अब मेरा चालक बंद कर दिया गया है (मैंने सर्वोसी नियंत्रण प्रबंधक 'स्टॉप' और 'डिलीट सेवा' आदि का उपयोग करने का प्रयास किया है)। अगर मैं रीबूट करता हूं, तो मैं नया ड्राइवर स्थापित कर सकता हूं और इसे ठीक से चला सकता हूं। इसी तरह, अगर मैं डिवाइस मैनेजर में अनइंस्टॉल करना चुनता हूं, तो विंडोज मुझे रीबूट करने के लिए संकेत देता है।क्या रीबूट किए बिना कर्नेल ड्राइवर को अनलोड करना संभव है?

तो, कैसे आसानी से एक कर्नल ड्राइवर में वृद्धिशील संशोधन का परीक्षण कैसे कर सकता है? धन्यवाद

+0

सामान्य रूप से, हाँ, यह संभव है, कम से कम जब आप एपीआई कार्यों के माध्यम से ड्राइवर स्थापित करते हैं। सुनिश्चित नहीं है कि आईएनएफ फ़ाइल का उपयोग कर स्थापित ड्राइवरों के साथ यह संभव है। –

उत्तर

4

सेटअप एपीआई लॉग को देखते हुए शुरू करने के लिए एक अच्छी जगह हो सकती है: http://msdn.microsoft.com/en-us/library/ff550887%28v=VS.85%29.aspx

DevCon एक रिबूट के लिए संकेत देता है, तो आप DDK में कोड को देखो सकता है, डिबग कारण है कि यह पूछ और मुद्दे में खुदाई की जाती है कि रास्ते भी।

+0

@ जे। स्ट्राउसे: यह उपयोगी हो सकता है, धन्यवाद। –

3

हां। sc stop <driver name> को अपने ड्राइवर को रोकना चाहिए। यदि आपका ड्राइवर किसी विशेष पीएनपी देवनोड से जुड़ा हुआ है, तो इसे देवनोड हटा दिए जाने के बाद अनलोड किया जाना चाहिए।

+0

@ लैरी: यह जुड़ा हुआ नहीं है और फिर भी यह नहीं है - यह सिर्फ आईओटीसीआरएल का एक साधारण सेट है। –

+0

बेवकूफ सवाल: क्या आपने ड्राइवर को अपने ड्राइवर के प्रेषण में अनलोड प्रविष्टि सेट किया था? –

3

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

VOID Unload(IN PDRIVER_OBJECT pDriverObject) { 
       //do whatever you like here 
       //this deletes the device 
     IoDeleteDevice(pDriverObject->DeviceObject); 


    return; 
} 

NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING regPath) { 


    //initialize your driver and the major function array 

//set the unload function 
    pDriverObject->DriverUnload = &Unload; 
} 
1

संकलन की कोशिश करें, पर हस्ताक्षर, और लोड हो रहा है इस कोड:

#include <ntddk.h>  
VOID OnUnload(IN PDRIVER_OBJECT driverObjectA) { 
    DbgPrint("Unload\n"); 
} 
NTSTATUS DriverEntry(PDRIVER_OBJECT driverObjectA, PUNICODE_STRING RegistryPath){ 
    DbgPrint("DriverEntry\n"); 
    driverObjectA->DriverUnload = OnUnload; 
return STATUS_SUCCESS; 
} 

फिर डाउनलोड DebugView इसे अनज़िप, व्यवस्थापक के रूप में इसे चलाने, और फिर "कैप्चर कर्नेल" के अंतर्गत, यहाँ एक उदाहरण कोड है "कैप्चर" मेनू आइटम। OSR Driver Loader डाउनलोड करें, अनजिप करें और चलाएं, ड्राइवर को "स्टार्ट सर्विस" पंजीकृत करें। आप DbgView में "DriverEntry" लॉग संदेश देखेंगे। अब ओएसआर चालक लोडर में, "सेवा रोकें" और एक अनलोड संदेश का निरीक्षण करें। उम्मीद है कि आप जा रहे हैं।

संबंधित मुद्दे

 संबंधित मुद्दे