public static bool IsNoContextMTA() { WmiNetUtilsHelper.APTTYPE aPTTYPE = WmiNetUtilsHelper.APTTYPE.APTTYPE_STA; bool flag; if (Thread.CurrentThread.GetApartmentState() == ApartmentState.MTA) { if (MTAHelper.CanCallCoGetObjectContext) { IntPtr zero = IntPtr.Zero; IntPtr intPtr = IntPtr.Zero; try { if (MTAHelper.CoGetObjectContext(ref MTAHelper.IID_IComThreadingInfo, out zero) == 0) { if (WmiNetUtilsHelper.GetCurrentApartmentType_f(3, zero, out aPTTYPE) == 0) { if (aPTTYPE == WmiNetUtilsHelper.APTTYPE.APTTYPE_MTA) { if (Marshal.QueryInterface(zero, ref MTAHelper.IID_IObjectContext, out intPtr) != 0) { return(true); } else { flag = false; } } else { flag = false; } } else { flag = false; } } else { flag = false; } } finally { if (zero != IntPtr.Zero) { Marshal.Release(zero); } if (intPtr != IntPtr.Zero) { Marshal.Release(intPtr); } } return(flag); } else { return(true); } } else { return(false); } }
internal static int GetCurrentApartmentType(int vFunc, IntPtr pComThreadingInfo, out WmiNetUtilsHelper.APTTYPE aptType) { aptType = WmiNetUtilsHelper.APTTYPE.APTTYPE_CURRENT; return(0); }