Перечисление заданий в очереди передачи

Чтобы перечислить задания из очереди передачи, вызовите метод IBackgroundCopyManager::EnumJobs . Метод возвращает указатель интерфейса IEnumBackgroundCopyJobs , используемый для перечисления заданий в очереди.

Чтобы получить задания пользователя, задайте для первого параметра метода EnumJobs значение 0. Чтобы получить все задания в очереди, задайте для первого параметра метода EnumJobs значение BG_JOB_ENUM_ALL_USERS. Только пользователи с правами администратора могут получать все задания в очереди передачи.

Обратите внимание, что перечисленный список — это моментальный снимок заданий в очереди передачи во время вызова метода EnumJobs. Однако значения свойств этих заданий отражают текущие значения задания.

Если требуется получить отдельные задания передачи, вызовите метод IBackgroundCopyManager::GetJob .

Сведения о перечислении файлов в задании см. в разделе Перечисление файлов в задании.

В следующем примере показано, как перечислить задания в очереди передачи. Переменная g_XferManager в примере — указатель интерфейса IBackgroundCopyManager. Дополнительные сведения о создании указателя интерфейса IBackgroundCopyManager см. в Подключение службе 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;
}