| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 | using System;using System.Runtime.InteropServices;using System.Security;namespace MediaBrowser.ServerApplication.Networking{    /// <summary>    /// Class NativeMethods    /// </summary>    [SuppressUnmanagedCodeSecurity]    public static class NativeMethods    {        //declare the Netapi32 : NetServerEnum method import        /// <summary>        /// Nets the server enum.        /// </summary>        /// <param name="ServerName">Name of the server.</param>        /// <param name="dwLevel">The dw level.</param>        /// <param name="pBuf">The p buf.</param>        /// <param name="dwPrefMaxLen">The dw pref max len.</param>        /// <param name="dwEntriesRead">The dw entries read.</param>        /// <param name="dwTotalEntries">The dw total entries.</param>        /// <param name="dwServerType">Type of the dw server.</param>        /// <param name="domain">The domain.</param>        /// <param name="dwResumeHandle">The dw resume handle.</param>        /// <returns>System.Int32.</returns>        [DllImport("Netapi32", CharSet = CharSet.Auto, SetLastError = true),        SuppressUnmanagedCodeSecurity]        public static extern int NetServerEnum(            string ServerName, // must be null            int dwLevel,            ref IntPtr pBuf,            int dwPrefMaxLen,            out int dwEntriesRead,            out int dwTotalEntries,            int dwServerType,            string domain, // null for login domain            out int dwResumeHandle            );        //declare the Netapi32 : NetApiBufferFree method import        /// <summary>        /// Nets the API buffer free.        /// </summary>        /// <param name="pBuf">The p buf.</param>        /// <returns>System.Int32.</returns>        [DllImport("Netapi32", SetLastError = true),        SuppressUnmanagedCodeSecurity]        public static extern int NetApiBufferFree(            IntPtr pBuf);        [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]        [return: MarshalAs(UnmanagedType.Bool)]        public static extern bool FileTimeToSystemTime(            [In] ref long fileTime,            out SystemTime systemTime);        [DllImport("AdvApi32.dll", SetLastError = true, ExactSpelling = true)]        [return: MarshalAs(UnmanagedType.Bool)]        public static extern bool CryptAcquireContextW(            out IntPtr providerContext,            [MarshalAs(UnmanagedType.LPWStr)] string container,            [MarshalAs(UnmanagedType.LPWStr)] string provider,            int providerType,            int flags);        [DllImport("AdvApi32.dll", SetLastError = true, ExactSpelling = true)]        [return: MarshalAs(UnmanagedType.Bool)]        public static extern bool CryptReleaseContext(            IntPtr providerContext,            int flags);        [DllImport("AdvApi32.dll", SetLastError = true, ExactSpelling = true)]        [return: MarshalAs(UnmanagedType.Bool)]        public static extern bool CryptGenKey(            IntPtr providerContext,            int algorithmId,            int flags,            out IntPtr cryptKeyHandle);        [DllImport("AdvApi32.dll", SetLastError = true, ExactSpelling = true)]        [return: MarshalAs(UnmanagedType.Bool)]        public static extern bool CryptDestroyKey(            IntPtr cryptKeyHandle);        [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]        [return: MarshalAs(UnmanagedType.Bool)]        public static extern bool CertStrToNameW(            int certificateEncodingType,            IntPtr x500,            int strType,            IntPtr reserved,            [MarshalAs(UnmanagedType.LPArray)] [Out] byte[] encoded,            ref int encodedLength,            out IntPtr errorString);        [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]        public static extern IntPtr CertCreateSelfSignCertificate(            IntPtr providerHandle,            [In] ref CryptoApiBlob subjectIssuerBlob,            int flags,            [In] ref CryptKeyProviderInformation keyProviderInformation,            [In] ref CryptAlgorithmIdentifier algorithmIdentifier,            [In] ref SystemTime startTime,            [In] ref SystemTime endTime,            IntPtr extensions);        [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]        [return: MarshalAs(UnmanagedType.Bool)]        public static extern bool CertFreeCertificateContext(            IntPtr certificateContext);        [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]        public static extern IntPtr CertOpenStore(            [MarshalAs(UnmanagedType.LPStr)] string storeProvider,            int messageAndCertificateEncodingType,            IntPtr cryptProvHandle,            int flags,            IntPtr parameters);        [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]        [return: MarshalAs(UnmanagedType.Bool)]        public static extern bool CertCloseStore(            IntPtr certificateStoreHandle,            int flags);        [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]        [return: MarshalAs(UnmanagedType.Bool)]        public static extern bool CertAddCertificateContextToStore(            IntPtr certificateStoreHandle,            IntPtr certificateContext,            int addDisposition,            out IntPtr storeContextPtr);        [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]        [return: MarshalAs(UnmanagedType.Bool)]        public static extern bool CertSetCertificateContextProperty(            IntPtr certificateContext,            int propertyId,            int flags,            [In] ref CryptKeyProviderInformation data);        [DllImport("Crypt32.dll", SetLastError = true, ExactSpelling = true)]        [return: MarshalAs(UnmanagedType.Bool)]        public static extern bool PFXExportCertStoreEx(            IntPtr certificateStoreHandle,            ref CryptoApiBlob pfxBlob,            IntPtr password,            IntPtr reserved,            int flags);    }    //create a _SERVER_INFO_100 STRUCTURE    /// <summary>    /// Struct _SERVER_INFO_100    /// </summary>    [StructLayout(LayoutKind.Sequential)]    public struct _SERVER_INFO_100    {        /// <summary>        /// The sv100_platform_id        /// </summary>        internal int sv100_platform_id;        /// <summary>        /// The sv100_name        /// </summary>        [MarshalAs(UnmanagedType.LPWStr)]        internal string sv100_name;    }    [StructLayout(LayoutKind.Sequential)]    public struct SystemTime    {        public short Year;        public short Month;        public short DayOfWeek;        public short Day;        public short Hour;        public short Minute;        public short Second;        public short Milliseconds;    }    [StructLayout(LayoutKind.Sequential)]    public struct CryptObjIdBlob    {        public uint cbData;        public IntPtr pbData;    }    [StructLayout(LayoutKind.Sequential)]    public struct CryptAlgorithmIdentifier    {        [MarshalAs(UnmanagedType.LPStr)]        public String pszObjId;        public CryptObjIdBlob Parameters;    }    [StructLayout(LayoutKind.Sequential)]    public struct CryptoApiBlob    {        public int DataLength;        public IntPtr Data;        public CryptoApiBlob(int dataLength, IntPtr data)        {            this.DataLength = dataLength;            this.Data = data;        }    }    [StructLayout(LayoutKind.Sequential)]    public struct CryptKeyProviderInformation    {        [MarshalAs(UnmanagedType.LPWStr)]        public string ContainerName;        [MarshalAs(UnmanagedType.LPWStr)]        public string ProviderName;        public int ProviderType;        public int Flags;        public int ProviderParameterCount;        public IntPtr ProviderParameters; // PCRYPT_KEY_PROV_PARAM        public int KeySpec;    }}
 |