windows-nt/Source/XPSP1/NT/admin/services/drizzle/idl/bits.idl
2020-09-26 16:20:57 +08:00

445 lines
12 KiB
Plaintext

//=======================================================================
//
// Copyright (c) 2000 Microsoft Corporation. All Rights Reserved.
//
// File: bits.idl
//
// Description:
//
// Interface to the background file copier.
//
//=======================================================================
#ifndef DO_NO_IMPORTS
import "unknwn.idl";
#endif
cpp_quote("#include \"bitsmsg.h\"")
cpp_quote("#define BG_SIZE_UNKNOWN (UINT64)(-1)")
#define BG_ENUM_SIZEIS(maxcount) maxcount
#define BG_ENUM_LENGTHIS(maxcount,lengthptr) \
lengthptr ? *lengthptr : maxcount
//
// =============================
// Marshalled interfaces
// =============================
[
uuid(01b7bd23-fb88-4a77-8490-5891d3e4653a),
odl
]
interface IBackgroundCopyFile : IUnknown
{
typedef struct _BG_FILE_PROGRESS
{
UINT64 BytesTotal;
UINT64 BytesTransferred;
BOOL Completed;
}
BG_FILE_PROGRESS;
//--------------------------------------------------------------------
HRESULT GetRemoteName( [out] LPWSTR *pVal );
HRESULT GetLocalName( [out] LPWSTR *pVal );
HRESULT GetProgress( [out] BG_FILE_PROGRESS *pVal );
}
//--------------------------------------------------------------------
//
[
uuid(ca51e165-c365-424c-8d41-24aaa4ff3c40),
helpstring("IEnumBackgroundCopyFiles Interface"),
odl
]
interface IEnumBackgroundCopyFiles : IUnknown
{
HRESULT Next( [in] ULONG celt,
[out, size_is(BG_ENUM_SIZEIS(celt)), length_is(BG_ENUM_LENGTHIS(celt,pceltFetched))] IBackgroundCopyFile **rgelt,
[in,out,unique] ULONG *pceltFetched );
HRESULT Skip( [in] ULONG celt);
HRESULT Reset();
HRESULT Clone( [out] IEnumBackgroundCopyFiles **ppenum );
HRESULT GetCount( [out] ULONG *puCount );
}
//--------------------------------------------------------------------
//
[
uuid(19c613a0-fcb8-4f28-81ae-897c3d078f81),
helpstring("error object for IBackgroundCopyJob"),
odl
]
interface IBackgroundCopyError : IUnknown
{
typedef enum
{
BG_ERROR_CONTEXT_NONE = 0,
BG_ERROR_CONTEXT_UNKNOWN = 1,
BG_ERROR_CONTEXT_GENERAL_QUEUE_MANAGER = 2,
BG_ERROR_CONTEXT_QUEUE_MANAGER_NOTIFICATION = 3,
BG_ERROR_CONTEXT_LOCAL_FILE = 4,
BG_ERROR_CONTEXT_REMOTE_FILE = 5,
BG_ERROR_CONTEXT_GENERAL_TRANSPORT = 6,
BG_ERROR_CONTEXT_REMOTE_APPLICATION = 7
} BG_ERROR_CONTEXT;
HRESULT GetError( [out,ref] BG_ERROR_CONTEXT *pContext,
[out,ref] HRESULT *pCode );
// Returns BG_E_FILE_NOT_AVAILABLE if no file is available
HRESULT GetFile( [out] IBackgroundCopyFile ** pVal );
// Return a human readable description of the error.
// Use CoTaskMemFree to free the description.
HRESULT GetErrorDescription( [in] DWORD LanguageId,
[out,ref] LPWSTR *pErrorDescription );
// Return a human readable description of the error context.
// Use CoTaskMemFree to free the description.
HRESULT GetErrorContextDescription(
[in] DWORD LanguageId,
[out,ref] LPWSTR *pContextDescription );
// Returns BG_E_PROTOCOL_NOT_AVAILABLE if no protocol is available
HRESULT GetProtocol( [out,ref] LPWSTR *pProtocol );
}
// ==============================================
// Job Interface
[
uuid(37668d37-507e-4160-9316-26306d150b12),
helpstring("IBackgroundCopyJob Interface"),
odl
]
interface IBackgroundCopyJob : IUnknown
{
typedef struct _BG_FILE_INFO
{
LPWSTR RemoteName;
LPWSTR LocalName;
}
BG_FILE_INFO;
typedef struct _BG_JOB_PROGRESS
{
UINT64 BytesTotal;
UINT64 BytesTransferred;
ULONG FilesTotal;
ULONG FilesTransferred;
}
BG_JOB_PROGRESS;
typedef struct _BG_JOB_TIMES
{
FILETIME CreationTime;
FILETIME ModificationTime;
FILETIME TransferCompletionTime;
}
BG_JOB_TIMES;
typedef enum
{
BG_JOB_PRIORITY_FOREGROUND,
BG_JOB_PRIORITY_HIGH,
BG_JOB_PRIORITY_NORMAL,
BG_JOB_PRIORITY_LOW,
} BG_JOB_PRIORITY;
typedef enum
{
BG_JOB_STATE_QUEUED,
BG_JOB_STATE_CONNECTING,
BG_JOB_STATE_TRANSFERRING,
BG_JOB_STATE_SUSPENDED,
BG_JOB_STATE_ERROR,
BG_JOB_STATE_TRANSIENT_ERROR,
BG_JOB_STATE_TRANSFERRED,
BG_JOB_STATE_ACKNOWLEDGED,
BG_JOB_STATE_CANCELLED
} BG_JOB_STATE;
typedef enum
{
BG_JOB_TYPE_DOWNLOAD,
BG_JOB_TYPE_UPLOAD,
BG_JOB_TYPE_UPLOAD_REPLY
} BG_JOB_TYPE;
typedef enum
{
BG_JOB_PROXY_USAGE_PRECONFIG,
BG_JOB_PROXY_USAGE_NO_PROXY,
BG_JOB_PROXY_USAGE_OVERRIDE
} BG_JOB_PROXY_USAGE;
//--------------------------------------------------------------------
//
// Returns E_INVALIDARG if one of the filesets has
// - local name is blank
// - local name contains invalid characters
// - remote name is blank
// - remote name has invalid format
//
// Returns CO_E_NOT_SUPPORTED if
// - remote URL contains unsupported protocol
//
HRESULT
AddFileSet(
[in] ULONG cFileCount,
[in, size_is(cFileCount)] BG_FILE_INFO *pFileSet
);
HRESULT
AddFile(
[in] LPCWSTR RemoteUrl,
[in] LPCWSTR LocalName
);
//
// Gets an enumerator object for all files in the job.
//
HRESULT
EnumFiles(
[out] IEnumBackgroundCopyFiles ** pEnum
);
//
// Pause all activity on the job. The service will take no action until one of
// Resume(), Cancel(), Complete() is called.
//
// if already suspended, just returns S_OK.
//
HRESULT Suspend();
//
// Enable downloading for this job. Job properties cannot be modified
// after Resume() until the app calls Suspend().
//
// if already running, just returns S_OK.
//
HRESULT Resume();
//
// Permanently stop the job. The service will delete the job metadata and downloaded files.
//
// If already cancelled or resumed, returns ???
//
HRESULT Cancel();
//
// Acknowledges receipt of the job-complete notification. The service will delete
// the job metadata and leave the downloaded files.
//
HRESULT Complete();
//--------------------------------------------------------------------
HRESULT GetId( [out] GUID *pVal );
HRESULT GetType( [out] BG_JOB_TYPE * pVal );
HRESULT GetProgress( [out] BG_JOB_PROGRESS *pVal );
HRESULT GetTimes( [out] BG_JOB_TIMES * pVal );
HRESULT GetState( [out] BG_JOB_STATE *pVal );
HRESULT GetError( [out] IBackgroundCopyError ** ppError );
//
// The owner of the job, represented as a string.
// Only the owner and admins are allowed to see or change the job.
//
HRESULT GetOwner( [out] LPWSTR *pVal );
//
// name of the job, suitable for display in UI
//
HRESULT SetDisplayName( [in] LPCWSTR Val );
HRESULT GetDisplayName( [out] LPWSTR *pVal );
//
// a field for use by the app
//
HRESULT SetDescription( [in] LPCWSTR Val );
HRESULT GetDescription( [out] LPWSTR *pVal );
//
// the priority of the job in the queue.
// default = PRIORITY_NORMAL
// values not in BG_JOB_PRIORITY return E_NOTIMPL.
//
HRESULT SetPriority( [in] BG_JOB_PRIORITY Val );
HRESULT GetPriority( [out] BG_JOB_PRIORITY *pVal );
//
// ignores extra flags?
//
HRESULT SetNotifyFlags( [in] ULONG Val );
HRESULT GetNotifyFlags( [out] ULONG *pVal );
// interface pointer that implements the IBackgroundCallback interface for notifications.
// If the pointer becomes invalid, the service will try to create a new notification object
// with the notify CLSID.
HRESULT SetNotifyInterface( [in] IUnknown * Val );
HRESULT GetNotifyInterface( [out] IUnknown ** pVal );
HRESULT SetMinimumRetryDelay( [in] ULONG Seconds );
HRESULT GetMinimumRetryDelay( [out] ULONG * Seconds );
HRESULT SetNoProgressTimeout( [in] ULONG Seconds );
HRESULT GetNoProgressTimeout( [out] ULONG * Seconds );
HRESULT GetErrorCount( [out] ULONG * Errors );
HRESULT SetProxySettings(
[in] BG_JOB_PROXY_USAGE ProxyUsage,
[in,string,unique] const WCHAR * ProxyList,
[in,string,unique] const WCHAR * ProxyBypassList );
HRESULT GetProxySettings(
[out] BG_JOB_PROXY_USAGE *pProxyUsage,
[out] LPWSTR *pProxyList,
[out] LPWSTR *pProxyBypassList );
HRESULT TakeOwnership();
}
// ==============================================
// IEnumJobs Interface
// This interface allows enumerating the jobs under a Job
[
uuid(1af4f612-3b71-466f-8f58-7b6f73ac57ad),
helpstring("IEnumBackgroundCopyJobs2 Interface"),
odl
]
interface IEnumBackgroundCopyJobs : IUnknown
{
HRESULT Next( [in] ULONG celt,
[out, size_is(BG_ENUM_SIZEIS(celt)), length_is(BG_ENUM_LENGTHIS(celt,pceltFetched))] IBackgroundCopyJob **rgelt,
[in,out,unique] ULONG *pceltFetched );
HRESULT Skip( [in] ULONG celt);
HRESULT Reset();
HRESULT Clone( [out] IEnumBackgroundCopyJobs **ppenum );
HRESULT GetCount( [out] ULONG *puCount );
}
cpp_quote("#define BG_NOTIFY_JOB_TRANSFERRED 0x0001")
cpp_quote("#define BG_NOTIFY_JOB_ERROR 0x0002")
cpp_quote("#define BG_NOTIFY_DISABLE 0x0004")
cpp_quote("#define BG_NOTIFY_JOB_MODIFICATION 0x0008")
// ==============================================
// IBackgroundCallback Interface
// This interface is implemented by the client and is used by the queue manager
// to supply progress information to the client.
[
uuid(97ea99c7-0186-4ad4-8df9-c5b4e0ed6b22),
#if !defined( BITS_DONT_USE_ASYNC_DCOM )
async_uuid(ca29d251-b4bb-4679-a3d9-ae8006119d54),
#endif
helpstring("IBackgroundCopyCallback Interface"),
odl
]
interface IBackgroundCopyCallback : IUnknown
{
//
// A job has transferred successfully.
//
HRESULT JobTransferred( [in] IBackgroundCopyJob *pJob );
//
// An error occurred, and the service has suspended the job.
// Fix the error and resume the job.
// Get error details by calling (*pFailingJob)->GetStatus().
//
HRESULT JobError( [in] IBackgroundCopyJob *pJob,
[in] IBackgroundCopyError * pError );
//
// The job has been modified. Intendended for user interfaces.
//
HRESULT JobModification( [in] IBackgroundCopyJob *pJob,
[in] DWORD dwReserved );
}
//
// IBackgroundCopyManager is the "root" interface to the background file copy component.
//
[
uuid(5ce34c0d-0dc9-4c1f-897c-daa1b78cee7c),
helpstring("Background Copy interface"),
odl
]
interface IBackgroundCopyManager : IUnknown
{
HRESULT CreateJob(
[in] LPCWSTR DisplayName,
[in] BG_JOB_TYPE Type,
[out] GUID * pJobId,
[out] IBackgroundCopyJob **ppJob );
HRESULT GetJob( [in] REFGUID jobID,
[out] IBackgroundCopyJob **ppJob );
//
// Without this flag, jobs not owned by the caller are excluded from the enumeration.
// With this flag, those jobs are included. Only works if the caller is an administrator.
//
cpp_quote("#define BG_JOB_ENUM_ALL_USERS 0x0001")
HRESULT EnumJobs( [in] DWORD dwFlags,
[out] IEnumBackgroundCopyJobs **ppEnum );
HRESULT GetErrorDescription(
[in] HRESULT hResult,
[in] DWORD LanguageId,
[out] LPWSTR *pErrorDescription );
}
//---------------------------------------------------------------------------
[
uuid(1deeb74f-7915-4560-b558-918c83f176a6),
helpstring("Microsoft Background Copy Queue Manager 1.0"),
lcid(0x0000),
version(1.0)
]
library BackgroundCopyManager
{
[
uuid(4991d34b-80a1-4291-83b6-3328366b9097),
helpstring("Background copy control class")
]
coclass BackgroundCopyManager
{
[default] interface IBackgroundCopyManager;
};
interface IBackgroundCopyCallback;
}
cpp_quote("#include \"bits1_5.h\"")