/// <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", File);
            mask |= MapGeneric("File", FileDirectory);
            mask |= MapGeneric("IoCompletion", IoCompletion);
            mask |= MapGeneric("Mutant", Mutant);
            mask |= MapGeneric("Semaphore", Semaphore);
            mask |= MapGeneric("RegistryTransaction", RegistryTransaction);
            mask |= MapGeneric("ALPC Port", AlpcPort);
            mask |= MapGeneric("Section", Section);
            mask |= MapGeneric("Key", Key);
            mask |= MapGeneric("Event", Event);
            mask |= MapGeneric("SymbolicLink", SymbolicLink);
            mask |= MapGeneric("Token", Token);
            mask |= Generic;
            mask |= MapGeneric("Directory", Directory);
            mask |= MapGeneric("Thread", Thread);
            mask |= MapGeneric("DebugObject", DebugObject);
            mask |= MapGeneric("Job", Job);
            mask |= MapGeneric("Process", Process);

            if (ToGenericAccess)
            {
                WriteObject(mask.ToGenericAccess());
            }
            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));
            }
        }