Re: Hosted WinForms Controls and CAS



Hello Dominick Baier [DevelopMentor],

THanks a lot Dominick!

Shawn Wildermuth C# MVP, Author and Speaker
http://adoguy.com

hi,

this is part of an msi installer project - and should get you
started...

// this code will run when the MSI file is installed public override
void Install(IDictionary stateSaver) {

// first need to find the machine policy,
// which is where we'll make our changes
PolicyLevel machinePolicy = _findPolicyLevel("Machine");
if (null == machinePolicy) {
// sanity check - this should never happen
throw new ApplicationException("Failed to find the machine policy
in the PolicyHierarchy");
}
// we need to add a named permission set
// that includes whatever permissions we're granting
NamedPermissionSet nps = new NamedPermissionSet(permissionSetName,
PermissionState.None);
nps.Description = permissionSetDesc;
// TODO: add the permissions AcmeExpense needs
nps.AddPermission(new FileIOPermission(FileIOPermissionAccess.Read,
@"c:\acme\expenses"));
nps.AddPermission(new
EnvironmentPermission(EnvironmentPermissionAccess.Read,
"EXPENSE"));
nps.AddPermission(new
SqlClientPermission(PermissionState.Unrestricted));
nps.AddPermission(new
DataProtectionPermission(PermissionState.Unrestricted));
// add our named permission set to the machine policy level
// note that nothing is saved yet (we'll save at the end)
try {
machinePolicy.AddNamedPermissionSet(nps);
}
catch {
// duplicate name - update the existing one with the same name
machinePolicy.ChangeNamedPermissionSet(nps.Name, nps);
}
// now we need to create a code group that matches all assemblies
// that we ship with AcmeExpense - one way of doing this is to
// match the strong name we assign to that application (although
// depending on how you manage strong names, this might cover
// a wider set of assemblies)
CodeGroup cg = new UnionCodeGroup(
new StrongNameMembershipCondition(
new StrongNamePublicKeyBlob(acmePublicKey),
null, // match regardless of assembly's simple name
null), // match regardless of assembly's version
new PolicyStatement(nps,
PolicyStatementAttribute.Nothing) // no LevelFinal or Exclusive
attribute on this code group
);
cg.Name = codeGroupName;
cg.Description = codeGroupDesc;
// code groups with duplicate names are legal, but messy and
confusing,
// so we make sure to first remove any existing code groups with
our name
_removeCodeGroupsByName(machinePolicy.RootCodeGroup, cg.Name);
// add our new code group (note we've not saved yet).
machinePolicy.RootCodeGroup.AddChild(cg);

// finally, save all changes atomically.
SecurityManager.SavePolicyLevel(machinePolicy);
}
PolicyLevel _findPolicyLevel(string labelWeWant) {
IEnumerator policyLevelEnumerator = SecurityManager.PolicyHierarchy();
PolicyLevel found = null;
while (policyLevelEnumerator.MoveNext()) {
PolicyLevel lvl = (PolicyLevel)policyLevelEnumerator.Current;
if (labelWeWant == lvl.Label) {
found = lvl;
}
}
return found;
}
void _removeCodeGroupsByName(CodeGroup parent, string childName) {
ArrayList codeGroupsToRemove = new ArrayList();
foreach (CodeGroup existingCodeGroup in parent.Children) {
if (childName == existingCodeGroup.Name) {
codeGroupsToRemove.Add(existingCodeGroup);
}
}
foreach (CodeGroup cg in codeGroupsToRemove) {
parent.RemoveChild(cg);
}
}
---------------------------------------
Dominick Baier - DevelopMentor
http://www.leastprivilege.com
I am workign with a small intranet app for a customer and we've
decided to use Hosted WinForms controls for several really
complicated code we have. I can host the controls fine (much easier
than I thought actually). But I can't do certain work without
elevating the CAS and Zone permissions. THis isn't a concern for the
customer. They are happy to include the app in the "Trusted" zone.

I am at the point where I can detect the framework requirements and
the security requirement and forward the user to a page to download
an installable package to do the security work of elevating
permissions. Before I invent my own thing, I wondered if anyone knew
of any examples of how to do with in an Installer? I don't want to
elevate more permissions than I really need, so any advice about how
to elevate CAS permissions for my particular assembly instead of
elevating it for the entire zone would be great. The installer is
*not* installing the assembly with the controls so that we can
download new versions as necessary. That might complicate things
those. Any hints or urls would help.

BTW, I have googled and found lots of example of how to do the
hosting, but not the security side...so don't bother just sending me
links to places that explain the <object ... /> tag syntax.

TIA

Shawn Wildermuth
C# MVP, Author and Speaker
http://adoguy.com


.



Relevant Pages

  • Re: Any good examples of modifying the CAS during install?
    ... string permissionSetDesc = "This is the set of permissions needed by ..NET applications for Acme corporation"; ... throw new ApplicationException("Failed to find the machine policy in the PolicyHierarchy"); ... CodeGroup cg = new UnionCodeGroup( ... I create a custom action to run my installer? ...
    (microsoft.public.dotnet.security)
  • Re: Hosted WinForms Controls and CAS
    ... this is part of an msi installer project - and should get you started... ... throw new ApplicationException("Failed to find the machine policy in the PolicyHierarchy"); ... // that includes whatever permissions we're granting ... CodeGroup cg = new UnionCodeGroup( ...
    (microsoft.public.dotnet.security)
  • Re: Trouble installing KB840374
    ... because the installer tries to back up the ... original files that is about to replace with the ones in the hotfix. ... Check the local policy and se whether the administrators group does not have ... not to back up any files, so you shouldn't run into the permissions problem. ...
    (microsoft.public.windows.server.general)
  • Re: set service start permissions to Administrator only
    ... You can use security templates, with or without import to GPO, ... Disable and stop "Windows Installer" service ... Deny permissions for changing that keys in the registry. ... |> only Administrators can start it. ...
    (microsoft.public.windows.server.security)
  • Re: "Preparing to Install" Message - Word 2007 - No Solution ?
    ... Outlook 2007 Performance Update:http://pschmid.net/blog/2007/04/13/105 ... using the Windows Installer Cleanup Utility to remove any ... this it seems it could actually be a vista issue with permissions. ... references to registry keys that couldn't be accessed helped confirm ...
    (microsoft.public.office.misc)