Safe Printing

J

Jody Gelowitz

I am trying to find the definition of "Safe Printing" and cannot find out
exactly what this entitles. The reason is that I am trying to print
contents from a single textbox to no avail using the PrintDialog control
under a security setting with only SafePrinting allowed.

I have attached a sample project that I am using to try to accomplish this.
The print dialog appears, but when I press the Print button, I get an
exception (at the end of this message). Any ideas how I can make this work?

Thanks,
Jody


System.Security.SecurityException: Request for the permission of type
System.Drawing.Printing.PrintingPermission, System.Drawing,
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a failed.
at System.Security.CodeAccessSecurityEngine.CheckHelper(PermissionSet
grantedSet, PermissionSet deniedSet, CodeAccessPermission demand,
PermissionToken permToken)
at System.Security.CodeAccessSecurityEngine.Check(PermissionToken
permToken, CodeAccessPermission demand, StackCrawlMark& stackMark, Int32
checkFrames, Int32 unrestrictedOverride)
at System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission
cap, StackCrawlMark& stackMark)
at System.Security.CodeAccessPermission.Demand()
at System.Drawing.Printing.PrinterSettings.SetHdevmode(IntPtr hdevmode)
at System.Windows.Forms.PrintDialog.UpdatePrinterSettings(PRINTDLG data,
PrinterSettings settings, PageSettings pageSettings)
at System.Windows.Forms.PrintDialog.RunDialog(IntPtr hwndOwner)
at System.Windows.Forms.CommonDialog.ShowDialog()
at PrintTest.Form1.Button1_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons
button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg,
IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase:
file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
System.Drawing
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase:
file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
System
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase:
file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
RegexAssembly4_0
Assembly Version: 0.0.0.0
Win32 Version: n/a
CodeBase:
----------------------------------------
IEExecRemote
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase:
file:///c:/windows/assembly/gac/ieexecremote/1.0.5000.0__b03f5f7f11d50a3a/ieexecremote.dll
----------------------------------------
PrintTest
Assembly Version: 1.0.1468.23656
Win32 Version: n/a
CodeBase: http://192.168.0.33/VistaNETtest/Testing/PrintTest.EXE
----------------------------------------
System.Windows.Forms
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase:
file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System.Xml
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase:
file:///c:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dll
----------------------------------------
Microsoft.VisualBasic
Assembly Version: 7.0.5000.0
Win32 Version: 7.10.3052.4
CodeBase:
file:///c:/windows/assembly/gac/microsoft.visualbasic/7.0.5000.0__b03f5f7f11d50a3a/microsoft.visualbasic.dll
----------------------------------------

************** JIT Debugging **************
To enable just in time (JIT) debugging, the config file for this
application or machine (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
 
K

Ken Tucker [MVP]

Jody,

I can not access your sample code. Could you please post a link to
or email me your code.

Ken
----------------
 
J

Jody Gelowitz

The code in question is as follows:

With dlgPrintSettings

If Not (.ShowDialog() = DialogResult.Cancel) Then

Try

TextBox1.AppendText("Printing ..." & ControlChars.CrLf)

..Document.Print()

TextBox1.AppendText("Print Successful")

Catch ex As Exception

Debug.WriteLine(ex.ToString)

'MsgBox(ex.ToString)

End Try

End If

End With



The security exception is thrown within the following line:

If Not (.ShowDialog() = DialogResult.Cancel) Then

after you click the PRINT button. The line below it never gets called:

TextBox1.AppendText("Printing ..." & ControlChars.CrLf)



Thanks,
Jody
 
K

Ken Tucker [MVP]

Hi,

Try this code. Do you get any errors ?

'Check to see if we have printing rights

Dim Allperm As Security.IPermission = New
Drawing.Printing.PrintingPermission(Drawing.Printing.PrintingPermissionLevel.AllPrinting)

Dim Defaultperm As Security.IPermission = New
Drawing.Printing.PrintingPermission(Drawing.Printing.PrintingPermissionLevel.DefaultPrinting)

Dim Safeperm As Security.IPermission = New
Drawing.Printing.PrintingPermission(Drawing.Printing.PrintingPermissionLevel.SafePrinting)

Try

Allperm.Demand()

Defaultperm.Demand()

Safeperm.Demand()

Catch ex As Exception

MessageBox.Show(ex.ToString)

End Try



Ken
 
S

Shel Blauman [MSFT]

Here's the permission requirements I get when I check your application:

<IPermission class="System.Security.Permissions.EnvironmentPermission,
mscorlib, Version=1.0.5000.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
<IPermission class="System.Security.Permissions.FileIOPermission, mscorlib,
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
<IPermission class="System.Security.Permissions.SecurityPermission,
mscorlib, Version=1.0.5000.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
version="1"
Flags="UnmanagedCode, ControlEvidence"/>
<IPermission class="System.Security.Permissions.UIPermission, mscorlib,
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
<IPermission class="System.Net.WebPermission, System, Version=1.0.5000.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>

============================================================================
====
Shel
--
This posting is provided "AS IS" with no warranties, and confers no rights.
Use of included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm
 
S

Shel Blauman [MSFT]

Let me admend this, you'll also need safe printing. Just to display the
dialog box you're going to need unrestricted UIPermission, then to perform
the printing you'll need the safe printing permission. Was able to run your
app to completion with safe printing permission. You may not need all the
other permissions I came up with, you might try experimenting.

Shel

--
This posting is provided "AS IS" with no warranties, and confers no rights.
Use of included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm
 
J

Jody Gelowitz

I tried the code that you gave, and here are the results:

Demand - Printing All: False
System.Security.SecurityException: Request for the permission of type
System.Drawing.Printing.PrintingPermission, System.Drawing,
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a failed.
at System.Security.CodeAccessSecurityEngine.CheckHelper(PermissionSet
grantedSet, PermissionSet deniedSet, CodeAccessPermission demand,
PermissionToken permToken)
at System.Security.CodeAccessSecurityEngine.Check(PermissionToken
permToken, CodeAccessPermission demand, StackCrawlMark& stackMark, Int32
checkFrames, Int32 unrestrictedOverride)
at System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission
cap, StackCrawlMark& stackMark)
at System.Security.CodeAccessPermission.Demand()
at PrintTest.Form1.Button1_Click(Object sender, EventArgs e) in
C:\Projects\WorkArea\PrintTest\Form1.vb:line 102

