Quantcast
Channel: Common Language Runtime Internals and Architecture forum
Viewing all articles
Browse latest Browse all 1710

Executing unmanaged code in AppDomain with restricted permissions set

$
0
0

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


Viewing all articles
Browse latest Browse all 1710

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>