के साथ विफल क्यों होता है मैं व्यवस्थापक समूह में उपयोगकर्ता के रूप में एक प्रक्रिया चला रहा हूं, किसी अन्य प्रक्रिया के लिए प्रक्रिया टोकन प्राप्त करने का प्रयास कर रहा हूं। दूसरी प्रक्रिया प्रशासक समूह में नहीं उपयोगकर्ता द्वारा चलायी जाती है। मैं जिस कोड का उपयोग कर रहा हूं उसका सारांश यहां दिया गया है। इस कोड में पिड गैर-व्यवस्थापक प्रक्रिया की प्रक्रिया आईडी का प्रतिनिधित्व करता है। यह सब विंडोज एक्सपी एसपी 2 और सभी एक ही मशीन पर है। यहां कोई रिमोट एक्सेस नहीं है। OpenProcess के लिएOpenProcessToken ERROR_ACCESS_DENIED
HANDLE handle;
HANDLE token;
handle = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,pid);
token = NULL;
OpenProcessToken(handle,TOKEN_DUPLICATE,&token);
संदर्भ यहाँ: http://msdn.microsoft.com/en-us/library/ms684320%28VS.85%29.aspx
OpenProcessToken यहाँ संदर्भ: http://msdn.microsoft.com/en-us/library/aa379295%28VS.85%29.aspx
OpenProcess सफल होता है, लेकिन कोई बात नहीं क्या मैं OpenProcessToken को DesiredAccess तर्क के लिए गुजरती हैं, यह विफल रहता है और GetLastError() वापसी त्रुटि: पहूंच अस्वीकृत। मैंने इस कोड को चलाने की प्रक्रिया के विशेषाधिकारों को समझने के लिए कुछ कोड जोड़े और जितना संभव हो सके सक्षम करने के लिए, साथ ही प्रक्रिया के बारे में जानकारी इकट्ठा करने के लिए जो मैं टोकन प्राप्त करने की कोशिश कर रहा हूं। इसमें OpenProcess से अधिक पहुंच (READ_CONTROL | ACCESS_SYSTEM_SECURITY PROCESS_QUERY_INFORMATION के अतिरिक्त) और GetKernelObjectSecurity (हैंडल) को कॉल करने का अनुरोध शामिल है। यहाँ मैं क्या कर लिया है:
current user: PLEASE_T\dbyron (S-1-5-21-3405506234-1792454352-3826119157-1005) current process: group 0: flags: 0x00000007 sid: S-1-5-21-3405506234-1792454352-3826119157-513 (PLEASE_T\None) current process: group 1: flags: 0x00000007 sid: S-1-1-0 (\Everyone) current process: group 2: flags: 0x0000000F sid: S-1-5-32-544 (BUILTIN\Administrators) current process: group 3: flags: 0x00000007 sid: S-1-5-32-545 (BUILTIN\Users) current process: group 4: flags: 0x00000007 sid: S-1-5-4 (NT AUTHORITY\INTERACTIVE) current process: group 5: flags: 0x00000007 sid: S-1-5-11 (NT AUTHORITY\Authenticated Users) current process: group 6: flags: 0xC0000007 sid: S-1-5-5-0-91553 (no account mapping) current process: group 7: flags: 0x00000007 sid: S-1-2-0 (\LOCAL) SeDebugPrivilege privilege enabled SeTakeOwnershipPrivilege privilege enabled SeSecurityPrivilege privilege enabled SeChangeNotifyPrivilege privilege enabled SeBackupPrivilege privilege enabled SeRestorePrivilege privilege enabled SeSystemtimePrivilege privilege enabled SeShutdownPrivilege privilege enabled SeRemoteShutdownPrivilege privilege enabled SeDebugPrivilege privilege enabled SeSystemEnvironmentPrivilege privilege enabled SeSystemProfilePrivilege privilege enabled SeProfileSingleProcessPrivilege privilege enabled SeIncreaseBasePriorityPrivilege privilege enabled SeLoadDriverPrivilege privilege enabled SeCreatePagefilePrivilege privilege enabled SeIncreaseQuotaPrivilege privilege enabled SeUndockPrivilege privilege enabled SeManageVolumePrivilege privilege enabled SeImpersonatePrivilege privilege enabled SeCreateGlobalPrivilege privilege enabled
मैं हर विशेषाधिकार संभव प्राप्त करने की कोशिश की है, और मुझे लगता है कि समूह की जानकारी ऊपर से पता चलता है कि इस प्रक्रिया OpenTokenProcess बुला प्रशासक समूह का एक सदस्य है।
यहाँ GetKernelObjectSecurity से जानकारी दी गई:
control(SE_DACL_PRESENT | SE_SELF_RELATIVE, 0x00008004) owner sid: S-1-5-21-3405506234-1792454352-3826119157-2807 (PLEASE_T\dummyusr) group sid: S-1-5-21-3405506234-1792454352-3826119157-513 (PLEASE_T\None) grant: mask(PROCESS_ALL_ACCESS, 0x001F0FFF), flags(0x00000000): S-1-5-21-3405506234-1792454352-3826119157-2807 (PLEASE_T\dummyusr) grant: mask(PROCESS_ALL_ACCESS, 0x001F0FFF), flags(0x00000000): S-1-5-32-544 (BUILTIN\Administrators) grant: mask(PROCESS_ALL_ACCESS, 0x001F0FFF), flags(0x00000000): S-1-5-18 (NT AUTHORITY\SYSTEM)
तो ऐसा लगता है कि dummyusr (गैर व्यवस्थापक) प्रक्रिया प्रशासक समूह के लिए उपयोग की अनुमति देता है। यह संभव है कि मैं गलत व्याख्या कर रहा हूं तो क्यों OpenProcessToken ERROR_ACCESS_DENIED के साथ विफल रहता है? मैंने TOKEN_DUPLICATE को TOKEN_QUERY में बदलने का प्रयास किया है लेकिन यह परिणाम नहीं बदलता है।
क्या मुझे विशेषाधिकार मिला है? इस प्रक्रिया के लिए मुझे एक्सेस टोकन तक पहुंचने से इनकार कर दिया जाएगा? मैंने इसे किसी मशीन पर एंटी वायरस सॉफ़्टवेयर के साथ करने की कोशिश की है और फिर भी मुझे एक ही परिणाम मिल रहा है।
मैंने सिस्टम संदर्भ में यह चलने का भी प्रयास किया। उस मामले में वर्तमान प्रक्रिया के बारे में जानकारी है:
current user: NT AUTHORITY\SYSTEM (S-1-5-18) current process: group 0: flags: 0x0000000E sid: S-1-5-32-544 (BUILTIN\Administrators) current process: group 1: flags: 0x00000007 sid: S-1-1-0 (\Everyone) current process: group 2: flags: 0x00000007 sid: S-1-5-11 (NT AUTHORITY\Authenticated Users)
ध्यान दें कि झंडे BUILTIN \ Administrators समूह के लिए थोड़े अलग हैं। व्यवस्थापक प्रक्रिया में 0xF था और सिस्टम प्रक्रिया में 0xE था। http://msdn.microsoft.com/en-us/library/aa379624%28VS.85%29.aspx से, 0x1 बिट का मतलब SE_GROUP_MANDATORY है जो यहां प्रासंगिक प्रतीत नहीं होता है।
डिफ़ॉल्ट रूप से प्रणाली संदर्भ प्रक्रिया भी कुछ अतिरिक्त विशेषाधिकार था:
SeAuditPrivilege SeCreatePermanentPrivilege SeLockMemoryPrivilege SeTcbPrivilege
लेकिन मैं उन सब को अक्षम और OpenProcessToken अभी भी प्रणाली संदर्भ प्रक्रिया में सफल रहा।
आपकी मदद के लिए धन्यवाद।
(+1) अच्छा सवाल। जब मैं एक नई विंडोज़ सेवा लिखता हूं तो मुझे हर कुछ महीनों में समस्याओं का सामना करना पड़ता है - और जाहिर है जब भी मैं नृत्य भूल जाता हूं। –
क्या आपको कोई संकल्प मिला? (स्थानीय सेवा के रूप में चलाने के अलावा) – vdk