Win32 API 日本語リファレンス
ホームNetworking.BackgroundIntelligentTransferService › IBackgroundCopyJobHttpOptions

IBackgroundCopyJobHttpOptions

COM
IIDf1bd1079-9f01-4bdc-8036-f09b70095066継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

証明書ベースのクライアント認証に使用するクライアント証明書や、HTTP リクエストに含めるカスタムヘッダーを指定するためのインターフェイスです。

メソッド 8

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT SetClientCertificateByID(BG_CERT_STORE_LOCATION StoreLocation, LPWSTR StoreName, BYTE* pCertHashBlob)

HTTPS (SSL) リクエストでのクライアント認証に使用するクライアント証明書の識別子を指定します。

StoreLocationBG_CERT_STORE_LOCATIONin証明書の検索に使用するシステムストアの場所を示します。指定可能な値については、BG_CERT_STORE_LOCATION 列挙型を参照してください。
StoreNameLPWSTRin

証明書ストアの名前を含む、NULL 終端の文字列です。文字列は NULL 終端文字を含めて 256 文字までに制限されます。次のシステムストアのいずれか、またはアプリケーション定義のストアを指定できます。ストアはローカルでもリモートでもかまいません。

意味
CA
証明機関の証明書
MY
個人用の証明書
ROOT
ルート証明書
SPC
ソフトウェア発行元証明書 (Software Publisher Certificate)
pCertHashBlobBYTE*in証明書を識別する SHA1 ハッシュです。ハッシュには 20 バイトのバッファーを使用します。詳細については「解説」を参照してください。

戻り値

次の表に、返される可能性のある値の一部を示します。

戻り値 説明
S_OK
成功しました。
E_ACCESSDENIED
ユーザーにストアの場所へアクセスする権限がありません。
E_NOTIMPL
StoreLocation パラメーターの値が BG_CERT_STORE_LOCATION 列挙型に定義されていません。
HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)
StoreName パラメーターに一致するストアが見つかりませんでした。
CRYPT_E_NOT_FOUND
ハッシュに一致する証明書が見つかりませんでした。
RPC_X_NULL_REF_POINTER
StoreName または pCertHashBlob パラメーターに NULL は指定できません。
RPC_X_BAD_STUB_DATA
pCertHashBlob バッファーのサイズが 20 バイトではありません。
BG_E_STRING_TOO_LONG
StoreName パラメーターが 256 文字を超えています。
BG_E_INVALID_STATE
ジョブの状態が BG_JOB_STATE_CANCELLED または BG_JOB_STATE_ACKNOWLEDGED であってはなりません。

解説(Remarks)

クライアント証明書を指定できるのはジョブの所有者だけです。ジョブの所有権が変わると、BITS はジョブから証明書を削除します。

クライアント証明書は、HTTP または HTTPS プロトコルを使用するリモートファイルに対してのみ適用されます。証明書はすべてのジョブの種類に指定できます。

Web サイトが SSL クライアント証明書を必須とはしないが受け入れる構成で、かつ BITS ジョブがクライアント証明書を指定していない場合、ジョブは ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED (0x80072f0c) で失敗します。

ジョブまたはアプリケーション用に証明書を作成する場合、その証明書の識別子 (拇印) をレジストリまたはデータベースに保存しておき、証明書が必要なジョブで使用できます。また、ストア内の証明書を列挙してユーザーに選択させることもできます。もう 1 つの方法として、CertFindCertificateInStore 関数を呼び出して、何らかの条件に基づいて証明書コンテキストを取得する方法があります。そのコンテキストを使用して CertGetCertificateContextProperty 関数を呼び出し、ハッシュを取得します (dwPropId には CERT_HASH_PROP_ID を指定します)。

スマートカードの拇印はサポートされていません。

