请问一个WINDOWS2008上用VC获取进程CPU占用率的有关问题!

请教一个WINDOWS2008下用VC获取进程CPU占用率的问题!!!!!!
网上有很多代码,几乎就是一样的。
定义一个_THREAD_INFO结构;
定义一个_UNICODE_STRING结构;
定义一个_PROCESS_INFO结构;
利用ntdll.dll中的NtQuerySystemInformation函数来查询进程信息;
NtQuerySystemInformation(5,pProcInfo,dwInfoSize,0);


pProcessInfo = (PPROCESSINFO)pProcInfo;
接下来就是一个do - while循环:
do
{
TotalProcessCPUUsage += (__int64)pProcessInfo->KernelTime.QuadPart + (__int64)pProcessInfo->UserTime.QuadPart;


if(pProcessInfo->dwProcessID == id)
{
dwWorkingSet = pProcessInfo->dwWorkingSet; 
CurrentProcessCPUUsage += (__int64)pProcessInfo->KernelTime.QuadPart + (__int64)pProcessInfo->UserTime.QuadPart;
}


/////////
if(pProcessInfo->dwOffset == 0)
{
break;
}


pProcessInfo = (PPROCESSINFO)((BYTE*)pProcessInfo + pProcessInfo->dwOffset);
}


很多地方都有转载这段代码,但没有人能说清楚这段代码是什么意思!小弟有如下几个问题想请教:
1、这段代码在WINDOWS2008下运行会异常,调试了一下从pProcessInfo = (PPROCESSINFO)pProcInfo开始就不会了。pProcessInfo中的数值都太大,而且进程ID也没有传进来。这是为什么?
我尝试把NtQuerySystemInformation换成ZwQuerySystemInformation,把5号方法换成3号方法,但结果是一样的。
2、do-while循环中的代码到底是什么原理?
有没有哪位大侠能指点指点啊!不胜感谢啊!

------解决方案--------------------
NtQuerySystemInformation 只适用于2000和XP的。

win2008属于WIN7范畴,会无效的。