Erstellen eines Auftrags

Um einen Übertragungsauftrag zu erstellen, rufen Sie die IBackgroundCopyManager::CreateJob-Methode auf. Nachdem BITS den Auftrag erstellt hat, fügen Sie dem Auftrag Dateien hinzu , und ändern Sie die Eigenschaften des Auftrags entsprechend Ihrer Anwendung. Um den Auftrag in der Warteschlange zu aktivieren, rufen Sie die IBackgroundCopyJob::Resume-Methode auf.

Die CreateJob-Methode erstellt eine GUID, die den Auftrag eindeutig identifiziert. Sie verwenden die GUID, um den Auftrag aus der Übertragungswarteschlange abzurufen. Der Anzeigename, den Sie beim Erstellen des Auftrags angeben, ist nicht eindeutig. mehrere Aufträge können denselben Namen verwenden.

BITS beschränkt die Anzahl von Aufträgen in der Warteschlange auf 300 Aufträge und die Anzahl der Aufträge, die ein Benutzer erstellen kann, auf 60 Aufträge. Diese Grenzwerte gelten nicht für Administratoren oder Dienste. Informationen zum Ändern dieser Standardgrenzwerte finden Sie unter Gruppenrichtlinien.

Das folgende Beispiel zeigt, wie Sie einen Downloadauftrag erstellen. Im Beispiel wird davon ausgegangen, dass die variable g_pbcm ein gültiger IBackgroundCopyManager-Schnittstellenzeiger ist. Ausführliche Informationen zum Erstellen des IBackgroundCopyManager-Schnittstellenzeigers finden Sie unter Herstellen einer Verbindung mit dem BITS-Dienst.

HRESULT hr;
GUID JobId;
IBackgroundCopyJob* pJob = NULL;

//To create an upload job, replace BG_JOB_TYPE_DOWNLOAD with 
//BG_JOB_TYPE_UPLOAD or BG_JOB_TYPE_UPLOAD_REPLY.
hr = g_pbcm->CreateJob(L"MyJobName", BG_JOB_TYPE_DOWNLOAD, &JobId, &pJob);
if (SUCCEEDED(hr))
{
  //Save the JobId for later reference. 
  //Modify the job's property values.
  //Add files to the job.
  //Activate (resume) the job in the transfer queue.
}

Um die neueste IBackgroundCopyJob-Schnittstelle abzurufen, rufen Sie die IBackgroundCopyJob::QueryInterface-Methode auf. Das folgende Beispiel zeigt, wie Sie die IBackgroundCopyJob5-Schnittstelle abrufen.

  HRESULT hr = S_OK;
  IBackgroundCopyJob* pJob = NULL;
  IBackgroundCopyJob5* pJob5 = NULL;

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