-
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://nokyo.blogbus.com/logs/33026051.html
STL(Standard Template Library,标准模板库)是一种很有用的东西,自从认识了STL,我再也不用为自己的数据结构太差而感到忧心忡忡了,哈哈。
STL非常良好地封装了常见的数据结构操作,例如向量、链表等东西,而且效率很高(废话~),多数情况下我们只要拿来就用就行了,而且不同的对象使用方法都大抵相同,很好用。
下面这个演示程序就是我为了学习使用STL的链表而写的演示程序,在程序中我把获取到的进程信息放入一个链表里面,看起来没啥用,不过这是演示用的,不要苛求了。
#include "windows.h"
#include "stdio.h"
#include "Psapi.h"#pragma comment(lib,"psapi.lib")
// 使用链表所要包含的头文件
#include "list"
using namespace std;// 变量定义
typedef struct _PROCESS_INFO{
UINT nPid;
char lpFilePath[MAX_PATH];
}PROCESS_INFO, *PPROCESS_INFO;typedef list<PROCESS_INFO> ProcessList;
typedef ProcessList::iterator ITERATOR;// 函数声明
int EnumProcess(ProcessList &List);// 主函数
void main()
{
ProcessList List;
EnumProcess(List);
printf("%d\n", List.size());// 输出结果
ITERATOR iter = List.begin();
for ( ; iter != List.end(); iter++)
{
printf("\n(%d)\t %s\n", (*iter).nPid, (*iter).lpFilePath);
}
}int EnumProcess(ProcessList &List)
{
PROCESS_INFO pi;
DWORD ProcessCount;
DWORD cbNeeded;
DWORD ProcessId[1024];
EnumProcesses(ProcessId,sizeof(ProcessId),&cbNeeded);
ProcessCount = cbNeeded/sizeof(DWORD);
HMODULE hModule;
char szPath[MAX_PATH];
for(DWORD i = 0; i < ProcessCount; i ++)
{
memset(szPath,0,sizeof(szPath));
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,ProcessId[i]);
memset(szPath,0,sizeof(szPath));
if(hProcess)
{
EnumProcessModules(hProcess,&hModule,sizeof(hModule),&cbNeeded);
GetModuleFileNameEx(hProcess,hModule,szPath,sizeof(szPath));
if(ProcessId[i] == 4)
{
sprintf(szPath,"System");
}
// 添加入链表结尾
pi.nPid = ProcessId[i];
strcpy(pi.lpFilePath, szPath);List.push_back(pi);
}
CloseHandle(hProcess);
}return ProcessCount;
}随机文章:
【原创】内核模式简单实现进程监控 2009-04-07【原创】数据结构之链表 2009-03-02【驱动笔记11】使用DeviceIoControl通信 2009-01-17【驱动笔记9】初探IRP 2009-01-17【驱动笔记4】在驱动中操作注册表 2009-01-02








评论
我们ACM时候自己写的时候自己写可以STL,但是比赛不让用,
好在小爷我也不玩ACM了