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