示例#1
0
        private static int EncodingMultiByteArrayHelper(BerSafeHandle berElement, byte[][] tempValue, char fmt)
        {
            IntPtr intPtr;
            IntPtr intPtr1 = (IntPtr)0;

            SafeBerval[] safeBerval = null;
            int          num        = 0;

            try
            {
                if (tempValue != null)
                {
                    int i = 0;
                    intPtr1 = Utility.AllocHGlobalIntPtrArray((int)tempValue.Length + 1);
                    int num1 = Marshal.SizeOf(typeof(SafeBerval));
                    safeBerval = new SafeBerval[(int)tempValue.Length];
                    for (i = 0; i < (int)tempValue.Length; i++)
                    {
                        byte[] numArray = tempValue[i];
                        safeBerval[i] = new SafeBerval();
                        if (numArray != null)
                        {
                            safeBerval[i].bv_len = (int)numArray.Length;
                            safeBerval[i].bv_val = Marshal.AllocHGlobal((int)numArray.Length);
                            Marshal.Copy(numArray, 0, safeBerval[i].bv_val, (int)numArray.Length);
                        }
                        else
                        {
                            safeBerval[i].bv_len = 0;
                            safeBerval[i].bv_val = (IntPtr)0;
                        }
                        IntPtr intPtr2 = Marshal.AllocHGlobal(num1);
                        Marshal.StructureToPtr(safeBerval[i], intPtr2, false);
                        intPtr = (IntPtr)((long)intPtr1 + (long)(Marshal.SizeOf(typeof(IntPtr)) * i));
                        Marshal.WriteIntPtr(intPtr, intPtr2);
                    }
                    intPtr = (IntPtr)((long)intPtr1 + (long)(Marshal.SizeOf(typeof(IntPtr)) * i));
                    Marshal.WriteIntPtr(intPtr, (IntPtr)0);
                }
                num = Wldap32.ber_printf_berarray(berElement, new string(fmt, 1), intPtr1);
                GC.KeepAlive(safeBerval);
            }
            finally
            {
                if (intPtr1 != (IntPtr)0)
                {
                    for (int j = 0; j < (int)tempValue.Length; j++)
                    {
                        IntPtr intPtr3 = Marshal.ReadIntPtr(intPtr1, Marshal.SizeOf(typeof(IntPtr)) * j);
                        if (intPtr3 != (IntPtr)0)
                        {
                            Marshal.FreeHGlobal(intPtr3);
                        }
                    }
                    Marshal.FreeHGlobal(intPtr1);
                }
            }
            return(num);
        }
 private static int EncodingMultiByteArrayHelper(BerSafeHandle berElement, byte[][] tempValue, char fmt)
 {
     IntPtr zero = IntPtr.Zero;
     IntPtr ptr = IntPtr.Zero;
     SafeBerval[] bervalArray = null;
     int num = 0;
     try
     {
         if (tempValue != null)
         {
             int index = 0;
             zero = Marshal.AllocHGlobal((int) (Marshal.SizeOf(typeof(IntPtr)) * (tempValue.Length + 1)));
             int cb = Marshal.SizeOf(typeof(SafeBerval));
             bervalArray = new SafeBerval[tempValue.Length];
             index = 0;
             while (index < tempValue.Length)
             {
                 byte[] source = tempValue[index];
                 bervalArray[index] = new SafeBerval();
                 if (source == null)
                 {
                     bervalArray[index].bv_len = 0;
                     bervalArray[index].bv_val = IntPtr.Zero;
                 }
                 else
                 {
                     bervalArray[index].bv_len = source.Length;
                     bervalArray[index].bv_val = Marshal.AllocHGlobal(source.Length);
                     Marshal.Copy(source, 0, bervalArray[index].bv_val, source.Length);
                 }
                 IntPtr ptr3 = Marshal.AllocHGlobal(cb);
                 Marshal.StructureToPtr(bervalArray[index], ptr3, false);
                 ptr = (IntPtr) (((long) zero) + (Marshal.SizeOf(typeof(IntPtr)) * index));
                 Marshal.WriteIntPtr(ptr, ptr3);
                 index++;
             }
             ptr = (IntPtr) (((long) zero) + (Marshal.SizeOf(typeof(IntPtr)) * index));
             Marshal.WriteIntPtr(ptr, IntPtr.Zero);
         }
         num = Wldap32.ber_printf_berarray(berElement, new string(fmt, 1), zero);
         GC.KeepAlive(bervalArray);
     }
     finally
     {
         if (zero != IntPtr.Zero)
         {
             for (int i = 0; i < tempValue.Length; i++)
             {
                 IntPtr hglobal = Marshal.ReadIntPtr(zero, Marshal.SizeOf(typeof(IntPtr)) * i);
                 if (hglobal != IntPtr.Zero)
                 {
                     Marshal.FreeHGlobal(hglobal);
                 }
             }
             Marshal.FreeHGlobal(zero);
         }
     }
     return num;
 }
