/*#include <stdio.h>
#include <windows.h>
#include <tchar.h> */
#include "ntQuery.h"
int MyMain(TStringList *strPID, TStringList *strBasePriority, TStringList *strProName, int &iCount)
{
//size_t blocklen = 0;
PSYSTEM_PROCESSES bufForProcessesInfo = NULL, bufNext = NULL;
NTSTATUS ns = 0;
DWORD dwPcount = 0;
HANDLE hHeap;
int i = 2;
HMODULE hNtdll = LoadLibrary(TEXT("NTDLL.DLL"));
if(hNtdll == NULL)
{
ShowMessage("LaodLibrary ntddl.dll error...\n");
return -1;
}
NTQUERYSYSTEMINformATION NtQuerySystemInformation =
(NTQUERYSYSTEMINformATION)GetProcAddress(hNtdll, TEXT("NtQuerySystemInformation"));
if(NtQuerySystemInformation == NULL)
{
ShowMessage("GetProcAddress error...\n");
return -1;
}
hHeap = GetProcessHeap();
if(hHeap == NULL)
{
ShowMessage("Get heap error...\n");
FreeLibrary(hNtdll);
return -1;
}
/*HeapAlloc分配内在,且保证这段内存是不动的,HEAP_ZERO_MEMORY表示分配完,那段内存上的值都为0
BLOCK_SIZE是分配的长度*/
bufForProcessesInfo = (PSYSTEM_PROCESSES)HeapAlloc(hHeap, HEAP_ZERO_MEMORY, BLOCK_SIZE);
if(bufForProcessesInfo == NULL)
{
ShowMessage("HeapAlloc error...\n");
FreeLibrary(hNtdll);
return -1;
}
bufNext = bufForProcessesInfo;
ns = NtQuerySystemInformation(NT_PROCESS_LIST, bufForProcessesInfo, BLOCK_SIZE, NULL);
while(ns == STATUS_INFO_LEN_MISMATCH)
{
bufNext = (PSYSTEM_PROCESSES)HeapReAlloc(hHeap, HEAP_ZERO_MEMORY, bufNext, BLOCK_SIZE * i);
if(bufForProcessesInfo == NULL)
{
ShowMessage("Relloc error..\n");
HeapFree(hHeap, HEAP_ZERO_MEMORY, bufForProcessesInfo);
FreeLibrary(hNtdll);
return -1;
}
/*类似于从网上下载东西,一共有多少不确定,但可以控制一次下载多少*/
ns = NtQuerySystemInformation(NT_PROCESS_LIST, bufNext, BLOCK_SIZE * i, NULL);
i++;
}
AnsiString strTemp;
while(bufNext->NextEntryDelta != 0)
{
// strLine.sprintf("PID:%.4d\tBasePriority:%.2d\t%S", bufNext->ProcessId, bufNext->BasePriority, bufNext->ProcessName.Buffer);
//wprintf(L"PID:%.4d\tBasePriority:%.2d\t%s\n", bufNext->ProcessId, bufNext->BasePriority, bufNext->ProcessName.Buffer);
strTemp.sprintf("%.4d", bufNext->ProcessId);
strPID->Add(strTemp);
strTemp.sprintf("%.2d", bufNext->BasePriority);
strBasePriority->Add(strTemp);
strTemp = (wchar_t*)bufNext->ProcessName.Buffer;
strProName->Add(strTemp);
bufNext = (PSYSTEM_PROCESSES)((BYTE*)bufNext + bufNext->NextEntryDelta);
dwPcount ++;
}
/*_tprintf(TEXT("------------------------------------------------"\
"\nAll %d processes running...\n"), dwPcount);*/
iCount = dwPcount;
HeapFree(hHeap, HEAP_ZERO_MEMORY, bufForProcessesInfo);
FreeLibrary(hNtdll);
//Sleep(10000);
return 0;
}
NtQuerySystemInformation
3星 · 超过75%的资源 需积分: 9 89 浏览量
2008-11-19
11:06:42
上传
评论
收藏 245KB RAR 举报
zhangwuji156
- 粉丝: 23
- 资源: 2
最新资源
- 基于Java的在线宠物用品交易网站设计与实现源码
- 毕业设计-仿生六足机器人的制作全教程源码+电子元器件+程序代码+线路组件图+安装教程+搭建视频教程
- 基于ROS和webots的xrobot机械臂仿真初探C++源码
- 基于ROS的点焊机器人仿真与控制python源码+文档说明+使用说明+详细注释
- 基于vue实现的细粒度交通时空大数据分析系统+源代码+文档说明
- 安卓大作业-基于Electron的交通时空大数据分析挖掘系统客户端(Android)+源代码+文档说明+界面截图
- 基于Java的朱氏集团客户关系管理系统设计源码
- 基于C++的作业提交与批改系统设计源码
- 基于Vue2的移动端电影资讯网站设计源码
- 高分课程设计作业-基于QT的模仿宝石迷阵游戏C++源码+文档说明+界面截图
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