最近做一个服务器程序,需要实现如下功能: 但程序运行之后驻留在内存,其他进程启动后,程序显示加载的进程ID,当进程退出的时候,程序显示终止进程的ID号,有点象任务管理器。我想过用enumprocess/CreateToolhelp32Snapshot来实现,但效率很低,后来想到用PsSetCreateProcessNotifyRoutine(),但只在winnt/2000下才有效,有没有其它方法来实现??? 这个问题已经困扰了我很久,一直没找到理想的解决方案,望提供思路
调试欢乐多
http://www.newhua.com/soft/4616.htm
DWORD fdwReason, // reason called
LPVOID lpvReserved) // reserved
{
switch (fdwReason)
{
// The DLL is loading due to process
// initialization or a call to LoadLibrary.
case DLL_PROCESS_ATTACH:
// 当一个进程被创建后,会执行这里。
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
// 当一个进程结束后,会执行这里。
break;
default:
break;
} 你可以在这个hook dll里获得当前进程的ID,然后通过管道或网络连接的方式传递给服务器程序。
hook CreateProcess[Ex]() ExitProcess()可以实现,但对System,SMSS.exe几个关键进程不起作用(WIN2KSP4),有没有办法获得获得它们的权限??