2008-10-13 16 views
10

किसी सेवा के अंदर, किसी विशेष उपयोगकर्ता के लिए एक विशेष फ़ोल्डर पथ (उदा।, "मेरा दस्तावेज़") निर्धारित करने का सबसे अच्छा तरीका क्या है? SHGetFolderPath आपको टोकन में जाने की अनुमति देता है, इसलिए मुझे लगता है कि उस उपयोगकर्ता का प्रतिरूपण करने का कोई तरीका है जिसकी आप रुचि रखते हैं।मैं किसी विशिष्ट उपयोगकर्ता के लिए Windows "विशेष फ़ोल्डर" का मार्ग कैसे प्राप्त कर सकता हूं?

क्या उपयोगकर्ता नाम पर आधारित ऐसा करने का कोई तरीका है? यदि नहीं, तो उपयोगकर्ता खाते के लिए आपको आवश्यक न्यूनतम जानकारी क्या है? मुझे उपयोगकर्ता के पासवर्ड की आवश्यकता नहीं होगी।

(यहाँ एक related question है।)

उत्तर

2

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

आप LookupAccountName का उपयोग कर उपयोगकर्ता के एसआईडी (GUID नहीं) प्राप्त कर सकते हैं। आप LoadUserProfile का उपयोग कर उपयोगकर्ता के रजिस्ट्री हाइव को लोड कर सकते हैं, लेकिन दुर्भाग्य से इसे उपयोगकर्ता टोकन की भी आवश्यकता होती है, जिसके लिए उनके पासवर्ड की आवश्यकता होगी। सौभाग्य से, आप मैन्युअल रूप से RegLoadKey का उपयोग मनमाने ढंग से स्थान पर कर सकते हैं, डेटा पढ़ सकते हैं, और इसे अनलोड (मुझे लगता है)।

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

पीएसयह जानकारी अस्वीकरण सहित आपके संबंधित प्रश्न में प्रदान की गई जानकारी को बढ़ाने के उद्देश्य से है।

-3

यह जानकारी HKEY_USERS \ एस 1-5-21-616815238-485949776-2992451252-3228 \ सॉफ्टवेयर \ Microsoft \ Windows \ "कुंजी में रजिस्ट्री में संग्रहीत किया जाता है CurrentVersion \ Explorer \ उपयोगकर्ता शैल फ़ोल्डर "।

"एस -1-5-21-616815238-485949776-2992451252-3218" उपयोगकर्ता का GUID है। आपको इस GUID को संबंधित कुंजी ढूंढने और इसे पढ़ने के लिए प्राप्त करने की आवश्यकता है।

this उदाहरण में वे आपके द्वारा बताए गए SHGetFolderPath फ़ंक्शन का उपयोग करते हैं और सभी विशेष फ़ोल्डरों के साथ एक सूची है जो सहायक हो सकती है।

नोट: माइक्रोसॉफ्ट रजिस्ट्री में मत जाओ यह जानकारी प्राप्त करने के लिए, रजिस्ट्री कुंजी का उपयोग करने के हतोत्साहित है, क्योंकि यह अभी भी वहाँ सिर्फ पश्चगामी संगतता

+0

क्या यह विंडोज के सभी "हालिया" संस्करणों (2000 को ऊपर) पर काम करता है? – kgriffs

+0

मुझे यकीन नहीं है, लेकिन चूंकि फ़ंक्शन को एमएस द्वारा समर्थित किया गया है, इसे काम करना चाहिए। अभ्यास में मैंने केवल HKEY_CURRENT USER के लिए जानकारी पढ़ी, न कि दूसरों के लिए। इसके अलावा आप आईएनआई फाइलों जैसे रजिस्ट्री को पढ़ सकते हैं –

+0

मुझे लगता है कि फ़ंक्शन काम करता है, लेकिन मैं सोच रहा था कि रजिस्ट्री कुंजी पथ वही था ... – kgriffs

11

कृपया के लिए है। वह स्थान विंडोज के भविष्य के संस्करणों में बदल सकता है। इसके बजाय SHGetFolderPath का उपयोग करें।

http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx

संपादित करें: ऐसा लगता है LogonUser जैसे अन्य उपयोगकर्ता कि आप की आवश्यकता के लिए टोकन प्रदान करेगा।

+0

यह वास्तव में उनके प्रश्न का उत्तर नहीं देता है, हालांकि, जब तक कि आप किसी अन्य उपयोगकर्ता के लिए फ़ोल्डर पथ प्राप्त करने का कोई तरीका नहीं दे सकते। – Nick

+1

सही, मैंने जवाब संपादित कर लिया है। –

3

आप किसी अन्य उपयोगकर्ता के लिए उपयोगकर्ता टोकन को संशोधित करने के लिए ImpersonateLoggedOnUser() पर कॉल करने का प्रयास कर सकते हैं और फिर उसे SHGetFolderPath() में भेज सकते हैं। ImpersonateLoggedOnUser() के लिए दस्तावेज़ के आधार पर, ऐसा लगता है कि आप किसी विशिष्ट उपयोगकर्ता के लिए टोकन प्राप्त करने के लिए LogonUser() को कॉल कर सकते हैं।

बस पढ़ने से, मुझे लगता है कि काम करने के लिए उपयोगकर्ता को कुछ रूपों में लॉग इन होना चाहिए। मुझे एक पृष्ठ याद है जिसमें यह काम करने के लिए उपयोगकर्ता की रजिस्ट्री हाइव को घुमाया जाना चाहिए (जो मुझे लगता है कि कुछ समझ में आता है)।

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

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