QueryServiceObjectSecurity函数检索保护服务对象的安全描述符的副本。
BOOL QueryServiceObjectSecurity(
SC_HANDLE 【hService】, | //处理服务 |
SECURITY_INFORMATION 【dwSecurityInformation】, | //请求的安全信息类型 |
PSECURITY_DESCRIPTOR 【lpSecurityDescriptor】, | //安全描述符的地址 |
DWORD 【cbBufSize】, | //安全描述符缓冲区的大小 |
LPDWORD 【pcbBytesNeeded】 | //所需字节的变量地址 |
); |
参数
【hService】
标识服务。该句柄由OpenService或CreateService函数返回,并且必须具有READ_CONTROL访问权限。
【dwSecurityInformation】
指定正在请求的安全信息。可以指定以下任何或全部标志:
值 | 含义 |
OWNER_SECURITY_INFORMATION | 请求对象的所有者安全标识符(SID)。 |
GROUP_SECURITY_INFORMATION | 请求对象的主组SID。 |
DACL_SECURITY_INFORMATION | 请求对象的自由访问控制列表(ACL)。 |
SACL_SECURITY_INFORMATION | 请求对象的系统ACL。呼叫进程必须具有SE_SECURITY_NAME特权。有关权限的更多信息,请参阅特权. |
【lpSecurityDescriptor】
指向接收指定服务对象的安全描述符副本的缓冲区。调用进程必须具有适当的访问权限以查看对象的安全描述符的指定方面。SECURITY_DESCRIPTOR结构以自相关格式返回。
【cbBufSize】
指定由【lpSecurityDescriptor】参数指向的缓冲区的大小(以字节为单位)。
【pcbBytesNeeded】
指向一个变量,它接收返回所有请求的安全描述符信息所需的字节数。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
错误
服务控制管理器可以设置以下错误代码。其他错误代码可以由服务控制管理器调用的注册表函数设置。
值 | 含义 |
ERROR_ACCESS_DENIED | 指定的句柄没有使用READ_CONTROL访问打开,或调用进程不是对象的所有者。 |
ERROR_INVALID_HANDLE | 指定的句柄无效。 |
ERROR_INSUFFICIENT_BUFFER | 存在比适合【lpSecurityDescriptor】缓冲区更多的安全描述符信息。获取所有信息所需的字节数在【pcbBytesNeeded】参数中返回。没有任何内容写入【lpSecurityDescriptor】缓冲区。 |
ERROR_INVALID_PARAMETER | 指定的安全信息无效。 |
备注
服务对象的初始安全描述符是由服务控制管理器基于调用CreateService功能的进程的安全描述符创建的。可以通过调用SetServiceObjectSecurity功能来更改安全描述符。
也可以看看
CreateService, OpenService, SECURITY_DESCRIPTOR, SetServiceObjectSecurity