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();
            }
        }
Esempio n. 2
0
        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;
                }
            }
        }
Esempio n. 3
0
            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);
            }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
 internal static void DemandPrintDialogPermissions()
 {
     if (SecurityHelper._defaultPrintingPermission == null)
     {
         SecurityHelper._defaultPrintingPermission = SystemDrawingHelper.NewDefaultPrintingPermission();
     }
     SecurityHelper._defaultPrintingPermission.Demand();
 }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
            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);
            }
Esempio n. 9
0
            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);
            }
Esempio n. 10
0
        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));
        }
Esempio n. 11
0
        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();
            }
        }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
            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);
            }
Esempio n. 14
0
            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);
            }
Esempio n. 15
0
            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);
            }
Esempio n. 16
0
        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);
        }
Esempio n. 17
0
 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();
         }
     }
 }
Esempio n. 18
0
        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();
                }
            }
        }