次のコードを使用して、リモートマシン上のサービスを制御しようとしています。
// Error checking omitted for brevity
HANDLE hToken = NULL;
// user = username with no domain specification
// domain = targetmachine when targetting computer outside of domain
LogonUser(user, domain, password,
LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, &hToken);
ImpersonateLoggedOnUser(hToken);
SC_HANDLE hSc = OpenSCManager(targetmachine,
SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS);
これは、ローカルドメイン内のコンピューターから実行し、同じドメイン上のマシンをターゲットにしている場合、現在ログオンしているユーザーの資格情報を使用する場合と他の資格情報を使用する場合の両方で正常に機能します。
ただし、どのドメインにも存在しないマシンをターゲットにしようとすると、目的のアクセスOpenSCManager
以外のものを指定すると、アクセスが拒否されて呼び出しが失敗しSC_MANAGER_CONNECT
ます。ドメイン外のコンピューターからドメインコンピューターをターゲットにすることは機能します(ターゲットマシンのローカル管理者であるドメインユーザーに対してユーザー/ドメイン/パスワードの組み合わせを使用します)。ドメイン外のコンピューターからドメイン外のコンピューターをターゲットにすることはできません。
ユーザー/パスワードは、ターゲットコンピューターの管理者グループのメンバー用であるため、アカウントの権限に問題はありません。
を使用してscmanagerセキュリティ記述子を確認しましたがsc -sdshow scmanager
、ドメインコンピューターと非ドメインコンピューターで同じです。どちらもWindows764ビットを実行しています。
また、 psexecを使用することもテストしました。これは同じ症状を示します。つまり、ドメインコンピューター間では正常に機能しますが、非ドメインコンピューターを対象とする場合は機能しません。
また、ターゲットマシンでRPC over TCPを無効にして再起動することもテストしました。これは、アクセス拒否エラーの考えられる原因として説明されていますが、これは役に立たないようです。ターゲットマシンでWindowsファイアウォールを無効にすることもテストしましたが、変更はありません。
サービスのリモート構成を機能させるために有効にする必要のある設定はありますか?