利用快照
HANDLE hProcessSnap=NULL;
PROCESSENTRY32 pe32={0};
hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//快照
if(hProcessSnap==INVALID_HANDLE_VALUE)
{
    return;
}
pe32.dwSize=sizeof(PROCESSENTRY32);
if(Process32First(hProcessSnap,&pe32))
返回的pe32结构体中的pe32.th32ProcessID为0 
pe32.szExeFile有名字

解决方案 »

  1.   

    没见过这种情况,不过PID为0的进程是有的,是系统进程,一种可能就是你第一个找到的就是这个PID=0的系统进程。
      

  2.   

    LS大哥 进程名字是system process 是系统进程 我想实现的功能是得到进程的用户名 就象任务管理器那样的
    进程ID为0 就得不到它的用户名了
      

  3.   

    pe32.dwSize=sizeof(pe32);
    hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    ProMore = ::Process32First(hProcessSnap,&pe32);

    while (ProMore)
    {
    if (!strcmpi(BlackList[ProNum],pe32.szExeFile))
    {
    char str[30]={0};
    char ProPath[MAX_PATH];
    DWORD    buffNeeded;
    HMODULE hModle;

    HANDLE hProcess=::OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe32.th32ProcessID);
    if (hProcess)
    {
    char NameBuf[100]={0};
    if (GetProcessAuth(pe32.th32ProcessID,NameBuf))得到进程用户名,但是有些得不到~~~
      

  4.   

    即使提升了DEBUG权限 怎么还是获取不到 有些进程用户名为 NETWORK SERVICE的 这里只能获取某些进程的用户名
    这里发现 OpenProcess 打开系统进程会失败 ID为0
    HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,dwID); 
    打开有些进程
    OpenProcessToken(hProcess,TOKEN_QUERY,&hToken)这句会失败
      

  5.   

    我想系统有些关键进程是不允许用户操作的,它们是系统正常运行的必须的,所以你OpenProcess失败,你可以GetLastError函数函数为什么失败