質問

多数のコンピューターに Windows サービスをリモートでインストールする必要があるため、winapi の CreateService() およびその他のサービス関数を使用します。アクセスする必要があるマシンの管理者パスワードとユーザー名を知っています。リモート マシンにアクセスするために、次のように 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 組み込みコマンドを使用してみてはいかがでしょうか。

OK、問題は解決しました(実際にはあまり良くありませんが、むしろOKです)。リモートマシン上の ipc$ に WNetAddConnection() を使用しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top