private static extern void SetCanonicalConditionalAptcaList(AppDomainHandle appDomain, string canonicalList);
private static extern void SetSecurityHomogeneousFlag(AppDomainHandle domain, [MarshalAs(UnmanagedType.Bool)] bool runtimeSuppliedHomogenousGrantSet);
private static extern void SetLegacyCasPolicyEnabled(AppDomainHandle domain);
private static extern void GetAppDomainManagerType(AppDomainHandle domain, StringHandleOnStack retAssembly, StringHandleOnStack retType);
private static extern void SetAppDomainManagerType(AppDomainHandle domain, string assembly, string type);
private static extern void GetGrantSet(AppDomainHandle domain, ObjectHandleOnStack retGrantSet);
private static extern bool GetIsLegacyCasPolicyEnabled(AppDomainHandle domain);
private static extern void SetupDomainSecurity(AppDomainHandle appDomain, ObjectHandleOnStack appDomainEvidence, IntPtr creatorsSecurityDescriptor, [MarshalAs(UnmanagedType.Bool)] bool publishAppDomain);
private static extern bool DisableFusionUpdatesFromADManager(AppDomainHandle domain);
private AppDomainHandle CreateAppDomain(string baseDirectory) { var friendlyName = String.Format("Graywulf_{0}", Guid.NewGuid()); // Shadow copying assablies is necessary for the scheduler to work, however it is not supported // under Windows 2003. Since web servers still run this, a workaround has to be made here. string shadowcopy; if (System.Environment.OSVersion.Platform == PlatformID.Win32NT && System.Environment.OSVersion.Version.Major >= 6) { shadowcopy = "true"; } else { shadowcopy = "false"; } var setup = new AppDomainSetup() { ApplicationBase = baseDirectory, ApplicationName = AppDomain.CurrentDomain.SetupInformation.ApplicationName, ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile, DisallowApplicationBaseProbing = false, DisallowBindingRedirects = true, DisallowCodeDownload = true, ShadowCopyFiles = shadowcopy, //CachePath = "", //DynamicBase = "", //PrivateBinPath = "", //PrivateBinPathProbe = "", //ShadowCopyDirectories = "", }; // Create the domain var ad = AppDomain.CreateDomain(friendlyName, null, setup); // Create and unwrap the handler that allows interaction with the domain var helper = AppDomainHelper.CreateInstanceAndUnwrap(ad); // Create and return the handle to the new domain var handle = new AppDomainHandle() { AppDomain = ad, Helper = helper, }; // Save handle for future use appDomains.Add(ad.Id, handle); return handle; }