2011-05-31 13 views
15

से "एंड प्रोसेस" के साथ उपयोगकर्ता प्रक्रिया को मारने से रोकें मैंने देखा कि GoogleToolbarNotifier.exe को प्रोसेस एक्सप्लोरर से नहीं मारा जा सकता है। यह "एक्सेस अस्वीकृत" लौटाता है। यह उपयोगकर्ता के रूप में चलता है, यह "सामान्य" प्राथमिकता चलाता है, और यह प्रोग्राम फ़ाइलों से चलता है।प्रोसेस एक्सप्लोरर

उन्होंने यह कैसे किया?

मुझे लगता है कि एसीएल को संशोधित करने का तरीका हो सकता है, या प्रक्रिया को 'महत्वपूर्ण' के रूप में चिह्नित किया जा सकता है, लेकिन मुझे कुछ भी पता नहीं लग रहा है।

अद्यतन:

मैं खुदाई का एक अच्छा सा के साथ जवाब मिल गया। @Alex लालकृष्ण कि PROCESS_TERMINATE अनुमति में सही प्रक्रिया के लिए हटा दिया गया था था, लेकिन मैं कोड में जवाब की आपूर्ति करना चाहता था:

static const bool ProtectProcess() 
{ 
    HANDLE hProcess = GetCurrentProcess(); 
    EXPLICIT_ACCESS denyAccess = {0}; 
    DWORD dwAccessPermissions = GENERIC_WRITE|PROCESS_ALL_ACCESS|WRITE_DAC|DELETE|WRITE_OWNER|READ_CONTROL; 
    BuildExplicitAccessWithName(&denyAccess, _T("CURRENT_USER"), dwAccessPermissions, DENY_ACCESS, NO_INHERITANCE); 
    PACL pTempDacl = NULL; 
    DWORD dwErr = 0; 
    dwErr = SetEntriesInAcl(1, &denyAccess, NULL, &pTempDacl); 
    // check dwErr... 
    dwErr = SetSecurityInfo(hProcess, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, pTempDacl, NULL); 
    // check dwErr... 
    LocalFree(pTempDacl); 
    CloseHandle(hProcess); 
    return dwErr == ERROR_SUCCESS; 
} 
+0

क्या यह व्यवस्थापक अनुमतियों के साथ चल रहा है और पीई नहीं है? – Sushisource

+0

पीई व्यवस्थापक (उन्नत) अनुमतियों के साथ चल रहा है। प्रक्रिया सामान्य गैर-व्यवस्थापक उपयोगकर्ता है। – Blazes

+0

यह बहुत अच्छा काम करता है, धन्यवाद। आपको इसे एक उत्तर के रूप में पोस्ट करना चाहिए और इसे –

उत्तर

9

जब इस बात का मेरे प्रति चल सेट इंकार किया है पर अनुमति बर्खास्त (प्रक्रिया एक्सप्लोरर यह दिखाता है)।

संभावित रूप से वे SetKernelObjectSecurity को अपनी प्रक्रिया लोड होने पर एसीएल को बदलने/हटाने के लिए कहते हैं।

+7

ध्यान दें कि कार्य प्रबंधक और प्रोसेस एक्सप्लोरर जैसे प्रोग्राम चलाने के दौरान इसका कोई प्रभाव नहीं पड़ता है, क्योंकि SeDebugPrivilege के साथ, एक्सेसिंग जांच प्रक्रियाओं और धागे के लिए बाईपास की जाती है। – wj32

+0

आपको क्रेडिट दिया क्योंकि आप PROCESS_TERMINATE अनुमति के बारे में सही थे। अंततः मुझे ऐसा करने के लिए कोड मिला ... – Blazes

10

