OpenProcess为何返回0

OpenProcess为什么返回0
XP系统,VC208。双击打开我的电脑,然后运行下面的代码
#include<iostream>
using namespace std;
#include<windows.h>
#include<winnt.h>
void main()
{
HWND h = FindWindow(L"CabinetWClass",L"我的电脑");
DWORD d;
GetWindowThreadProcessId(h,&d);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,0,d);//这里为什么返回0
TerminateProcess(hProcess,0);
}

------解决思路----------------------
提权,刚刚在别的帖子看到的代码
bool AdjustPrivileges() {
    HANDLE hToken;
    TOKEN_PRIVILEGES tp;
    TOKEN_PRIVILEGES oldtp;
    DWORD dwSize=sizeof(TOKEN_PRIVILEGES);
    LUID luid;

    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES 
------解决思路----------------------
 TOKEN_QUERY, &hToken)) {
        if (GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) return true;
        else return false;
    }
    if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid)) {
        CloseHandle(hToken);
        return false;
    }
    ZeroMemory(&tp, sizeof(tp));
    tp.PrivilegeCount=1;
    tp.Privileges[0].Luid=luid;
    tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
    /* Adjust Token Privileges */
    if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), &oldtp, &dwSize)) {
        CloseHandle(hToken);
        return false;
    }
    // close handles
    CloseHandle(hToken);
    return true;
}