サービス アカウントと BITS
BITS を使用して、サービスからファイルを転送できます。 サービスでは、LocalSystem、LocalService、または NetworkService システム アカウントを使用する必要があります。 これらのアカウントは常にログオンします。そのため、これらのアカウントを使用してサービスによって送信されたジョブは常に実行されます。
システム アカウントで実行されているサービスが BITS を呼び出す前にユーザーを偽装した場合、BITS は任意のユーザー アカウントの場合と同様に応答します (たとえば、転送を実行するには、ユーザーがコンピューターにログオンする必要があります)。 また、ユーザーを偽装するときに、BITS インターフェイス ポインターで動的クローリングを使用する必要もあります。 クローキングは継承されないため、BITS から受け取る各インターフェイス ポインター (たとえば、IBackgroundCopyManager::CreateJob メソッドの呼び出しから返されるジョブ ポインター) で、CoSetProxyBlanket 関数を呼び出す必要があります。マネージャー インターフェイス ポインターにクローキングを設定するだけでは不十分です。 また、各インターフェイス ポインターで CoSetProxyBlanket 関数を呼び出す代わりに、プロセスの CoInitializeSecurity 関数を呼び出すこともできます。
ただし、サービスがユーザーを偽装しない場合は、次の動作が適用されます。
- サービス アカウントによって作成されたジョブは、そのアカウントによって所有されます。 システム アカウントは常にログオンするため、BITS はコンピューターが実行されていて、ネットワーク接続がある限りファイルを転送します。
- システム アカウントでは、マップされたネットワーク ドライブ文字を使用しないでください。ドライブ文字はセッションに固有であり、コンピューターの再起動後にマッピングが失われる可能性があるためです。
- ヘルパー トークンがない場合、ネットワーク認証では LocalSystem アカウントと NetworkService アカウントのコンピューター資格情報と LocalService アカウントの匿名資格情報が使用されます。 ソース ファイルのアクセス制御リスト (ACL) によってユーザー アカウントへのアクセスが制限されている場合、BITS は "アクセス拒否" を返します。
- ヘルパー トークンが存在する場合の認証のしくみの詳細については、「認証 をする」を参照してください。
- Microsoft Internet Explorer のプロキシ設定は、ユーザーごとに保存され、システム アカウントには設定されません。 BITS ジョブでヘルパー トークンを構成するか、BG_JOB_PROXY_USAGE_OVERRIDEで IBackgroundCopyJob::SetProxySettings呼び出して正しいプロキシ設定を明示的に設定することを検討してください。 または、BitsAdmin.exe の /Util /SetIEProxy スイッチを使用して、LocalSystem、LocalService、または NetworkService システム アカウントの Internet Explorer プロキシ設定を設定することもできます。 詳細については、BitsAdmin ツール を参照してください。
BITS は、Proxycfg.exe ファイルを使用して設定されたプロキシ設定を認識しないことに注意してください。