次の例は、証明書の拇印を使用してジョブにクライアント証明書を指定する方法を示しています。この例では証明書の拇印をハードコードしており、pJob が有効なジョブを指していることを前提としています。


  HRESULT hr = S_OK;
  IBackgroundCopyJob* pJob = NULL;  
  IBackgroundCopyJobHttpOptions* pHttpOptions = NULL;
  BYTE Thumbprint[] = {0xa1, 0x06, 0x6e, 0x13, 0xf2, 0x34, 0x49, 0x0a, 0x22, 0xd7, 0x6f, 0xb2, 0x80, 0xab, 0x68, 0x7d, 0x16, 0x55, 0xb3, 0x14};


  // Retrieve a pointer to the IBackgroundCopyJob4 interface.
  hr = pJob->QueryInterface(__uuidof(IBackgroundCopyJobHttpOptions), (void**)&pHttpOptions);
  pJob->Release();
  if (FAILED(hr))
  {
    wprintf(L"QueryInterface for HttpOptions failed with 0x%x.\n", hr);
    goto cleanup;
  }

  // Use the client certificate in the current user's personal (MY) store.
  hr = pHttpOptions->SetClientCertificateByID(BG_CERT_STORE_LOCATION_CURRENT_USER, 
      L"MY", Thumbprint);
  if (FAILED(hr))
  {
    wprintf(L"pHttpOptions->SetClientCertificateByID failed with 0x%x.\n", hr);
    goto cleanup;
  }


cleanup:

  if (pHttpOptions)
  {
    hr = pHttpOptions->Release();
  }

vtbl 4 HRESULT SetClientCertificateByName(BG_CERT_STORE_LOCATION StoreLocation, LPWSTR StoreName, LPWSTR SubjectName)

HTTPS (SSL) リクエストでのクライアント認証に使用するクライアント証明書のサブジェクト名を指定します。

StoreLocationBG_CERT_STORE_LOCATIONin証明書の検索に使用するシステムストアの場所を示します。指定可能な値については、BG_CERT_STORE_LOCATION 列挙型を参照してください。
StoreNameLPWSTRin

証明書ストアの名前を含む、NULL 終端の文字列です。文字列は NULL 終端文字を含めて 256 文字までに制限されます。次のシステムストアのいずれか、またはアプリケーション定義のストアを指定できます。ストアはローカルでもリモートでもかまいません。

意味
CA
証明機関の証明書
MY
個人用の証明書
ROOT
ルート証明書
SPC
ソフトウェア発行元証明書 (Software Publisher Certificate)
SubjectNameLPWSTRin

証明書の単純サブジェクト名 (simple subject name) を含む、NULL 終端の文字列です。サブジェクト名に複数の相対識別名 (RDN) が含まれる場合は、隣接する 1 つ以上の RDN を指定できます。複数の RDN を指定する場合、リストはカンマ区切りにします。文字列は NULL 終端文字を含めて 256 文字までに制限されます。空のサブジェクト名は指定できません。

名前にオブジェクト識別子を含めないでください。RDN は証明書に表示される順序とは逆の順序で指定する必要があります。たとえば、証明書のサブジェクト名が "CN=name1, OU=name2, O=name3" の場合、サブジェクト名は "name3, name2, name1" と指定します。

戻り値

次の表に、返される可能性のある値の一部を示します。

戻り値 説明
S_OK
成功しました。
E_ACCESSDENIED
ユーザーにストアの場所へアクセスする権限がありません。
E_NOTIMPL
StoreLocation の値が BG_CERT_STORE_LOCATION 列挙型に定義されていません。
HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)
StoreName パラメーターの値に一致するストアが見つかりませんでした。
CRYPT_E_NOT_FOUND
サブジェクト名に一致する証明書が見つかりませんでした。
RPC_X_NULL_REF_POINTER
StoreName または SubjectName パラメーターに NULL は指定できません。
BG_E_STRING_TOO_LONG
StoreName または SubjectName パラメーターが 256 文字を超えています。
BG_E_INVALID_STATE
ジョブの状態が BG_JOB_STATE_CANCELLED または BG_JOB_STATE_ACKNOWLEDGED であってはなりません。

解説(Remarks)

クライアント証明書を指定できるのはジョブの所有者だけです。ジョブの所有権が変わると、BITS はジョブから証明書を削除します。

クライアント証明書は、HTTP または HTTPS プロトコルを使用するリモートファイルに対してのみ適用されます。証明書はすべてのジョブの種類に指定できます。

