From ef2e070626e423485d8acce1be120838ab383874 Mon Sep 17 00:00:00 2001 From: David Hall Date: Sun, 13 May 2018 21:37:53 -0600 Subject: [PATCH] Added BITS project --- PInvoke/BITS/Vanara.PInvoke.BITS.csproj | 47 +++++ PInvoke/BITS/bits.cs | 307 ++++++++++++++++++++++++++++++++ 2 files changed, 354 insertions(+) create mode 100644 PInvoke/BITS/Vanara.PInvoke.BITS.csproj create mode 100644 PInvoke/BITS/bits.cs diff --git a/PInvoke/BITS/Vanara.PInvoke.BITS.csproj b/PInvoke/BITS/Vanara.PInvoke.BITS.csproj new file mode 100644 index 00000000..94233827 --- /dev/null +++ b/PInvoke/BITS/Vanara.PInvoke.BITS.csproj @@ -0,0 +1,47 @@ + + + + Interfaces, structures and constants imported for BITS (Background Intelligent Transfer Service). + Copyright © 2017 + $(AssemblyName) + 1.0.12 + net20;net35;net40;net45;netstandard2.0 + Vanara.PInvoke.BITS + $(AssemblyName) + Vanara.PInvoke + David Hall + https://github.com/dahall/vanara + https://github.com/dahall/vanara/blob/master/LICENSE + https://raw.githubusercontent.com/dahall/Vanara/master/docs/icons/Vanara48x48.png + https://github.com/dahall/vanara + Git + pinvoke vanara net-extensions interop bits copy + en-US + true + true + GitHub Community + Vanara + True + + + + true + bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/PInvoke/BITS/bits.cs b/PInvoke/BITS/bits.cs new file mode 100644 index 00000000..2c579c5d --- /dev/null +++ b/PInvoke/BITS/bits.cs @@ -0,0 +1,307 @@ +using System; +using System.Runtime.InteropServices; +using Vanara.InteropServices; + +namespace Vanara.PInvoke +{ + /// Items from BITS + public static class BITS + { + [StructLayout(LayoutKind.Sequential, Pack=4)] + public struct __MIDL___MIDL_itf_bits5_0_0005_0001_0001 + { + public uint Data1; + public ushort Data2; + public ushort Data3; + [MarshalAs(UnmanagedType.ByValArray, SizeConst=8)] + public byte[] Data4; + } + + public enum __MIDL_IBackgroundCopyError_0001 + { + BG_ERROR_CONTEXT_NONE, + BG_ERROR_CONTEXT_UNKNOWN, + BG_ERROR_CONTEXT_GENERAL_QUEUE_MANAGER, + BG_ERROR_CONTEXT_QUEUE_MANAGER_NOTIFICATION, + BG_ERROR_CONTEXT_LOCAL_FILE, + BG_ERROR_CONTEXT_REMOTE_FILE, + BG_ERROR_CONTEXT_GENERAL_TRANSPORT, + BG_ERROR_CONTEXT_REMOTE_APPLICATION + } + + public enum __MIDL_IBackgroundCopyJob_0001 + { + BG_JOB_PRIORITY_FOREGROUND, + BG_JOB_PRIORITY_HIGH, + BG_JOB_PRIORITY_NORMAL, + BG_JOB_PRIORITY_LOW + } + + public enum __MIDL_IBackgroundCopyJob_0002 + { + 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 + } + + public enum __MIDL_IBackgroundCopyJob_0003 + { + BG_JOB_TYPE_DOWNLOAD, + BG_JOB_TYPE_UPLOAD, + BG_JOB_TYPE_UPLOAD_REPLY + } + + public enum __MIDL_IBackgroundCopyJob_0004 + { + BG_JOB_PROXY_USAGE_PRECONFIG, + BG_JOB_PROXY_USAGE_NO_PROXY, + BG_JOB_PROXY_USAGE_OVERRIDE, + BG_JOB_PROXY_USAGE_AUTODETECT + } + + [StructLayout(LayoutKind.Sequential, Pack=4)] + public struct _BG_FILE_INFO + { + [MarshalAs(UnmanagedType.LPWStr)] + public string RemoteName; + [MarshalAs(UnmanagedType.LPWStr)] + public string LocalName; + } + + [StructLayout(LayoutKind.Sequential, Pack=8)] + public struct _BG_FILE_PROGRESS + { + public ulong BytesTotal; + public ulong BytesTransferred; + public int Completed; + } + + [StructLayout(LayoutKind.Sequential, Pack=8)] + public struct _BG_JOB_PROGRESS + { + public ulong BytesTotal; + public ulong BytesTransferred; + public uint FilesTotal; + public uint FilesTransferred; + } + + [StructLayout(LayoutKind.Sequential, Pack=4)] + public struct _BG_JOB_TIMES + { + public _FILETIME CreationTime; + public _FILETIME ModificationTime; + public _FILETIME TransferCompletionTime; + } + + [ComImport, Guid("5CE34C0D-0DC9-4C1F-897C-DAA1B78CEE7C"), CoClass(typeof(BackgroundCopyManager5_0Class))] + public interface BackgroundCopyManager5_0 : IBackgroundCopyManager + { + } + + [ComImport, TypeLibType(TypeLibTypeFlags.FCanCreate), ClassInterface(ClassInterfaceType.None), Guid("1ECCA34C-E88A-44E3-8D6A-8921BDE9E452")] + public class BackgroundCopyManager5_0Class : IBackgroundCopyManager, BackgroundCopyManager5_0 + { + // Methods + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void CreateJob([In, MarshalAs(UnmanagedType.LPWStr)] string DisplayName, [In, ComAliasName("BackgroundCopyManager5_0.BG_JOB_TYPE")] BG_JOB_TYPE Type, [ComAliasName("BackgroundCopyManager5_0.GUID")] out GUID pJobId, [MarshalAs(UnmanagedType.Interface)] out IBackgroundCopyJob ppJob); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void EnumJobs([In] uint dwFlags, [MarshalAs(UnmanagedType.Interface)] out IEnumBackgroundCopyJobs ppenum); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void GetErrorDescription([In, MarshalAs(UnmanagedType.Error)] int hResult, [In] uint LanguageId, [MarshalAs(UnmanagedType.LPWStr)] out string pErrorDescription); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + public virtual extern void GetJob([In, ComAliasName("BackgroundCopyManager5_0.GUID")] ref GUID jobID, [MarshalAs(UnmanagedType.Interface)] out IBackgroundCopyJob ppJob); + } + + public enum BG_ERROR_CONTEXT + { + BG_ERROR_CONTEXT_NONE, + BG_ERROR_CONTEXT_UNKNOWN, + BG_ERROR_CONTEXT_GENERAL_QUEUE_MANAGER, + BG_ERROR_CONTEXT_QUEUE_MANAGER_NOTIFICATION, + BG_ERROR_CONTEXT_LOCAL_FILE, + BG_ERROR_CONTEXT_REMOTE_FILE, + BG_ERROR_CONTEXT_GENERAL_TRANSPORT, + BG_ERROR_CONTEXT_REMOTE_APPLICATION + } + + public enum BG_JOB_PRIORITY + { + BG_JOB_PRIORITY_FOREGROUND, + BG_JOB_PRIORITY_HIGH, + BG_JOB_PRIORITY_NORMAL, + BG_JOB_PRIORITY_LOW + } + + public enum BG_JOB_PROXY_USAGE + { + BG_JOB_PROXY_USAGE_PRECONFIG, + BG_JOB_PROXY_USAGE_NO_PROXY, + BG_JOB_PROXY_USAGE_OVERRIDE, + BG_JOB_PROXY_USAGE_AUTODETECT + } + + public enum BG_JOB_STATE + { + 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 + } + + public enum BG_JOB_TYPE + { + BG_JOB_TYPE_DOWNLOAD, + BG_JOB_TYPE_UPLOAD, + BG_JOB_TYPE_UPLOAD_REPLY + } + + [ComImport, Guid("19C613A0-FCB8-4F28-81AE-897C3D078F81"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + public interface IBackgroundCopyError + { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetError([ComAliasName("BackgroundCopyManager5_0.BG_ERROR_CONTEXT")] out BG_ERROR_CONTEXT pContext, [MarshalAs(UnmanagedType.Error)] out int pCode); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetFile([MarshalAs(UnmanagedType.Interface)] out IBackgroundCopyFile pVal); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetErrorDescription([In] uint LanguageId, [MarshalAs(UnmanagedType.LPWStr)] out string pErrorDescription); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetErrorContextDescription([In] uint LanguageId, [MarshalAs(UnmanagedType.LPWStr)] out string pContextDescription); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetProtocol([MarshalAs(UnmanagedType.LPWStr)] out string pProtocol); + } + + [ComImport, Guid("01B7BD23-FB88-4A77-8490-5891D3E4653A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + public interface IBackgroundCopyFile + { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetRemoteName([MarshalAs(UnmanagedType.LPWStr)] out string pVal); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetLocalName([MarshalAs(UnmanagedType.LPWStr)] out string pVal); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetProgress(out _BG_FILE_PROGRESS pVal); + } + + [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("37668D37-507E-4160-9316-26306D150B12")] + public interface IBackgroundCopyJob + { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void AddFileSet([In] uint cFileCount, [In] ref _BG_FILE_INFO pFileSet); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void AddFile([In, MarshalAs(UnmanagedType.LPWStr)] string RemoteUrl, [In, MarshalAs(UnmanagedType.LPWStr)] string LocalName); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void EnumFiles([MarshalAs(UnmanagedType.Interface)] out IEnumBackgroundCopyFiles pEnum); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Suspend(); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Resume(); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Cancel(); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Complete(); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetId([ComAliasName("BackgroundCopyManager5_0.GUID")] out GUID pVal); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetType([ComAliasName("BackgroundCopyManager5_0.BG_JOB_TYPE")] out BG_JOB_TYPE pVal); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetProgress(out _BG_JOB_PROGRESS pVal); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetTimes(out _BG_JOB_TIMES pVal); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetState([ComAliasName("BackgroundCopyManager5_0.BG_JOB_STATE")] out BG_JOB_STATE pVal); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetError([MarshalAs(UnmanagedType.Interface)] out IBackgroundCopyError ppError); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetOwner([MarshalAs(UnmanagedType.LPWStr)] out string pVal); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void SetDisplayName([In, MarshalAs(UnmanagedType.LPWStr)] string Val); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetDisplayName([MarshalAs(UnmanagedType.LPWStr)] out string pVal); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void SetDescription([In, MarshalAs(UnmanagedType.LPWStr)] string Val); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetDescription([MarshalAs(UnmanagedType.LPWStr)] out string pVal); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void SetPriority([In, ComAliasName("BackgroundCopyManager5_0.BG_JOB_PRIORITY")] BG_JOB_PRIORITY Val); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetPriority([ComAliasName("BackgroundCopyManager5_0.BG_JOB_PRIORITY")] out BG_JOB_PRIORITY pVal); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void SetNotifyFlags([In] uint Val); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetNotifyFlags(out uint pVal); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void SetNotifyInterface([In, MarshalAs(UnmanagedType.IUnknown)] object Val); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetNotifyInterface([MarshalAs(UnmanagedType.IUnknown)] out object pVal); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void SetMinimumRetryDelay([In] uint Seconds); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetMinimumRetryDelay(out uint Seconds); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void SetNoProgressTimeout([In] uint Seconds); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetNoProgressTimeout(out uint Seconds); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetErrorCount(out uint Errors); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void SetProxySettings([In, ComAliasName("BackgroundCopyManager5_0.BG_JOB_PROXY_USAGE")] BG_JOB_PROXY_USAGE ProxyUsage, [In, MarshalAs(UnmanagedType.LPWStr)] string ProxyList, [In, MarshalAs(UnmanagedType.LPWStr)] string ProxyBypassList); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetProxySettings([ComAliasName("BackgroundCopyManager5_0.BG_JOB_PROXY_USAGE")] out BG_JOB_PROXY_USAGE pProxyUsage, [MarshalAs(UnmanagedType.LPWStr)] out string pProxyList, [MarshalAs(UnmanagedType.LPWStr)] out string pProxyBypassList); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void TakeOwnership(); + } + + [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("5CE34C0D-0DC9-4C1F-897C-DAA1B78CEE7C")] + public interface IBackgroundCopyManager + { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void CreateJob([In, MarshalAs(UnmanagedType.LPWStr)] string DisplayName, [In, ComAliasName("BackgroundCopyManager5_0.BG_JOB_TYPE")] BG_JOB_TYPE Type, [ComAliasName("BackgroundCopyManager5_0.GUID")] out GUID pJobId, [MarshalAs(UnmanagedType.Interface)] out IBackgroundCopyJob ppJob); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetJob([In, ComAliasName("BackgroundCopyManager5_0.GUID")] ref GUID jobID, [MarshalAs(UnmanagedType.Interface)] out IBackgroundCopyJob ppJob); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void EnumJobs([In] uint dwFlags, [MarshalAs(UnmanagedType.Interface)] out IEnumBackgroundCopyJobs ppenum); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetErrorDescription([In, MarshalAs(UnmanagedType.Error)] int hResult, [In] uint LanguageId, [MarshalAs(UnmanagedType.LPWStr)] out string pErrorDescription); + } + + [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("CA51E165-C365-424C-8D41-24AAA4FF3C40")] + public interface IEnumBackgroundCopyFiles + { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Next([In] uint celt, [MarshalAs(UnmanagedType.Interface)] out IBackgroundCopyFile rgelt, [In, Out] ref uint pceltFetched); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Skip([In] uint celt); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Reset(); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Clone([MarshalAs(UnmanagedType.Interface)] out IEnumBackgroundCopyFiles ppenum); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetCount(out uint puCount); + } + + [ComImport, Guid("1AF4F612-3B71-466F-8F58-7B6F73AC57AD"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + public interface IEnumBackgroundCopyJobs + { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Next([In] uint celt, [MarshalAs(UnmanagedType.Interface)] out IBackgroundCopyJob rgelt, [In, Out] ref uint pceltFetched); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Skip([In] uint celt); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Reset(); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void Clone([MarshalAs(UnmanagedType.Interface)] out IEnumBackgroundCopyJobs ppenum); + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)] + void GetCount(out uint puCount); + } + } +} \ No newline at end of file