示例#1
0
        internal static Ace Create(MemoryMarshaler m)
        {
            IntPtr initialPtr = m.Ptr;                  // Save current ptr

            Debug.Assert(Marshal.SizeOf(typeof(ACE_HEADER)) == 4);
            ACE_HEADER head = (ACE_HEADER)m.ParseStruct(typeof(ACE_HEADER), false);
            Ace        ace;

            switch (head.AceType)
            {
            case AceType.ACCESS_ALLOWED_ACE_TYPE:
                ace = new AceAccessAllowed(m);
                break;

            case AceType.ACCESS_DENIED_ACE_TYPE:
                ace = new AceAccessDenied(m);
                break;

            // Object ACE not yet supported

/*
 *                              case AceType.ACCESS_ALLOWED_OBJECT_ACE_TYPE:
 *                                      ace = new AceAccessAllowedObject(m);
 *                                      break;
 *
 *                              case AceType.ACCESS_DENIED_OBJECT_ACE_TYPE:
 *                                      ace = new AceAccessDeniedObject(m);
 *                                      break;
 */
            default:
                throw new NotSupportedException("Unsupported ACE type: " + head.AceType);
            }

            // Restore initial ptr and move forward the size of the ACE
            m.Ptr = initialPtr;
            m.Advance(head.AceSize);
            return(ace);
        }
示例#2
0
 protected void BaseInit(ACE_HEADER header, AccessType accessType, Sid sid)
 {
     _header = header;
     _accessType = accessType;
     _sid = sid;
 }
示例#3
0
 protected void BaseInit(ACE_HEADER header, AccessType accessType, Sid sid)
 {
     _header     = header;
     _accessType = accessType;
     _sid        = sid;
 }