Condividi tramite


Enumerazione dei processi nella coda di trasferimento

Per enumerare i processi dalla coda di trasferimento, chiamare il metodo IBackgroundCopyManager::EnumJobs. Il metodo restituisce un puntatore all'interfaccia IEnumBackgroundCopyJobs usato per enumerare i processi nella coda.

Per recuperare i processi dell'utente, impostare il primo parametro del metodo EnumJobs su 0. Per recuperare tutti i processi nella coda, impostare il primo parametro del metodo EnumJobs su BG_JOB_ENUM_ALL_Uedizione Standard RS. Solo gli utenti con privilegi di amministratore possono recuperare tutti i processi nella coda di trasferimento.

Si noti che l'elenco enumerato è uno snapshot dei processi nella coda di trasferimento al momento della chiamata al metodo EnumJobs. Tuttavia, i valori delle proprietà di tali processi riflettono i valori correnti del processo.

Per recuperare singoli processi di trasferimento, chiamare il metodo IBackgroundCopyManager::GetJob.

Per enumerare i file in un processo, vedere Enumerazione di file in un processo.

Nell'esempio seguente viene illustrato come enumerare i processi nella coda di trasferimento. La variabile g_XferManager nell'esempio è un puntatore all'interfaccia IBackgroundCopyManager. Per informazioni dettagliate su come creare il puntatore all'interfaccia IBackgroundCopyManager, vedere Connessione al servizio 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;
}