Web サイトが SSL クライアント証明書を必須とはしないが受け入れる構成で、かつ BITS ジョブがクライアント証明書を指定していない場合、ジョブは ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED (0x80072f0c) で失敗します。

このメソッドは、サブジェクト名の文字列を使って証明書を部分一致検索します。サブジェクト名は必ずしも一意ではないため、このメソッドはストア内で指定されたサブジェクト名を持ち、かつクライアント認証用である最初の証明書を検索します。単一の証明書に絞り込める可能性を高めるため、完全なサブジェクト名を指定してください。証明書が正しくない (信頼されていない) 場合、BITS がファイルを転送しようとした時点でジョブは BG_E_HTTP_ERROR_403 で失敗し、エラー状態に移行します。サブジェクト名の一意性を保証できない場合は、代わりに IBackgroundCopyJobHttpOptions::SetClientCertificateByID メソッドの使用を検討してください。

スマートカードの証明書識別子 (拇印) はサポートされていません。

次の例は、証明書のサブジェクト名を使用してジョブにクライアント証明書を指定する方法を示しています。この例では、pJob が有効なジョブを指していることを前提としています。


  HRESULT hr = S_OK;
  IBackgroundCopyJob* pJob = NULL;
  IBackgroundCopyJobHttpOptions* pHttpOptions = NULL;

  // Change list of names to actual list of names.
  LPWSTR pSubjectName = L"name3, name2, name1";  
                                                    
  hr = pJob->QueryInterface(__uuidof(IBackgroundCopyJobHttpOptions), (void**)&pHttpOptions);
  pJob->Release();
  if (FAILED(hr))
  {
    wprintf(L"pJob->QueryInterface failed with 0x%x.\n", hr);
    goto cleanup;
  }

  // Use the client certificate in the current user's personal (MY) store.
  hr = pHttpOptions->SetClientCertificateByName(BG_CERT_STORE_LOCATION_CURRENT_USER, 
                                      L"MY", pSubjectName));
  if (FAILED(hr))
  {
    wprintf(L"pHttpOptions->SetClientCertificateByName failed with 0x%x.\n", hr);
    goto cleanup;
  }


cleanup:

  if (pHttpOptions)
  {
    hr = pHttpOptions->Release();
  }
vtbl 5 HRESULT RemoveClientCertificate()

ジョブからクライアント証明書を削除します。

戻り値

次の表に、返される可能性のある値の一部を示します。

戻り値 説明
S_OK
証明書を正常に削除しました。
S_FALSE
ジョブに証明書が指定されていません。
BG_E_INVALID_STATE
ジョブの状態が BG_JOB_STATE_CANCELLED または BG_JOB_STATE_ACKNOWLEDGED であってはなりません。

解説(Remarks)

証明書を指定するには、IBackgroundCopyJobHttpOptions::SetClientCertificateByID メソッドまたは IBackgroundCopyJobHttpOptions::SetClientCertificateByName メソッドを使用します。

vtbl 6 HRESULT GetClientCertificate(BG_CERT_STORE_LOCATION* pStoreLocation, LPWSTR* pStoreName, BYTE** ppCertHashBlob, LPWSTR* pSubjectName)

ジョブからクライアント証明書を取得します。

pStoreLocationBG_CERT_STORE_LOCATION*out証明書の検索に使用するシステムストアの場所を示します。指定可能な値については、BG_CERT_STORE_LOCATION 列挙型を参照してください。
pStoreNameLPWSTR*out証明書ストアの名前を含む、NULL 終端の文字列です。使用後に文字列を解放するには、 CoTaskMemFree 関数を呼び出します。
ppCertHashBlobBYTE**out証明書を識別する SHA1 ハッシュです。使用後に BLOB を解放するには、 CoTaskMemFree 関数を呼び出します。
pSubjectNameLPWSTR*out証明書の単純サブジェクト名を含む、NULL 終端の文字列です。サブジェクト名内の RDN は、証明書に表示される順序とは逆の順序になります。証明書にサブジェクト名が含まれていない場合、サブジェクト名は空になることがあります。使用後に文字列を解放するには、 CoTaskMemFree 関数を呼び出します。

