سؤال

أحتاج إلى تثبيت خدمة Windows عن بعد على عدد من أجهزة الكمبيوتر، لذلك أستخدم CreateService() ووظائف الخدمة الأخرى من winapi.أعرف كلمة مرور المسؤول واسم المستخدم للأجهزة التي أحتاج إلى الوصول إليها.من أجل الوصول إلى الجهاز البعيد، أقوم بانتحال عملية الاتصال بمساعدة LogonUser مثل هذا:

//all variables are initialized correctly  
int status = 0;        
status = LogonUser(lpwUsername,        
               lpwDomain,         
                   lpwPassword,          
                   LOGON32_LOGON_NEW_CREDENTIALS,       
                   LOGON32_PROVIDER_DEFAULT,   
                   &hToken);            


if (status == 0)    
{   
         //here comes a error  
}  

status = ImpersonateLoggedOnUser(hToken);     
if (status == 0)                
{     
    //once again a error     
}      

//ok, now we are impersonated, do all service work there

لذلك، يمكنني الوصول إلى الجهاز الموجود في المجال، ولكن بعض أجهزة الكمبيوتر خارج النطاق.على الأجهزة التي هي خارج المجال لا يعمل هذا الرمز.هل هناك أي طريقة للوصول إلى مدير الخدمة على الجهاز خارج المجال؟

هل كانت مفيدة؟

المحلول

يمكنك القيام بذلك، ويجب أن يكون الحساب موجودًا على الجهاز البعيد وتحتاج إلى استخدام اسم الجهاز لاسم المجال في استدعاء LogonUser.

نصائح أخرى

بدلاً من التدوير بنفسك، لماذا لا تستخدم الأمر SC المدمج فقط؟

حسنًا، تم حل المشكلة (ليست جيدة جدًا، ولكنها جيدة إلى حد ما).لقد استخدمت WNetAddConnection() إلى ipc$ على الجهاز البعيد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top