C# 查询作为网络服务运行的进程时,OpenProcessToken失败
我有一些代码需要查询几个进程的进程令牌(特别是SID),其中至少有一个进程作为内置网络服务帐户运行。我使用.NET获取进程ID,然后p/invoke到advapi32方法打开进程和令牌。所有这些代码都以管理员身份在计算机上运行 问题是每次我都从OpenProcessToken获得错误\u访问\u拒绝(返回代码5) 我做错了什么?这必须是可能的(例如,Process Explorer显示目标进程的SID和其他令牌信息),所以我想我遗漏了一些东西。一个想法是,也许我需要塞德布格特权。(编辑:不起作用--在当前线程上设置SeDebugPrivilege的doing Process.EnterDebugMode不会更改行为) 我的代码如下所示:C# 查询作为网络服务运行的进程时,OpenProcessToken失败,c#,winapi,pinvoke,C#,Winapi,Pinvoke,我有一些代码需要查询几个进程的进程令牌(特别是SID),其中至少有一个进程作为内置网络服务帐户运行。我使用.NET获取进程ID,然后p/invoke到advapi32方法打开进程和令牌。所有这些代码都以管理员身份在计算机上运行 问题是每次我都从OpenProcessToken获得错误\u访问\u拒绝(返回代码5) 我做错了什么?这必须是可能的(例如,Process Explorer显示目标进程的SID和其他令牌信息),所以我想我遗漏了一些东西。一个想法是,也许我需要塞德布格特权。(编辑:不起作用
Process[] procs = Process.GetProcessesByName("processname");
Process process = procs[0];
IntPtr processHandle = NativeMethods.OpenProcess(
ProcessAccessFlags.QueryInformation,
false,
process.Id);
if (
!NativeMethods.OpenProcessToken(
processHandle,
(uint)(TokenAccessLevels.Read),
out tokenHandle))
{
int err = Marshal.GetLastWin32Error();
// fails with err = 5
throw new Win32Exception(err, "Failed to get process token. Error: " + err);
}
注意:我已经在两个本机调用上尝试了访问标志的一些其他组合,包括使用PROCESS\u ALL\u访问
编辑:还有一点,查询与本地受限访问用户运行的相同进程可以很好地工作。您有没有弄明白这一点?我正试图解决一个类似的问题,其中对OpenProcessToken()的调用总是返回0;