* Demand ** P/Invoke pinvoke1.cs Successful p/invoke pinvoke2.cs p/invoke denied (Deny) at class level pinvoke3.cs p/invoke denied (Deny) at method level Notes - We do not try to refuse UnmanagedCode (RequestRefused) at assembly level because this would fail at the LinkDemand level (which is tested elsewhere) - With Mono runtime the native function getuid is called in libc - With MS runtime the native function GetTickCount is called in kernel32.dll ** [SuppressUnmanagedCodeSecurity] a.k.a. SUCS Test the automatic demand generated for P/Invoking when [SuppressUnmanagedCodeSecurity] is being used to suppress it. sucs1.cs Call native code without any [SUCS] attribute (fails). sucs2.cs Call native code with a [SUCS] attribute at class level. sucs3.cs Call native code with a [SUCS] attribute at method level. sucs4.cs Call native code with [SUCS] attributes at both class and method level. Notes - With Mono runtime the native function getuid is called in libc - With MS runtime the native function GetTickCount is called in kernel32.dll ** Self Stack walk starts at the caller frame - i.e. the current frame is ignored. The self*.cs tests ensure that the walk starts at the right frame (or at least that it ignore the caller frame). selfassert.cs Deny on caller, Assert and Demand on callee. Assert is ignored, Demand is executed and fail on caller's Deny. selfdeny.cs Deny and Demand on the same frame. Deny is ignored. Demand is executed (stack walk). selfpermit.cs PermitOnly Unmanaged, Demand ControlAppDomain. PermitOnly is ignored and Demand (for ControlAppDomain) succeed.