2013-01-24 17 views
5

मुझे नामित पाइप के लिए सभी को पहुंच प्रदान करने की आवश्यकता है। मैं समझता हूं कि ऐसा करने का तरीका एक पूर्ण/खाली डीएसीएल बनाना है और इसे CreateNamedPipe पर पास करना है।मैं एक पूर्ण/खाली डीएसीएल कैसे बना सकता हूं?

मैं एक पूर्ण DACL कैसे बना सकता हूं? मुझे बताया गया था कि यह LPSECURITY_ATTRIBUTES के लिए एक पूर्ण सूचक पास करने जैसा नहीं है।

उत्तर

9

इस तरह:

SECURITY_DESCRIPTOR SD; 
InitializeSecurityDescriptor(&SD, SECURITY_DESCRIPTOR_REVISION); 
SetSecurityDescriptorDacl(&SD, TRUE, NULL, FALSE); 

मैं संक्षिप्तता की खातिर जांच त्रुटि छोड़े गए। आप ऐसा नहीं करेंगे।

फिर जब आप फोन CreateNamedPipe आप सुरक्षा इस तरह रिकॉर्ड विशेषताओं का सेट कर सकते हैं:

SA.nLength = sizeof(SA); 
SA.lpSecurityDescriptor = &SD; 
SA.bInheritHandle = TRUE; 

SetSecurityDescriptorDacl राज्यों के लिए प्रलेखन:

pDacl पैरामीटर DACL को इंगित नहीं करता है और bDaclPresent ध्वज सत्य है, एक पूर्ण डीएसीएल निर्दिष्ट है। सभी पहुंच की अनुमति है। आपको ऑब्जेक्ट के साथ एक नल डीएसीएल का उपयोग नहीं करना चाहिए क्योंकि कोई भी उपयोगकर्ता डीएसीएल और सुरक्षा डिस्क्रिप्टर के मालिक को बदल सकता है। यह वस्तु के उपयोग में हस्तक्षेप करेगा।

तो, उपर्युक्त यह कैसे करना है, लेकिन दस्तावेज़ीकरण तनाव देता है कि आपको ऐसा नहीं करना चाहिए।

+0

हम्म के लिए उपयोग के साथ एक मानचित्रण बनाता है, स्वामित्व बदलने के बारे में हिस्सा एक आश्चर्य था। लेकिन मेरे मामले में यह कोई समस्या नहीं है, मुझे बस उस उपयोगकर्ता के बावजूद अपने exe से कनेक्ट करने में सक्षम होने की आवश्यकता है, जो पाइप से कनेक्ट हो और उन्हें मेरी विंडोज़ सेवा या कुछ भी हैक करने नहीं देगा। लेकिन यह अभी भी दिलचस्प है - कनेक्ट करने के लिए उन्हें अनुमति देने के बिना, कनेक्ट करने के लिए सभी को पहुंच प्रदान करना संभव है? – sashoalm

+0

हां, तो आपको एक असली डीएसीएल का उपयोग करने की आवश्यकता होगी। आपके पिछले प्रश्न पर मेरी टिप्पणी में कोड बताता है कि मैं यह कैसे करता हूं। –

4

यहाँ कोड हम अपने परियोजनाओं में से एक में उपयोग करें:

SECURITY_DESCRIPTOR pSD; 
SECURITY_ATTRIBUTES SA; 

if(!InitializeSecurityDescriptor(&pSD, SECURITY_DESCRIPTOR_REVISION)) 
    throw error; 
if(!SetSecurityDescriptorDacl(&pSD, true, NULL, false)) 
    throw error; 
SA.nLength = sizeof(SA); 
SA.lpSecurityDescriptor = &pSD; 
SA.bInheritHandle = true; 
pSA = &SA; 
... 
FMapping = CreateFileMapping(INVALID_HANDLE_VALUE, pSA, PAGE_READWRITE, 0, 4096, p); 

इस कोड को सभी

+0

पॉइंटर चर ('पीएसए') का उपयोग क्यों करें, न केवल 'एसए' के ​​पते का उपयोग करें? – Ajay

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