gpt4 book ai didi

c++ - OpenProcessToken 因本地系统服务的 ERROR_ACCESS_DENIED 而失败

转载 作者:可可西里 更新时间:2023-11-01 10:24:25 26 4
gpt4 key购买 nike

先说说我的情况。我在下面描述的问题来自最终用户的机器,我所要做的只是一份 Windows 事件日志的拷贝。我无法访问机器本身来运行任何调试测试。

现在是问题。我有一个这样创建的服务应用程序:

SC_HANDLE hScService = CreateService(hScManager, 
L"MyServiceID",
L"My Service Name",
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
SrvcPath,
NULL, NULL, NULL, NULL, _T(""));

服务进程后面有它的SE_DEBUG_NAME使用 AdjustTokenPrivileges 设置权限API。

后来我有一个方法可以枚举正在运行的进程,然后使用这样的代码获取进程 LUID:

//'pProcIDs' = list of process IDs obtained from EnumProcesses()

for(UINT i = 0; i < nNumProc; i++)
{
DWORD dwProcID = pProcIDs[i];

//Skip obvious system processes
if(dwProcID != 0 &&
dwProcID != 4)
{
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwProcID);
if(hProcess)
{
HANDLE hTokenHandle;
if(::OpenProcessToken(hProcess, TOKEN_QUERY, &hTokenHandle))
{
TOKEN_STATISTICS ts;
DWORD dwcbSz = 0;
if(::GetTokenInformation(hTokenHandle, TokenStatistics, &ts, sizeof(ts), &dwcbSz))
{
//And so on...
}
else
{
//Handle error here
}

::CloseHandle(hTokenHandle);
}
else
{
//***Here's where I get my error in question***
}

::CloseHandle(hProcess);
}
else
{
//Handle error here
}
}
}

当我在自己的开发计算机上运行上面的代码时,它运行得很好。 请注意,这些计算机运行的是操作系统的“库存”拷贝,没有安装任何 AVP 或其他第三方软件。

我从运行 Windows 7 Professional 机器(它是 Active Directory 域的成员)的客户那里收到的事件日志拷贝有 3 个进程返回 ERROR_ACCESS_DENIED当我调用 OpenProcessToken从上面的代码中获取它们。它们的 PID 只是常规值,例如 1824、2760、5024(重启后显然会发生变化。)

有人知道为什么会这样吗?我需要为我的服务设置额外的权限吗?

附言。从事件日志中我可以看出有问题的工作站有一些 Symantec Antivirus已安装产品,根据这一行判断:

New virus definition file loaded. Version: 140217066.

最佳答案

赛门铁克防病毒软件(以及许多其他安全软件供应商的软件)可能会尝试防止未经授权的行为者篡改其进程。为其其中一个进程获取进程 token 可能符合条件。

也就是说,您可以通过检查支持进程的可执行镜像的路径,快速验证有问题的 PID 实际上是 Symantec 程序包的一部分。如果它们是 Symantec AV 软件包的一部分,您将需要考虑将其配置为信任您的应用程序,或者在运行此代码时将其禁用(不推荐),或者干脆忽略此类错误。

关于c++ - OpenProcessToken 因本地系统服务的 ERROR_ACCESS_DENIED 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21893404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com