Enumerando trabalhos na fila de transferência

Para enumerar trabalhos da fila de transferência, chame o método IBackgroundCopyManager::EnumJobs. O método retorna um ponteiro de interface IEnumBackgroundCopyJobs que você usa para enumerar os trabalhos na fila.

Para recuperar os trabalhos do usuário, defina o primeiro parâmetro do método EnumJobs como 0. Para recuperar todos os trabalhos na fila, defina o primeiro parâmetro do método EnumJobs como BG_JOB_ENUM_ALL_USERS. Somente usuários com privilégios de administrador podem recuperar todos os trabalhos na fila de transferência.

Observe que a lista enumerada é um instantâneo dos trabalhos na fila de transferência no momento em que você chama o método EnumJobs . No entanto, os valores de propriedade desses trabalhos refletem os valores atuais do trabalho.

Se você quiser recuperar trabalhos de transferência individuais, chame o método IBackgroundCopyManager::GetJob.

Para enumerar arquivos em um trabalho, consulte Enumerando arquivos em um trabalho.

O exemplo a seguir mostra como enumerar trabalhos na fila de transferência. A variável g_XferManager no exemplo é um ponteiro de interface IBackgroundCopyManager. Para obter detalhes sobre como criar o ponteiro de interface IBackgroundCopyManager, consulte Conectando-se ao serviço BITS.

HRESULT hr = 0;
IEnumBackgroundCopyJobs* pJobs = NULL;
IBackgroundCopyJob* pJob = NULL;
ULONG cJobCount = 0;
ULONG idx = 0;

//This example enumerates all jobs in the transfer queue. This call fails if the 
//current user does not have administrator privileges. To enumerate jobs for only 
//the current user, replace BG_JOB_ENUM_ALL_USERS with 0.
hr = g_XferManager->EnumJobs(BG_JOB_ENUM_ALL_USERS, &pJobs);
if (SUCCEEDED(hr))
{
  //Get the count of jobs in the queue. 
  pJobs->GetCount(&cJobCount);

  //Enumerate the jobs in the queue.
  for (idx=0; idx<cJobCount; idx++)
  {
    hr = pJobs->Next(1, &pJob, NULL);
    if (S_OK == hr)
    {
      //Retrieve or set job properties.

      pJob->Release();
      pJob = NULL;
    }
    else
    {
      //Handle error
      break;
    }
  }

  pJobs->Release();
  pJobs = NULL;
}