戻り値

次の表に、返される可能性のある値の一部を示します。

戻り値 説明
S_OK
証明書を正常に取得しました。
RPC_X_BAD_STUB_DATA
ジョブに証明書が指定されていないか、ユーザーにその証明書へのアクセス権がありません。
RPC_X_NULL_REF_POINTER
いずれかのパラメーターが NULL です。

解説(Remarks)

証明書を指定するには、IBackgroundCopyJobHttpOptions::SetClientCertificateByID メソッドまたは IBackgroundCopyJobHttpOptions::SetClientCertificateByName メソッドを使用します。

次の例は、クライアント証明書に関する情報を取得する方法を示しています。この例では、pJob が有効なジョブを指していることを前提としています。

#define THUMBPRINT_SIZE 20

  HRESULT hr = S_OK;
  IBackgroundCopyJob* pJob = NULL;
  IBackgroundCopyJobHttpOptions* pHttpOptions = NULL;
  GUID JobId;

  BG_CERT_STORE_LOCATION StoreLocation;
  LPWSTR pStoreName = NULL;
  BYTE* pThumbprint = NULL;
  LPWSTR pSubjectName = NULL;

  // Retrieve a pointer to the IBackgroundCopyJobHttpOptions interface.
  hr = pJob->QueryInterface(__uuidof(IBackgroundCopyJobHttpOptions), (void**)&pHttpOptions);
  pJob->Release();
  if (FAILED(hr))
  {
    wprintf(L"pJob->QueryInterface failed with 0x%x.\n", hr);
    goto cleanup;
  }

  // Retrieve information about the client certificate set on the job. 
  hr = pHttpOptions->GetClientCertificate(&StoreLocation, &pStoreName, 
         &pThumbprint, &pSubjectName);
  if (S_OK == hr)
  {
    wprintf(L"\nLocation: %d\nStore name: %s\nSubject: %s\n", 
        StoreLocation, pStoreName, pSubjectName);

    wprintf(L"Thumbprint: ");
    for (DWORD i = 0; i < THUMBPRINT_SIZE; i++)
    {
      wprintf(L"%x ", pThumbprint[i]);
    }
    wprintf(L"\n");

    CoTaskMemFree(pStoreName);
    CoTaskMemFree(pThumbprint);
    CoTaskMemFree(pSubjectName);
  }
  else if (RPC_X_BAD_STUB_DATA == hr)
  {
    wprintf(L"The job does not specify a client certificate or\n"
            L"the user does not have permission to access the certificate.\n");
  }
  else
  {
    wprintf(L"pHttpOptions->GetClientCertificate failed with 0x%x.\n", hr);
    goto cleanup;
  }


cleanup:

  if (pHttpOptions)
  {
    hr = pHttpOptions->Release();
  }
vtbl 7 HRESULT SetCustomHeaders(LPWSTR RequestHeaders)

HTTP リクエストに含める 1 つ以上のカスタム HTTP ヘッダーを指定します。

RequestHeadersLPWSTRin

HTTP リクエストに追加するカスタムヘッダーを含む、NULL 終端の文字列です。各ヘッダーは復帰と改行 (CR/LF) 文字で終了する必要があります。文字列は NULL 終端文字を含めて 16,384 文字までに制限されます。

ジョブからカスタムヘッダーを削除するには、RequestHeaders パラメーターに NULL を設定します。

戻り値

次の表に、返される可能性のある値の一部を示します。

戻り値 説明
S_OK
成功しました。
BG_E_STRING_TOO_LONG
カスタムヘッダーの長さが 16 KB を超えています。
BG_E_INVALID_STATE
ジョブの状態が BG_JOB_STATE_CANCELLED または BG_JOB_STATE_ACKNOWLEDGED であってはなりません。

解説(Remarks)

カスタムヘッダーは、HTTP または HTTPS プロトコルを使用するリモートファイルに対してのみ適用されます。カスタムヘッダーはすべてのジョブの種類に指定できます。

