metasploit-framework/external/source/exploits/CVE-2020-0787/BitsArbitraryFileMove/CBitsCom.h

56 lines
1.2 KiB
C++

#pragma once
#include <Windows.h>
#include <iostream>
#include <qmgr.h>
#include <Bits.h>
#include <atlbase.h>
#include <strsafe.h>
#define DEBUG FALSE
#define BITSCOM_GUID_GROUP { 0x63B45B2D, 0xA84B, 0x463E, { 0x9C, 0xD4, 0xC0, 0x48, 0xC1, 0xBF, 0x9E, 0x72 } }
#define MAX_JOBSTATE_NAME 64
enum PrepareJobError
{
BITSCOM_ERR_SUCCESS,
BITSCOM_ERR_COCREATEINSTANCE_BCQMGR,
BITSCOM_ERR_CREATEGROUP,
BITSCOM_ERR_GETGROUP,
BITSCOM_ERR_CANCELGROUP,
BITSCOM_ERR_CREATEJOB,
BITSCOM_ERR_GETJOB,
BITSCOM_ERR_RESUMEJOB,
BITSCOM_ERR_JOB,
BITSCOM_ERR_COMPLETEJOB,
BITSCOM_ERR_ALLOC_FILESETINFO,
BITSCOM_ERR_ALLOC_ADDFILES,
BITSCOM_ERR_QUERYNEWJOBINTERFACE,
BITSCOM_ERR_JOBINTERFACECAST,
BITSCOM_ERR_NEWJOBINTERFACEISNULL
};
class CBitsCom
{
private:
GUID m_guidGroup;
GUID m_guidJob;
IBackgroundCopyQMgr* m_pBackgroundCopyQMgr;
IBackgroundCopyGroup* m_pBackgroundCopyGroup;
IBackgroundCopyJob1* m_pBackgroundCopyJob1;
CComPtr<IUnknown> m_pUnkNewJobInterface;
public:
CBitsCom();
~CBitsCom();
public:
DWORD PrepareJob(LPCWSTR pwszJobLocalFilename);
DWORD ResumeJob();
DWORD CompleteJob();
private:
BOOL GetJobStateName(BG_JOB_STATE bgJobState, LPWSTR pwszJobName);
};