请问怎么解决

解决方案 »

  1.   

    kill itBOOL CKillProcessDlg::SetPrivilege(HANDLE hToken,LPCTSTR lpszPrivilege,BOOL bEnablePrivilege)
    {
    TOKEN_PRIVILEGES tp;
    LUID luid;

    if(!LookupPrivilegeValue(NULL,lpszPrivilege,&luid))
    {
    printf("\nLookupPrivilegeValue error:%d", GetLastError() ); 
    return FALSE; 
    }
    tp.PrivilegeCount = 1;
    tp.Privileges[0].Luid = luid;
    if (bEnablePrivilege)
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    else
    tp.Privileges[0].Attributes = 0;
    // Enable the privilege or disable all privileges.
    AdjustTokenPrivileges(
    hToken, 
    FALSE, 
    &tp, 
    sizeof(TOKEN_PRIVILEGES), 
    (PTOKEN_PRIVILEGES) NULL, 
    (PDWORD) NULL); 
    // Call GetLastError to determine whether the function succeeded.
    if (GetLastError() != ERROR_SUCCESS) 

    printf("AdjustTokenPrivileges failed: %u\n", GetLastError() ); 
    return FALSE; 

    return TRUE;
    }
    ////////////////////////////////////////////////////////////////////////////
    BOOL CKillProcessDlg::KillPS(DWORD id)
    {
    HANDLE hProcess=NULL,hProcessToken=NULL;
    BOOL IsKilled=FALSE,bRet=FALSE;
    __try
    {

    if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hProcessToken))
    {
    printf("\nOpen Current Process Token failed:%d",GetLastError());
    __leave;
    }
    //printf("\nOpen Current Process Token ok!");
    if(!SetPrivilege(hProcessToken,SE_DEBUG_NAME,TRUE))
    {
    __leave;
    }
    printf("\nSetPrivilege ok!");

    if((hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,id))==NULL)
    {
    printf("\nOpen Process %d failed:%d",id,GetLastError());
    __leave;
    }
    //printf("\nOpen Process %d ok!",id);
    if(!TerminateProcess(hProcess,1))
    {
    printf("\nTerminateProcess failed:%d",GetLastError());
    __leave;
    }
    IsKilled=TRUE;
    }
    __finally
    {
    if(hProcessToken!=NULL) CloseHandle(hProcessToken);
    if(hProcess!=NULL) CloseHandle(hProcess);
    }
    return(IsKilled);
    }