カスタムヘッダーを指定できるのはジョブの所有者だけです。ジョブの所有権が変わると、BITS はジョブからヘッダーを削除します。

複数の HTTP リクエストが送信される場合、ヘッダーは各リクエストとともに送信される点に注意してください。

カスタムヘッダーを処理する ISAPI は、ヘッダーが無効な場合に HTTP エラーを返すことがあります。BITS がそのエラーをどのように処理するかの詳細については、Handling Server Application Errors を参照してください。

次の例は、ジョブにカスタムヘッダーを指定する方法を示しています。この例では、pJob が有効なジョブを指していることを前提としています。

// Custom headers to include in job.
#define HEADERS L"MyHeader_1: Header One Value\r\n" \
    L"MyHeader_2: Header Two Value\r\n" \
    L"MyHeader_3: Header Three Value\r\n"


  HRESULT hr = S_OK;
  IBackgroundCopyJob* pJob = NULL;
  IBackgroundCopyJobHttpOptions* pHttpOptions = NULL;

  hr = pJob->QueryInterface(__uuidof(IBackgroundCopyJobHttpOptions), (void**)&pHttpOptions);
  pJob->Release();
  if (FAILED(hr))
  {
    wprintf(L"pJob->QueryInterface failed with 0x%x.\n", hr);
    goto cleanup;
  }

  hr = pHttpOptions->SetCustomHeaders(HEADERS);
  if (FAILED(hr))
  {
    wprintf(L"pHttpOptions->SetCustomHeaders failed with 0x%x.\n", hr);
    goto cleanup;
  }


cleanup:

  if (pHttpOptions) 
  {
    hr = pHttpOptions->Release();
  }
vtbl 8 HRESULT GetCustomHeaders(LPWSTR* pRequestHeaders)

以前の IBackgroundCopyJobHttpOptions::SetCustomHeaders の呼び出しで設定されたカスタムヘッダー (つまり、BITS がリモートへ送信するヘッダーであり、BITS がリモートから受信するヘッダーではありません) を取得します。

pRequestHeadersLPWSTR*outカスタムヘッダーを含む、NULL 終端の文字列です。各ヘッダーは復帰と改行 (CR/LF) 文字で終了します。使用後に文字列を解放するには、 CoTaskMemFree 関数を呼び出します。

戻り値

次の表に、返される可能性のある値の一部を示します。

戻り値 説明
S_OK
ヘッダーを正常に取得しました。
S_FALSE
ジョブにカスタムヘッダーが指定されていません。
E_ACCESSDENIED
カスタムヘッダーを取得する権限がないか、ジョブに対して [IBackgroundCopyJobHttpOptions3::MakeCustomHeadersWriteOnly](/windows/desktop/api/bits10_3/nf-bits10_3-ibackgroundcopyjobhttpoptions3-makecustomheaderswriteonly) が呼び出されています。
RPC_X_NULL_REF_POINTER
pRequestHeaders パラメーターが NULL です。

解説(Remarks)

カスタムヘッダーを取得できるのはジョブの所有者だけです。ヘッダーを指定するには、IBackgroundCopyJobHttpOptions::SetCustomHeaders メソッドを呼び出します。

vtbl 9 HRESULT SetSecurityFlags(DWORD Flags)

証明書失効リストを確認するかどうか、特定の証明書エラーを無視するかどうか、およびサーバーが HTTP リクエストをリダイレクトした場合に使用するポリシーを決定する HTTP 用のフラグを設定します。

FlagsDWORDin

サーバーへの接続時に無視するエラーを示す HTTP セキュリティフラグです。次のフラグを 1 つ以上設定できます。

