diff --git a/PInvoke/Security/AdvApi32/NTSecApi.cs b/PInvoke/Security/AdvApi32/NTSecApi.cs index f8b2fdbc6..d70f5eb0b 100644 --- a/PInvoke/Security/AdvApi32/NTSecApi.cs +++ b/PInvoke/Security/AdvApi32/NTSecApi.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Runtime.InteropServices; +using Vanara.Extensions; using Vanara.InteropServices; using FILETIME = System.Runtime.InteropServices.ComTypes.FILETIME; @@ -545,7 +546,6 @@ public struct POLICY_ACCOUNT_DOMAIN_INFO // _POLICY_AUDIT_EVENTS_INFO { BOOLEAN AuditingMode; PPOLICY_AUDIT_EVENT_OPTIONS EventAuditingOptions; ULONG MaximumAuditEventCount; // } POLICY_AUDIT_EVENTS_INFO, *PPOLICY_AUDIT_EVENTS_INFO; [PInvokeData("ntsecapi.h", MSDNShortId = "3442e5e5-78cf-4bda-ba11-0f51ee40df16")] - [StructLayout(LayoutKind.Sequential)] public struct POLICY_AUDIT_EVENTS_INFO : IVanaraMarshaler { /// @@ -559,7 +559,7 @@ public struct POLICY_AUDIT_EVENTS_INFO : IVanaraMarshaler /// auditing options as specified in the EventAuditingOptions member even when AuditingMode is FALSE. /// /// - public BOOLEAN AuditingMode; + public bool AuditingMode; /// /// @@ -611,19 +611,16 @@ public struct POLICY_AUDIT_EVENTS_INFO : IVanaraMarshaler /// public int MaximumAuditEventCount => EventAuditingOptions?.Length ?? 0; - SizeT IVanaraMarshaler.GetNativeSize() => 8 + IntPtr.Size; + SizeT IVanaraMarshaler.GetNativeSize() => IntPtr.Size * 3 + 36; SafeAllocatedMemoryHandle IVanaraMarshaler.MarshalManagedToNative(object obj) { var i = (POLICY_AUDIT_EVENTS_INFO)obj; - var mem = new SafeHGlobalHandle(64); - using (var ret = new NativeMemoryStream(mem)) - { - ret.Write(i.AuditingMode); - ret.Position = 4; - ret.Write(i.EventAuditingOptions, true); - ret.Write(i.MaximumAuditEventCount); - } + var mem = new SafeHGlobalHandle(IntPtr.Size * 3 + 36); + mem.Write((BOOLEAN)i.AuditingMode); + mem.Write(mem.DangerousGetHandle().Offset(IntPtr.Size * 3), false, IntPtr.Size); + mem.Write(i.MaximumAuditEventCount, false, IntPtr.Size * 2); + mem.Write(i.EventAuditingOptions, false, IntPtr.Size * 3); return mem; } @@ -631,13 +628,13 @@ object IVanaraMarshaler.MarshalNativeToManaged(IntPtr ptr, SizeT size) { using var str = new NativeMemoryStream(ptr, size); var mode = str.Read(); - str.Position = 4 + IntPtr.Size; + str.Position = IntPtr.Size * 2; var cnt = str.Read(); - str.Position = 4; + str.Position = IntPtr.Size; return new POLICY_AUDIT_EVENTS_INFO { AuditingMode = mode, - EventAuditingOptions = str.ReadArray(cnt, true).ToArray() + EventAuditingOptions = str.Read().ToArray(cnt).ToArray() }; } }