SetPrivateObjectSecurity函数修改私有对象的安全描述符。
BOOL SetPrivateObjectSecurity(
SECURITY_INFORMATION 【SecurityInformation】, | //安全信息的类型 |
PSECURITY_DESCRIPTOR 【ModificationDescriptor】, | // SD应用于对象的地址 |
PSECURITY_DESCRIPTOR *【ObjectsSecurityDescriptor】, | //对象的SD地址 |
PGENERIC_MAPPING 【GenericMapping】, | //访问映射结构的地址 |
HANDLE 【代币】 | //客户端访问令牌的句柄 |
); |
参数
【SecurityInformation】
指定SECURITY_INFORMATION结构,标识由【ModificationDescriptor】参数指向的安全描述符的内容。
【ModificationDescriptor】
指向要应用于对象的SECURITY_DESCRIPTOR结构。
【ObjectsSecurityDescriptor】
指向要由此函数更改的SECURITY_DESCRIPTOR结构的指针。此安全描述符必须为自相关形式。
【GenericMapping】
指向GENERIC_MAPPING结构,指定通用映射到对象的特定和标准访问类型的映射。
【代币】
标识正在修改私有对象的安全性的客户端的访问令牌。需要此参数以确保客户端为新的所有者安全标识符(SID)提供合法值。必须打开令牌才能进行TOKEN_QUERY访问。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
备注
对象的安全描述符必须为自相关形式。
如果需要,SetPrivateObjectSecurity函数分配额外的内存以产生较大的安全描述符。
只有满足以下条件,SetPrivateObjectSecurity功能才能成功:
*如果对象的所有者正在设置,则调用进程必须具有WRITE_OWNER权限或对象的所有者。
*如果对象的自由访问控制列表(ACL)被设置,调用进程必须具有WRITE_DAC权限或者对象的所有者。
*如果对象的系统ACL被设置,则必须为调用进程启用SE_SECURITY_NAME特权。
调用此函数的过程不能模拟客户端。
也可以看看
CreatePrivateObjectSecurity, DestroyPrivateObjectSecurity, GENERIC_MAPPING, GetPrivateObjectSecurity, SECURITY_DESCRIPTOR, SECURITY_INFORMATION, SetFileSecurity, SetKernelObjectSecurity, SetUserObjectSecurity