我的服务程序执行其自身的另一个实例,基本上是CreateProcess(GetCommandLine())
。然后子进程使用OpenProcess
来获取其父进程的句柄(因此它可以检测父进程何时停止运行)。对于某些客户,OpenProcess
以ERROR_ACCESS_DENIED
失败。我正在尝试确定原因并重现内部测试的情况。
我想要一些我可以发送给客户的东西(程序或使用已经常安装在Windows服务器上的程序的说明),以便他们运行并生成一个报告,其中包括该服务运行的帐户以及具有哪些权限帐户及其组已被授予或拒绝。如何从客户那里收集信息?
答案 0 :(得分:0)
获取帐户名称很简单 - GetUserName
。获得分配给该帐户的权限需要更多的工作。如果内存服务,序列运行如下:
GetKernelObjectSecurity(Current_oject, &security_descriptor)
GetSecurityDescriptorDacl(security_descriptor, &dacl)
GetEffectiveRightsFromAcl(dacl, user_name, &rights)
您可能更愿意在最后一步使用GetExplicitEntriesFromAcl
。所有这一切都有一个问题:如果他们过多地限制了用户,那么其中一些(或全部)也可能会失败。