意味
BG_SSL_ENABLE_CRL_CHECK
0x0001
証明書失効リスト (CRL) を確認し、サーバー証明書が失効していないことを検証します。
BG_SSL_IGNORE_CERT_CN_INVALID
0x0002
サーバーの証明書のホスト名がリクエスト内のホスト名と一致しない場合に発生するエラーを無視します。
BG_SSL_IGNORE_CERT_DATE_INVALID
0x0004
証明書の有効期限切れによって発生するエラーを無視します。
BG_SSL_IGNORE_UNKNOWN_CA
0x0008
不明な証明機関 (CA) に関連するエラーを無視します。
BG_SSL_IGNORE_CERT_WRONG_USAGE
0x0010
証明書の用途に関連するエラーを無視します。
BG_HTTP_REDIRECT_POLICY_ALLOW_SILENT
0x0000
サーバーがリクエストを別のサーバーへリダイレクトすることを許可します。これが既定値です。
BG_HTTP_REDIRECT_POLICY_ALLOW_REPORT
0x0100
サーバーがリクエストを別のサーバーへリダイレクトすることを許可します。BITS はリモート名を最終的な URL に更新します。
BG_HTTP_REDIRECT_POLICY_DISALLOW
0x0200
サーバーがリクエストを別のサーバーへリダイレクトした場合、ジョブを致命的エラー状態にします。BITS はリモート名をリダイレクト先の URL に更新します。
BG_HTTP_REDIRECT_POLICY_MASK
0x0700
セキュリティフラグの値と組み合わせて、どのリダイレクトポリシーが有効かを判定するためのビットマスクです。ALLOW_HTTPS_TO_HTTP フラグは含まれません。
BG_HTTP_REDIRECT_POLICY_ALLOW_HTTPS_TO_HTTP
0x0800
サーバーが HTTPS リクエストを HTTP の URL へリダイレクトすることを許可します。

このフラグは BG_HTTP_REDIRECT_POLICY_ALLOW_SILENT および BG_HTTP_REDIRECT_POLICY_ALLOW_REPORT と組み合わせて使用できます。

戻り値

次の表に、返される可能性のある値の一部を示します。

戻り値 説明
S_OK
ヘッダーを正常に取得しました。
E_NOTIMPL
そのフラグ値はサポートされていません。

解説(Remarks)

CRL チェックが要求された場合、BITS はジョブ内で HTTPS プロトコルを指定しているすべてのファイルに対してチェックを実行します。チェックは各ファイルの転送開始前に行われます。BITS がファイルを部分的にダウンロードした後にこの値を TRUE に設定した場合、BITS はジョブを再スケジュールし、そのファイルのダウンロードを最初からやり直します。すでにダウンロード済みのファイルは影響を受けません。

BITS はローカルコンピューターの CRL が最新であればそれを使用します。最新でない場合は、証明書に署名した証明機関 (CA) から CRL をダウンロードします。

次のエラーが発生した場合、ジョブは致命的エラー状態になります。

エラーコード 説明
ERROR_WINHTTP_SECURE_CERT_REV_FAILED 証明書サーバーがオフラインであるか CRL をダウンロードできないため、CRL チェックを要求できません。
ERROR_WINHTTP_SECURE_CERT_REVOKED 証明書が失効しています。

リダイレクトポリシーはダウンロードジョブ内のすべてのファイルに適用されます (アップロードジョブには適用されません)。

BITS 3.0 より前: リダイレクトポリシーはサポートされていません。

ポリシーが BG_HTTP_REDIRECT_POLICY_DISALLOW で、サーバーがリクエストをリダイレクトした場合、ジョブは次のいずれかのエラーコードで致命的エラー状態になります。エラーコードの説明については、HTTP Status Codes を参照してください。

BITS は HTTP または HTTPS から SMB へのリダイレクトをサポートしていません。

ピアキャッシュが有効で BG_HTTP_REDIRECT_POLICY_ALLOW_REPORT を指定した場合、ファイルは最終的なリダイレクト先の URL でキャッシュに格納されます。その後、ピアが元の URL でファイルをダウンロードしようとすると、ピアのキャッシュ内にファイルが見つからず、結果としてオリジンサーバーからファイルをダウンロードすることになります。

を指定し、ファイルが からダウンロードされた場合

BG_HTTP_REDIRECT_POLICY_ALLOW_REPORT を設定すると、IBackgroundCopyJob3::ReplaceRemotePrefix メソッドを呼び出したときの結果に影響する場合がある点に注意してください。サーバーがリクエストをリダイレクトした場合、BITS は元の URL をすでに最終的なリダイレクト先の URL に変更しているため、ReplaceRemotePrefix メソッドを呼び出しても元の URL を持つファイルは見つかりません。