Demand - Printing Default: False
System.Security.SecurityException: Request for the permission of type
System.Drawing.Printing.PrintingPermission, System.Drawing,
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a failed.
at System.Security.CodeAccessSecurityEngine.CheckHelper(PermissionSet
grantedSet, PermissionSet deniedSet, CodeAccessPermission demand,
PermissionToken permToken)
at System.Security.CodeAccessSecurityEngine.Check(PermissionToken
permToken, CodeAccessPermission demand, StackCrawlMark& stackMark, Int32
checkFrames, Int32 unrestrictedOverride)
at System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission
cap, StackCrawlMark& stackMark)
at System.Security.CodeAccessPermission.Demand()
at PrintTest.Form1.Button1_Click(Object sender, EventArgs e) in
C:\Projects\WorkArea\PrintTest\Form1.vb:line 109

Demand - Printing Safe: True

Thanks,
Jody
 
S

Shel Blauman [MSFT]

The only way I can get an Internet permission set equivalent to work is to
up the printing permissions to all. Doesn't work with safe.
--
This posting is provided "AS IS" with no warranties, and confers no rights.
Use of included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm
 
J

Jody Gelowitz

According to the documentation, the Internet Zone allows for Safe Printing.
Exactly what is "Safe Printing"? Is the documentation incorrect? Or am I
interpreting this incorrectly in assuming that I should be able to send
information to the printer with SafePrinting set?

With my sample application, I set the PrintingPermission to AllPrinting from
SafePrinting which worked if run locally, but still does not work when run
through the Internet Zone (launched from a web server). Adjusting the
permissions on the Internet Zone itself to allow for AllPrinting vs
SafePrinting is not an option for us.

Is printing even possible from a "No Touch Deployment" appliction run over
the web with the default settings for the Internet Zone (which has
SafePrinting and not AllPrinting)? If so, is there documentation or sample
code that I can run to see how this is done?

Thanks,
Jody


Shel Blauman said:
The only way I can get an Internet permission set equivalent to work is to
up the printing permissions to all. Doesn't work with safe.
--
This posting is provided "AS IS" with no warranties, and confers no rights.
Use of included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm


Jody Gelowitz said:
I am still having difficulty in getting this to work. I have attached an
updated sample project with what I am trying to accomplish.

The project will be run over the Internet Zone with the default security
settings which have limited UIPermissions and SafePrinting. The permissions
that I have enforced on the project are listed below this message. One
change that I had to do was to move the UIPermission from Minimal to
Optional in order for the application to run over the Internet Zone.

If somebody is able to get printing working with the permissions I have
described, could you please provide some sample code as to how it was done?
I am not sure if I am just missing something small or if I am completely
off-base with this. Having the print dialog is not a requirement for this
if it violates the default security settings for the Internet Zone.

Permissions on the Assembly:
------------------------------
minimal permission set:
<PermissionSet class="System.Security.PermissionSet"
version="1">
<IPermission class="System.Security.Permissions.SecurityPermission,
mscorlib, Version=1.0.5000.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
version="1"
Flags="Execution"/>
<IPermission class="System.Drawing.Printing.PrintingPermission,
System.Drawing, Version=1.0.5000.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
version="1"
Level="SafePrinting"/>
</PermissionSet>

optional permission set:
<PermissionSet class="System.Security.PermissionSet"
version="1">
<IPermission class="System.Security.Permissions.UIPermission, mscorlib,
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
</PermissionSet>

refused permission set:
Not specified





run
your
============================================================================ post
a cannot
find System.Windows.Forms.ControlNativeWindow.OnMessage(Message&
m)
file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dllfile:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dllfile:///c:/windows/assembly/gac/ieexecremote/1.0.5000.0__b03f5f7f11d50a3a/ieexecremote.dllfile:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dllfile:///c:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dllfile:///c:/windows/assembly/gac/microsoft.visualbasic/7.0.5000.0__b03f5f7f11d50a3a/microsoft.visualbasic.dll
 
S

Shel Blauman [MSFT]

You'll notice a "send comments on this topic" at the bottom of the page for
PrintDocument.Print (the one that states safe printing is the required
permission). I clicked on that and sent in a comment about safe printing
not working. Should get to the writer and should result in a bug being
filed unless you and I are missing something. You could do the same if you
would like to hear back directly. I've checked for bugs and don't see any
filed for this.

Shel

--
This posting is provided "AS IS" with no warranties, and confers no rights.
Use of included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top