प्रश्न में दिए गए कोड भ्रामक हैं। यह किसी भी अनुमति प्रविष्टियों के साथ एक डीएसीएल बनाता है और एक प्रवेश प्रवेश से इनकार करता है; अगर आप डीएसीएल को उत्तराधिकारी सक्षम फ़ाइल में लागू कर रहे थे, तो यह समझ में आ सकता है, लेकिन इस मामले में प्रवेश अस्वीकार करना अनावश्यक है। विंडोज एक्सेस कंट्रोल मॉडल में, यदि कोई डीएसीएल मौजूद है लेकिन इसमें कोई मिलान एसीई नहीं है, access is implicitly denied

यहां मेरा संस्करण है, जो एक खाली डीएसीएल लागू करता है, जो सभी पहुंच को अस्वीकार करता है। (ध्यान दें कि यह एक बूलियन से एक त्रुटि कोड देता है बल्कि।)

DWORD ProtectProcess(void) 
{ 
    HANDLE hProcess = GetCurrentProcess(); 
    PACL pEmptyDacl; 
    DWORD dwErr; 

    // using malloc guarantees proper alignment 
    pEmptyDacl = (PACL)malloc(sizeof(ACL)); 

    if (!InitializeAcl(pEmptyDacl, sizeof(ACL), ACL_REVISION)) 
    { 
     dwErr = GetLastError(); 
    } 
    else 
    { 
     dwErr = SetSecurityInfo(hProcess, SE_KERNEL_OBJECT, 
        DACL_SECURITY_INFORMATION, NULL, NULL, pEmptyDacl, NULL); 
    } 

    free(pEmptyDacl); 
    return dwErr; 
} 
+0

इस समाधान ने XP पर मेरे लिए काम नहीं किया। मैं प्रक्रिया एक्सप्लोरर से प्रक्रिया को अभी भी समाप्त कर सकता हूं। – kobik

+0

@kobik: क्या आप एक व्यवस्थापक के रूप में लॉग इन थे? XP में यूएसी नहीं है, इसलिए यदि आप व्यवस्थापकीय अधिकारों के साथ लॉग ऑन हैं तो प्रक्रिया एक्सप्लोरर प्रशासनिक अधिकारों के साथ चल रहा है। जैसा कि wj32 पहले से ही नोट किया गया है, यदि प्रक्रिया एक्सप्लोरर प्रशासनिक अधिकारों के साथ चल रहा है तो प्रक्रिया अनुमतियां बाईपास की जाती हैं। यह डिजाइन द्वारा है। –

+0

@ स्नीकी टैक्टीशियन, विंडोज 10 में टास्क मैनेजर ऑटो-एलिवेट्स, इसलिए यदि आपके खाते में व्यवस्थापकीय विशेषाधिकार हैं - जो आमतौर पर एंटरप्राइज़ वातावरण में छोड़कर होता है - तो कार्य प्रबंधक हमेशा अनुमतियों पर ध्यान दिए बिना प्रक्रिया को मारने में सक्षम होगा। (विंडोज 7 पर आपको "सभी उपयोगकर्ताओं से प्रक्रियाओं को दिखाएं" बटन के माध्यम से कार्य प्रबंधक से पूछना था।) –

-3

मैं खिड़कियों सेवाओं लेखन ..और तो कुछ परिवर्तन

यहाँ

बनाने की मदद से यह करने के लिए कोशिश की है के लिए लिंक है एक साधारण खिड़कियों सेवा http://code.msdn.microsoft.com/windowsdesktop/CppWindowsService-cacf4948

लिख सकते हैं और हम Servicabase.cpp निम्न दो बयानों के साथ फाइल अद्यतन कर सकते हैं ..

fCanStop = FALSE; fCanShutdown = गलत;

+0

एक छोटा कंसोल उदाहरण के लिए। अर्थात् nuke-m आपकी सेवा को तितली पर मार सकता है। भले ही आप दोनों मान झूठे सेट करें। –

+0

यह प्रोसेस एक्सप्लोरर को प्रभावित नहीं करता है, यह केवल सेवा व्यवस्थापकीय उपकरण (और 'sc' जैसे समकक्ष टूल) को प्रभावित करेगा। तो यह इस सवाल के लिए प्रासंगिक नहीं है। –

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