vtbl 10 HRESULT GetSecurityFlags(DWORD* pFlags)

証明書失効リストを確認するかどうか、特定の証明書エラーを無視するかどうか、およびサーバーが HTTP リクエストをリダイレクトした場合に使用するポリシーを決定する HTTP 用のフラグを取得します。

pFlagsDWORD*out

サーバーへの接続時に無視するエラーを示す HTTP セキュリティフラグです。次のフラグを 1 つ以上設定できます。

意味
BG_SSL_ENABLE_CRL_CHECK
0x0001
証明書失効リスト (CRL) を確認し、サーバー証明書が失効していないことを検証します。
BG_SSL_IGNORE_CERT_CN_INVALID
0x0002
サーバーの証明書のホスト名がリクエスト内のホスト名と一致しない場合に発生するエラーを無視します。
BG_SSL_IGNORE_CERT_DATE_INVALID
0x0004
証明書の有効期限切れによって発生するエラーを無視します。
BG_SSL_IGNORE_UNKNOWN_CA
0x0008
不明な証明機関 (CA) に関連するエラーを無視します。
BG_SSL_IGNORE_CERT_WRONG_USAGE
0x0010
証明書の用途に関連するエラーを無視します。
BG_HTTP_REDIRECT_POLICY_ALLOW_SILENT
0x0000
サーバーがリクエストを別のサーバーへリダイレクトすることを許可します。これが既定値です。
BG_HTTP_REDIRECT_POLICY_ALLOW_REPORT
0x0100
サーバーがリクエストを別のサーバーへリダイレクトすることを許可します。BITS はリモート名を最終的な URL に更新します。
BG_HTTP_REDIRECT_POLICY_DISALLOW
0x0200
サーバーがリクエストを別のサーバーへリダイレクトした場合、ジョブを致命的エラー状態にします。BITS はリモート名をリダイレクト先の URL に更新します。
BG_HTTP_REDIRECT_POLICY_MASK
0x0700
セキュリティフラグの値と組み合わせて、どのリダイレクトポリシーが有効かを判定するためのビットマスクです。ALLOW_HTTPS_TO_HTTP フラグは含まれません。

次の例は、このマスクを使用して BG_HTTP_REDIRECT_POLICY_DISALLOW のリダイレクトポリシーを判定する方法を示しています。

if (BG_HTTP_REDIRECT_POLICY_DISALLOW == (flags & BG_HTTP_REDIRECT_POLICY_MASK))

BG_HTTP_REDIRECT_POLICY_ALLOW_HTTPS_TO_HTTP
0x0800
サーバーが HTTPS リクエストを HTTP の URL へリダイレクトすることを許可します。

このフラグは BG_HTTP_REDIRECT_POLICY_ALLOW_SILENT および BG_HTTP_REDIRECT_POLICY_ALLOW_REPORT と組み合わせて使用できます。

戻り値

成功した場合は S_OK を返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IBackgroundCopyJobHttpOptions "{F1BD1079-9F01-4BDC-8036-F09B70095066}"
#usecom global IBackgroundCopyJobHttpOptions IID_IBackgroundCopyJobHttpOptions "{}"
#comfunc global IBackgroundCopyJobHttpOptions_SetClientCertificateByID    3 int,wstr,var
#comfunc global IBackgroundCopyJobHttpOptions_SetClientCertificateByName  4 int,wstr,wstr
#comfunc global IBackgroundCopyJobHttpOptions_RemoveClientCertificate     5
#comfunc global IBackgroundCopyJobHttpOptions_GetClientCertificate        6 var,var,var,var
#comfunc global IBackgroundCopyJobHttpOptions_SetCustomHeaders            7 wstr
#comfunc global IBackgroundCopyJobHttpOptions_GetCustomHeaders            8 var
#comfunc global IBackgroundCopyJobHttpOptions_SetSecurityFlags            9 int
#comfunc global IBackgroundCopyJobHttpOptions_GetSecurityFlags            10 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。