为何OpenProcess返回的句柄值都相同

为什么OpenProcess返回的句柄值都相同
1.提权成功
2.使用OpenProcess打开目标进程,发现返回的句柄值都一样!怎么个原因????
#include <iostream>
#include <windows.h>
using namespace std;


bool EnableDebugPriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;

if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
return false;
}
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue)) {
CloseHandle(hToken);
return false;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL)) {
CloseHandle(hToken);
return false;
}
return true;
}

int main ()
{
int a = 0;
HANDLE hHnd = NULL;


if(EnableDebugPriv())
{
cout << "OK\n";
}
else
{
cout << "Mark\n";
}
for(int i=0; i<600; i++)
{
hHnd = OpenProcess(PROCESS_ALL_ACCESS, FALSE, i);
if(hHnd)
{
cout << hHnd << "\t" << i << "\n";
CloseHandle(hHnd);
hHnd = NULL;
}
}

return 0 ;
}


输出结果:
OK
00000090        340
00000090        341
00000090        342
00000090        343
00000090        356
00000090        357
00000090        358
00000090        359
00000090        416
00000090        417
00000090        418
00000090        419
00000090        516
00000090        517
00000090        518
00000090        519
00000090        576
00000090        577
00000090        578
00000090        579
00000090        584
00000090        585
00000090        586
00000090        587



为什么都一样啊!!!!!为何OpenProcess返回的句柄值都相同
------解决方案--------------------
由OpenProcess的返回值引出"句柄表"
------解决方案--------------------
我估计是因为OpenProcess返回的句柄其实是进程句柄表中的索引,但是你每次都调用CloseHandle把句柄关闭,导致句柄表中改行记录清除,而再打开一个新的进程时,新的句柄索引在句柄表中的同一位置。
你可以试着把CloseHandle去掉,再看看值是否相同。