有关基础比较差我从驱动传回了某个进程的ID号,在应用层用TerminateProcess((HANDLE)PID,NULL);可以结束掉
不是应该
HANDLE hProcessHandle;
        hProcessHandle=OpenProcess(0,FALSE,PID);
TerminateProcess(hProcessHandle,NULL);  吗?
为什么这样结束不掉呢?

解决方案 »

  1.   

    你确定PID返回的是进程的ID号码而不是进程句柄?
      

  2.   


    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,PID);
    TerminateProcess(hProcess,0);
      

  3.   


    确定//--------------------------------------------------------//
            ULONG lRet;
    PROCESS_BASIC_INFORMATION* pbi;        //获取被创建线程的 进程ID
    PVOID pBuffer;
    PROCESSINFOCLASS ProcessBasicInformation=0;                        uPid.Buffer=(PWSTR)ExAllocatePool(NonPagedPool,256);
    uPid.MaximumLength=256;
    //------------------------------------------------------------//
    pBuffer=ExAllocatePool(NonPagedPool,sizeof(PROCESS_BASIC_INFORMATION));
    ZwQueryInformationProcess(ProcessHandle,ProcessBasicInformation,pBuffer,sizeof(PROCESS_BASIC_INFORMATION),&lRet); pbi=(PROCESS_BASIC_INFORMATION*)pBuffer;        PID=pbi->UniqueProcessId;另外,用同样的方法获取不了线程的ID?很多结构未定义。
      

  4.   

    本来是想 根据 驱动传过来的线程句柄挂起线程,但是SSDT HOOK了ZwCreateThread并且status=RealZwCreateThread(ThreadHandle,DesiredAccess,ObjectAttributes,ProcessHandle,ClientId,ThreadContext,InitialTeb,CreateSuspended);结果得到的线程  句柄值是一样的用WINDBG输出的
    status=RealZwCreateThread(ThreadHandle,DesiredAccess,ObjectAttributes,ProcessHandle,ClientId,Thread       Context,InitialTeb,CreateSuspended); DbgPrint("%d进程在%d进程创建远程线程 句柄%d\n",PId,pbi->UniqueProcessId,ThreadHandle);