private void ProbeForPrintingSupport() { // Without a print queue object we have to make up a name for the printer. // We will just ---- the print queue exception it generates later. // We could avoid the exception if we had access to // MS.Internal.Printing.Configuration.NativeMethods.BindPTProviderThunk string printerName = (this._printQueue != null) ? this._printQueue.FullName : string.Empty; SystemDrawingHelper.NewDefaultPrintingPermission().Assert(); //BlessedAssert try { // If printer support is not installed this should throw a PrintingNotSupportedException using (IDisposable converter = new PrintTicketConverter(printerName, 1)) { } } catch (PrintQueueException) { // We can ---- print queue exceptions because they imply that printing // support is installed } finally { CodeAccessPermission.RevertAssert(); } }
private void OnCopy(object sender, ExecutedRoutedEventArgs e) { if (HasSelection && _selectionRect.Width > 0 && _selectionRect.Height > 0) { //Copy to clipboard IDataObject dataObject; string textString = GetText(); object bmp = null; bmp = SystemDrawingHelper.GetBitmapFromBitmapSource(GetImage()); dataObject = new DataObject(); // Order of data is irrelevant, the pasting application will determine format dataObject.SetData(DataFormats.Text, textString, true); dataObject.SetData(DataFormats.UnicodeText, textString, true); if (bmp != null) { dataObject.SetData(DataFormats.Bitmap, bmp, true); } try { Clipboard.SetDataObject(dataObject, true); } catch (System.Runtime.InteropServices.ExternalException) { // Clipboard is failed to set the data object. return; } } }
private PrintTicket AcquirePrintTicket(IntPtr devModeHandle, string printQueueName) { PrintTicket result = null; byte[] array = null; IntPtr intPtr = IntPtr.Zero; try { intPtr = UnsafeNativeMethods.GlobalLock(devModeHandle); NativeMethods.DEVMODE devmode = (NativeMethods.DEVMODE)Marshal.PtrToStructure(intPtr, typeof(NativeMethods.DEVMODE)); array = new byte[(int)(devmode.dmSize + devmode.dmDriverExtra)]; Marshal.Copy(intPtr, array, 0, array.Length); } finally { if (intPtr != IntPtr.Zero) { UnsafeNativeMethods.GlobalUnlock(devModeHandle); } } SystemDrawingHelper.NewDefaultPrintingPermission().Assert(); try { using (PrintTicketConverter printTicketConverter = new PrintTicketConverter(printQueueName, PrintTicketConverter.MaxPrintSchemaVersion)) { result = printTicketConverter.ConvertDevModeToPrintTicket(array); } } finally { CodeAccessPermission.RevertAssert(); } return(result); }
private PrintTicket AcquireDefaultPrintTicket(PrintQueue printQueue) { PrintTicket printTicket = null; SystemDrawingHelper.NewDefaultPrintingPermission().Assert(); try { if (printQueue != null) { printTicket = printQueue.UserPrintTicket; if (printTicket == null) { printTicket = printQueue.DefaultPrintTicket; } } } catch (PrintSystemException) { printTicket = null; } finally { CodeAccessPermission.RevertAssert(); } if (printTicket == null) { printTicket = new PrintTicket(); } return(printTicket); }
private static Rect GetImageableRect(PrintDialog dialog) { Rect empty = Rect.Empty; Invariant.Assert(dialog != null, "Dialog should not be null."); PrintCapabilities printCapabilities = null; CodeAccessPermission codeAccessPermission = SystemDrawingHelper.NewDefaultPrintingPermission(); codeAccessPermission.Assert(); try { PrintQueue printQueue = dialog.PrintQueue; if (printQueue != null) { printCapabilities = printQueue.GetPrintCapabilities(); } } finally { CodeAccessPermission.RevertAssert(); } if (printCapabilities != null) { PageImageableArea pageImageableArea = printCapabilities.PageImageableArea; if (pageImageableArea != null) { empty = new Rect(pageImageableArea.OriginWidth, pageImageableArea.OriginHeight, pageImageableArea.ExtentWidth, pageImageableArea.ExtentHeight); } } if (empty == Rect.Empty) { empty = new Rect(15.0, 15.0, dialog.PrintableAreaWidth, dialog.PrintableAreaHeight); } return(empty); }
internal static void DemandPrintDialogPermissions() { if (SecurityHelper._defaultPrintingPermission == null) { SecurityHelper._defaultPrintingPermission = SystemDrawingHelper.NewDefaultPrintingPermission(); } SecurityHelper._defaultPrintingPermission.Demand(); }
private static Rect GetImageableRect(PrintDialog dialog) { Rect imageableRect = Rect.Empty; Invariant.Assert(dialog != null, "Dialog should not be null."); System.Printing.PrintQueue queue = null; System.Printing.PrintCapabilities capabilities = null; System.Printing.PageImageableArea imageableArea = null; // This gets the PringDocumentImageableArea.OriginWidth/OriginHeight // of the PrintQueue the user chose in the dialog. CodeAccessPermission printp = SystemDrawingHelper.NewDefaultPrintingPermission(); printp.Assert();//Blessed Assert to get PrintQueue and call GetPrintCapabilities try { queue = dialog.PrintQueue; if (queue != null) { capabilities = queue.GetPrintCapabilities(); } } finally { CodeAccessPermission.RevertAssert(); } if (capabilities != null) { imageableArea = capabilities.PageImageableArea; if (imageableArea != null) { imageableRect = new Rect(imageableArea.OriginWidth, imageableArea.OriginHeight, imageableArea.ExtentWidth, imageableArea.ExtentHeight); } } // If for any reason we couldn't get the actual printer's values // we fallback to a constant and the values available from the // PrintDialog. if (imageableRect == Rect.Empty) { imageableRect = new Rect(NON_PRINTABLE_MARGIN, NON_PRINTABLE_MARGIN, dialog.PrintableAreaWidth, dialog.PrintableAreaHeight); } return(imageableRect); }
AcquirePrintTicket( IntPtr devModeHandle, string printQueueName ) { PrintTicket printTicket = null; byte[] devModeData = null; // // Copy the devmode into a byte array // IntPtr pDevMode = IntPtr.Zero; try { pDevMode = UnsafeNativeMethods.GlobalLock(devModeHandle); NativeMethods.DEVMODE devMode = (NativeMethods.DEVMODE)Marshal.PtrToStructure( pDevMode, typeof(NativeMethods.DEVMODE)); devModeData = new byte[devMode.dmSize + devMode.dmDriverExtra]; Marshal.Copy(pDevMode, devModeData, 0, devModeData.Length); } finally { if (pDevMode != IntPtr.Zero) { UnsafeNativeMethods.GlobalUnlock(devModeHandle); } } SystemDrawingHelper.NewDefaultPrintingPermission().Assert(); //BlessedAssert try { // // Convert the devmode data to a PrintTicket object // using (PrintTicketConverter ptConverter = new PrintTicketConverter( printQueueName, PrintTicketConverter.MaxPrintSchemaVersion)) { printTicket = ptConverter.ConvertDevModeToPrintTicket(devModeData); } } finally { CodeAccessPermission.RevertAssert(); } return(printTicket); }
AcquirePrintQueue( string printerName ) { PrintQueue printQueue = null; EnumeratedPrintQueueTypes[] types = new EnumeratedPrintQueueTypes[] { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections }; // // This forces us to acquire the cached version of the print queues. // This theoretically should prevent crashing in the printing system // since all it is doing is reading the registry. // PrintQueueIndexedProperty[] props = new PrintQueueIndexedProperty[] { PrintQueueIndexedProperty.Name, PrintQueueIndexedProperty.QueueAttributes }; SystemDrawingHelper.NewDefaultPrintingPermission().Assert(); //BlessedAssert try { // // Get the PrintQueue instance for the printer // using (LocalPrintServer server = new LocalPrintServer()) { foreach (PrintQueue queue in server.GetPrintQueues(props, types)) { if (printerName.Equals(queue.FullName, StringComparison.OrdinalIgnoreCase)) { printQueue = queue; break; } } } if (printQueue != null) { printQueue.InPartialTrust = true; } } finally { CodeAccessPermission.RevertAssert(); } return(printQueue); }
private ApplicationProxyInternal CreateAppDomainForLooseXaml(Uri uri) { PermissionSet permissionSet = new PermissionSet(null); permissionSet.AddPermission(new FileDialogPermission(FileDialogPermissionAccess.Open)); permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution)); permissionSet.AddPermission(new UIPermission(UIPermissionWindow.SafeTopLevelWindows)); permissionSet.AddPermission(new UIPermission(UIPermissionClipboard.OwnClipboard)); permissionSet.AddPermission(SystemDrawingHelper.NewSafePrintingPermission()); permissionSet.AddPermission(new MediaPermission(MediaPermissionAudio.SafeAudio, MediaPermissionVideo.SafeVideo, MediaPermissionImage.SafeImage)); permissionSet.AddPermission(new WebBrowserPermission(WebBrowserPermissionLevel.Safe)); permissionSet = PresentationHostSecurityManager.AddPermissionForUri(permissionSet, uri); string text = "XamlViewer"; string moduleFileName = UnsafeNativeMethods.GetModuleFileName(new HandleRef(null, UnsafeNativeMethods.GetModuleHandle("PresentationHost_v0400.dll"))); string appBasePath = Path.GetDirectoryName(moduleFileName) + "\\" + text; return(this.CreateAppDomainAndAppProxy(text, appBasePath, permissionSet)); }
private void ProbeForPrintingSupport() { string deviceName = (this._printQueue != null) ? this._printQueue.FullName : string.Empty; SystemDrawingHelper.NewDefaultPrintingPermission().Assert(); try { using (new PrintTicketConverter(deviceName, 1)) { } } catch (PrintQueueException) { } finally { CodeAccessPermission.RevertAssert(); } }
private PrintQueue AcquireDefaultPrintQueue() { PrintQueue result = null; SystemDrawingHelper.NewDefaultPrintingPermission().Assert(); try { LocalPrintServer localPrintServer = new LocalPrintServer(); result = localPrintServer.DefaultPrintQueue; } catch (PrintSystemException) { result = null; } finally { CodeAccessPermission.RevertAssert(); } return(result); }
private IntPtr AllocateAndInitializeDevMode(string printerName, PrintTicket printTicket) { byte[] array = null; SystemDrawingHelper.NewDefaultPrintingPermission().Assert(); try { using (PrintTicketConverter printTicketConverter = new PrintTicketConverter(printerName, PrintTicketConverter.MaxPrintSchemaVersion)) { array = printTicketConverter.ConvertPrintTicketToDevMode(printTicket, BaseDevModeType.UserDefault); } } finally { CodeAccessPermission.RevertAssert(); } IntPtr intPtr = Marshal.AllocHGlobal(array.Length); Marshal.Copy(array, 0, intPtr, array.Length); return(intPtr); }
private PrintQueue AcquirePrintQueue(string printerName) { PrintQueue printQueue = null; EnumeratedPrintQueueTypes[] enumerationFlag = new EnumeratedPrintQueueTypes[] { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections }; PrintQueueIndexedProperty[] propertiesFilter = new PrintQueueIndexedProperty[] { PrintQueueIndexedProperty.Name, PrintQueueIndexedProperty.QueueAttributes }; SystemDrawingHelper.NewDefaultPrintingPermission().Assert(); try { using (LocalPrintServer localPrintServer = new LocalPrintServer()) { foreach (PrintQueue printQueue2 in localPrintServer.GetPrintQueues(propertiesFilter, enumerationFlag)) { if (printerName.Equals(printQueue2.FullName, StringComparison.OrdinalIgnoreCase)) { printQueue = printQueue2; break; } } } if (printQueue != null) { printQueue.InPartialTrust = true; } } finally { CodeAccessPermission.RevertAssert(); } return(printQueue); }
AllocateAndInitializeDevMode( string printerName, PrintTicket printTicket ) { byte[] devModeData = null; SystemDrawingHelper.NewDefaultPrintingPermission().Assert(); //BlessedAssert try { // // Convert the PrintTicket object to a DEVMODE // using (PrintTicketConverter ptConverter = new PrintTicketConverter( printerName, PrintTicketConverter.MaxPrintSchemaVersion)) { devModeData = ptConverter.ConvertPrintTicketToDevMode( printTicket, BaseDevModeType.UserDefault); } } finally { CodeAccessPermission.RevertAssert(); } // // Make the dev mode data a DEVMODE structure in global memory // IntPtr hDevMode = Marshal.AllocHGlobal(devModeData.Length); Marshal.Copy(devModeData, 0, hDevMode, devModeData.Length); return(hDevMode); }
private XpsDocumentWriter CreateWriter(string description) { PrintQueue printQueue = null; PrintTicket printTicket = null; XpsDocumentWriter xpsDocumentWriter = null; this.PickCorrectPrintingEnvironment(ref printQueue, ref printTicket); SystemDrawingHelper.NewDefaultPrintingPermission().Assert(); try { if (printQueue != null) { printQueue.CurrentJobSettings.Description = description; } xpsDocumentWriter = PrintQueue.CreateXpsDocumentWriter(printQueue); PrintDialog.PrintDlgPrintTicketEventHandler @object = new PrintDialog.PrintDlgPrintTicketEventHandler(printTicket); xpsDocumentWriter.WritingPrintTicketRequired += @object.SetPrintTicket; } finally { CodeAccessPermission.RevertAssert(); } return(xpsDocumentWriter); }
private void OnCopy(object sender, ExecutedRoutedEventArgs e) { if (this.HasSelection && this._selectionRect.Width > 0.0 && this._selectionRect.Height > 0.0) { string text = this.GetText(); object obj = null; bool flag = false; if (this._scope is DocumentGrid && ((DocumentGrid)this._scope).DocumentViewerOwner is DocumentApplicationDocumentViewer) { if (!e.UserInitiated && !this.HasRubberBandCopyPermissions()) { return; } flag = true; } else { flag = this.HasRubberBandCopyPermissions(); } if (flag) { obj = SystemDrawingHelper.GetBitmapFromBitmapSource(this.GetImage()); } new UIPermission(UIPermissionClipboard.AllClipboard).Assert(); IDataObject dataObject; try { dataObject = new DataObject(); dataObject.SetData(DataFormats.Text, text, true); dataObject.SetData(DataFormats.UnicodeText, text, true); if (obj != null) { dataObject.SetData(DataFormats.Bitmap, obj, true); } } finally { CodeAccessPermission.RevertAssert(); } PermissionSet permissionSet = new PermissionSet(PermissionState.None); permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.SerializationFormatter)); permissionSet.AddPermission(new UIPermission(UIPermissionClipboard.AllClipboard)); permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.UnmanagedCode)); if (flag) { CodeAccessPermission perm = SecurityHelper.CreateMediaAccessPermission(null); permissionSet.AddPermission(perm); } permissionSet.Assert(); try { Clipboard.SetDataObject(dataObject, true); } catch (ExternalException) { } finally { CodeAccessPermission.RevertAssert(); } } }
private void OnCopy(object sender, ExecutedRoutedEventArgs e) { if (HasSelection && _selectionRect.Width > 0 && _selectionRect.Height > 0) { //Copy to clipboard IDataObject dataObject; string textString = GetText(); object bmp = null; bool supportImageCopy = false; if (_scope is DocumentGrid && ((DocumentGrid)_scope).DocumentViewerOwner is DocumentApplicationDocumentViewer) { // This is XPSViewer, make sure it is user initiated if (!e.UserInitiated && !HasRubberBandCopyPermissions()) { return; } supportImageCopy = true; } else { //Outside of XPSViewer, support image copy in full trust only supportImageCopy = HasRubberBandCopyPermissions(); } if (supportImageCopy) { bmp = SystemDrawingHelper.GetBitmapFromBitmapSource(GetImage()); } (new UIPermission(UIPermissionClipboard.AllClipboard)).Assert();//BlessedAssert try { dataObject = new DataObject(); // Order of data is irrelevant, the pasting application will determine format dataObject.SetData(DataFormats.Text, textString, true); dataObject.SetData(DataFormats.UnicodeText, textString, true); if (bmp != null) { dataObject.SetData(DataFormats.Bitmap, bmp, true); } } finally { UIPermission.RevertAssert(); } PermissionSet ps = new PermissionSet(PermissionState.None); ps.AddPermission(new SecurityPermission(SecurityPermissionFlag.SerializationFormatter)); ps.AddPermission(new UIPermission(UIPermissionClipboard.AllClipboard)); ps.AddPermission(new SecurityPermission(SecurityPermissionFlag.UnmanagedCode)); if (supportImageCopy) { CodeAccessPermission mediaAccessPermission = SecurityHelper.CreateMediaAccessPermission(null); ps.AddPermission(mediaAccessPermission); } ps.Assert(); // BlessedAssert try { Clipboard.SetDataObject(dataObject, true); } catch (System.Runtime.InteropServices.ExternalException) { // Clipboard is failed to set the data object. return; } finally { SecurityPermission.RevertAssert(); } } }