预计阅读本页时间:-
11.9.2 安全相关的API调用
Windows Vista的访问控制机制大都基于安全描述符。通常情况下进程创建对象时会将一个安全描述符作为参数提供给CreateProcess、CreateFile或者其他对象创建调用。该安全描述符就会附属在这个对象上,就如在图11-48中看到的那样。如果没有给创建对象的函数调用提供安全描述符,调用者的访问令牌中默认的安全设置(参见图11-47)将被使用。
大部分Win32 API安全调用跟安全描述符的管理相关,因此在这里主要关注它们。图11-49列出了那些最重要的调用。为了创建安全描述符,首先要分配存储空间,然后调用Initialize Security Descriptor初始化它。该调用填充了安全描述符的头部。如果不知道所有者的SID,可以根据名字用LookupAccountSid来查询。随后SID被插入到安全描述符中。对组SID也一样,如果有的话。通常,这些SID会是调用者自己的SID和它的某一个组SID,不过系统管理员可以填充任何SID。

这时可调用InitializeAcl初始化安全描述符的DACL(或者SACL)。ACL入口项可通过AddAccess AllowedAce和AddAccessDeniedAce。可多次调用这些函数以添加任何所需的ACE入口项。可调用DeleteAce来删除一个入口项,这用来修改已存在的ACL而不是构建一个新的ACL。SetSecurity DescriptorDacl可以把一个准备就绪的ACL与安全描述符关联到一起。最后,当创建对象时,可将新构造的安全描述符作为参数传送使其与这个对象相关联。