<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Eugene Bobukh's WebLog</title><link>http://blogs.msdn.com/eugene_bobukh/default.aspx</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>More on 2.0 changes: Delegates Security</title><link>http://blogs.msdn.com/eugene_bobukh/archive/2005/06/08/427074.aspx</link><pubDate>Thu, 09 Jun 2005 05:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:427074</guid><dc:creator>Eugene Bobukh</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/eugene_bobukh/comments/427074.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugene_bobukh/commentrss.aspx?PostID=427074</wfw:commentRss><description>&lt;FONT face=Verdana size=1&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;=================================&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;The text below is provided "AS IS", without any responsibilities attached to it. It represents author's personal opinion and knowledge, and does not necessarily reflect recommended best practices of Microsoft. Author does not assume any responsibility caused by the use of the following information.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;=================================&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;If you create a Delegate around a function protected by security Demand, and then somebody invokes that Delegate, the following Security checks will happen in that simple scenario:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;1. At Delegate creation time, LinkDemands on method passed to delegate constructor [“Target”] are evaluated against grant set of creating assembly [“Creator”]. If they fail, Security exception is thrown.&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#006400&gt;&lt;STRONG&gt;2. At Delegate creation time, various pieces of Security-related Assembly identity of the Creator are captured and stored in the Delegate.&lt;BR&gt;&lt;/STRONG&gt;&lt;/FONT&gt;3. At Delegate invocation time:&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#006400&gt;&lt;STRONG&gt;3.1. Creator's identity is evaluated to produce the grant set of the Creator.&lt;BR&gt;&amp;nbsp;3.2. Permission set demanded by the Target is compared to Creator's grant set. If it's found to be not a subset of that grant, Security Exception is thrown.&lt;/STRONG&gt;&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;3.3. Normal Demand against Delegate caller is initiated. If it fails, Security exception is thrown, too.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;These Security checks can be viewed in a simpler form: when an assembly creates a delegate to a method in another assembly, this is treated as though it created the delegate to a method in its own assembly which in turn called out to the other assembly. This guarantees that the code creating the delegate is always seen in any Security stack walks that take place while executing code called through the delegate.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Steps 2, 3.1, and 3.2 are marked with bold green because they are new as compared to .NET 1.0 and 1.1. Before 2.0, there was no Security check against Delegate Creator performed at invocation time.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Why this change has been made? The short answer is: to enable easy implementation of secure coding practices around Delegates. And if you want the longer story, here it is with some extra details.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The model which existed in 1.x times permitted untrusted code to create Delegates around virtually any code, and then to inject them into other fully trusted code, staying at the same time outside of the Security checks. At some cases, this is dangerous, since it potentially allows low-trusted code to trick higher trusted one into calling other highly trusted methods which it did not intend to invoke. While this usually does not cause Security holes &lt;EM&gt;per se&lt;/EM&gt; if proper mitigating techniques are used, it certainly makes difficult to implement good Security solution in scenarios where Delegates are involved.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Consider the following pattern [note that it will work only in 1.0 or 1.1] which shows how easy it was to accidentally introduce Security issue in 1.x if some specific guidelines [explained below] were not followed:&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Arial&gt;1. SystemLib is a highly trusted library exposing methods that could be potentially dangerous if all callers are allowed to invoke them. It could be one of existing .NET APIs, or some third party plug-in which performs low-level system actions, &lt;FONT color=#000080&gt;etc. Full Trust is required to call methods of this library; for that reason, they are protected by proper Demands:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;public class SystemLib&lt;BR&gt;{&lt;BR&gt;&lt;/STRONG&gt;&amp;nbsp;// It has the Declarative form of protection:&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&amp;nbsp;[method:PermissionSetAttribute(SecurityAction.Demand, Unrestricted = true)]&lt;BR&gt;&amp;nbsp;public static void DoDangerousThing()&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&lt;/STRONG&gt;&amp;nbsp; // Restarts the computer, or erases system files, etc.&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;}&lt;BR&gt;}&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Then you, as a developer, define in your code the following highly trusted classes:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000080 size=2&gt;2.1. Assembly B is fully trusted but accepting delegates from the low-trust side. This does not represent ideal Security practices, but sometimes is needed:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000080 size=2&gt;&lt;STRONG&gt;public delegate void BDelegate();&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000080 size=2&gt;&lt;STRONG&gt;public class B&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;public event BDelegate mOnButtonClick;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000080&gt;&lt;FONT size=2&gt;&amp;nbsp;// This is the method called by other classes to notify B that it's time to execute its’ delegates:&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&amp;nbsp;public void RunEVentDelegates()&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&lt;/STRONG&gt;&amp;nbsp; // We can even add an extra Security check to this place, just to ensure&lt;BR&gt;&amp;nbsp; // that only fully trusted callers invoke mOnButtonClick() code:&lt;BR&gt;&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT size=2&gt;&amp;nbsp; (new PermissionSet(PermissionState.Unrestricted)).Demand();&lt;BR&gt;&amp;nbsp; if (null != mOnButtonClick)&amp;nbsp; mOnButtonClick();&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;}&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000080 size=2&gt;2.2. Assembly C is simply the caller of B, and it is highly trusted, too. This can be the code of yours, or of somebody else, doesn’t matter.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000080 size=2&gt;&lt;STRONG&gt;public class C&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;public static void PingB(B pB)&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp; pB.RunEventDelegates();&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;}&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;At this point, everything looks safe. System method &lt;FONT color=#000080&gt;&lt;STRONG&gt;DoDangerousThing&lt;/STRONG&gt;&lt;/FONT&gt; has Security Demand on it, so only fully trusted callers can invoke it. &lt;FONT color=#000080&gt;&lt;STRONG&gt;RunEventDelegates&lt;/STRONG&gt;&lt;/FONT&gt; is protected by Demand, too. It seems like nobody without Full Trust grant can do anything bad. Unfortunately, that’s not enough. A smart attacker can create a code which will trick one part of your [highly trusted] code to call into another fully trusted code -- by manipulating Delegates:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000080 size=2&gt;Evil assembly has low trust. It wants to invoke the method SystemLib::DoDangerousThing(), but can't since it does not have required permissions. So it takes different approach: it creates a delegate around desired System code, passes it for storage to highly trusted class B and then waits 'till highly trusted class C fires the event that would invoke the delegate.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;public class Evil&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;public static void Main()&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&lt;/STRONG&gt;&amp;nbsp; // Here we create B explicitly for demo purposes. In real life it is possible that &lt;BR&gt;&amp;nbsp; // an existing instance of B will be accessible for Evil:&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&amp;nbsp; B mB = new B();&lt;BR&gt;&lt;/STRONG&gt;&amp;nbsp; // Then Evil "infects" class B with the system method:&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&amp;nbsp; mB.mOnButtonClick += new BDelegate(L.DoDangerousThing);&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&lt;/STRONG&gt;&lt;FONT color=#000080&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#000080 size=2&gt;Evil’s job is done at this point. Now it just wait’s ‘till something happens what will make C to call &lt;STRONG&gt;B.RunEventDelegates&lt;/STRONG&gt;, which in turn will call into &lt;STRONG&gt;SystemLib.DoDangerousThing().&lt;/STRONG&gt; At the moment of the call, Security Demand will be initiated. However, it will check only B and C classes, not the &lt;STRONG&gt;Evil&lt;/STRONG&gt; one, and the call will succeed, resulting in computer restart, or in whatever &lt;STRONG&gt;DoDangerousThing&lt;/STRONG&gt; was programmed to do.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;This looks scary, and may represent one of the common coding mistakes in 1.x .NET. What can you do to ensure your code doesn’t fall a victim of Delegates injection attack described above? &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;In order to exploit the aforementioned scenario, Evil code needs to enjoy the coincidence of three quite unlikely conditions. If you deprive it of one [or better all] of them, it won’t succeed. What are those conditions?&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;First, Evil needs to be able to link to dangerous System method, in order to pass it to the Delegate constructor. So if &lt;STRONG&gt;&lt;FONT color=#000080&gt;DoDangerousThing&lt;/FONT&gt;&lt;/STRONG&gt; is protected by a LinkDemand, Evil will not be able to access it directly and very likely won't be able to access it at all. This protection corresponds to Step 1 of Security checks outlined at the beginning of this post.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;OK, this may work if you own &lt;FONT color=#000080&gt;&lt;STRONG&gt;SystemLib&lt;/STRONG&gt;&lt;/FONT&gt; class and can modify it accordingly, but what if not?&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The second and very important is that Evil code needs to find a publicly exposed Event with the signature &lt;STRONG&gt;exactly&lt;/STRONG&gt; matching the signature of the System function. In the example above that was easy: &lt;FONT color=#000080&gt;&lt;STRONG&gt;DoDangerousThing&lt;/STRONG&gt;&lt;/FONT&gt; was "void (void)" function, as well as &lt;STRONG&gt;&lt;FONT color=#000080&gt;mOnButtonClick&lt;/FONT&gt;&lt;/STRONG&gt; event. If you change the signature of your Event and &lt;STRONG&gt;&lt;FONT color=#000080&gt;BDelegate&lt;/FONT&gt;&lt;/STRONG&gt; to accept and/or return the instance of privately defined class, it will never match any system’s code function. Therefore, such function won’t be able to be passed as an argument for Delegate creation, and attack will fail.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Overall, if you work with highly trusted publicly accessible Delegates/Events in 1.x, it is critical that their signatures are unique, so they can’t accept anything which it not explicitly designed to match them.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;This rule applies to .NET 1.x itself. A big effort was made to ensure that all publicly exposed events of powerful .NET code have unique signatures. As an example, take a look at the &lt;STRONG&gt;AssemblyLoad&lt;/STRONG&gt; Event of &lt;STRONG&gt;System.AppDomain&lt;/STRONG&gt; class. Its’ signature is&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;public delegate void AssemblyLoadEventHandler(&lt;BR&gt;&amp;nbsp;&amp;nbsp; object sender,&lt;BR&gt;&amp;nbsp;&amp;nbsp; AssemblyLoadEventArgs args&lt;BR&gt;);&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;&lt;BR&gt;-- which is quite impossible to wrap around something like &lt;STRONG&gt;&lt;FONT color=#000080&gt;void File.Delete(string).&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Finally, Evil code needs the Event to be accessible, too. So if you can put a Demand or LinkDemand on the Events of your class, it should prevent low-trusted code from adding Delegates to them.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The above seems like enough protection. Then why Secure Delegates were introduced?&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The primary reason was the relaxation of Delegate signatures matching rules. In 2.0, you can create a Delegate over method with signature not strictly the same as the Delegate’s one. Some restrictions [which I won’t list here as being not really an expert in the area] still apply there, but the resulting effect is that now everyone can create Delegates over much broader set of targets than before. This significantly reduces the protection offered by rule #2. To compensate on that, Delegates Security was added to the game, so people are still able to create secure and robust Delegates solutions in easy and straightforward manner. Thus now, when every Delegate Creator is automatically put on the Security stack and checked against target method Security requirements, you don’t need to worry about injection attack. .NET will do the checks.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;As a final note please keep in mind that if Delegate creator and caller live in the same assembly no Security checks are applied against Delegate creator at calling time. This is reasonable, since in this situation Creator most likely can invoke the target method directly without bothering with Delegates.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=427074" width="1" height="1"&gt;</description></item><item><title>FullTrust means Full Trust</title><link>http://blogs.msdn.com/eugene_bobukh/archive/2005/05/06/415217.aspx</link><pubDate>Sat, 07 May 2005 01:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:415217</guid><dc:creator>Eugene Bobukh</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/eugene_bobukh/comments/415217.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugene_bobukh/commentrss.aspx?PostID=415217</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Verdana size=1&gt;&lt;SPAN&gt;The text below is provided "AS IS", without any responsibilities attached to it. It represents author's personal opinion and knowledge, and does not necessarily reflect recommended best practices of Microsoft.&amp;nbsp;Author does not assume any responsibility caused by the use of the following information.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Verdana size=1&gt;=================================&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Well, here is another post after a long, long break. This time it's about a set of recent Whidbey changes affecting Permissions and Policy functionality.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;In .NET Framework, all Permission classes can be categorized into 3 distinct buckets: "normal" CAS Permisisons, Identity Permissions and non-CAS Permissions.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Non-CAS permissions do not perform stack walk when Demand on them is invoked. In .NET 1.x and 2.0, there is only one such class which is PrincipalPermission.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;"Normal" CAS Permisisons, examples of which would be FileIOPermission or SecurityPermission, do check all the callers when Demand is invoked. Their behavior is well known and described in thousands of samples, docs, etc.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Identity Permissions [like StrongNameIdentityPermission] are very similar in their nature to "normal" CAS ones. However, a number of subtle differences puts them into "special" category and oftentimes requires special treatment.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;First of all, Identity permissions are granted to assemblies by Policy not through the process of determining their Code Groups membership, but rather as simple reflection of assembly's identity. So you can't grant ZoneIdentityPermission for MyComputer to a particular Code Group [e.g., Internet] via Policy configuration. Instead, all the code &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT size=2&gt;arriving&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt; from Internet will be automatically grated ZoneIdentityPermission for Internet Zone, no matter how the machine code groups are set up.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Identities which have corresponding permissions are: PublisherIdentity [Authenticode signature], Site, StrongName, Url, Zone. In 2.0 version of the .NET Framework, there is also Gac identity added.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;The second and more important is that in versions 1.x of the .NET Identity Permissions [unless empty] were not considered to be subset of Unrestricted PermissionSet. Therefore, for instance, even if your assembly was running from LocalComputer in FullTrust, Demands for StrongNameIdentityPermission for any public key X would have failed unless your assembly was signed with the key X. Period.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;At the first glance, this looks logical. If I want my component to be callable only by known third parties, I put StrongNameIdentityPermission, or PublisherIdentityPermission {Link|Inheritance}Demand on it, and thus make sure that nobody else can ever access it. Everything works fine, I'm happy.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Unfortunately, the assumption above is not correct. Moreover, it can cause Security problems bubbling up at the very late stages of the product cycle, throwing the original design into waste.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;FullTrust really means Full Trust. That's it, there is no CAS protection, ever, against malicious code granted FullTrust. Identity Permissions are not the exception from this rule.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;If malicious fully trusted code Evil.exe wants to invoke your code protected with some kind of Identity Demand, it can do tons of things to achieve that goal. The most simple one would be to create an AppDomain, then call in it Assembly.Load(AssemblyName, Evidence), and pass as parameters assembly Evil.exe and Evidence created based on Identity requested by your code. After it's done, Evil.dll will "look" just like it has proper Identity, therefore it will be granted corresponding Identity Pemission, what will make the Demand pass.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;There are other ways, more or less simple. Evil code can, for example, switch the Security off [unless it's not prevented by set of measures outlined by Shawn in his article: http://blogs.msdn.com/shawnfa/archive/2005/05/04/414686.aspx], or recompile the protected code, etc., etc., etc.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;The bottom line is, Identity permissions Demands could not [and should not] be used as measure of Security protection against highly privileged code. The best they provide in Full Trust is an illusion of protection, what can be even worse than no protection at all.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;There were other problems with their behavior in 1.x. The most obvious was performance cost: when Identity permission is demanded, Security checks have to be performed even in FullTrust environment, even though [as we saw] they do not make much sense there.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;To fix those problems, in Whidbey it was decided to come up with the set of changes known internally under the name "FullTrust means Full Trust". In essence, they consist of 3 parts:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;1. Identity Permissions in any state become subset of Unrestricted PermissionSet.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;2. Set logics for IdentityPermissions changes.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;3. LinkDemands are optimized out in FullTrust.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Here are the details on each item:&lt;/FONT&gt;&lt;/P&gt;&lt;B&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;1. Identity Permissions in any state become subset of Unrestricted PermissionSet.&lt;/FONT&gt;&lt;/P&gt;&lt;/B&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Effectively that means that Demand for &lt;B&gt;any&lt;/B&gt; Identity Permission will now pass in FullTrust. This improves FullTrust performance through simplificaiton of many Security checks. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;This also resolves a painful problems with Delegates around system code protected by LinkDemands. Such Delegates are often created and then called by 3rd party Full Trust applications [such as WinForms UI registering a system function to be invoked as result of button click]. When application runs, it eventually invokes a system method. At that moment, LinkDemand is evaluated, and since the application is not signed with Microsoft public key, the execution blows up with SecurityException. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Now, such problems are gone to the past.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Of course, the change also means that no Identity Permissions Demands can be used to protect one code from being accessed by another in FullTrust. However, this just makes explicit what was hidden before: there is no CAS protection against Full Trust.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Note that the change affects FullTrust code only. The old behavior still stands strong for partially trusted scenarios -- for example, for default Security for Internet Zone.&lt;/FONT&gt;&lt;/P&gt;&lt;B&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;2. Set logics for IdentityPermissions changes.&lt;/FONT&gt;&lt;/P&gt;&lt;/B&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;This is essentially a consequence of #1. Here are some details:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;2.1 Now you can create IdentityPermissions in Unrestricted state:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;StrongNameIdentityPermission P = new StrongNameIdentityPermission(PermissionState.Unrestricted);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;2.2. You can union two different Identity Pemrissions and get a meaningful result storing both used states:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;ZoneIdentityPermission Z1 = new ZoneIdentityPermission(SecurityZone.MyComputer);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;ZoneIdentityPermission Z2 = new ZoneIdentityPermission(SecurityZone.Internet);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;ZoneIdentityPermission Z3 = (ZoneIdentityPermission) Z1.Union(Z2);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;The result is:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;&amp;lt;IPermission class="System.Security.Permissions.ZoneIdentityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;version="1"&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;&amp;lt;Zone Zone="MyComputer"/&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Zone Zone="Internet"/&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;&amp;lt;/IPermission&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Obviously such permission states are mostly useless. Then why I seem to be so happy about this functionality? Because it simplifies the life of developer. You won't have to specialcase Identity Permisisons anymore when performing set logics operations, or creating them. Everything is straighforward from the beginning. At least, this is my opinion :)&lt;/FONT&gt;&lt;/P&gt;&lt;B&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;3. LinkDemands are optimized out in FullTrust.&lt;/FONT&gt;&lt;/P&gt;&lt;/B&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;This change is important, as it may break the code of some [hopefully very, very few] people.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;LinkDemands do not know anything about stack walk modifiers like Deny, Assert, and PermitOnly. And they check only the grant set of the immediate caller. Combined together, two previous statements inevitably mean that &lt;B&gt;any &lt;/B&gt;LinkDemand for &lt;B&gt;any &lt;/B&gt;Identity or "normal" CAS Permission will now pass in FullTrust.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;If so, why waste CPU cycles on doing checks with result already known? So the decision was made to simply skip any LinkDemands if they happen in FullTrust environment. Of course, this does not apply to scenarios where methods are called through Reflection and LinkDemands need to be converted to full Demands. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;This change was a clear win for JIT and startup time, but cut off some corner scenarios with non-CAS permissions. Since they don't do a stackwalk and may implement just any kind of arbitrary logics of their Demands, there is no guarantee their LinkDemands will always succeed in FullTrust. Which means the code has to maintain record of them, even in FullTrust environment. But due to the details of internal CAS implementation, doing so kills most of the performance benefits achieved from LinkDemands optimization for other types of permissions. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;So finally a tough decision was made to simply ignore non-CAS LinkDemands in FullTrust, too. For PrincipalPermission this was not a big deal, since LinkDemand operation for it was forbidden long time ago anyway. The only potentially affected code was custom non-CAS permissions.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;So far, we are not aware of any people who found good use of non-CAS custom permissions LinkDemands. Ironically, it seems like the only person suffered from this change was... me -- simply because my sample of non-CAS permission put on the Web about a year ago [http://blogs.msdn.com/eugene_bobukh/archive/2004/03/10/87645.aspx] will not work in FullTrust anymore :)&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=415217" width="1" height="1"&gt;</description></item><item><title>Some tips on testing managed code Security.</title><link>http://blogs.msdn.com/eugene_bobukh/archive/2004/03/10/87649.aspx</link><pubDate>Thu, 11 Mar 2004 03:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:87649</guid><dc:creator>Eugene Bobukh</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/eugene_bobukh/comments/87649.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugene_bobukh/commentrss.aspx?PostID=87649</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Verdana&gt;&amp;lt;Disclaimer&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;The text below represents author's personal opinion and does not necessarily reflect Microsoft recommended best practices. Author does not assume any responsibility caused by the use of the following information.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;&amp;lt;/Disclaimer&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;B&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Some quick tips on testing managed code Security.&lt;/FONT&gt;&lt;/P&gt;&lt;/B&gt;&lt;FONT face=Verdana size=2&gt;
&lt;P&gt;So now you are developing or testing some managed application. You’ve heard lots about .NET Security, but unfortunately did not have much time to read enough about it. You are starting to worry if Security would cause you any troubles and what should you do to verify you are OK here. In this case, this article may help you. Well, it will not teach how to become a real Security expert; and the steps outlined below are definitely not enough to ensure that your code if fully secure, but at least it will help to make sure you’ve covered some mostly typical issues.&lt;/P&gt;&lt;/FONT&gt;&lt;B&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Introduction:&lt;/FONT&gt;&lt;/P&gt;&lt;/B&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Managed code has Security built-in as inevitable part of it. Almost every API call goes through some of the Security API. This represent several essential differences from how old unmanaged code works; moreover, ensuring that Security is properly involved in right places and right times is really critical for any application.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;For non-experts in .NET Security there are quite a few things to keep in mind though. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;First, the idea of Security in general is that not everything what compiles is always allowed to run. Different restrictions may apply in different situations. For example, traditional Windows NT Security decides whether or not permit some execution based on who is current user.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;.NET Security [and this is the second thing] makes its' decisions based on the identity of the code, not the user [that's why it is named CAS -- Code Access Security]. That means, in order to determine what this or that piece of code is allowed to do, it looks at such things as: where from the code came; does it have anything to point to it's author [e.g., Authenticode certificate]; what is the hash value of the code, and so on. It does not mean though that Windows security gets overridden -- no, it still applies. .NET Security is just like another independent dimension of hedging against the attacks.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;There is virtually infinite number of real life Security configuration that may affect execution of managed code, and obviously we won't be able to cover all of them. However, there are several simple scenarios where Security most likely gets involved.&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;B&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Typical issues: &lt;/FONT&gt;&lt;/P&gt;&lt;/B&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;"I built an application which updates Registry. It works fine when I run it from C:\, but fails if I start it from the network share. What am I supposed to do, my customers are waiting?"&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;This is probably the most common issue. And unfortunately for the author, it is expected. Any code that comes from the network [and share is considered a network] gets less trust then the one starting from local machine. For instance, by default such code is not allowed to access the Registry, and this seems reasonable: why would you let somebody you don't even know to write to the sensitive part of your machine?&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Another kind of thing you might see is that some DLLs allow only callers that are digitally signed with the key known to them. So no matter what, you won't get access if you don't bear the evidence that you come from Microsoft, for example. This thing is harder to test, but at least it should be kept in mind.&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;B&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;How to test:&lt;/FONT&gt;&lt;/P&gt;&lt;/B&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Here I assume that your primary area is not the Security itself but rather something else. In this case, we can outline the set of most basic things to verify.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;First, let's introduce the concept of Trust Level. Normally, the level of trust is applied to application or function, and is expressed in terms of what it is permitted to do. For example, some code may be allowed to do File IO to given file, do unlimited networking operations, read environment variables, but not allowed to write to the Registry. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;It is very important to realize that every API in the .NET has its requirements on the trust level needed in order to invoke them. For instance, if you are trying to open a file via FileStream class, before doing anything it will verify that the caller of the API can do it; otherwise, it will fail.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;The granularity of different trust level requirements is really tremendous. However, for the sake of simplicity we can split it into three major categories:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;1. FullTrust: with this trust, everything is permitted by CAS. If some API is protected by FullTrust requirement, it most likely may be doing something really dangerous. Example of such thing is Process class that needs FullTrust to be created. By default everything that runs from the local machine gets FullTrust, so if you run your application from C:\ only, you are not really testing the Security of it.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;2. Partial trust: This could be really granular, ranging from the ability to show UI to calling private methods through Reflection or doing File IO. Usually any function that does such kind of things asks for the caller about ability to do them [but not for the FullTrust, it's not "all or nothing" model]. Quite many functions in .NET libraries have different partial trust requirements on them. Normally, applications that come from Internet or Intranet run with various degrees of partial trust.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;3. No special requirements (Execution only): anybody can call this method as it does not represent any Security risk. Example of such API may be Math.Sqrt().&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Using the classification above, it should be quite easy to achieve good basic level of Security testing coverage even for non-Security experts in 3 easy steps:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;1. Figure out is what is the actual trust level required by the design of API, scenario or application you are testing. In most cases just finding which bucket of the 3 above corresponds to it is enough; however, if you have more specific idea of what is needed [e.g., File IO] -- it is even better.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;2. Run your target with the trust level required or higher. If it does not run -- you are having Security overenforcement bug.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;3. Run it with the trust level below the required level. If it runs -- this is a Security hole. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;The next question is: how do I change that trust level?&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;B&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Tools:&lt;/FONT&gt;&lt;/P&gt;&lt;/B&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;There are several relatively simple ways to manipulate Security for testing purposes. In fact, these are more tips rather than some systematic approach, but for quick testing it should help:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;1. [Very simple]: suppose that your machine name is Box1, that its' IP address is 111.111.111.111, that your App.exe application lives on C:\ drive and that your .NET Security policy and IE Security settings are in default state. In this case, the following command&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;A href="file://Box1/C$/App.exe"&gt;&lt;U&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face=Verdana&gt;\\Box1\C$\App.exe&lt;/FONT&gt;&lt;/U&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;will effectively run App.exe in LocalIntranet zone, with trust level greatly reduced. This will give you an idea of how you application would behave if somebody runs it from the share -- very quick and cheap test.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Further, the following line:&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;A href="file://111.111.111.111/C$/App.exe"&gt;&lt;U&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face=Verdana&gt;\\111.111.111.111\C$\App.exe&lt;/FONT&gt;&lt;/U&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;will start your application as if it was run from the Internet zone which has even lesser trust. In this situation, you'll get execution environment pretty close [although not exactly the same!] to what will be if application is run in Internet Explorer. Again, this is just a s nice way to check basic things right away.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;2. More complex, but more flexible: change Security policy using caspol.exe or .NET Framework Configuration tool. To get 100% out of it, you might need to know Security deeper, but some sandboxing scenarios are quite easy to accomplish.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;For example, the following steps will assign any permissions you'd want to any application that starts from C:\TMP directory:&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#000080 size=2&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;2.1. Start .NET Framework Configuration tool [either by running mmc.exe and adding the proper snap-in, or through the shortcut in Administrative tools];&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;2.2 Expand "Console Root -&amp;gt; .NET Framework Configuration -&amp;gt; My Computer" nodes if they are not expanded.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;2.3. Expand "Runtime Security Policy -&amp;gt; Machine -&amp;gt; Code Groups" nodes.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;2.4. On the node "All_Code", rightclick "New...".&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;2.5. Give some name for the code group in the wizard that comes up, press "Next".&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;2.6. From drop-down menu, choose "URL" as membershipcondition.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;2.7. In "URL" box, type &lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="file:///C:/TMP/"&gt;&lt;U&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face=Verdana&gt;file://C:\TMP\*&lt;/FONT&gt;&lt;/U&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#000080 size=2&gt;&lt;FONT face=Verdana&gt;, press "Next".&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;2.8. Either use some of the existing sets, or create a new one. I'd really encourage you to play with the new sets creation as it would let you to test your application with all the kinds of Security settings you might be interested and to learn what permssions are shippedn with .NET. Creating new set goes though the wizard and is really easy and self-descriptive process.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;2.9. After you've finished creating the group, find it in under "All_Code" hierarchy, rightclick for "Properties" and check on the box "This policy level will only have the permissions from the permission set associated with this group".&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Now, if your application starts from C:\TMP, it will get those -- and only those! -- permissions that you have granted to it.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Don't forget to reset the policy back to default state after you finished your testing. It could be done either though .NET Framework Configuration tool or by running script "caspol.exe -pp off -all -reset".&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;However, what if you need to test not the whole application but rather one DLL, or even one function? Is there any way you can easily tweak the trust level of it? The answer is definite Yes.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;3. Assembly level requests are our friends.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;These are constructions that live at the beginning of an assembly and look as follows:&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;
&lt;P&gt;[assembly: {Some permission | PermissionSet}Attribute(SecurityAction.Request{Minimum|Optional|Refuse}, ...)]&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;
&lt;P&gt;For testing, the most interesting is RequestRefuse which basically tells the Policy: "this application should never be granted the named permission". So, for example, if the following line is there:&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;
&lt;P&gt;[assembly: RegistryPermissionAttribute(SecurityAction.RequestRefuse, Unrestricted = true)]&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;that would mean that assembly with it will not be granted any form of Registry access, even if run from the environment that otherwise would let it.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;One interesting note here is that FullTrust with any, even the most little permission "subtracted" this way is not FullTrust anymore. So everything that requests FullTrust must start failing now -- good test!&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;More useful technique is combining RequestMinimum with RequestOptional. If your assembly has such requests [say ReqMin for set A and ReqOptional for B] that would mean that:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;a) Assembly will NOT start if environment grants it less then A, AND&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;b) It will NEVER be granted more than unioning of A and B [what, when run from local machine, ends up with permissions grant set equal to union of A and B].&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;So for instance these lines will make sure your assembly runs with the smallest privileges ever possible in the Runtime -- with the right for execution only:&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#000080 size=2&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;[assembly: SecurityPermissionAttribute(SecurityAction.RequestMinimum, Execution = true)]&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;[assembly: PermissionSetAttribute(SecurityAction.RequestOptional, Unrestricted = false)]&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;
&lt;P&gt;The technique above is quite powerful and covers many of the Security testing scenarios you may encounter in real life. However, to use it one needs to be familiar with the syntax of assembly level requests and with syntax of permissions used with them. Fortunately, this is not a problem as MSDN has plenty of information on this, at least for most common cases.&lt;/P&gt;&lt;/FONT&gt;&lt;B&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;4. Stack walk modifiers.&lt;/FONT&gt;&lt;/P&gt;&lt;/B&gt;&lt;FONT face=Verdana size=2&gt;
&lt;P&gt;This is actually something more advanced that allows to alter the trust on class/level method. The modifiers useful for testing are Deny() and PermitOnly(), and they are methods that live on Permissions and PermissionSet classes. This example shows how to make sure that everything that executes inside Foo() method, and everything that is called from Foo(), gets the right only to execute and to pop up File Save/Open dialogs:&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#000080 size=2&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;// This is the method we control and use to call into Foo:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;public void Bar()&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;PermissionSet pSet = new PermissionSet(PermissionState.None);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileDialogPermission FP = new FileDialogPermission(PermissionState.Unrestricted);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;SecurityPermission SP = new SecurityPermission(SecurityPermissionFlag.Execution);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;pSet.AddPermission(FP);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;pSet.AddPermission(SP);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;pSet.PermitOnly();&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Foo();&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;// Method that we test&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;public void Foo()&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;//...&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=1&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;However, there are several caveats to keep in mind here, such as:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;a) In some cases modifiers effect can be overridden by applying other modifiers;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;b) There are types of Security checks [like LinkDemand] that are not affected by modifiers;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;So to use it, some level of Security expertise is actually required, which could be achieved by reading such MSDN topics as "Code Access Security", "PermissionSet", "SecurityAction", and materials on various Permissions used.&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=87649" width="1" height="1"&gt;</description></item><item><title>Sample of non-CAS custom permission with declarative form supported.</title><link>http://blogs.msdn.com/eugene_bobukh/archive/2004/03/10/87645.aspx</link><pubDate>Thu, 11 Mar 2004 03:42:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:87645</guid><dc:creator>Eugene Bobukh</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/eugene_bobukh/comments/87645.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugene_bobukh/commentrss.aspx?PostID=87645</wfw:commentRss><description>&lt;P class=Head1&gt;&lt;STRONG&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN&gt;Why?&lt;/SPAN&gt;&lt;SPAN&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;FONT&gt;Recently, I started seeing numerous requests regarding creation of custom permissions that do not inherit from CodeAccessPermission and thus do not perform stackwalk. There is nothing special about implementing such classes. In fact, it is easier then with CodeAccessPermission as a base. However, having a sample handy, I just decided to share it here along with my comments. So welcome&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Head1&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;FONT face="Courier New"&gt;WorkingTimePermission&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Trying to be at least somewhat close to real life, I implemented the permission object with the following Demand semantics:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;If Demand is performed during business hours, it passes.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;If it is done in other time, it throws the SecurityException.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;As you see, it’s straightforward. However, it might save you a good chunk of time when you use it declaratively, e.g.:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;[method:WorkingTimePermissionAttribute(SecurityAction.Demand)]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;private static void AccessibleDuringBusinessHoursOnly()&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;//…&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;…instead of performing time checks explicitly on each protected function entrance.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;The sample consists of 4 files: Permission DLL, Permission Attribute DLL, Client file that uses it and script that builds all together. My comments are in gray. Catches or important places are in dark red. Enjoy!&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;1. WorkingTimePermission.cs:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;using System;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;using System.Security;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;using System.Security.Permissions;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;// Make sure the assembly is signed; otherwise it will fail some of the actions needed for build sequence.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;[assembly:System.Reflection.AssemblyKeyFile("SomeKey.snk")]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;[assembly:System.Security.AllowPartiallyTrustedCallersAttribute()]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;namespace CustomPermissions&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[Flags,Serializable]&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public enum AccessType&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Common = 0x00,&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;VIP = 0x01&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public sealed class WorkingTimePermission : IPermission&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/* I’ve implemented this permission having two access &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;modes just to show how the case of permission having &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;internal data should be dealt with. But in fact this code &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;could be simplified even further by removing these flags */&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;private AccessType m_Access;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public WorkingTimePermission()&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;m_Access = AccessType.Common;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public WorkingTimePermission(AccessType access)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;VerifyAccess(access);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;m_Access = access;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/* Catch #1: although IPermission does not obligate you &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;to implement this kind of constructor, it must be specified &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if you wish to have the declarative form of the permission, &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;because Security system will silently try to use it when decoding &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;the attribute, and fail if it's not found. */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public WorkingTimePermission(PermissionState State)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;m_Access = AccessType.Common;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;private void VerifyAccess(AccessType access)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if (0 != (((int) access) &amp;amp; ~1)) &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;throw new ArgumentException("Wrong access type value: " + (int) access);&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// This is required by IPermission interface.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public IPermission Copy()&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;return new WorkingTimePermission(this.m_Access);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;private void VerifyType(IPermission Target, bool IsNullOK)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if (null == Target) &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if (true == IsNullOK) return;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;else throw new ArgumentException("Target is not WorkingTimePermission [it is null]");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if (this.GetType() != Target.GetType())&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;throw new ArgumentException("Target is not WorkingTimePermission");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public AccessType GetAccess()&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;return m_Access;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// This is required by IPermission interface.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public IPermission Intersect(IPermission Target)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if (null == Target) return null;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;VerifyType(Target, false);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WorkingTimePermission P = (WorkingTimePermission) Target;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;return new WorkingTimePermission(this.GetAccess() &amp;amp; P.GetAccess());&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// This is required by IPermission interface.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public IPermission Union(IPermission Target)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;VerifyType(Target, true);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WorkingTimePermission P = (WorkingTimePermission) Target;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;return new WorkingTimePermission(this.GetAccess() | P.GetAccess());&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// This is required by IPermission interface, too&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/* Catch #2: if you work with V1.0 or V1.1, this method will be silently &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;called by the compiler during build time if permission is used&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;declaratively. If any error occurs inside the body of this method, it is not &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;propagated to the above, issuing instead quite a bogus message like &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;“failed to create the permission for this attribute”. If it sounds familiar, &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;double your attention to this place: inject more debugging output, etc.*/&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public bool IsSubsetOf(IPermission Target)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;VerifyType(Target, true);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if (null == Target) return false;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WorkingTimePermission P = (WorkingTimePermission) Target;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;return (this.GetAccess() &amp;lt;= P.GetAccess());&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/* This is the core logics part of the permission. I’ve implemented it this way:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;For VIP access, Demand always passes.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;For normal access, it passes during “usual” business hours only.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Of course, you are more then welcome to implement whatever logics you see suitable. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Note please that all exception messages are hardcoded in English here. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;This is not a good style in general, and done only for the sake of simplicity. */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public void Demand()&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Console.WriteLine("WorkingTimePermission.Demand() called!");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if (AccessType.VIP == this.GetAccess()) return;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;DateTime Curr = DateTime.Now;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;DayOfWeek CurrDay = Curr.DayOfWeek;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if ((CurrDay == DayOfWeek.Saturday)||(CurrDay == DayOfWeek.Sunday)) &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;throw new SecurityException("Request for WorkingTimePermission failed because current day of week is " + CurrDay + ".");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;int Hour = Curr.Hour;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if ((Hour &amp;lt; 8)||(Hour &amp;gt; 17)) &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;throw new SecurityException("Request for WorkingTimePermission failed because current time is " + Hour + " hours.");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=Comment1Char&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;// This is required by IPermission interface&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public SecurityElement ToXml()&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;SecurityElement Ret = new SecurityElement("IPermission");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;String name = typeof(WorkingTimePermission).AssemblyQualifiedName;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Ret.AddAttribute("class", name);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Ret.AddAttribute("version", "1.0");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Ret.AddAttribute("AccessType", this.GetAccess().ToString());&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;return Ret;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=Comment1Char&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;// This is required by IPermission interface&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public void FromXml(SecurityElement e)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;String name = e.Attribute("class");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// Make sure we are not converting “something else” to WorkingTimePermission:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if (name != typeof(WorkingTimePermission).AssemblyQualifiedName) throw new ArgumentException("Wrong SecurityElement");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;String version = e.Attribute("version");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if (version != "1.0") throw new ArgumentException("Version " + version + " does not match current version of the permission");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;String access = e.Attribute("AccessType");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if (null != access) m_Access = (AccessType) Enum.Parse(typeof(AccessType), access);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;else m_Access = AccessType.Common;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;2. WorkingTimePermissionAttribute.cs:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;using System;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;using System.Security;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;using System.Security.Permissions;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;[assembly:System.Reflection.AssemblyKeyFile("SomeKey.snk")]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;[assembly:System.Security.AllowPartiallyTrustedCallersAttribute()]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;namespace CustomPermissions&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = false )] &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/*Catch #3: use CodeAccessSecurityAttribute as a base class, don’t be tempted by SecurityAttribute. */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public sealed class WorkingTimePermissionAttribute : CodeAccessSecurityAttribute&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;private AccessType m_Access;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public WorkingTimePermissionAttribute(SecurityAction action): base(action)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;m_Access = AccessType.Common;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// This is required by CodeAccessSecurityAttribute:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public override IPermission CreatePermission()&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;return new WorkingTimePermission(m_Access);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/* Catch #4: Even if permission has some internal parameter named Data, &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;we don't need to implement &lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;constructor(DataType Data). Attributes think that &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Data is a property of the permission, so let’s implement it as a property: */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public AccessType Access &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;get &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;return m_Access; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;set &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{ &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;m_Access = value;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;3. Client.cs&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;This is the sample of the code that uses WorkingTimePermission:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;using System;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;using System.Security;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;using System.Security.Permissions;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;using CustomPermissions;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT face=Verdana color=#808080 size=2&gt;// This class is created only to show the inheritance protection by the new permission:&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;public class BBB : AAA&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public override void Ozz()&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Console.WriteLine("BBB.Ozz() being called");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT face=Verdana color=#808080 size=2&gt;// This is the second, and the main class, containing all the demo code. &lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;// It &lt;/SPAN&gt;consists of several methods and calls to them, nothing more:&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;public class AAA&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/&lt;SPAN&gt;*&lt;/SPAN&gt; This is the demo of explicit permission usage. &lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Demand will pass during business hours and fail otherwise.&lt;SPAN&gt; */&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;private static void Foo()&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WorkingTimePermission P = new WorkingTimePermission();&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;P.Demand();&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Console.WriteLine("AAA.Foo() called!");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/&lt;SPAN&gt;*&lt;/SPAN&gt; Here is the same thing as above, but used declaratively.&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The attribute &lt;SPAN&gt;e&lt;/SPAN&gt;nsures that method Bar() could be called during business time only.&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Isn’t it neat? :)&lt;SPAN&gt; */&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[method:WorkingTimePermissionAttribute(SecurityAction.Demand)]&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;private static void Bar()&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Console.WriteLine("AAA.Bar() called!");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/&lt;SPAN&gt;*&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN&gt;This&lt;/SPAN&gt; is &lt;SPAN&gt;only to &lt;/SPAN&gt;show how to use attribute with the property. It is a &lt;SPAN&gt;plain &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;syntax&lt;/SPAN&gt; demo, because our permission is implemented in such a way that VIP&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;demand always passes thus making the permission useless. However, we &lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;can code some different schedule for VIPs, too &lt;SPAN&gt;*/&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[method:WorkingTimePermissionAttribute(SecurityAction.Demand, Access = AccessType.VIP)]&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;private static void BarVIP()&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Console.WriteLine("AAA.BarVIP() called!");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/&lt;SPAN&gt;*&lt;/SPAN&gt; Here you go: we’ve implemented Demand only, but got LinkDemand for free, too.&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;And it works, &lt;/SPAN&gt;ensuring that Rug() method cannot be even instantiated during&lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;non-business hours:&lt;SPAN&gt; */&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[method:WorkingTimePermissionAttribute(SecurityAction.LinkDemand)]&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;private static void Rug()&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Console.WriteLine("AAA.Rug() called!");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/* Catch #5: if you want to be able to see the actual SecurityException from the method&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;protected by JIT-time action like LinkDemand, wrap a target method into another one &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;and call the wrapper from inside a try...catch block. Without a wrapper, SecurityException &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;will be thrown during JIT-time, when try...catch does not exist yet, thus going uncaught. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT color=#800000&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;So the sample below calls RugWrapper() instead of just Rug().*/&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;private static void RugWrapper()&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Rug();&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// And, yes, InheritanceDemand just works, too!&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// &lt;SPAN&gt;So&lt;/SPAN&gt;, see, everyone who inherited from your AAA &lt;SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;// &lt;/SPAN&gt;class will &lt;SPAN&gt;loose the access to Ozz&lt;/SPAN&gt; during non-business hours&lt;SPAN&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[method:WorkingTimePermissionAttribute(SecurityAction.InheritanceDemand)]&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public virtual void Ozz()&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Console.WriteLine("AAA.Ozz() being called");&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// Same notes about JIT-time actions as in RugWrapper() apply:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;private static void BBBOzzWrapper()&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;(new BBB()).Ozz();&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;public static void Main()&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;try&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Foo();&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;catch (SecurityException e)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Console.WriteLine(e);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;try&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Bar();&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;catch (SecurityException e)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Console.WriteLine(e);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;try&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;BarVIP();&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;catch (SecurityException e)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Console.WriteLine(e);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;try&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;RugWrapper();&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;catch (SecurityException e)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Console.WriteLine(e);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;try&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;BBBOzzWrapper();&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;catch (SecurityException e)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Console.WriteLine(e);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;4. Build script. I assumed that all the tools like caspol.exe are on the path:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT face=Verdana color=#808080 size=2&gt;REM reset the policy, remove the garbage, clean the GAC, so we won’t stumble over the previously broken build :)&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;caspol -pp off -all –reset&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;del&lt;/SPAN&gt;&lt;SPAN&gt; *.dll&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;SPAN&gt;del&lt;/SPAN&gt;&lt;SPAN&gt; *.exe&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;gacutil /u WorkingTimePermission&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;gacutil /u WorkingTimePermissionAttribute&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;REM Create a StrongName key [or copy it from somewhere…]:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;sn -k SomeKey.snk&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT face=Verdana color=#808080 size=2&gt;REM Build the permission DLL:&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;csc /debug+ /t:library WorkingTimePermission.cs&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Catch&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#800000 size=2&gt;REM: Now is the important detail: in order to work properly, every DLL that implements classes used by Security must be in the GAC and must be in the list of fully trusted assemblies, so let’s do it:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;gacutil /i WorkingTimePermission.dll&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;caspol -af WorkingTimePermission.dll&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT color=#808080&gt;&lt;FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;REM: building attribut&lt;SPAN&gt;e… &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;csc /debug+ /t:library /r:WorkingTimePermission.dll WorkingTimePermissionAttribute.cs&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;gacutil /i WorkingTimePermissionAttribute.dll&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;caspol -af WorkingTimePermissionAttribute.dll&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT face=Verdana color=#808080 size=2&gt;REM: &lt;SPAN&gt;…a&lt;/SPAN&gt;nd the client.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Code1&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;csc /debug+ /r:WorkingTimePermission.dll /r:WorkingTimePermissionAttribute.dll Client.cs&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1&gt;&lt;STRONG&gt;&lt;FONT face=Verdana color=#808080 size=2&gt;REM: it's done!&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT&gt;&lt;FONT face=Verdana&gt;That’s it!&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Head1&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;FONT face="Courier New"&gt;Other uses of permission classes?&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT&gt;&lt;FONT face=Verdana&gt;Just as a quick side note… If you try to think of permission as of “deferred condition” object, you might find a number of interesting uses for custom classes like the above. Examples include:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT&gt;&lt;FONT face=Verdana&gt;CallDepthPermission: demand passes if the length of the callstack is less then some particular number [say, passed as a parameter].&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT&gt;&lt;FONT face=Verdana&gt;OSLanguagePermission: you want your code to be able to run on a limited set of OS languages only? It’s very easy to implement!&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT&gt;&lt;FONT face=Verdana&gt;NetworkStatusPermission: how about an attribute that allows function to be called only when the machine is off the network?&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT&gt;&lt;FONT face=Verdana&gt;Have fun!&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT&gt;&lt;FONT face=Verdana&gt;&lt;o:p&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT&gt;&lt;FONT face=Verdana&gt;&lt;o:p&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;FONT face="Courier New"&gt;Important update for users of .NET Framework 2.0 ["Whidbey"]&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT&gt;&lt;FONT face="Courier New"&gt;&lt;o:p&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;SPAN&gt;&lt;FONT&gt;&lt;FONT face="Courier New"&gt;&lt;o:p&gt;&lt;SPAN&gt;
&lt;P class=Text1&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT&gt;&lt;FONT face=Verdana&gt;Due to the number of Permission semantics changes, the above sample will not work as described in 2.0 if run in Full Trust environment. Partial trust behavior should remain unchanged though. More details are available at &lt;a href="https://blogs.msdn.com:443/eugene_bobukh/archive/2005/05/06/415217.aspx"&gt;http://blogs.msdn.com/eugene_bobukh/archive/2005/05/06/415217.aspx&lt;/A&gt;&amp;nbsp;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=87645" width="1" height="1"&gt;</description></item><item><title>How to Demand several StrongNameIdentityPermissions "at the same time" in 1.0 and 1.1.</title><link>http://blogs.msdn.com/eugene_bobukh/archive/2004/03/10/87603.aspx</link><pubDate>Thu, 11 Mar 2004 00:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:87603</guid><dc:creator>Eugene Bobukh</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/eugene_bobukh/comments/87603.aspx</comments><wfw:commentRss>http://blogs.msdn.com/eugene_bobukh/commentrss.aspx?PostID=87603</wfw:commentRss><description>&lt;P class=Head1 style="MARGIN: 12pt 0in"&gt;&lt;STRONG&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN lang=EN-US style="mso-bidi-font-size: 9.0pt; mso-ansi-language: EN-US"&gt;Problem Statement:&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt; &lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=Text1 style="MARGIN: 0in 0in 6pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Code Access Security provides developers with numerous ways of protecting their methods from unauthorized or untrusted callers, including usage of caller's StrongName signature to identify it. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1 style="MARGIN: 0in 0in 6pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;So if one would like to make sure that all the callers of some method are signed with particular key [what is almost equivalent to being shipped by particular publisher], he/she would probably do something like this: &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;[method: StrongNameIdentityPermissionAttribute(SecurityAction.Demand, PublicKey = "0x002400...")]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;public int ProtectedMethod()&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;//..&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=Text1 style="MARGIN: 0in 0in 6pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT size=2&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT face=Verdana&gt;However, in practice this approach is not feasible, because almost always there are some other callers on the stack. Even though they may be considered valid, [e.g., code from System.dll, or unmanaged IE "frame"], they possess different public keys and thus fail the Demand. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1 style="MARGIN: 0in 0in 6pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT size=2&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT face=Verdana&gt;So typically people use LinkDemand instead of normal Demand, what obviously gives much lesser protection as: &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1 style="MARGIN: 0in 0in 6pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT size=2&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT face=Verdana&gt;a) LinkDemand checks only immediate caller, thus opening the door for luring attack;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1 style="MARGIN: 0in 0in 6pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT size=2&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT face=Verdana&gt;b) It is enforced during Jit-time only. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1 style="MARGIN: 0in 0in 6pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT size=2&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT face=Verdana&gt;Additionally, it quite poorly solves the problem of handling several "valid" callers. In CLR version 2.0 there is a workaround for this, but in earlier versions people have to create a LinkDemand-protected wrapper for each caller key per each protected method. Such a hassle! &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Head1 style="MARGIN: 12pt 0in"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;STRONG&gt;&lt;FONT face="Courier New"&gt;Proposed Solution:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1 style="MARGIN: 0in 0in 6pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;However, even CLR 1.0 posesses classes that may be used to emulate full Demand functionality. The sample below shows how to do it. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1 style="MARGIN: 0in 0in 6pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;[Disclaimer: although I verified that it builds and runs for me, I do not accept any responsibility for&amp;nbsp;consequences of using this code or any parts of it] &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Text1 style="MARGIN: 0in 0in 6pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Note, that you may want to replace hardcoded public keys in the sample. Use "sn.exe -Tp" to extract them from assemblies, and "sn.exe -tp" from key files.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0" face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;/************************************************************/ &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;// Comment this out if you don't want detailed output:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;#define VERBOSE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;using System;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;using System.Security;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;using System.Security.Permissions;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;using System.Security.Policy;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;using System.Reflection;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;using System.Diagnostics; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;/*&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;This sample demonstrates how you can effectively check that all the callers of your method belong to a set of assemblies signed with StrongName keys you consider valid. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Effectively, this works pretty much as regular Demand for StrongNameIdentityPermission. However, regular Demand allows to query callers for one key only at a time, so if at least one of the callers posesses different key, normal Demand fails. This demo allows you circumvent this problem and "Demand" a set of keys at a time. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;The idea put into it is very simple: using StackTrace class, we query all our callers, get their assembly Evidence, extract StrongName keys from them and then compare with the list of "good" keys. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;This approach may not work if: &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;1. This code is not granted SecurityPermissionFlag.ControlEvidence that is needed to enumerate other's Evidence, and that in fact is quite powerful permission. However, if this sample is used to protect something so thoroughly, it may be already doing something that requires FullTrust. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;2. Callers have ControlEvidence. In this case, they can spoof this mechanism, although it's quite not straighforward. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;3. Machine has StrongName Verification skip entires that could be used to spoof the sample, too. But having such entries is asking for troubles anyway, so don't ever create them if you can avoid it. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Main method to use is EmulateSNDemand that takes a set of string representation of "good" keys and returns true if all callers have keys from this set, and fals if at least one caller did not have a key from this set. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Eugene V. Bobukh, &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;*/ &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0" face=Verdana color=#808080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;[assembly: System.Reflection.AssemblyKeyFile("ST.snk")]&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;[assembly: AllowPartiallyTrustedCallersAttribute()]&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;[assembly:SecurityPermissionAttribute(SecurityAction.RequestMinimum, ControlEvidence = true)] &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;public class DemoClass&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;// Helper function.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;private static bool IsInSet(StrongName SN, string[] GoodKeys)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;string Key;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;if (null == SN) Key = null;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;else Key = SN.PublicKey.ToString();&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;foreach (string s in GoodKeys)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 70.8pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;if ((null != s)&amp;amp;&amp;amp;(null != Key))&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 70.8pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 106.2pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;if (Key.ToUpper() == s.ToUpper()) return true;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 106.2pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 106.2pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;else if (s == Key) return true;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;return false;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN class=Comment1Char&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT face=Verdana&gt;/*&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN class=Comment1Char&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; mso-ansi-language: EN-US"&gt;Returns true if all caller's keys belong to passed set of GoodKeys,&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=Comment1Char&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt"&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=Comment1Char&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; mso-ansi-language: EN-US"&gt;and fails otherwise.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=Comment1Char&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt"&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=Comment1Char&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; mso-ansi-language: EN-US"&gt;If you want to allow non-signed callers, add null to GoodKeys array.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=Comment1Char&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt"&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=Comment1Char&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; mso-ansi-language: EN-US"&gt;Second parameter shows how many stack frames to skip. You can use it if you don't want to bother checking your own key, for example.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=Comment1Char&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt"&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=Comment1Char&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; mso-ansi-language: EN-US"&gt;Zero means "check everyone".&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=Comment1Char&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt; */&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN class=Comment1Char&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;o:p&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0" face=Verdana color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;public static bool EmulateSNDemand(string[] GoodKeys, int nFramesToSkip)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;StackTrace st = new StackTrace();&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;int Frames = st.FrameCount;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Console.WriteLine("Frames: {0}", Frames);&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;for (int i = nFramesToSkip; i &amp;lt; Frames; i++)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 70.8pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;StackFrame sf = st.GetFrame(i);&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 70.8pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;MethodBase mb = sf.GetMethod();&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 70.8pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Type t = mb.DeclaringType;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 70.8pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Assembly Asm = t.Assembly;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 70.8pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Evidence Ev = Asm.Evidence;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 70.8pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;#if VERBOSE&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 141.6pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Console.WriteLine("===================================");Console.WriteLine("Looking at the caller #{0} in the stack", i);&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 141.6pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Console.WriteLine("Calling method: {0}", mb);&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 141.6pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Console.WriteLine("Class that contains it: {0}", t);&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 141.6pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Console.WriteLine("Calling Assembly: {0}", Asm);&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 106.2pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;#endif&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 106.2pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;bool bKeyFound = false;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 106.2pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;foreach (object o in Ev)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 106.2pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 106.2pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;if (o is StrongName)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 106.2pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 141.6pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;bKeyFound = true;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 141.6pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;#if VERBOSE&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 177pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Console.WriteLine("Caller has StrongName:\r\n{0}", ((StrongName) o).PublicKey.ToString());&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 177pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;#endif&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 177pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;if (false == IsInSet((StrongName) o, GoodKeys))&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 177pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 177pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;#if VERBOSE&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 2.95in; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Console.WriteLine("This key is not \"good\"");&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 2.95in"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;#endif&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 2.95in"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;return false; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt 177pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;// why bother further if at least one caller is "bad"?&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 177pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 177pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;#if VERBOSE&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 177pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;else Console.WriteLine("This key is \"good\"");&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 177pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;#endif&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 141.6pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 106.2pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt 70.8pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;/* Finished searching. It appears that caller did not have a strongname, but let's check if we allow it: */&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 106.2pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;if (false == IsInSet((StrongName) null, GoodKeys)) &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 106.2pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 106.2pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;#if VERBOSE&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 141.6pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;Console.WriteLine("Caller does not have a key, and this is not allowed");&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 141.6pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;#endif&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 141.6pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;return false;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 106.2pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 106.2pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;#if VERBOSE&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 106.2pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;if (false == bKeyFound) Console.WriteLine("Caller does not have a key, but we allowed this");&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 106.2pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;#endif&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 70.8pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 70.8pt"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT face=Verdana&gt;&lt;SPAN class=Comment1Char&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; mso-ansi-language: EN-US"&gt;// If we are here, we've checked all the callers, and all they were "good", so return true:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=Comment1Char&gt;&lt;SPAN style="FONT-SIZE: 9pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 70.8pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;return true;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;/* This is a "protected" method that supposely wraps another, private method and calls it only if EmulateSNDemand() check passes. */&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;public static string ProtectionSample()&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt 35.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;// Use sn.exe to extract these values from assemblies or key pairs:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;string[] GoodKeys = {&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;/* Our's key. We can omit putting it here and set&amp;nbsp; nFramesToSkip to 2 for not checking our own key it will prevent anyone from reverse-calling us. However, now we don't do it: */&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;"0024000004800000940000000602000000240000525341310004000001000100f93aeade2ce364"+&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;"726aa2f1110c4d927f729145c198c02563ad4735fa4ecdee9dc4029b48596b3f3adfece384c05a"+&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;"24dadf1afe8c6277f2eddb9831a5465ac85bc05d46ea62975e2ecde4ae1c023c53676a0b17c5ba"+&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;"dcc22cfb9569866c375147023ec5c4dd92346328e25573f049938f3c85ced6685eeb2df9355c5c"+&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;"210c38bb", &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;/* Key 1 */&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;"0024000004800000940000000602000000240000525341310004000001000100a5c58607f9d289"+&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;"ba1a7e80ceb24e4f56bd110290f0a4d6f6eadc1687efc3db3fc972e3c06be0f287a39b65a54bd9"+&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;"007853f5e1d773f3179fd1af588684f71de16c8df6ec4c460d4cbe8bdb5651a2bf8afc8760aabf"+&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;"eca8822913f19c9d38f87111e00f616082db10c6547d37b714193c4dd682b8f55c38438727710f"+&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;"204bcdf8", &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;/* Key 2*/&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;"0024000004800000940000000602000000240000525341310004000001000100b91d308addb513"+&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;"c492a56462e5f582adc93c7b9b841a19342bce653848e74aace749d86e53ce126ddb6d543b063b"+&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;"044c4b0d31574a0f82a834eccf1c580c086308fc77cc615bc07f168826aae5e0f1e87d485c8142"+&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;"2715f341af54d88036435f01e0bc85e30daa864993e26888c0df72ee4c9c5795d5fc9f8e7dfc08"+&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT color=#000080&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"894ab1b0",&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Comment1 style="MARGIN: 6pt 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="mso-ansi-language: EN-US"&gt;&lt;FONT color=#808080&gt;&lt;FONT style="BACKGROUND-COLOR: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;// For demo purposes, we allow nonsigned callers, too.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;null&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 106.2pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;};&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;o:p&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;if (true == EmulateSNDemand(GoodKeys, 0)) return "\r\nAll callers have \"good\" keys";&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt; TEXT-INDENT: 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;return "\r\nSome of the callers do not appear to have \"good\" keys";&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt 35.4pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=Code1 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=EN-US style="BACKGROUND: #fffbf0"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;&lt;FONT face=Verdana&gt;} &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=87603" width="1" height="1"&gt;</description></item></channel></rss>