/// <summary> /// Marshals data from an object to an NDR-encoded byte array. /// </summary> /// <param name="obj">The pointer to an unmanaged block of memory /// which contains the content of object.</param> /// <param name="formatStringOffset">Format string offset of the data Type.</param> /// <returns>The byte array of NDR-encoded data.</returns> internal static byte[] NdrMarshal(IntPtr obj, int formatStringOffset) { using (PickleMarshaller marshaller = new PickleMarshaller(FormatString.Pac)) { return(marshaller.Encode(obj, formatStringOffset)); } }
/// <summary> /// Unmarshals data from an NDR-encoded byte array to an object. /// </summary> /// <typeparam name="T">Type of the decoded object.</typeparam> /// <param name="buffer">The byte array containing NDR-encoded data.</param> /// <param name="index">Begin of encoded data.</param> /// <param name="count">Size of encoded data.</param> /// <param name="formatStringOffset">Format string offset of the data Type.</param> /// <returns>The object containing data in the byte array.</returns> internal static T NdrUnmarshal <T>(byte[] buffer, int index, int count, int formatStringOffset, bool force32Bit = true, int alignment = 4) where T : struct { using (PickleMarshaller marshaller = new PickleMarshaller(FormatString.Pac)) { return(marshaller.Decode <T>(buffer, index, count, formatStringOffset, force32Bit, alignment)); } }