1 The basic idea of the tests are to try to exit the running process by calling
2 Environment.Exit(int). The entry point, Main, denies UnmanagedCode from being
3 executed. UnmanagedCode is required to call Environment.Exit(int). Then we try
4 to call Environment.Exit(int) from other threads which "should" have inherited
5 the restriction from the "main" (i.e. original) thread.
7 This security stack "inheritance" is called "stack propagation".
10 * thread1.cs Deny unmanaged code before creating the thread object.
11 * thread2.cs Deny unmanaged code after creating the thread object but
13 * thread3.cs Deny unmanaged code after creating the thread object and
16 * timer1.cs: Use System.Threading.Timer (Thread.Start) to test stack
18 * timer2.cs: Use System.Timers.Timer (ThreadPool.QueueUserWorkItem) to test