Hi all,
My application creates an AppDomain to load and execute other assemblies, these assemblies access to unmanaged code.
If I create my AppDomain with and unrestricted permissions set, all works fine, but if not an exception is thrown when accessing to unmanaged code although I have added an unrestricted SecurityPermission instance to my AppDomain permissions set. The next code shows how I create AppDomain.
// Create a new sandboxed AppDomain Evidence evidence = new System.Security.Policy.Evidence(); evidence.AddHostEvidence(new System.Security.Policy.Zone(SecurityZone.MyComputer)); PermissionSet permissionSet = SecurityManager.GetStandardSandbox(evidence); permissionSet.SetPermission(new DataProtectionPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new EnvironmentPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new FileDialogPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new FileIOPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new GacIdentityPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new IsolatedStorageFilePermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new KeyContainerPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new MediaPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new PrincipalPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new PublisherIdentityPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new ReflectionPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new RegistryPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new SecurityPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new SiteIdentityPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new StorePermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new StrongNameIdentityPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new TypeDescriptorPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new UIPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new UrlIdentityPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new WebBrowserPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new ZoneIdentityPermission(PermissionState.Unrestricted)); permissionSet.SetPermission(new SocketPermission(PermissionState.None)); AppDomainSetup appDomainSetup = new AppDomainSetup(); appDomainSetup.ApplicationBase = Path.GetDirectoryName(applicationPath); appDomainSetup.ApplicationName = Path.GetFileName(applicationPath); appDomainSetup.PrivateBinPath = Path.Combine(appDomainSetup.ApplicationBase, "VCReferences"); this.sandboxedAppDomain = AppDomain.CreateDomain("Testing Sandbox", evidence, appDomainSetup, permissionSet, null);
When code in my AppDomain try to access unmanaged code a TypeInitializationException is thrown. The innerException is a SecurityException ("Request failed"). Debugging I realize that CodeAccessSecurityEngine throws the SsecurityException because an unrestridted permissions set is demanded.
So although I have added an unrestrited SecurityPermission instance that have UnmanagedCode Flag set I have no access to unmanaged code.
What is the correct use of UnmanagedCode flag in SecurityPermission? Am I missing something?
P.D.: I Have successfully cretaed an instance of object of loaded assembly (using CreateInstanceAndUnwrap), and I can execute its methods also. The only problem is accesing to unmanaged code, the rest work fine.
Thank you in advance. Best regards,
Alex