枚举传输队列中的作业
若要从传输队列枚举作业,请调用 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;
}