高分求解。VC++ 通过进程名或进程ID获取进程句柄

高分求解。VC++ 通过进程名或进程ID获取进程句柄,第1张

HANDLE GetProcessHandle(int nID)

{

return OpenProcess(PROCESS_ALL_ACCESS, FALSE, nID);

}

HANDLE GetProcessHandle(LPCTSTR pName)

{

HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if (INVALID_HANDLE_VALUE == hSnapshot) {

return NULL;

}

PROCESSENTRY32 pe = { sizeof(pe) };

BOOL fOk;

for (fOk = Process32First(hSnapshot, &pe); fOk; fOk = Process32Next(hSnapshot, &pe)) {

if (!_tcscmp(peszExeFile, pName)) {

CloseHandle(hSnapshot);

return GetProcessHandle(peth32ProcessID);

}

}

return NULL;

}

PS你的代码不够精炼,所以重新写了一个。你看下这个能用不,不能用再帮你找找你的错误。主要你的代码太长了,所以没细看,你的Pn酱紫初始化啊,还有既然是DLL的,那就应该分别做LPCWSTR和LPCSTR两个版本,看你在LPCSTR版本里还用Process32FirstW,是不是有些混乱了?Pn被填充了UNICODE字符集再去和LPCSTR做比较,怎么能得出正确结果呢? 还有那个那个连COM的东西也出来了,完全被雷倒了,休克中

===================================

贴上来的代码都已很负责任的运行通过,不会有错你再检查看看是由于什么引起编译错误可以把出错信息贴上来然后帮你分析看看

另外,workingroy说要提权,DLL是不是应该自作主张提权有待商榷,提权完全可以由客户程序负责决定可以在调用函数前提权,函数调用完恢复原来的权限另外就是提权 *** 作也有消耗,对于系统管理员身份运行(通常我们都是系统管理员身份登陆WINDOWS),不需要提权当然,有高手指出,VISTA和7对系统管理员的权限已经有了修改,既是是系统管理员,权限也受到了某些限制这个我没研究过持保留意见当然楼主的函数应该在提供一个参数,用来传递要打开的进程句柄的权限一般不需要PROCESS_ALL_ACCESS的

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是 *** 作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

进程的三个基本状态:进程执行时的间断性,决定了进程可能具有多种状态。事实上,运行中的进程可能具有以下三种基本状态。

1)就绪状态(Ready):

进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O *** 作完成而进入就绪状态时,排入高优先级队列。

2)运行状态(Running):

进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。

3)阻塞状态(Blocked):

由于进程等待某种条件(如I/O *** 作或进程同步),在条件满足之前无法继续执行。该事件发生前即使把处理器资源分配给该进程,也无法运行。

进程是一种并发执行的计算机程序,它可以同时运行多个线程。组成进程的基本要素包括:

*** 作系统调度程序: *** 作系统用来控制进程的执行,包括创建进程、管理进程、启动进程、终止进程等。

进程描述符:用来描述一个进程的信息,包括进程ID、优先级、所属套件等。

就绪队列:用来存储需要执行的进程,当一个进程到达就绪队列的顶部时,就绪队列的元素会自动被分配给该进程执行。

内核态和用户态: *** 作系统中进程的执行分为内核态和用户态。内核态是 *** 作系统的核心部分,用于管理进程和资源;用户态则是用户与 *** 作系统交互的界面,用户可以使用各种命令来管理进程。

进程间通信:进程之间通过共享库或网络进行通信,用于传递数据、管理状态等。

这些要素相互作用,共同组成了一个完整的进程。 *** 作系统通过调度程序来管理进程的执行,进程通过就绪队列来获取执行机会, *** 作系统通过内核态和用户态来管理进程的状态,进程之间通过共享库或网络进行通信

以上就是关于高分求解。VC++ 通过进程名或进程ID获取进程句柄全部的内容,包括:高分求解。VC++ 通过进程名或进程ID获取进程句柄、什么是进程一个进程在其生存期中可能要经历哪几种状态、组成进程的基本要素,并说明其作用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9339383.html

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

发表评论

登录后才能评论

评论列表(0条)

保存