我想挂钩TernamiteProcess ,在强制中止某个进程时先判断一下是不是我自己的程序,如果是的话就先执行某些操作,然后再调用TernamiteProcess ,如果不是就直接TernamiteProcess 。
但是现在的问题是我没办法判断中止的是不是我的程序,TernamiteProcess 只有两个参数,一个是句柄,一个是退出码,我通过句柄来比较的话总是不相等,有谁碰到过这个问题吗?
解决后我另加分,下周揭帖。

解决方案 »

  1.   

    句柄是一个进程相关的值,不同进程中得到的我的进程的句柄的值在进程间进行比较
    是无意义的。Hook OpenProcess() 一个进程只有它的进程ID是独一无二的,操作系统通过进程ID来
    标识一个进程
      

  2.   

    有了Process的Handle不就行了,EnumProcessModules、GetModuleBaseName、GetModuleFileName,足够应付的
      

  3.   

    MSDN里面有一篇文章,“Enumerating All Processes”,看看就会了
      

  4.   

    (1)楼的正解!
        进程ID才是进程的唯一标识,句柄只是操作进程的工具。
        所以需要比较的应该是进程ID,然后用 OpenProcess()打开进程,获取其句柄。再使用 TernamiteProcess()来结束指定的进程!可以结贴了。
      

  5.   

    Hook OpenProcess() 达不到我的要求啊,我并不是要禁止关闭我的进程,只是想在关闭前自己先卸载钩子,用户执行OpenProcess后不一定是要关闭它,所以也就无法判断是否先卸载钩子。
      

  6.   

    EnumProcessModules、GetModuleBaseName、GetModuleFileName是没用的,因为句柄值根本就是无效的。