public override int SendRequest(SafeHandle handle, DirectoryRequest request, ref int messageId) { if (request is ExtendedRequest extendedRequest) { var name = extendedRequest.RequestName; var val = extendedRequest.RequestValue; var berValuePtr = IntPtr.Zero; if (val != null && val.Length != 0) { var berValue = new Native.Native.berval() { bv_len = val.Length, bv_val = Marshal.AllocHGlobal(val.Length) }; Marshal.Copy(val, 0, berValue.bv_val, val.Length); Marshal.StructureToPtr(berValue, berValuePtr, true); } return Native.ldap_extended_operation(handle, name, berValuePtr, IntPtr.Zero, IntPtr.Zero, ref messageId); } return 0; }
internal static List <byte[]> BerValArrayToByteArrays(IntPtr ptr) { var result = new List <byte[]>(); foreach (var tempPtr in GetPointerArray(ptr)) { var bervalue = new Native.Native.berval(); Marshal.PtrToStructure(tempPtr, bervalue); if (bervalue.bv_len > 0 && bervalue.bv_val != IntPtr.Zero) { var byteArray = new byte[bervalue.bv_len]; Marshal.Copy(bervalue.bv_val, byteArray, 0, bervalue.bv_len); result.Add(byteArray); } } return(result); }