Access Masks

http://msdn.microsoft.com/en-us/library/cc230294.aspx
http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/distrib/dsce_ctl_fnnu.mspx
Access Masks
In an ACE, permissions are represented by one or more bits in a 32-bit value called an access mask. When a thread requests access to an object, it specifies the type of access that it desires by using an access mask as well. During an access check, the operating system compares the desired access mask supplied by the thread with the access mask in each ACE of the object’s DACL, looking for bits that match. Figure 12.4 illustrates the layout of an access mask.按此在新窗口打开图片
Figure 12.4 Layout of an Access Mask
Each bit corresponds to an access right—a particular operation or set of operations that can be performed on the object. Turning a bit on in a desired access mask signals that the thread requests the right to perform the corresponding operation. Turning a bit on in the access mask for an ACE signals that the corresponding operation is either allowed or denied, depending on the type of ACE.
Although many of the access rights in an access mask correspond to permissions that can be set through the user interface, not all of them do. Some can be set only by a process, such as the process that creates an object, and cannot be manipulated through the user interface. Windows 2000 uses an access mask format that includes the following types of access rights:
Generic access rights    These rights apply to all objects, but they mean different things for different object types. Each object type maps each generic access right to a different set of standard and object-specific access rights. Table 12.2 lists generic access rights
Table   12.2 Generic Access Rights
Constant in Win32 API Meaning
GENERIC_ALL Read, write, and execute access
GENERIC_EXECUTE Execute access
GENERIC_READ Read access
GENERIC_WRITE Write access
Standard access rights    These rights are more specific than generic access rights but still apply to operations available for most object types. Table 12.3 lists standard access rights.
Table   12.3 Standard Access Rights 
Constant in Win32 API Meaning
DELETE The right to delete the object.
READ_CONTROL The right to read the information in the object’s security descriptor, not including the information in the SACL.
SYNCHRONIZE The right to use the object for synchronization. Some object types do not support this access right.
WRITE_DAC The right to modify the DACL in the object’s security descriptor.
WRITE_OWNER The right to change the owner in the object’s security descriptor.
SACL access right    This right controls the ability to read or change an object’s SACL, which controls auditing for the object. The operating system allows access to the SACL only if the subject’s access token includes the Manage auditing and security log (SeSecurityPrivilege) privilege.
Object-specific access rights    Each type of securable object defines its own set of access rights.

