在Windows Service 中怎么获取活动用户的进程列表

在Windows Service 中怎么获取活动用户的进程列表,第1张

在windows底层的api中,提供了以下的方法来满足需求:

WTSGetActiveConsoleSessionId: 获取当前active User的 session ID。

CreateProcessAsUser:用当前用户创建一个新的进程

下面的程序提供了两个方法,一是获取当前活动的用户包括域名和用户名,二是用当前用户创建一个新的进程。

代码如下:PID传给了变量r

@echo off&setlocal enabledelayedexpansion

for /f "delims=, tokens=1,2" %%a in ('tasklist /fo csv /nh') do (

set "%%~a_pid=%%~b"

)

set/p "target=请输入要查询的进程名: "

set "r=!%target%_pid!"

echo [%target%]的PID为: %r%

pause

用pe32th32ProcessID

修改后的代码:

#include<windowsh>

#include<stdioh>

#include<TlHelp32h>

#include<iostream>

using namespace std;

int main(int argc,charargv[])

{

PROCESSENTRY32 pe32;

pe32dwSize = sizeof(pe32);

HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

if (hProcessSnap == INVALID_HANDLE_VALUE)

{

cout<<"CreateToolhelp32Snapshot 调用失败"<<endl;

return-1;

}

BOOL bMore = ::Process32First(hProcessSnap,&pe32);

while(bMore)

{

cout<<"进程ID:"<<pe32th32ProcessID<<" 进程名称:"<<pe32szExeFile<<endl;

bMore = ::Process32Next(hProcessSnap,&pe32);

}

::CloseHandle(hProcessSnap);

cout<<"请按任意键结束……"<<endl;

getchar();

return 0;

}

想要获得windows下面进程的详细信息,仅靠一个任务管理器是不行的。Doc提供了一些命令可以做到这个问题。在开始运行里面输入: 就可以查看到进程的路径,这个时候,应用程序可以做一些 *** 作,比如算程序的MD5值等。然后可以根据tasklist命令查看他的详细信息。 假如想Kill进程,那么就采用ntsd -c q -p PID命令 ,此命令号称是无敌的,只有System、SMSSEXE和CSRSSEXE不能杀。前两个是纯内核态的,最后那个是Win32子系统,ntsd本身需要它。 ntsd从2000开始就是系统自带的用户态调试工具。被调试器附着(attach)的进程会随调试器一起退出,所以可以用来在命令行下终止进程。使用ntsd自动就获得了debug权限,从而能杀掉大部分的进程。用法:开个cmdexe窗口,输入: ntsd -c q -p PID 把最后那个PID,改成你要终止的进程的ID。如果你不知道进程的ID,任务管理器-》进程选项卡-》查看-》选择列-》勾上"PID(进程标识符)",然后就能看见了。

自己理解

以上就是关于在Windows Service 中怎么获取活动用户的进程列表全部的内容,包括:在Windows Service 中怎么获取活动用户的进程列表、windows平台批处理命令,根据进程名称获取进程id,并将id传给某个变量、怎么用VS中的C++获取windows2010系统进程清单等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9762245.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存