Herstellen einer Verbindung mit dem BITS-Dienst

Um eine Verbindung mit dem BITS-Systemdienst herzustellen, erstellen Sie eine instance des BackgroundCopyManager-Objekts, wie im folgenden Beispiel gezeigt. Der BITS-Systemdienst ist der Windows-Systemdienst, der auf dem Clientcomputer ausgeführt wird, der die Hintergrundübertragungsfunktion implementiert.

#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h>
#include <bits.h>

//Global variable that several of the code examples in this document reference.
IBackgroundCopyManager* g_pbcm = NULL;  
HRESULT hr;

//Specify the appropriate COM threading model for your application.
hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
if (SUCCEEDED(hr))
{
  hr = CoCreateInstance(__uuidof(BackgroundCopyManager), NULL,
                        CLSCTX_LOCAL_SERVER,
                        __uuidof(IBackgroundCopyManager),
                        (void**) &g_pbcm);
  if (SUCCEEDED(hr))
  {
    //Use g_pbcm to create, enumerate, or retrieve jobs from the queue.
  }
}

Um auf eine bestimmte Version von BITS zu testen, verwenden Sie einen symbolischen Klassenbezeichner für den BackgroundCopyManager basierend auf der Version, die Sie überprüfen möchten. Verwenden Sie zum Testen auf BITS 10.2 beispielsweise CLSID_BackgroundCopyManager10_2.

Das folgende Beispiel zeigt, wie Sie einen der symbolischen Klassenbezeichner verwenden.

  hr = CoCreateInstance(CLSID_BackgroundCopyManager5_0, NULL,
                        CLSCTX_LOCAL_SERVER,
                        IID_IBackgroundCopyManager,
                        (void**) &g_pbcm);
  if (SUCCEEDED(hr))
  {
    //BITS 5.0 is installed.
  }

Verwenden Sie die Methoden der IBackgroundCopyManager-Schnittstelle , um Übertragungsaufträge zu erstellen, Aufträge in der Warteschlange aufzulisten und Aufträge abzurufen.

BITS erfordert, dass die Schnittstellenproxys des Clients entweder die Identitätswechselebene IDENTIFY oder IMPERSONATE verwenden. Wenn die Anwendung CoInitializeSecurity nicht aufruft, verwendet COM standardmäßig IDENTIFY. BITS schlägt mit E_ACCESSDENIED fehl, wenn die richtige Identitätswechselebene nicht festgelegt ist. Wenn Sie eine Bibliothek bereitstellen, die die BITS-Schnittstellen durchführt, und eine Anwendung, die Ihre Bibliothek aufruft, die Identitätswechselebene unter IDENTIFY festlegt, müssen Sie CoSetProxyBlanket aufrufen, um die richtige Identitätswechselebene für jede aufgerufene BITS-Schnittstelle festzulegen.

Bevor Ihre Anwendung beendet wird, geben Sie Ihre Kopie des IBackgroundCopyManager-Schnittstellenzeigers frei, wie im folgenden Beispiel gezeigt.

if (g_pbcm)
{
  g_pbcm->Release();
  g_pbcm = NULL;
}
CoUninitialize();

Aufrufen von BITS aus .NET und C# für BITS