【工具类】ZwQuerySystemInformation枚举进程

曾经基于兴趣搞过很多小功能,但后来工作中比较少用到,代码也就安静的沉没在磁盘中。最近打算整理下之前弄过的东西,也不算荒废之前的付出吧。。。

void InitProcessList()
{
    ZWQUERYSYSSTEMINFORMATION MyZwQuerySystemInformation = (ZWQUERYSYSSTEMINFORMATION)GetProcAddress(GetModuleHandle(_T("ntdll")), "ZwQuerySystemInformation");
    if (MyZwQuerySystemInformation)
    {
        PVOID pBuff = malloc(PROCESSINFO_BUF_SIZE);
        memset(pBuff, 0, PROCESSINFO_BUF_SIZE);

        LONG lStatus = MyZwQuerySystemInformation(SystemProcessInformation, pBuff, PROCESSINFO_BUF_SIZE, NULL);
        if (lStatus == 0)
        {
            PSYSTEM_PROCESS_INFORMATION_MY pInfo = (PSYSTEM_PROCESS_INFORMATION_MY)pBuff;
            WCHAR wchProcessName[MAX_PATH] = {0};
            CString strProcessId = _T("");

            for (; ;)
            {
                memset(wchProcessName, 0, MAX_PATH);
                memcpy(wchProcessName, pInfo->ProcessName.Buffer, pInfo->ProcessName.Length);
                if (pInfo->ProcessId == 0)
                {
                    memcpy(wchProcessName, L"System Process", MAX_PATH);
                }

                int nRow = m_List.InsertItem(0, wchProcessName);
                strProcessId.Format(_T("%d"), (DWORD)pInfo->ProcessId);
                m_List.SetItemText(nRow, 1, strProcessId);

                if (pInfo->NextEntryOffset == 0)
                {
                    break;
                }

                pInfo = (PSYSTEM_PROCESS_INFORMATION_MY)(((PUCHAR)pInfo) + pInfo->NextEntryOffset);
            }

        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值