CreateToolhelp32Snapshot在xp里面可以用吗?

解决方案 »

  1.   

    完全可以
    DebugPrivilege(TRUE);
    hProcessSnap    =  CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    if(hProcessSnap == INVALID_HANDLE_VALUE)
    {
    printf("CreateToolhelp32Snapshot for Process Error: %d\n",GetLastError());
    bResult = FALSE;
    }之前记得提升权限:
    BOOL DebugPrivilege(BOOL bEnable)
    {
    BOOL              bResult = TRUE;
    HANDLE            hToken;
    TOKEN_PRIVILEGES  TokenPrivileges;

    if(OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,&hToken) == 0)
    {
    printf("OpenProcessToken Error: %d\n",GetLastError());
    bResult = FALSE;
    }
    TokenPrivileges.PrivilegeCount           = 1;
    TokenPrivileges.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
    LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&TokenPrivileges.Privileges[0].Luid);
    AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
        if(GetLastError() != ERROR_SUCCESS)
    {
    bResult = FALSE;
    }
    CloseHandle(hToken);
        
    return bResult;
    }
      

  2.   

    CreateToolhelp32SnapshotRequirements 
      Windows NT/2000/XP: Included in Windows 2000 and later.
      Windows 95/98/Me: Included in Windows 95 and later.
      Header: Declared in Tlhelp32.h.
      Library: Use Kernel32.lib.