ACCESS_MASK
2.4.3 ACCESS_MASK
An ACCESS_MASK is a 32-bit set of flags that are used to encode the user rights to an object. An access mask is used both to encode the rights to an object assigned to a principal and to encode the requested access when opening an object.
The bits with a X value in the table below are used for object-specific user rights. A file object would encode, for example, Read Access and Write Access. A registry key object would encode Create Subkey and Read Value, for example.
Note  The bits with a value of X are reserved for use by specific protocols that make use of the ACCESS_MASK data type. The nature of this usage differs according to each protocol and is implementation-specific.
The bits in positions 0 through 3 in the table below are generic rights that can be mapped to object-specific user rights by the object itself.
The bits in positions 6 and 7 are for maximum allowed and access system security rights.
The bits in positions 11 through 15 are standard rights that are common to all objects.
If the GR/GW/GX/GA bits are set in an ACE structure that is already attached to an object, requesting access may produce unintended results. This is because the Access Check algorithm does not perform this type of translation for ACE structures. This type of translation is only made for a requested ACCESS_MASK.
typedef DWORD ACCESS_MASK;
typedef ACCESS_MASK* PACCESS_MASK;
按此在新窗口打开图片
Figure 1: Access mask bit map table
Where the bits are defined as:
Value
Description
GR
Generic Read
When used in an Access Request operation: When read access to an object is requested, this bit is translated to a combination of bits. These are most often set in the lower 16 bits of the ACCESS_MASK. (Individual protocol specifications MAY specify a different configuration.) The bits that are set are implementation dependent. During this translation, the GR bit is cleared. The resulting ACCESS_MASK bits are the actual permissions that are checked against the ACE structures in the security descriptor that attached to the object.
When used to set the Security Descriptor on an object: When the GR bit is set in an ACE that is to be attached to an object, it is translated into a combination of bits, which are usually set in the lower 16 bits of the ACCESS_MASK. (Individual protocol specifications MAY specify a different configuration.) The bits that are set are implementation dependent. During this translation, the GR bit is cleared. The resulting ACCESS_MASK bits are the actual permissions that are granted by this ACE.
GW
Generic Write
When used in an Access Request operation: When write access to an object is requested, this bit is translated to a combination of bits, which are usually set in the lower 16 bits of the ACCESS_MASK. (Individual protocol specifications MAY specify a different configuration.) The bits that are set are implementation dependent. During this translation, the GW bit is cleared. The resulting ACCESS_MASK bits are the actual permissions that are checked against the ACE structures in the security descriptor that attached to the object.
When used to set the Security Descriptor on an object: When the GW bit is set in an ACE that is to be attached to an object, it is translated into a combination of bits, which are usually set in the lower 16 bits of the ACCESS_MASK. (Individual protocol specifications MAY specify a different configuration.) The bits that are set are implementation dependent. During this translation, the GW bit is cleared. The resulting ACCESS_MASK bits are the actual permissions that are granted by this ACE.
GX
Generic Execute
When used in an Access Request operation: When execute access to an object is requested, this bit is translated to a combination of bits, which are usually set in the lower 16 bits of the ACCESS_MASK. (Individual protocol specifications MAY specify a different configuration.) The bits that are set are implementation dependent. During this translation, the GX bit is cleared. The resulting ACCESS_MASK bits are the actual permissions that are checked against the ACE structures in the security descriptor that attached to the object.
When used to set the Security Descriptor on an object: When the GX bit is set in an ACE that is to be attached to an object, it is translated into a combination of bits, which are usually set in the lower 16 bits of the ACCESS_MASK. (Individual protocol specifications MAY specify a different configuration.) The bits that are set are implementation dependent. During this translation, the GX bit is cleared. The resulting ACCESS_MASK bits are the actual permissions that are granted by this ACE.
GA
Generic All
When used in an Access Request operation: When all access permissions to an object are requested, this bit is translated to a combination of bits, which are usually set in the lower 16 bits of the ACCESS_MASK. (Individual protocol specifications MAY specify a different configuration.) Objects are free to include bits from the upper 16 bits in that translation as required by the objects semantics. The bits that are set are implementation dependent. During this translation, the GA bit is cleared. The resulting ACCESS_MASK bits are the actual permissions that are checked against the ACE structures in the security descriptor that attached to the object.
When used to set the Security Descriptor on an object: When the GA bit is set in an ACE that is to be attached to an object, it is translated into a combination of bits, which are usually set in the lower 16 bits of the ACCESS_MASK. (Individual protocol specifications MAY specify a different configuration.) Objects are free to include bits from the upper 16 bits in that translation, if required by the objects semantics. The bits that are set are implementation dependent. During this translation, the GA bit is cleared. The resulting ACCESS_MASK bits are the actual permissions that are granted by this ACE.
MA
Maximum Allowed
When used in an Access Request operation: When requested, this bit grants the requestor the maximum permissions allowed to the object through the Access Check Algorithm. This bit can only be requested, it cannot be set in an ACE.
When used to set the Security Descriptor on an object: Specifying the Maximum Allowed bit in the SECURITY_DESCRIPTOR has no meaning. The MA bit SHOULD NOT be set and SHOULD be ignored when part of a SECURITY_DESCRIPTOR structure.
AS
Access System Security
When used in an Access Request operation: When requested, this bit grants the requestor the right to change the SACL of an object. This bit MUST NOT be set in an ACE that is part of a DACL. When set in an ACE that is part of a SACL, this bit controls auditing of accesses to the SACL itself.
SY
Synchronize
Specifies access to the object sufficient to synchronize or wait on the object.
WO
Write Owner
Specifies access to change the owner of the object as listed in the security descriptor.
WD
Write DACL
Specifies access to change the discretionary access control list of the security descriptor of an object.
RC
Read Control
Specifies access to read the security descriptor of an object.
DE
Delete
Specifies access to delete an object.

发表评论