使用BITs服务拷贝文件

BITS原本是可以上传下载文件,下载功能也可以作为拷贝文件来使用,实际拷贝是通过后台服务完成, 这样就可以绕过一些杀软的行为检测

参考链接:https://docs.microsoft.com/en-us/windows/desktop/Bits/how-to-get-the-last-set-of-http-headers-received-for-each-file-in-a-bits-download-job

#include "stdafx.h"
#include <bits.h>



int _tmain(int argc, _TCHAR* argv[])
{

	IBackgroundCopyJob* pJob;
	BG_JOB_STATE State;
	HANDLE hTimer = NULL;
	LARGE_INTEGER liDueTime;

	IBackgroundCopyManager* pManager;

	HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

		hr = CoCreateInstance(__uuidof(BackgroundCopyManager),
			NULL,
			CLSCTX_LOCAL_SERVER,
			__uuidof(IBackgroundCopyManager),
			(void**)&pManager);


	// Create the BITS job
	GUID guidJob;
	IBackgroundCopyJob* pBackgroundCopyJob;

	hr = pManager->CreateJob(L"TransferPolicy",
		BG_JOB_TYPE_DOWNLOAD,
		&guidJob,
		(IBackgroundCopyJob **)&pBackgroundCopyJob);

	typedef struct _BG_FILE_INFO {
		LPWSTR RemoteName;
		LPWSTR LocalName;
	} BG_FILE_INFO;

	BG_FILE_INFO bg = { L"d:\\1.txt", L"d:\\2.txt" };


	// add job
	hr = pBackgroundCopyJob->AddFile(bg.RemoteName,bg.LocalName);
	hr = pBackgroundCopyJob->Resume();


	liDueTime.QuadPart = -10000000;  //Poll every 1 second
	hTimer = CreateWaitableTimer(NULL, FALSE, NULL);
	SetWaitableTimer(hTimer, &liDueTime, 1000, NULL, NULL, 0);

	do
	{
		WaitForSingleObject(hTimer, INFINITE);

		pBackgroundCopyJob->GetState(&State);
	
		if (BG_JOB_STATE_TRANSFERRED == State)
			pBackgroundCopyJob->Complete();
		

	} while (BG_JOB_STATE_TRANSFERRED == State);

	CancelWaitableTimer(hTimer);
	CloseHandle(hTimer);


	pBackgroundCopyJob->Release();
	pBackgroundCopyJob = NULL;

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值