2008-10-20 9 views
7

का उपयोगकर्ता नाम और पासवर्ड जांचें मेरे पास एक इंस्टॉलेशन पैकेज है जो एक सेवा प्रक्रिया स्थापित करता है जो मैं बनाता हूं। मैं उस उपयोगकर्ता के उपयोगकर्ता नाम/पासवर्ड के लिए उपयोगकर्ता को संकेत देना चाहता हूं कि सेवा प्रक्रिया को चलाना चाहिए। मैं पुष्टि करना चाहता हूं कि उपयोगकर्ता नाम/पासवर्ड संयोजन स्थापना के साथ जारी रखने से पहले मान्य है। मेरे पास एक सी डीएलएल है जिसे मैं विशेष स्थापना व्यवहार के लिए उपयोग कर रहा हूं, लेकिन मैं यह नहीं समझ सकता कि किसी खाते के प्रमाण-पत्रों को सत्यापित करने के लिए Windows API का उपयोग कैसे करें। मैं सेवा नियंत्रण प्रबंधक द्वारा उपयोग किए गए एक ही खाता नाम वाक्यविन्यास का समर्थन करने में सक्षम होना चाहता हूं।विंडोज खाता

उत्तर

12

जो फ़ंक्शन आप उपयोग करना चाहते हैं वह LogonUser है। आप अतिरिक्त-शांत भी हो सकते हैं और LOGON32_LOGON_SERVICE ध्वज निर्दिष्ट कर सकते हैं जो यह सुनिश्चित करने के लिए जांच करता है कि उपयोगकर्ता को सेवा चलाने के लिए उचित अनुमतियां हैं।

+0

बस जागरूक रहें कि पुराने ओएस संस्करणों (Win2K और इससे पहले) पर LogonUser() API को उच्च निजीकरण ("ऑपरेटिंग सिस्टम के हिस्से के रूप में कार्य करें) की आवश्यकता होती है। –

2

LogonUser ऐसा करने का वैधानिक तरीका है, हालांकि माइक्रोसॉफ्ट कुछ हद तक discourages it है।

0

मैंने लॉगऑनसर फ़ंक्शन का उपयोग करके इसे लागू किया है जैसा आपने लोगों का उल्लेख किया है (वैसे, इस सेवा को WinXP SP2 या बाद में आवश्यकता है इसलिए मैं विशेषाधिकार समस्या के बारे में चिंतित नहीं हूं)। हालांकि, यह काफी काम नहीं कर रहा है जैसा कि मैंने आशा की थी। अगर मैं QueryServiceConfig को कॉल करता हूं, lpServiceStartName प्रारूप "। \ Accountname" में है। अगर मैं लॉगऑनसर के रूप में इस स्ट्रिंग को पास करता हूं, तो यह विफल हो जाता है। मैं '\' उस मशीन का प्रतिनिधित्व करने से पहले भाग लेता हूं जिस पर उपयोगकर्ता संबंधित है?

इसके अलावा, अगर मैं चेंज सर्विस सर्विस कॉन्फिग को क्रमशः lpServiceStartName और lpPassword पैरामीटर के लिए "लोकलसिस्टम" और "" निर्दिष्ट करता हूं, तो यह ठीक काम करता है। हालांकि, इन पैरामीटर के साथ लॉगऑनसर को कॉल करना काम नहीं करता है।

मैं वास्तव में उसी वाक्यविन्यास का उपयोग करना चाहता हूं जो एससीएम खाता नामों के लिए उपयोग करता है।

+0

आपको डोमेन को उपयोगकर्ता नाम से विभाजित करने की आवश्यकता है। '।' LogonUser के लिए डोमेन के रूप में काम करेगा (यह स्थानीय सिस्टम नेमस्पेस पर मानचित्र करता है), लेकिन आपको पूरी तरह से योग्य उपयोगकर्ता नाम को विभाजित करने की आवश्यकता है। – Nick

+0

इसके अलावा, आप एपीआई (जहां तक ​​मुझे पता है) का उपयोग कर स्थानीय सिस्टम के रूप में स्पष्ट रूप से लॉगऑन नहीं कर सकते हैं। आपको इस खाते के विशेष मामले और कुछ अन्य अंतर्निहित खातों (जो NT_AUTHORITY नामस्थान में हैं) को विशेष करना होगा। – Nick

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