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 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 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 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 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 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 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 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); }