1use shared::basetsd::UINT64;
7use shared::guiddef::{GUID, REFGUID};
8use shared::minwindef::{BOOL, DWORD, FILETIME, ULONG};
9use um::unknwnbase::{IUnknown, IUnknownVtbl};
10use um::winnt::{HRESULT, LPCWSTR, LPWSTR, WCHAR};
11RIDL!{#[uuid(0x4991d34b, 0x80a1, 0x4291, 0x83, 0xb6, 0x33, 0x28, 0x36, 0x6b, 0x90, 0x97)]
12class BackgroundCopyManager;}
13pub const BG_SIZE_UNKNOWN: UINT64 = -1i64 as u64;
14STRUCT!{struct BG_FILE_PROGRESS {
15 BytesTotal: UINT64,
16 BytesTransferred: UINT64,
17 Completed: BOOL,
18}}
19RIDL!{#[uuid(0x01b7bd23, 0xfb88, 0x4a77, 0x84, 0x90, 0x58, 0x91, 0xd3, 0xe4, 0x65, 0x3a)]
20interface IBackgroundCopyFile(IBackgroundCopyFileVtbl): IUnknown(IUnknownVtbl) {
21 fn GetRemoteName(
22 pVal: *mut LPWSTR,
23 ) -> HRESULT,
24 fn GetLocalName(
25 pVal: *mut LPWSTR,
26 ) -> HRESULT,
27 fn GetProgress(
28 pVal: *mut BG_FILE_PROGRESS,
29 ) -> HRESULT,
30}}
31RIDL!{#[uuid(0xca51e165, 0xc365, 0x424c, 0x8d, 0x41, 0x24, 0xaa, 0xa4, 0xff, 0x3c, 0x40)]
32interface IEnumBackgroundCopyFiles(IEnumBackgroundCopyFilesVtbl): IUnknown(IUnknownVtbl) {
33 fn Next(
34 celt: ULONG,
35 rgelt: *mut *mut IBackgroundCopyFile,
36 pceltFetched: *mut ULONG,
37 ) -> HRESULT,
38 fn Skip(
39 celt: ULONG,
40 ) -> HRESULT,
41 fn Reset() -> HRESULT,
42 fn Clone(
43 ppenum: *mut *mut IEnumBackgroundCopyFiles,
44 ) -> HRESULT,
45 fn GetCount(
46 puCount: *mut ULONG,
47 ) -> HRESULT,
48}}
49ENUM!{enum BG_ERROR_CONTEXT {
50 BG_ERROR_CONTEXT_NONE = 0,
51 BG_ERROR_CONTEXT_UNKNOWN = 1,
52 BG_ERROR_CONTEXT_GENERAL_QUEUE_MANAGER = 2,
53 BG_ERROR_CONTEXT_QUEUE_MANAGER_NOTIFICATION = 3,
54 BG_ERROR_CONTEXT_LOCAL_FILE = 4,
55 BG_ERROR_CONTEXT_REMOTE_FILE = 5,
56 BG_ERROR_CONTEXT_GENERAL_TRANSPORT = 6,
57 BG_ERROR_CONTEXT_REMOTE_APPLICATION = 7,
58}}
59RIDL!{#[uuid(0x19c613a0, 0xfcb8, 0x4f28, 0x81, 0xae, 0x89, 0x7c, 0x3d, 0x07, 0x8f, 0x81)]
60interface IBackgroundCopyError(IBackgroundCopyErrorVtbl): IUnknown(IUnknownVtbl) {
61 fn GetError(
62 pContext: *mut BG_ERROR_CONTEXT,
63 pCode: *mut HRESULT,
64 ) -> HRESULT,
65 fn GetFile(
66 pVal: *mut *mut IBackgroundCopyFile,
67 ) -> HRESULT,
68 fn GetErrorDescription(
69 LanguageId: DWORD,
70 pErrorDescription: *mut LPWSTR,
71 ) -> HRESULT,
72 fn GetErrorContextDescription(
73 LanguageId: DWORD,
74 pContextDescription: *mut LPWSTR,
75 ) -> HRESULT,
76 fn GetProtocol(
77 pProtocol: *mut LPWSTR,
78 ) -> HRESULT,
79}}
80STRUCT!{struct BG_FILE_INFO {
81 RemoteName: LPWSTR,
82 LocalName: LPWSTR,
83}}
84STRUCT!{struct BG_JOB_PROGRESS {
85 BytesTotal: UINT64,
86 BytesTransferred: UINT64,
87 FilesTotal: ULONG,
88 FilesTransferred: ULONG,
89}}
90STRUCT!{struct BG_JOB_TIMES {
91 CreationTime: FILETIME,
92 ModificationTime: FILETIME,
93 TransferCompletionTime: FILETIME,
94}}
95ENUM!{enum BG_JOB_PRIORITY {
96 BG_JOB_PRIORITY_FOREGROUND = 0,
97 BG_JOB_PRIORITY_HIGH = BG_JOB_PRIORITY_FOREGROUND + 1,
98 BG_JOB_PRIORITY_NORMAL = BG_JOB_PRIORITY_HIGH + 1,
99 BG_JOB_PRIORITY_LOW = BG_JOB_PRIORITY_NORMAL + 1,
100}}
101ENUM!{enum BG_JOB_STATE {
102 BG_JOB_STATE_QUEUED = 0,
103 BG_JOB_STATE_CONNECTING = BG_JOB_STATE_QUEUED + 1,
104 BG_JOB_STATE_TRANSFERRING = BG_JOB_STATE_CONNECTING + 1,
105 BG_JOB_STATE_SUSPENDED = BG_JOB_STATE_TRANSFERRING + 1,
106 BG_JOB_STATE_ERROR = BG_JOB_STATE_SUSPENDED + 1,
107 BG_JOB_STATE_TRANSIENT_ERROR = BG_JOB_STATE_ERROR + 1,
108 BG_JOB_STATE_TRANSFERRED = BG_JOB_STATE_TRANSIENT_ERROR + 1,
109 BG_JOB_STATE_ACKNOWLEDGED = BG_JOB_STATE_TRANSFERRED + 1,
110 BG_JOB_STATE_CANCELLED = BG_JOB_STATE_ACKNOWLEDGED + 1,
111}}
112ENUM!{enum BG_JOB_TYPE {
113 BG_JOB_TYPE_DOWNLOAD = 0,
114 BG_JOB_TYPE_UPLOAD = BG_JOB_TYPE_DOWNLOAD + 1,
115 BG_JOB_TYPE_UPLOAD_REPLY = BG_JOB_TYPE_UPLOAD + 1,
116}}
117ENUM!{enum BG_JOB_PROXY_USAGE {
118 BG_JOB_PROXY_USAGE_PRECONFIG = 0,
119 BG_JOB_PROXY_USAGE_NO_PROXY = BG_JOB_PROXY_USAGE_PRECONFIG + 1,
120 BG_JOB_PROXY_USAGE_OVERRIDE = BG_JOB_PROXY_USAGE_NO_PROXY + 1,
121 BG_JOB_PROXY_USAGE_AUTODETECT = BG_JOB_PROXY_USAGE_OVERRIDE + 1,
122}}
123RIDL!{#[uuid(0x37668d37, 0x507e, 0x4160, 0x93, 0x16, 0x26, 0x30, 0x6d, 0x15, 0x0b, 0x12)]
124interface IBackgroundCopyJob(IBackgroundCopyJobVtbl): IUnknown(IUnknownVtbl) {
125 fn AddFileSet(
126 cFileCount: ULONG,
127 pFileSet: *mut BG_FILE_INFO,
128 ) -> HRESULT,
129 fn AddFile(
130 RemoteUrl: LPCWSTR,
131 LocalName: LPCWSTR,
132 ) -> HRESULT,
133 fn EnumFiles(
134 pErrorDescription: *mut *mut IEnumBackgroundCopyFiles,
135 ) -> HRESULT,
136 fn Suspend() -> HRESULT,
137 fn Resume() -> HRESULT,
138 fn Cancel() -> HRESULT,
139 fn Complete() -> HRESULT,
140 fn GetId(
141 pVal: *mut GUID,
142 ) -> HRESULT,
143 fn GetType(
144 pVal: *mut BG_JOB_TYPE,
145 ) -> HRESULT,
146 fn GetProgress(
147 pVal: *mut BG_JOB_PROGRESS,
148 ) -> HRESULT,
149 fn GetTimes(
150 pVal: *mut BG_JOB_TIMES,
151 ) -> HRESULT,
152 fn GetState(
153 pVal: *mut BG_JOB_STATE,
154 ) -> HRESULT,
155 fn GetError(
156 ppError: *mut *mut IBackgroundCopyError,
157 ) -> HRESULT,
158 fn GetOwner(
159 pVal: *mut LPWSTR,
160 ) -> HRESULT,
161 fn SetDisplayName(
162 Val: LPCWSTR,
163 ) -> HRESULT,
164 fn GetDisplayName(
165 pVal: *mut LPWSTR,
166 ) -> HRESULT,
167 fn SetDescription(
168 Val: LPCWSTR,
169 ) -> HRESULT,
170 fn GetDescription(
171 pVal: *mut LPWSTR,
172 ) -> HRESULT,
173 fn SetPriority(
174 Val: BG_JOB_PRIORITY,
175 ) -> HRESULT,
176 fn GetPriority(
177 pVal: *mut BG_JOB_PRIORITY,
178 ) -> HRESULT,
179 fn SetNotifyFlags(
180 Val: ULONG,
181 ) -> HRESULT,
182 fn GetNotifyFlags(
183 pVal: *mut ULONG,
184 ) -> HRESULT,
185 fn SetNotifyInterface(
186 Val: *mut IUnknown,
187 ) -> HRESULT,
188 fn GetNotifyInterface(
189 pVal: *mut *mut IUnknown,
190 ) -> HRESULT,
191 fn SetMinimumRetryDelay(
192 Seconds: ULONG,
193 ) -> HRESULT,
194 fn GetMinimumRetryDelay(
195 Seconds: *mut ULONG,
196 ) -> HRESULT,
197 fn SetNoProgressTimeout(
198 Seconds: ULONG,
199 ) -> HRESULT,
200 fn GetNoProgressTimeout(
201 Seconds: *mut ULONG,
202 ) -> HRESULT,
203 fn GetErrorCount(
204 Errors: *mut ULONG,
205 ) -> HRESULT,
206 fn SetProxySettings(
207 ProxyUsage: BG_JOB_PROXY_USAGE,
208 ProxyList: *const WCHAR,
209 ProxyBypassList: *const WCHAR,
210 ) -> HRESULT,
211 fn GetProxySettings(
212 pProxyUsage: *mut BG_JOB_PROXY_USAGE,
213 pProxyList: *mut LPWSTR,
214 pProxyBypassListpProxyList: *mut LPWSTR,
215 ) -> HRESULT,
216 fn TakeOwnership() -> HRESULT,
217}}
218RIDL!{#[uuid(0x1af4f612, 0x3b71, 0x466f, 0x8f, 0x58, 0x7b, 0x6f, 0x73, 0xac, 0x57, 0xad)]
219interface IEnumBackgroundCopyJobs(IEnumBackgroundCopyJobsVtbl): IUnknown(IUnknownVtbl) {
220 fn Next(
221 celt: ULONG,
222 rgelt: *mut *mut IBackgroundCopyJob,
223 pceltFetched: *mut ULONG,
224 ) -> HRESULT,
225 fn Skip(
226 celt: ULONG,
227 ) -> HRESULT,
228 fn Reset() -> HRESULT,
229 fn Clone(
230 ppenum: *mut *mut IEnumBackgroundCopyJobs,
231 ) -> HRESULT,
232 fn GetCount(
233 puCount: *mut ULONG,
234 ) -> HRESULT,
235}}
236pub const BG_NOTIFY_JOB_TRANSFERRED: DWORD = 0x0001;
237pub const BG_NOTIFY_JOB_ERROR: DWORD = 0x0002;
238pub const BG_NOTIFY_DISABLE: DWORD = 0x0004;
239pub const BG_NOTIFY_JOB_MODIFICATION: DWORD = 0x0008;
240pub const BG_NOTIFY_FILE_TRANSFERRED: DWORD = 0x0010;
241pub const BG_NOTIFY_FILE_RANGES_TRANSFERRED: DWORD = 0x0020;
242RIDL!{#[uuid(0x97ea99c7, 0x0186, 0x4ad4, 0x8d, 0xf9, 0xc5, 0xb4, 0xe0, 0xed, 0x6b, 0x22)]
243interface IBackgroundCopyCallback(IBackgroundCopyCallbackVtbl): IUnknown(IUnknownVtbl) {
244 fn JobTransferred(
245 pJob: *mut IBackgroundCopyJob,
246 ) -> HRESULT,
247 fn JobError(
248 pJob: *mut IBackgroundCopyJob,
249 pError: *mut IBackgroundCopyError,
250 ) -> HRESULT,
251 fn JobModification(
252 pJob: *mut IBackgroundCopyJob,
253 dwReserved: DWORD,
254 ) -> HRESULT,
255}}
256RIDL!{#[uuid(0xca29d251, 0xb4bb, 0x4679, 0xa3, 0xd9, 0xae, 0x80, 0x06, 0x11, 0x9d, 0x54)]
257interface AsyncIBackgroundCopyCallback(AsyncIBackgroundCopyCallbackVtbl): IUnknown(IUnknownVtbl) {
258 fn Begin_JobTransferred(
259 pJob: *mut IBackgroundCopyJob,
260 ) -> HRESULT,
261 fn Finish_JobTransferred() -> HRESULT,
262 fn Begin_JobError(
263 pJob: *mut IBackgroundCopyJob,
264 pError: *mut IBackgroundCopyError,
265 ) -> HRESULT,
266 fn Finish_JobError() -> HRESULT,
267 fn Begin_JobModification(
268 pJob: *mut IBackgroundCopyJob,
269 dwReserved: DWORD,
270 ) -> HRESULT,
271 fn Finish_JobModification() -> HRESULT,
272}}
273pub const BG_JOB_ENUM_ALL_USERS: DWORD = 0x0001;
274RIDL!{#[uuid(0x5ce34c0d, 0x0dc9, 0x4c1f, 0x89, 0x7c, 0xda, 0xa1, 0xb7, 0x8c, 0xee, 0x7c)]
275interface IBackgroundCopyManager(IBackgroundCopyManagerVtbl): IUnknown(IUnknownVtbl) {
276 fn CreateJob(
277 DisplayName: LPCWSTR,
278 Type: BG_JOB_TYPE,
279 pJobId: *mut GUID,
280 ppJob: *mut *mut IBackgroundCopyJob,
281 ) -> HRESULT,
282 fn GetJob(
283 jobID: REFGUID,
284 ppJob: *mut *mut IBackgroundCopyJob,
285 ) -> HRESULT,
286 fn EnumJobs(
287 dwFlags: DWORD,
288 ppEnum: *mut *mut IEnumBackgroundCopyJobs,
289 ) -> HRESULT,
290 fn GetErrorDescription(
291 hResult: HRESULT,
292 LanguageId: DWORD,
293 pErrorDescription: *mut LPWSTR,
294 ) -> HRESULT,
295}}