微软专家:重贴CreateToolhelp32Snapshot的问题。

juqiang 2001-11-07 02:38:16
各位老大,我从msdn上搞了一段程序,显示系统内所有的process,为什么只显示我自己用户级的,不显示system级的?我用的是winxp,但是win2000下也一样。如svchost,system idle都显示不出来,被toolsapi过滤掉了吗?!我在CreateToolhelp32Snapshot中设置了TH32CS_SNAPALL,也不行。
请帮助!
另外,我可给得分不够,怎么把可用份转换成提问分?

谢谢!

代码如下:(我注释的部分好像有问题)

void __fastcall TMainForm::btRefreshClick(TObject *Sender)
{
HANDLE hProcessSnap = NULL;
BOOL bRet = FALSE;
PROCESSENTRY32 pe32 = {0};

TListItem *ListItem;

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE){
return;
}

pe32.dwSize = sizeof(PROCESSENTRY32);
if(Process32First(hProcessSnap, &pe32)){
DWORD dwPriorityClass;
BOOL bGotModule = FALSE;
MODULEENTRY32 me32 = {0};

do
{
bGotModule = GetProcessModule(pe32.th32ProcessID,
pe32.th32ModuleID, &me32, sizeof(MODULEENTRY32));

if (bGotModule)
{
HANDLE hProcess;

hProcess = OpenProcess (PROCESS_ALL_ACCESS,FALSE, pe32.th32ProcessID);
dwPriorityClass = GetPriorityClass (hProcess);
CloseHandle (hProcess);

ListItem = lvProcessList->Items->Add();
ListItem->Caption = me32.szModule;
ListItem->SubItems->Add(IntToStr(pe32.th32ProcessID));
ListItem->SubItems->Add(IntToStr(pe32.cntThreads));
ListItem->SubItems->Add(IntToStr(pe32.pcPriClassBase));
ListItem->SubItems->Add(me32.szExePath);
}
}
while (Process32Next(hProcessSnap, &pe32));
bRet = TRUE;
}
CloseHandle (hProcessSnap);
}
//---------------------------------------------------------------------------
bool __fastcall TMainForm::GetProcessModule (DWORD dwPID, DWORD dwModuleID,
LPMODULEENTRY32 lpMe32, DWORD cbMe32)
{
BOOL bRet = FALSE;
BOOL bFound = FALSE;
HANDLE hModuleSnap = NULL;
MODULEENTRY32 me32 = {0};

hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
if (hModuleSnap == INVALID_HANDLE_VALUE)
return (FALSE);

me32.dwSize = sizeof(MODULEENTRY32);

if (Module32First(hModuleSnap, &me32)){
do
{
// if (me32.th32ModuleID != dwModuleID)
//如果不注释,什么也显示不出来
{
CopyMemory (lpMe32, &me32, cbMe32);
bFound = TRUE;
}
}
while (!bFound && Module32Next(hModuleSnap, &me32));

bRet = bFound;
}
else{
bRet = FALSE;
}
CloseHandle (hModuleSnap);

return (bRet);
}
...全文
52 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
juqiang 2001-11-07
  • 打赏
  • 举报
回复
psapi我嫌太麻烦了,pdh怎么用?可有详细辕马?
xiaogq 2001-11-07
  • 打赏
  • 举报
回复
请使用 PDH 或者 PSAPI

1,649

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