/// <summary> /// Overridden ProcessRecord /// </summary> protected override void ProcessRecord() { AccessMask mask = 0; switch (ParameterSetName) { case "FromAce": mask = AccessControlEntry.Mask; break; default: mask = AccessMask; mask |= MapGeneric(SpecificAccessType.File, FileAccess); mask |= MapGeneric(SpecificAccessType.File, FileDirectoryAccess); mask |= MapGeneric(SpecificAccessType.IoCompletion, IoCompletionAccess); mask |= MapGeneric(SpecificAccessType.Mutant, MutantAccess); mask |= MapGeneric(SpecificAccessType.Semaphore, SemaphoreAccess); mask |= MapGeneric(SpecificAccessType.RegistryTransaction, RegistryTransactionAccess); mask |= MapGeneric(SpecificAccessType.ALPCPort, AlpcPortAccess); mask |= MapGeneric(SpecificAccessType.Section, SectionAccess); mask |= MapGeneric(SpecificAccessType.Key, KeyAccess); mask |= MapGeneric(SpecificAccessType.Event, EventAccess); mask |= MapGeneric(SpecificAccessType.SymbolicLink, SymbolicLinkAccess); mask |= MapGeneric(SpecificAccessType.Token, TokenAccess); mask |= GenericAccess; mask |= MapGeneric(SpecificAccessType.Directory, DirectoryAccess); mask |= MapGeneric(SpecificAccessType.Thread, ThreadAccess); mask |= MapGeneric(SpecificAccessType.DebugObject, DebugObjectAccess); mask |= MapGeneric(SpecificAccessType.Job, JobAccess); mask |= MapGeneric(SpecificAccessType.Process, ProcessAccess); mask |= MapGeneric(SpecificAccessType.Transaction, TransactionAccess); mask |= MapGeneric(SpecificAccessType.TransactionManager, TransactionManagerAccess); mask |= MapGeneric(SpecificAccessType.ResourceManager, ResourceManagerAccess); mask |= MapGeneric(SpecificAccessType.Enlistment, EnlistmentAccess); mask |= (uint)ManadatoryLabelPolicy; break; } if (ToGenericAccess) { WriteObject(mask.ToGenericAccess()); } else if (ToMandatoryLabelPolicy) { WriteObject(mask.ToMandatoryLabelPolicy()); } else if (ToSpecificAccess == SpecificAccessType.None && ToTypeAccess == null) { WriteObject(mask); } else { NtType type = ToTypeAccess ?? GetTypeObject(ToSpecificAccess); WriteObject(mask.ToSpecificAccess(type.AccessRightsType)); } }
/// <summary> /// Overridden ProcessRecord /// </summary> protected override void ProcessRecord() { AccessMask mask = AccessMask; mask |= MapGeneric("File", FileAccess); mask |= MapGeneric("File", FileDirectoryAccess); mask |= MapGeneric("IoCompletion", IoCompletionAccess); mask |= MapGeneric("Mutant", MutantAccess); mask |= MapGeneric("Semaphore", SemaphoreAccess); mask |= MapGeneric("RegistryTransaction", RegistryTransactionAccess); mask |= MapGeneric("ALPC Port", AlpcPortAccess); mask |= MapGeneric("Section", SectionAccess); mask |= MapGeneric("Key", KeyAccess); mask |= MapGeneric("Event", EventAccess); mask |= MapGeneric("SymbolicLink", SymbolicLinkAccess); mask |= MapGeneric("Token", TokenAccess); mask |= GenericAccess; mask |= MapGeneric("Directory", DirectoryAccess); mask |= MapGeneric("Thread", ThreadAccess); mask |= MapGeneric("DebugObject", DebugObjectAccess); mask |= MapGeneric("Job", JobAccess); mask |= MapGeneric("Process", ProcessAccess); mask |= (uint)ManadatoryLabelPolicy; if (ToGenericAccess) { WriteObject(mask.ToGenericAccess()); } else if (ToMandatoryLabelPolicy) { WriteObject(mask.ToMandatoryLabelPolicy()); } else if (String.IsNullOrEmpty(ToSpecificAccess)) { WriteObject(mask); } else { NtType type = NtType.GetTypeByName(ToSpecificAccess, false); if (type == null) { throw new ArgumentException(String.Format("'{0}' is not a valid NT type name", ToSpecificAccess)); } WriteObject(mask.ToSpecificAccess(type.AccessRightsType)); } }