首页
社区
课程
招聘
[旧帖] [求助]进程监控 之卡死屏幕。 0.00雪花
发表于: 2012-4-6 22:01 973

[旧帖] [求助]进程监控 之卡死屏幕。 0.00雪花

2012-4-6 22:01
973
我写的是一个类似于360的进程监控,就是创建进程时,有用户指定是打开抑或是关闭,在写到驱动和用户的确认信息时,遇到了个问题,一下是我nline后的函数,进程在最后创建时,需要将主线程激活,我就是这个思路,
NTSTATUS DetourResumeThread( IN HANDLE ThreadHandle,
                            OUT PULONG SuspendCount OPTIONAL )
{

    NTSTATUS status;
    ULONG TEMP = (ULONG)PsGetCurrentProcessId();
    if(isPIDExist(TEMP) == TRUE)
    {   
        __asm int 3;
        //只允许一个进程创建
        KeWaitForSingleObject(&SysToThread, Executive, KernelMode, 0, 0);   ******************关键在于这里,如果一个程序已经到了选择的时候,另外一个程序此时进入该函数的时候,整个屏幕卡死,我查了下几个可能的原因,有的说是此时线程无法切换,或者是驱动在等待导致屏幕卡死,想了很久,不知道如何解决,拜托大侠们给我疏通疏通下筋脉,谢谢
        Process_Info.ParentID = (ULONG)PsGetCurrentProcessId();                                                                                             
        //通知用户                                                                                                                                                                             
        KeSetEvent(ProcessEvent, 0, 0 );                                                                                                                                                               
        KeClearEvent(ProcessEvent);
        //等到用户的选择
        KeWaitForSingleObject(&TerminateItselfEvent, Executive, KernelMode,0 ,0);
        DeletePID(Process_Info.ParentID);
        KeSetEvent(&SysToThread, 0, 0);
        if (Process_Info.allow == START)
            status = OriginResumeThread(ThreadHandle, SuspendCount);
        else
            status = 0xFFFFFFFF;

    }
    else
        status = OriginResumeThread(ThreadHandle, SuspendCount);
    return status;
}

看了一个相关的,他的却不卡屏幕,不知道他为什么不卡,感觉我们的效果一样
http://bbs.pediy.com/showthread.php?t=128733 真的想了很久,还是无法解决呢

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//