2012-02-05 12 views
12

मैं अपने पिड से एक प्रक्रिया नाम प्राप्त करने की कोशिश कर रहा हूं। उपयोगकर्ता प्रशासक के रूप में चल रहा है, यूएसी सक्षम, ऊंचा नहीं।ओपनप्रोसेस() ACCESS_DENIED के साथ विफल होने पर, प्रक्रिया से फ़ाइल फ़ाइल नाम कैसे प्राप्त करें?

कुछ सिस्टम प्रक्रियाएं, जैसे services.exe, उनकी सुरक्षा इस तरह से स्थापित है कि OpenProcess(PROCESS_QUERY_INFORMATION ...ERROR_ACCESS_DENIED के साथ विफल रहता है। PROCESS_QUERY_LIMITED_INFORMATION के साथ वही परिणाम सही है। हालांकि, मैं देख सकता हूं कि Process Explorer कम से कम इन सभी प्रक्रियाओं को उनके पिड और फ़ाइल नाम के साथ सूचीबद्ध कर सकता है (जब गैर-उन्नत प्रशासक के रूप में चल रहा हो)।

मेरा सवाल है, मैं यह कैसे कर सकता हूं (पिड से फ़ाइल नाम प्राप्त करें), यह देखते हुए कि गैर-उन्नत व्यवस्थापक OpenProcess() + GetProcessImageFileName() के सामान्य मार्ग का पालन नहीं कर सकता है?

उत्तर

9

लिए देख रहे हैं प्रदान करता है आप Process32First() और Process32Next() एक हैंडल CreateToolhelp32Snapshot द्वारा प्राप्त के साथ() प्रयास किया है? यह आपको पूरा पथ नहीं देता है लेकिन कम से कम आपको फ़ाइल नाम प्राप्त करने देना चाहिए।

+0

धन्यवाद जिम - वह शानदार सुझाव था। अगर किसी को उदाहरण की आवश्यकता है, तो यहां एक [एमएसडीएन वन] है (http://msdn.microsoft.com/en-us/library/windows/desktop/ms686701%28v=vs.85%29.aspx) – baderman

3

क्या आपने इसके बजाय PROCESS_QUERY_LIMITED_INFORMATION आजमाया है? यह निम्न स्तर की पहुंच का अनुरोध करता है जो कम से कम निष्पादन योग्य नाम प्रदान कर सकता है। यह आप QueryFullProcessImageName कॉल करने के लिए अनुमति देता है जो जानकारी आप

+1

माफ करना, मैं अभी-अभी संपादित इससे पहले कि आप जवाब दे दिया। हाँ, मैंने कोशिश की, और यह मदद नहीं करता है। वही पहुंच त्रुटि से इनकार कर दिया। – haimg

+1

PROCESS_QUERY_LIMITED_INFORMATION के साथ खोले गए सिस्टम प्रक्रिया का एक संभाल आपको QueryFullProcessImageName को कॉल करने की अनुमति नहीं देगा। यह त्रुटि 31 के साथ विफल रहता है "सिस्टम से जुड़ा एक उपकरण काम नहीं कर रहा है।" यहां तक ​​कि जब मेरा प्रोग्राम पूर्ण व्यवस्थापक अधिकारों के साथ चलता है (SE_DEBUG विशेषाधिकार के बिना)। –

5

आप अपनी प्रक्रिया के लिए SE_DEBUG विशेषाधिकार सक्षम किए बिना सिस्टम प्रक्रियाओं को खोल नहीं सकते हैं (अधिक सटीक, किसी अन्य खाते के अंतर्गत चल रही प्रक्रियाओं - इस मामले में उपयोगकर्ता सिस्टम)। आप व्यवस्थापक के रूप में चला रहे हैं, तो आप आसानी से विशेषाधिकार सेट कर सकते हैं: http://support.microsoft.com/kb/131065/en-us

+1

वह आलेख थोड़ा सा है रगड़ा हुआ। दुर्भाग्यवश, जब तक ऊंचा (यूएसी) नहीं हो जाता है तब तक आप SeDebugPrivilege नहीं प्राप्त कर सकते हैं। – haimg

+0

@ हिमग: मैंने थोड़ा गुस्सा किया लेकिन उस पर कुछ भी नहीं मिला, आपको कोई लिंक मिला जहां यह कहता है? – pezcode

+1

मैंने कोशिश की कि मेरे कोड में ... हालांकि, यहां देखें: http://msdn.microsoft.com/en-us/library/bb530410.aspx। यह कहता है कि SeDebugPrivilege को प्रतिबंधित टोकन (व्यवस्थापक के लिए) से हटा दिया गया है। – haimg

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