private void DeserializeFromBlob(byte[] rg) { IntPtr zero = IntPtr.Zero; IStream stream = null; try { this.pWbemClassObject = IntPtr.Zero; zero = Marshal.AllocHGlobal((int)rg.Length); Marshal.Copy(rg, 0, zero, (int)rg.Length); stream = IWbemClassObjectFreeThreaded.CreateStreamOnHGlobal(zero, 0); this.pWbemClassObject = IWbemClassObjectFreeThreaded.CoUnmarshalInterface(stream, ref IWbemClassObjectFreeThreaded.IID_IWbemClassObject); } finally { if (stream != null) { Marshal.ReleaseComObject(stream); } if (zero != IntPtr.Zero) { Marshal.FreeHGlobal(zero); } } }