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;
        }
예제 #2
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);
        }