LockPermissions 表

LockPermissions 表用于保护锁定环境中应用程序的各个部分。 它可用于安装文件、注册表项和创建的文件夹。

安装在 Windows Server 2008 R2 或 Windows 7 中的包应使用 MsiLockPermissionsEx 表而不是 LockPermissions 表。 Windows Installer 5.0 之前的 Windows Installer 版本会忽略 MsiLockPermissionsEx 表。 Windows Installer 5.0 可以安装包含 LockPermissions 表的包。 从 Windows Installer 5.0 开始,安装包含 MsiLockPermissionsEx 表和 LockPermissions 表的包会失败并返回 Windows Installer 错误消息 1941。

LockPermissions 表包含以下列。

类型 密钥 Nullable
LockObject Identifier Y N
文本 Y N
Formatted Y Y
用户 Formatted Y N
权限 DoubleInteger N Y

 

LockObject

此列和 Table 列一起指定了要保护的文件、目录或注册表项。 LockObject 列是一个外键,该键指向 Table 列指定的表的主键。

Table

此列和 LockObject 列指定要保护的文件、目录或注册表项。 在 Table 列中,输入 File、Registry 或 CreateFolder 以指定 File 表Registry 表CreateFolder 表中指定的 LockObject。

Domain

此列用于标识要为其设置权限的用户的域。 这是独立计算机的名称或域名。 列数据类型为 Formatted,可以在此字段中使用字符串 [%USERDOMAIN] 来获取当前域的 USERDOMAIN 环境变量的值。 若要获取任何其他域,需要使用自定义操作。 有关详细信息,请参阅“自定义操作表”。

User

此列用于标识要为其设置权限的用户的本地化名称。 此名称必须位于计算机或域中。 如果计算机或域控制器无法识别域和用户的组合,或者无法检索用户的安全标识符 (SID),则安装将会失败。 可为单个 LockObject 指定多个用户。

可以用英文输入常见用户名“Everyone”和“Administrators”,并将其映射到众所周知的 SID。 通过 LockPermissions 表为 LocalSystem 授予在创建的所有安全描述符中的完全控制权。 可以在此字段中使用 ComputerName 属性LogonUser 属性USERNAME 属性获取当前用户。 需要使用自定义操作才能输入任何其他用户或组的本地化名称。

可以使用具有相同 LockObject 和 Table 条目(但 User 条目不同)的多个记录来为多个用户指定访问控制列表。

Permission

此列用于标识系统权限的整数说明。 下面列出了最常用的值(Winnt.h 中包含完整列表)。

Privilege 说明
GENERIC_ALL
0X10000000
268435456
读取、写入和执行访问权限
GENERIC_EXECUTE
0X20000000
536870912
执行访问权限
GENERIC_WRITE
0X40000000
1073741824
写入权限

 

不能在 Permission 列中指定 GENERIC_READ。 此操作会失败。 必须指定 KEY_READ 或 FILE_GENERIC_READ 之类的值。

在此列中输入的 Null 保留供将来使用。

备注

顺序表中的 InstallFilesWriteRegistryValuesCreateFolders 操作将处理此表中的信息。 有关使用顺序表的信息,请参阅使用顺序表

只能在 LockPermissions 表中为计算机或域中已存在的用户设置权限。 尝试为未知用户设置权限会导致安装失败,即使该用户帐户是在安装期间通过推迟的自定义操作创建的。

建议将系统管理员的本地组包含在所有访问控制列表 (ACL) 中。 这可以确保系统管理员能够访问和维护对象。

LockPermissions 表中列出的每个文件、注册表项或目录都会收到一个显式安全描述符,无论它是否替换了现有对象。 Windows Installer 会尝试保护系统上已存在的对象的安全性。 如果某个对象未在 LockPermissions 表中列出并替换了现有对象,则替换项将获得它所替换的对象的安全设置。

如果某个对象未在 LockPermissions 表中列出,但未替换现有对象,则它不会收到显式安全描述符。 对新对象的访问权限基于其父对象或容器对象的属性。 如果某个对象未在表中列出并替换了一个没有显式安全描述符的对象,则对新对象的访问权限基于其父对象或容器对象的属性。

Windows Installer 将 UserSID 属性设置为安全标识符 (SID) 或运行安装的用户。

验证

ICE03
ICE06
ICE46
ICE55