Потому что debug privileges нужны чтобы открывать процесс в DACL которого нету явного разрешения на ваш токен.
Для того чтоб открывать процессы своего юзера (и своего IL спод вистой) debug priviledges никогда не были нужны.
Кто нибуть может объяснить почему это:
int _tmain()
{
HANDLE hThread ;
ULONG uTID, uID = name2pid(TEXT("KeyTrans.exe"));
_tprintf(TEXT("%d\n"), uID );
EnableDebugPrivilege(TRUE);
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, 0, uID);
if (hProc)
{
hThread = CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)GetProcAddress( GetModuleHandle(TEXT("kernel32.dll")), "ExitProcess"), 0, 0, &uTID);
if (hThread == NULL)
_tprintf(TEXT("CreateRemoteThread Error %d\n"), GetLastError() );
}
else
_tprintf(TEXT("OpenProcess Error %d\n"), GetLastError() );
return 0;
}
запускается из под пользователя. KeyTrans.exe просто для эксперимента.
ОСь Vista SP1 x64 с последними обновлениями, компилилось для Win32 и Win32Debug, оба варианта работают. UAC бровью не повел