public static object LaunchElevatedCOMObject(Guid Clsid, Guid InterfaceID) { string CLSID = Clsid.ToString("B"); // B formatting directive: returns {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} string monikerName = "Elevation:Administrator!new:" + CLSID; BIND_OPTS3 bo = new BIND_OPTS3(); bo.cbStruct = (uint)Marshal.SizeOf(bo); bo.hwnd = IntPtr.Zero; bo.dwClassContext = (int)CLSCTX.CLSCTX_LOCAL_SERVER; object retVal = CoGetObject(monikerName, ref bo, InterfaceID); return(retVal); }
static object CoCreateInstanceElevated(IntPtr parentWindow, Type comClass) { // B formatting directive: returns {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} var monikerName = "Elevation:Administrator!new:" + comClass.GUID.ToString("B"); var bo = new BIND_OPTS3(); bo.cbStruct = (uint)Marshal.SizeOf(bo); bo.hwnd = parentWindow; bo.dwClassContext = 4; // CLSCTX_LOCAL_SERVER Guid unknownGuid = Guid.Parse("00000000-0000-0000-C000-000000000046"); // IUnknown var obj = CoGetObject(monikerName, ref bo, unknownGuid); return(obj); }
internal static extern object CoGetObject( string pszName, [In] ref BIND_OPTS3 pBindOptions, [In, MarshalAs(UnmanagedType.LPStruct)] Guid riid);