446 lines
12 KiB
Plaintext
446 lines
12 KiB
Plaintext
|
//=======================================================================
|
||
|
//
|
||
|
// Copyright (c) 2000 Microsoft Corporation. All Rights Reserved.
|
||
|
//
|
||
|
// File: qmgr.idl
|
||
|
//
|
||
|
// Description:
|
||
|
// Declares the QMgr COM interface
|
||
|
//
|
||
|
//=======================================================================
|
||
|
|
||
|
#ifndef DO_NO_IMPORTS
|
||
|
import "unknwn.idl";
|
||
|
import "ocidl.idl";
|
||
|
import "oleidl.idl";
|
||
|
import "oaidl.idl";
|
||
|
import "docobj.idl";
|
||
|
#endif
|
||
|
|
||
|
cpp_quote("// Background Copy QMgr Public Interface")
|
||
|
|
||
|
//various events and flags
|
||
|
|
||
|
/*************Notify flags**************/
|
||
|
cpp_quote("#define QM_NOTIFY_FILE_DONE 0x00000001")
|
||
|
cpp_quote("#define QM_NOTIFY_JOB_DONE 0x00000002")
|
||
|
cpp_quote("#define QM_NOTIFY_GROUP_DONE 0x00000004")
|
||
|
cpp_quote("#define QM_NOTIFY_DISABLE_NOTIFY 0x00000040")
|
||
|
cpp_quote("#define QM_NOTIFY_USE_PROGRESSEX 0x00000080")
|
||
|
|
||
|
/*************Status flags**************/
|
||
|
cpp_quote("#define QM_STATUS_FILE_COMPLETE 0x00000001")
|
||
|
cpp_quote("#define QM_STATUS_FILE_INCOMPLETE 0x00000002")
|
||
|
cpp_quote("#define QM_STATUS_JOB_COMPLETE 0x00000004")
|
||
|
cpp_quote("#define QM_STATUS_JOB_INCOMPLETE 0x00000008")
|
||
|
cpp_quote("#define QM_STATUS_JOB_ERROR 0x00000010")
|
||
|
cpp_quote("#define QM_STATUS_JOB_FOREGROUND 0x00000020")
|
||
|
cpp_quote("#define QM_STATUS_GROUP_COMPLETE 0x00000040")
|
||
|
cpp_quote("#define QM_STATUS_GROUP_INCOMPLETE 0x00000080")
|
||
|
cpp_quote("#define QM_STATUS_GROUP_SUSPENDED 0x00000100")
|
||
|
cpp_quote("#define QM_STATUS_GROUP_ERROR 0x00000200")
|
||
|
cpp_quote("#define QM_STATUS_GROUP_FOREGROUND 0x00000400")
|
||
|
|
||
|
/*************Protocol flags***************/
|
||
|
cpp_quote("#define QM_PROTOCOL_HTTP 1")
|
||
|
cpp_quote("#define QM_PROTOCOL_FTP 2")
|
||
|
cpp_quote("#define QM_PROTOCOL_SMB 3")
|
||
|
cpp_quote("#define QM_PROTOCOL_CUSTOM 4")
|
||
|
|
||
|
/**************Progress Flags**************/
|
||
|
cpp_quote("#define QM_PROGRESS_PERCENT_DONE 1")
|
||
|
cpp_quote("#define QM_PROGRESS_TIME_DONE 2")
|
||
|
cpp_quote("#define QM_PROGRESS_SIZE_DONE 3")
|
||
|
|
||
|
/**************Error Codes****************/
|
||
|
cpp_quote("#define QM_E_INVALID_STATE 0x81001001")
|
||
|
cpp_quote("#define QM_E_SERVICE_UNAVAILABLE 0x81001002")
|
||
|
cpp_quote("#define QM_E_DOWNLOADER_UNAVAILABLE 0x81001003")
|
||
|
cpp_quote("#define QM_E_ITEM_NOT_FOUND 0x81001004")
|
||
|
|
||
|
#if defined(TEST_TIMES)
|
||
|
|
||
|
typedef struct _BACKGROUND_COPY_TIMES
|
||
|
{
|
||
|
FILETIME ftCreationTime;
|
||
|
FILETIME ftModificationTime;
|
||
|
FILETIME ftCompletionTime;
|
||
|
} BACKGROUND_COPY_TIMES;
|
||
|
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// =============================
|
||
|
// Marshalled interfaces
|
||
|
// =============================
|
||
|
|
||
|
// ==============================================
|
||
|
// IJob Interface
|
||
|
// The IJob interface is the management layer for a file (or set of files)
|
||
|
// to be transferred.
|
||
|
[
|
||
|
uuid(59f5553c-2031-4629-bb18-2645a6970947),
|
||
|
helpstring("IBackgroundCopyJob Interface"),
|
||
|
odl
|
||
|
]
|
||
|
interface IBackgroundCopyJob1 : IUnknown
|
||
|
{
|
||
|
typedef struct _FILESETINFO
|
||
|
{
|
||
|
BSTR bstrRemoteFile;
|
||
|
BSTR bstrLocalFile;
|
||
|
DWORD dwSizeHint;
|
||
|
} FILESETINFO;
|
||
|
|
||
|
HRESULT CancelJob();
|
||
|
|
||
|
/*
|
||
|
|
||
|
return Job2::Cancel();
|
||
|
|
||
|
*/
|
||
|
|
||
|
HRESULT GetProgress([in] DWORD dwFlags, [out] DWORD *pdwProgress);
|
||
|
|
||
|
/*
|
||
|
|
||
|
flags == TIME_DONE:
|
||
|
|
||
|
return E_NOTIMPL
|
||
|
|
||
|
flags == SIZE_DONE:
|
||
|
|
||
|
return BYTES_DOWNLOADED property
|
||
|
|
||
|
flags == PERCENT_DONE:
|
||
|
|
||
|
return 100 * (BYTES_DOWNLOADED property) / (BYTES_TOTAL property)
|
||
|
|
||
|
*/
|
||
|
|
||
|
HRESULT GetStatus( [out] DWORD *pdwStatus,
|
||
|
[out] DWORD *pdwWin32Result,
|
||
|
[out] DWORD *pdwTransportResult,
|
||
|
[out] DWORD *pdwNumOfRetries );
|
||
|
|
||
|
/*
|
||
|
|
||
|
dwStatus:
|
||
|
|
||
|
if (foreground priority)
|
||
|
set QM_STATUS_JOB_FOREGROUND
|
||
|
|
||
|
get JOBPROP_STATUS_FLAGS
|
||
|
|
||
|
if flags & QM_STATUS_COMPLETE
|
||
|
set QM_JOB_STATUS_COMPLETE
|
||
|
else
|
||
|
set QM_JOB_STATUS_INCOMPLETE
|
||
|
|
||
|
if flags & QM_STATUS_ERROR
|
||
|
set QM_JOB_STATUS_ERROR
|
||
|
|
||
|
dwWin32Result:
|
||
|
|
||
|
return JOBPROP_LAST_LOCAL_STATUS
|
||
|
|
||
|
dwTransportResult:
|
||
|
|
||
|
return JOBPROP_LAST_TRANSPORT_STATUS
|
||
|
|
||
|
dwNumOfRetries:
|
||
|
|
||
|
return JOBPROP_RETRY_COUNT
|
||
|
|
||
|
*/
|
||
|
|
||
|
HRESULT AddFiles([in] ULONG cFileCount, [in, size_is(cFileCount)] FILESETINFO **ppFileSet);
|
||
|
|
||
|
/*
|
||
|
|
||
|
return Job2::AddFiles( cFileCount, ppFileSet );
|
||
|
|
||
|
*/
|
||
|
|
||
|
|
||
|
HRESULT GetFile([in] ULONG cFileIndex, [out] FILESETINFO *pFileInfo);
|
||
|
|
||
|
/*
|
||
|
|
||
|
allocate FILESETINFO struct
|
||
|
|
||
|
Job2::GetFile( cFileIndex, &pInterface )
|
||
|
|
||
|
fill in struct from interface calls
|
||
|
|
||
|
*/
|
||
|
|
||
|
HRESULT GetFileCount([out] DWORD *pdwFileCount);
|
||
|
|
||
|
/*
|
||
|
|
||
|
return JOBPROP_FILES_TOTAL;
|
||
|
|
||
|
*/
|
||
|
|
||
|
HRESULT SwitchToForeground();
|
||
|
|
||
|
/*
|
||
|
|
||
|
set JOBPROP_PRIORITY = PRIORITY_FOREGROUND
|
||
|
|
||
|
*/
|
||
|
|
||
|
HRESULT get_JobID([out] GUID *pguidJobID); // used to a identify a job when enumerating jobs
|
||
|
|
||
|
/*
|
||
|
|
||
|
return JOBPROP_ID
|
||
|
|
||
|
*/
|
||
|
|
||
|
#if defined(TEST_TIMES)
|
||
|
|
||
|
HRESULT GetTimes( [out,ref] BACKGROUND_COPY_TIMES *pTimes );
|
||
|
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
// ==============================================
|
||
|
// IEnumJobs Interface
|
||
|
// This interface allows enumerating the jobs under a Group
|
||
|
[
|
||
|
uuid(8baeba9d-8f1c-42c4-b82c-09ae79980d25),
|
||
|
helpstring("IEnumBackgroundCopyJobs Interface"),
|
||
|
odl
|
||
|
]
|
||
|
interface IEnumBackgroundCopyJobs1 : IUnknown
|
||
|
{
|
||
|
/*
|
||
|
|
||
|
constructor creates an EnumJobs2 interface
|
||
|
|
||
|
*/
|
||
|
|
||
|
HRESULT Next([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] GUID *rgelt, [out] ULONG *pceltFetched);
|
||
|
|
||
|
/*
|
||
|
|
||
|
IJob2 * Array[ celt ];
|
||
|
|
||
|
pInterface->Next( celt, Array, *count );
|
||
|
|
||
|
for (i=0; i < count; ++i)
|
||
|
rgelt = Array[i]->JOBPROP_ID;
|
||
|
|
||
|
|
||
|
*/
|
||
|
|
||
|
HRESULT Skip([in] ULONG celt);
|
||
|
HRESULT Reset();
|
||
|
HRESULT Clone([out] IEnumBackgroundCopyJobs1 **ppenum);
|
||
|
HRESULT GetCount([out] ULONG *puCount);
|
||
|
|
||
|
/*
|
||
|
|
||
|
pass all four to pInterface
|
||
|
|
||
|
*/
|
||
|
}
|
||
|
|
||
|
// ==============================================
|
||
|
// IGroup Interface
|
||
|
// This interface is the base unit of management for a Job or Set of Jobs
|
||
|
[
|
||
|
uuid(1ded80a7-53ea-424f-8a04-17fea9adc4f5),
|
||
|
helpstring("IBackgroundCopyGroup Interface"),
|
||
|
odl
|
||
|
]
|
||
|
interface IBackgroundCopyGroup : IUnknown
|
||
|
{
|
||
|
typedef enum GROUPPROP {
|
||
|
GROUPPROP_PRIORITY = 0, // DWORD Priority Level for this Group
|
||
|
GROUPPROP_REMOTEUSERID = 1, // User Credentials for Remote Server
|
||
|
GROUPPROP_REMOTEUSERPWD = 2,
|
||
|
GROUPPROP_LOCALUSERID = 3, // User Credentials for Local Machine, or flag for system credentials on NT,
|
||
|
GROUPPROP_LOCALUSERPWD = 4,
|
||
|
GROUPPROP_PROTOCOLFLAGS = 5, // specifies the protocol information about the server, HTTP, SSL, SMB, DAV
|
||
|
GROUPPROP_NOTIFYFLAGS = 6, // Notification Type/Frequency Flags (per Job, per Group, progress and error notifications)
|
||
|
GROUPPROP_NOTIFYCLSID = 7, // CLSID that implements the IBackgroundCallback interface for notifications, we'll create this to do callbacks
|
||
|
GROUPPROP_PROGRESSSIZE = 8, // Turns on Progress Notifications for Size Values (e.g. notify every 4k, 8k, etc..)
|
||
|
GROUPPROP_PROGRESSPERCENT = 9, // Turns on Progress Notifications for Percent Value (e.g. Notify every 10%, 5%, etc..)
|
||
|
GROUPPROP_PROGRESSTIME = 10, // Turns on Progress Notifications for Time
|
||
|
GROUPPROP_DISPLAYNAME = 11, // friendly display name of the group (something we can display in a future UI
|
||
|
GROUPPROP_DESCRIPTION = 12
|
||
|
} GROUPPROP;
|
||
|
|
||
|
HRESULT GetProp([in] GROUPPROP propID, [out] VARIANT *pvarVal);
|
||
|
|
||
|
[local] HRESULT SetProp([in] GROUPPROP propID, [in] VARIANT *pvarVal);
|
||
|
[call_as(SetProp)] HRESULT InternalSetProp([in] GROUPPROP propID, [in] VARIANT *pvarVal);
|
||
|
|
||
|
HRESULT GetProgress([in] DWORD dwFlags, [out] DWORD *pdwProgress);
|
||
|
HRESULT GetStatus([out] DWORD *pdwStatus, [out] DWORD *pdwJobIndex);
|
||
|
|
||
|
/*
|
||
|
|
||
|
translate into Group2 properties
|
||
|
|
||
|
*/
|
||
|
|
||
|
HRESULT GetJob([in] GUID jobID, [out] IBackgroundCopyJob1 **ppJob);
|
||
|
HRESULT SuspendGroup();
|
||
|
HRESULT ResumeGroup(); // New groups are by default suspended, when all jobs are initialized call resumegroup to enable the group
|
||
|
HRESULT CancelGroup();
|
||
|
|
||
|
HRESULT get_Size([out] DWORD *pdwSize); // gets the calculated size of the jobs in this group
|
||
|
HRESULT get_GroupID([out] GUID *pguidGroupID); // used to identify a group when enumerating groups
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
|
||
|
pass to Group2 interface
|
||
|
|
||
|
*/
|
||
|
|
||
|
HRESULT CreateJob([in] GUID guidJobID, [out] IBackgroundCopyJob1 **ppJob);
|
||
|
|
||
|
/*
|
||
|
|
||
|
create a Job2 and a wrapper Job
|
||
|
|
||
|
*/
|
||
|
|
||
|
HRESULT EnumJobs([in] DWORD dwFlags, [out] IEnumBackgroundCopyJobs1 **ppEnumJobs);
|
||
|
|
||
|
/*
|
||
|
|
||
|
create an EnumJobs which will wrap around an EnumJobs2
|
||
|
|
||
|
*/
|
||
|
|
||
|
HRESULT SwitchToForeground();
|
||
|
|
||
|
// end of the original Mars interface is here
|
||
|
|
||
|
HRESULT QueryNewJobInterface( [in] REFIID iid, [out, iid_is(iid)] IUnknown ** pUnk );
|
||
|
|
||
|
HRESULT SetNotificationPointer( [in] REFIID iid, [in] IUnknown * pUnk );
|
||
|
}
|
||
|
|
||
|
// ==============================================
|
||
|
// IEnumGroups Interface
|
||
|
[
|
||
|
uuid(d993e603-4aa4-47c5-8665-c20d39c2ba4f),
|
||
|
helpstring("IEnumBackgroundCopyGroups Interface"),
|
||
|
odl
|
||
|
]
|
||
|
interface IEnumBackgroundCopyGroups : IUnknown
|
||
|
{
|
||
|
/*
|
||
|
|
||
|
analagous to EnumJobs interface
|
||
|
|
||
|
*/
|
||
|
|
||
|
HRESULT Next([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] GUID *rgelt, [out] ULONG *pceltFetched);
|
||
|
HRESULT Skip([in] ULONG celt);
|
||
|
HRESULT Reset();
|
||
|
HRESULT Clone([out] IEnumBackgroundCopyGroups **ppenum);
|
||
|
HRESULT GetCount([out] ULONG *puCount);
|
||
|
}
|
||
|
|
||
|
// ==============================================
|
||
|
// IBackgroundCallback Interface
|
||
|
// This interface is implemented by the client and is used by the queue manager to supply status and
|
||
|
// progress information to the client.
|
||
|
[
|
||
|
uuid(084f6593-3800-4e08-9b59-99fa59addf82),
|
||
|
helpstring("IBackgroundCopyCallback Interface"),
|
||
|
odl
|
||
|
]
|
||
|
interface IBackgroundCopyCallback1 : IUnknown
|
||
|
{
|
||
|
HRESULT OnStatus( [in] IBackgroundCopyGroup *pGroup,
|
||
|
[in] IBackgroundCopyJob1 *pJob,
|
||
|
[in] DWORD dwFileIndex,
|
||
|
[in] DWORD dwStatus,
|
||
|
[in] DWORD dwNumOfRetries,
|
||
|
[in] DWORD dwWin32Result,
|
||
|
[in] DWORD dwTransportResult );
|
||
|
|
||
|
/*
|
||
|
|
||
|
return corresponding properties from active Job2
|
||
|
|
||
|
*/
|
||
|
|
||
|
HRESULT OnProgress( [in] DWORD ProgressType,
|
||
|
[in] IBackgroundCopyGroup *pGroup,
|
||
|
[in] IBackgroundCopyJob1 *pJob,
|
||
|
[in] DWORD dwFileIndex,
|
||
|
[in] DWORD dwProgressValue );
|
||
|
|
||
|
HRESULT OnProgressEx( [in] DWORD ProgressType,
|
||
|
[in] IBackgroundCopyGroup *pGroup,
|
||
|
[in] IBackgroundCopyJob1 *pJob,
|
||
|
[in] DWORD dwFileIndex,
|
||
|
[in] DWORD dwProgressValue,
|
||
|
[in] DWORD dwByteArraySize,
|
||
|
[in, size_is(dwByteArraySize)] BYTE *pByte );
|
||
|
|
||
|
/*
|
||
|
|
||
|
see which features are actually in use; translate into Job2 properties.
|
||
|
|
||
|
BUGBUG need to decide whether to implement ProgressEx (streaming)
|
||
|
|
||
|
*/
|
||
|
}
|
||
|
|
||
|
[
|
||
|
uuid(16f41c69-09f5-41d2-8cd8-3c08c47bc8a8), // IID_IQMgr
|
||
|
helpstring("Background Copy QMgr interface"),
|
||
|
odl
|
||
|
]
|
||
|
interface IBackgroundCopyQMgr : IUnknown
|
||
|
{
|
||
|
// Group Interface Methods (Groups contain sets of related Jobs)
|
||
|
HRESULT CreateGroup([in] GUID guidGroupID, [out] IBackgroundCopyGroup **ppGroup);
|
||
|
HRESULT GetGroup([in] GUID groupID, [out] IBackgroundCopyGroup **ppGroup);
|
||
|
HRESULT EnumGroups([in] DWORD dwFlags, [out] IEnumBackgroundCopyGroups **ppEnumGroups);
|
||
|
|
||
|
/*
|
||
|
|
||
|
direct translation into Group2 etc.
|
||
|
|
||
|
*/
|
||
|
}
|
||
|
|
||
|
//---------------------------------------------------------------------------
|
||
|
|
||
|
// IQMgr
|
||
|
[
|
||
|
uuid(f5b26dcb-b37e-4d7c-ae7a-1cb3fbeb183e), // LIBID_QMgr
|
||
|
helpstring("Microsoft Background Copy Queue Manager 1.0"),
|
||
|
lcid(0x0000),
|
||
|
version(1.0)
|
||
|
]
|
||
|
library BackgroundCopyQMgr
|
||
|
{
|
||
|
//-------------------------------------------------------------
|
||
|
// QMgr
|
||
|
//-------------------------------------------------------------
|
||
|
|
||
|
[
|
||
|
uuid(69AD4AEE-51BE-439b-A92C-86AE490E8B30),
|
||
|
helpstring("Background Copy QMgr Class")
|
||
|
]
|
||
|
coclass BackgroundCopyQMgr
|
||
|
{
|
||
|
[default] interface IBackgroundCopyQMgr;
|
||
|
};
|
||
|
|
||
|
}
|