2015-05-25 8 views
5

कहो, अगर मैं एक प्रक्रिया CreateProcess या CreateProcessAsUser एपीआई का उपयोग कर बनाया है, इसका मतलब है कि फोन करने TerminateProcess(PROCESS_INFORMATION.hProcess) हमेशा (, कम विशेषाधिकार प्राप्त उपयोगकर्ता में निर्मित गेस्ट, आदि) कोई बात नहीं क्या संदर्भ मेरी मेजबान प्रक्रिया में चल रहा है कि इस प्रक्रिया मार डालेगा?यदि मैंने कोई प्रक्रिया बनाई है, तो इसका मतलब यह है कि मैं हमेशा इसे समाप्त कर पाऊंगा?

+0

आपको जो भी जानकारी चाहिए वह उन लिंक के पीछे दस्तावेज़ पृष्ठों पर दिखाई देती है .... क्या आपने उन्हें पढ़ा था? –

+0

TerminateProcess के लिए प्रलेखन में मैंने पढ़ा: "फ़ंक्शन [...] सभी लंबित I/O को रद्द करने का अनुरोध करता है। समाप्त लंबित प्रक्रिया तब तक बाहर नहीं निकल सकती जब तक कि सभी लंबित I/O पूर्ण या रद्द नहीं हो जाते।" यह इंगित करने के रूप में पढ़ा जा सकता है कि यदि I/O रद्द अनुरोध का सम्मान नहीं करता है तो प्रक्रिया को समाप्त नहीं किया जा सकता है। मैं शर्त लगाता हूं कि आप प्रदर्शन उद्देश्यों के लिए एक ड्राइवर लिख सकते हैं, और उदा। लगी लाइनों पर एनएफएस के साथ लंबे स्टालों हो सकते हैं। –

+1

@ पीटरस्चनेडर ड्राइवर स्तर पर वहां प्रक्रिया को रोकने से रोकने के लिए आप सभी प्रकार की चीजें कर सकते हैं, जिसमें टर्मिनप्रोसेस को अपने कार्यान्वयन के साथ बदलना शामिल है। –

उत्तर

4

मैंने इसका परीक्षण नहीं किया है, लेकिन दस्तावेज़ीकरण के अनुसार आपको हमेशा PROCESS_INFORMATION में दिए गए हैंडल का उपयोग करके प्रक्रिया को सफलतापूर्वक समाप्त करने में सक्षम होना चाहिए। विंडोज सुरक्षा मॉडल अनुमतियों में आमतौर पर केवल इस्तेमाल किए जा रहे हैंडल के खिलाफ जांच की जाती है, और कुछ भी नहीं। Process Security and Access Rights पर MSDN प्रलेखीकरण के अनुसार:

संभाल CreateProcess समारोह से वापस लौटे PROCESS_ALL_ACCESS प्रक्रिया वस्तु को पहुंच नहीं है। फोन करने वाले के लिए उपयोग कर सकते हैं, जिस स्थिति में प्रक्रिया को फिर से नहीं खोला जा सकता के बाद चलाया जाता है

यह सुरक्षा डिस्क्रिप्टर की अनुमति नहीं हो सकता है:

CreateProcessAsUser के लिए दस्तावेज़ इस के साथ समर्थन करता है। प्रक्रिया संभाल मान्य है और पूर्ण पहुंच अधिकार जारी रहेगा।

केवल अनुमति आवश्यकता TerminateProcess के लिए दस्तावेज में givein है:

संभाल PROCESS_TERMINATE पहुंच का अधिकार होना चाहिए।

तो CreateProcess और CreateProcessAsUser द्वारा किए गए किसी भी हैंडल को टर्मिनप्रोसेस का उपयोग करके नई प्रक्रिया को मारने की अनुमति देने के लिए आवश्यक और पर्याप्त पहुंच-अधिकार होना चाहिए।

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