示例#3
0
        private static int EncodingMultiByteArrayHelper(BerSafeHandle berElement, byte[][] tempValue, char fmt)
        {
            IntPtr berValArray = IntPtr.Zero;
            IntPtr tempPtr     = IntPtr.Zero;

            SafeBerval[] managedBerVal = null;
            int          error         = 0;

            try
            {
                if (tempValue != null)
                {
                    int i = 0;
                    berValArray = Utility.AllocHGlobalIntPtrArray(tempValue.Length + 1);
                    int structSize = Marshal.SizeOf(typeof(SafeBerval));
                    managedBerVal = new SafeBerval[tempValue.Length];

                    for (i = 0; i < tempValue.Length; i++)
                    {
                        byte[] byteArray = tempValue[i];

                        // construct the managed berval
                        managedBerVal[i] = new SafeBerval();

                        if (byteArray == null)
                        {
                            managedBerVal[i].bv_len = 0;
                            managedBerVal[i].bv_val = IntPtr.Zero;
                        }
                        else
                        {
                            managedBerVal[i].bv_len = byteArray.Length;
                            managedBerVal[i].bv_val = Marshal.AllocHGlobal(byteArray.Length);
                            Marshal.Copy(byteArray, 0, managedBerVal[i].bv_val, byteArray.Length);
                        }

                        // allocate memory for the unmanaged structure
                        IntPtr valPtr = Marshal.AllocHGlobal(structSize);
                        Marshal.StructureToPtr(managedBerVal[i], valPtr, false);

                        tempPtr = (IntPtr)((long)berValArray + IntPtr.Size * i);
                        Marshal.WriteIntPtr(tempPtr, valPtr);
                    }

                    tempPtr = (IntPtr)((long)berValArray + IntPtr.Size * i);
                    Marshal.WriteIntPtr(tempPtr, IntPtr.Zero);
                }

                error = Wldap32.ber_printf_berarray(berElement, new string(fmt, 1), berValArray);

                GC.KeepAlive(managedBerVal);
            }
            finally
            {
                if (berValArray != IntPtr.Zero)
                {
                    for (int i = 0; i < tempValue.Length; i++)
                    {
                        IntPtr ptr = Marshal.ReadIntPtr(berValArray, IntPtr.Size * i);
                        if (ptr != IntPtr.Zero)
                        {
                            Marshal.FreeHGlobal(ptr);
                        }
                    }
                    Marshal.FreeHGlobal(berValArray);
                }
            }

            return(error);
        }
示例#4
0
		private static int EncodingMultiByteArrayHelper(BerSafeHandle berElement, byte[][] tempValue, char fmt)
		{
			IntPtr intPtr;
			IntPtr intPtr1 = (IntPtr)0;
			SafeBerval[] safeBerval = null;
			int num = 0;
			try
			{
				if (tempValue != null)
				{
					int i = 0;
					intPtr1 = Utility.AllocHGlobalIntPtrArray((int)tempValue.Length + 1);
					int num1 = Marshal.SizeOf(typeof(SafeBerval));
					safeBerval = new SafeBerval[(int)tempValue.Length];
					for (i = 0; i < (int)tempValue.Length; i++)
					{
						byte[] numArray = tempValue[i];
						safeBerval[i] = new SafeBerval();
						if (numArray != null)
						{
							safeBerval[i].bv_len = (int)numArray.Length;
							safeBerval[i].bv_val = Marshal.AllocHGlobal((int)numArray.Length);
							Marshal.Copy(numArray, 0, safeBerval[i].bv_val, (int)numArray.Length);
						}
						else
						{
							safeBerval[i].bv_len = 0;
							safeBerval[i].bv_val = (IntPtr)0;
						}
						IntPtr intPtr2 = Marshal.AllocHGlobal(num1);
						Marshal.StructureToPtr(safeBerval[i], intPtr2, false);
						intPtr = (IntPtr)((long)intPtr1 + (long)(Marshal.SizeOf(typeof(IntPtr)) * i));
						Marshal.WriteIntPtr(intPtr, intPtr2);
					}
					intPtr = (IntPtr)((long)intPtr1 + (long)(Marshal.SizeOf(typeof(IntPtr)) * i));
					Marshal.WriteIntPtr(intPtr, (IntPtr)0);
				}
				num = Wldap32.ber_printf_berarray(berElement, new string(fmt, 1), intPtr1);
				GC.KeepAlive(safeBerval);
			}
			finally
			{
				if (intPtr1 != (IntPtr)0)
				{
					for (int j = 0; j < (int)tempValue.Length; j++)
					{
						IntPtr intPtr3 = Marshal.ReadIntPtr(intPtr1, Marshal.SizeOf(typeof(IntPtr)) * j);
						if (intPtr3 != (IntPtr)0)
						{
							Marshal.FreeHGlobal(intPtr3);
						}
					}
					Marshal.FreeHGlobal(intPtr1);
				}
			}
			return num;
		}
