E文不算太好,简单看了看MSDN的Process Security and Access Rights,
怎么看都觉得应该理解为PROCESS_ALL_ACCESS包含PROCESS_TERMINATE了。
但是如果要TerminateProcess关闭进程,用OpenProcess获取进程句柄时如果参数是PROCESS_ALL_ACCESS是关闭不了的,而非要有PROCESS_TERMINATE。所以,希望明确一下PROCESS_ALL_ACCESS与PROCESS_TERMINATE都有没有包含关系,为什么出现以上情况。

解决方案 »

  1.   

    #define OWNER_SECURITY_INFORMATION       (0X00000001L)
    #define GROUP_SECURITY_INFORMATION       (0X00000002L)
    #define DACL_SECURITY_INFORMATION        (0X00000004L)
    #define SACL_SECURITY_INFORMATION        (0X00000008L)
    #define PROCESS_TERMINATE         (0x0001)  
    #define PROCESS_CREATE_THREAD     (0x0002)  
    #define PROCESS_SET_SESSIONID     (0x0004)  
    #define PROCESS_VM_OPERATION      (0x0008)  
    #define PROCESS_VM_READ           (0x0010)  
    #define PROCESS_VM_WRITE          (0x0020)  
    #define PROCESS_DUP_HANDLE        (0x0040)  
    #define PROCESS_CREATE_PROCESS    (0x0080)  
    #define PROCESS_SET_QUOTA         (0x0100)  
    #define PROCESS_SET_INFORMATION   (0x0200)  
    #define PROCESS_QUERY_INFORMATION (0x0400)  
    #define PROCESS_ALL_ACCESS        (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
                                       0xFFF)
      

  2.   

    1楼的内容,看着是包含的(|0xFFF ),那为何
    “TerminateProcess关闭进程,用OpenProcess获取进程句柄时如果参数是PROCESS_ALL_ACCESS是关闭不了的,而非要有PROCESS_TERMINATE。
      

  3.   

    // If we can't open the process with PROCESS_TERMINATE rights,
    // then we give up immediately.立刻放弃
    hProc = OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE, FALSE,dwPID);
    PROCESS_ALL_ACCESS存取,不能终止。
    PROCESS_TERMINATE Enables using the process handle in the TerminateProcess function to terminate the process.
      

  4.   

    求总结这个说法好象大了点,总之意思是:1楼说PROCESS_ALL_ACCESS包含PROCESS_TERMINATE,3楼说需要使用PROCESS_TERMINATE,但没有解决题目的问题啊
      

  5.   

    int main()
    {
    HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,0,316);
    TerminateProcess(hProcess,0);
    return 0;
    }
    成功结束进程
      

  6.   

    你怎么试的,PROCESS_ALL_ACCESS会尝试获取所有存取权限,有一个失败就不行
      

  7.   

    很有可能是这个原因了,虽然记得当时我也检查过OpenProcess(PROCESS_ALL_ACCESS,XXX,XXX)是否成功,但可能检查得不够准确。只有这个解释比较接近我的情况了,可惜问题解决后都找不到是哪段代码来再重新测试了。
      

  8.   

    同7楼Lactoferrin。我测试了,用PROCESS_ALL_ACCESS成功结束进程。楼主说的话太武断。没有明确测试前,别下结论。
      

  9.   

    PROCESS_ALL_ACCESS在delphi7中是:$1F0FFF
    在delphiXE2中却是:$1FFFFF
    这是为什么呢?因为delphi7的代码用XE2编绎后得不到正确结果,在OD中调试发现的。