protected static int IPSecGetISAKMPData(IntPtr hStore, Guid ISAKMPGUID, out IPSEC_ISAKMP_DATA ipsecISAKMPData) { ipsecISAKMPData = new IPSEC_ISAKMP_DATA(); //Allocate memory for the struct pointer. IntPtr ppIpsecISAKMPData = Marshal.AllocHGlobal(Marshal.SizeOf(new IntPtr())); int hr = IPSecGetISAKMPData(hStore, ISAKMPGUID, ppIpsecISAKMPData); if (hr != 0) { return(hr); } //Dereference the ppIpsecISAKMPData into a pointer. IntPtr pIpsecISAKMPData = Marshal.ReadIntPtr(ppIpsecISAKMPData); //Cast the ptr. ipsecISAKMPData = (IPSEC_ISAKMP_DATA)Marshal.PtrToStructure(pIpsecISAKMPData, typeof(IPSEC_ISAKMP_DATA)); //Free memory allocations. Marshal.FreeHGlobal(ppIpsecISAKMPData); return(hr); }
protected static int IPSecCreateISAKMPData(IntPtr hStore, IPSEC_ISAKMP_DATA ipsecISAKMPData) { IntPtr pIpsecISAKMPData = Marshal.AllocHGlobal(Marshal.SizeOf(ipsecISAKMPData)); Marshal.StructureToPtr(ipsecISAKMPData, pIpsecISAKMPData, false); int hr = IPSecCreateISAKMPData(hStore, pIpsecISAKMPData); Marshal.FreeHGlobal(pIpsecISAKMPData); return(hr); }
/// <summary> /// /// </summary> /// <param name="manualISAKMPData"></param> /// <returns></returns> private int CreateIpsecSakmpData(out IPSEC_ISAKMP_DATA manualISAKMPData) { NativeMethods.Oakdefs.CRYPTO_BUNDLE pSecurityMethods = new() { EncryptionAlgorithm = new NativeMethods.Oakdefs.OAKLEY_ALGORITHM() { AlgorithmIdentifier = 3, Rounds = 8, KeySize = 64 }, HashAlgorithm = new NativeMethods.Oakdefs.OAKLEY_ALGORITHM() { AlgorithmIdentifier = 2, Rounds = 0, KeySize = 64 }, Lifetime = new NativeMethods.Oakdefs.OAKLEY_LIFETIME() { KBytes = 0, Seconds = 28800 }, }; manualISAKMPData = new IPSEC_ISAKMP_DATA() { ISAKMPIdentifier = Guid.NewGuid(), dwWhenChanged = (int)new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds(), dwNumISAKMPSecurityMethods = 2, pSecurityMethods = Marshal.AllocHGlobal(Marshal.SizeOf(pSecurityMethods)), }; manualISAKMPData.ISAKMPPolicy = new NativeMethods.Oakdefs.ISAKMP_POLICY() { AquireSize = 28800, PolicyId = manualISAKMPData.ISAKMPIdentifier }; Marshal.StructureToPtr(pSecurityMethods, manualISAKMPData.pSecurityMethods, false); int hr = IPSecCreateISAKMPData(hStore, manualISAKMPData); Marshal.FreeHGlobal(manualISAKMPData.pSecurityMethods); return(hr); }
/// <summary> /// /// </summary> /// <param name="ISAKMPGUID"></param> /// <param name="ipsecIsakmpData"></param> /// <returns></returns> private int GetISAKMPData(Guid ISAKMPGUID, out IPSEC_ISAKMP_DATA ipsecIsakmpData) => IPSecGetISAKMPData(hStore, ISAKMPGUID, out ipsecIsakmpData);