示例#5
0
        private static int EncodingMultiByteArrayHelper(BerSafeHandle berElement, byte[][] tempValue, char fmt)
        {
            IntPtr berValArray = (IntPtr)0;
            IntPtr tempPtr = (IntPtr)0;
            SafeBerval[] managedBerVal = null;
            int error = 0;

            try
            {
                if (tempValue != null)
                {
                    int i = 0;
                    berValArray = Utility.AllocHGlobalIntPtrArray(tempValue.Length + 1);
                    int structSize = Marshal.SizeOf(typeof(SafeBerval));
                    managedBerVal = new SafeBerval[tempValue.Length];

                    for (i = 0; i < tempValue.Length; i++)
                    {
                        byte[] byteArray = tempValue[i];

                        // construct the managed berval
                        managedBerVal[i] = new SafeBerval();

                        if (byteArray == null)
                        {
                            managedBerVal[i].bv_len = 0;
                            managedBerVal[i].bv_val = (IntPtr)0;
                        }
                        else
                        {
                            managedBerVal[i].bv_len = byteArray.Length;
                            managedBerVal[i].bv_val = Marshal.AllocHGlobal(byteArray.Length);
                            Marshal.Copy(byteArray, 0, managedBerVal[i].bv_val, byteArray.Length);
                        }

                        // allocate memory for the unmanaged structure
                        IntPtr valPtr = Marshal.AllocHGlobal(structSize);
                        Marshal.StructureToPtr(managedBerVal[i], valPtr, false);

                        tempPtr = (IntPtr)((long)berValArray + Marshal.SizeOf(typeof(IntPtr)) * i);
                        Marshal.WriteIntPtr(tempPtr, valPtr);
                    }

                    tempPtr = (IntPtr)((long)berValArray + Marshal.SizeOf(typeof(IntPtr)) * i);
                    Marshal.WriteIntPtr(tempPtr, (IntPtr)0);
                }

                error = Wldap32.ber_printf_berarray(berElement, new string(fmt, 1), berValArray);

                GC.KeepAlive(managedBerVal);
            }
            finally
            {
                if (berValArray != (IntPtr)0)
                {
                    for (int i = 0; i < tempValue.Length; i++)
                    {
                        IntPtr ptr = Marshal.ReadIntPtr(berValArray, Marshal.SizeOf(typeof(IntPtr)) * i);
                        if (ptr != (IntPtr)0)
                            Marshal.FreeHGlobal(ptr);
                    }
                    Marshal.FreeHGlobal(berValArray);
                }
            }

            return error;
        }
        private static int EncodingMultiByteArrayHelper(BerSafeHandle berElement, byte[][] tempValue, char fmt)
        {
            IntPtr zero = IntPtr.Zero;
            IntPtr ptr  = IntPtr.Zero;

            SafeBerval[] bervalArray = null;
            int          num         = 0;

            try
            {
                if (tempValue != null)
                {
                    int index = 0;
                    zero = Marshal.AllocHGlobal((int)(Marshal.SizeOf(typeof(IntPtr)) * (tempValue.Length + 1)));
                    int cb = Marshal.SizeOf(typeof(SafeBerval));
                    bervalArray = new SafeBerval[tempValue.Length];
                    index       = 0;
                    while (index < tempValue.Length)
                    {
                        byte[] source = tempValue[index];
                        bervalArray[index] = new SafeBerval();
                        if (source == null)
                        {
                            bervalArray[index].bv_len = 0;
                            bervalArray[index].bv_val = IntPtr.Zero;
                        }
                        else
                        {
                            bervalArray[index].bv_len = source.Length;
                            bervalArray[index].bv_val = Marshal.AllocHGlobal(source.Length);
                            Marshal.Copy(source, 0, bervalArray[index].bv_val, source.Length);
                        }
                        IntPtr ptr3 = Marshal.AllocHGlobal(cb);
                        Marshal.StructureToPtr(bervalArray[index], ptr3, false);
                        ptr = (IntPtr)(((long)zero) + (Marshal.SizeOf(typeof(IntPtr)) * index));
                        Marshal.WriteIntPtr(ptr, ptr3);
                        index++;
                    }
                    ptr = (IntPtr)(((long)zero) + (Marshal.SizeOf(typeof(IntPtr)) * index));
                    Marshal.WriteIntPtr(ptr, IntPtr.Zero);
                }
                num = Wldap32.ber_printf_berarray(berElement, new string(fmt, 1), zero);
                GC.KeepAlive(bervalArray);
            }
            finally
            {
                if (zero != IntPtr.Zero)
                {
                    for (int i = 0; i < tempValue.Length; i++)
                    {
                        IntPtr hglobal = Marshal.ReadIntPtr(zero, Marshal.SizeOf(typeof(IntPtr)) * i);
                        if (hglobal != IntPtr.Zero)
                        {
                            Marshal.FreeHGlobal(hglobal);
                        }
                    }
                    Marshal.FreeHGlobal(zero);
                }
            }
            return(num);
        }