/* ************************************
*《精通Windows API》
* 示例代码
* Enum.c
* 6.7 进程状态信息
* 使用PSAPI 和 Tool helper库查看进程状态信息
**************************************/
/* 头文件 */
#include <Windows.h>
#include <Psapi.h>
#include <Tlhelp32.h>
#include <stdio.h>
/* 预处理声明 */
#pragma comment (lib, "psapi.lib")
/* 函数声明 */
VOID WINAPI EnumProcess1();
VOID WINAPI EnumProcess2();
VOID ListProcessModules1( DWORD dwPID );
VOID ListProcessModules2( DWORD dwPID);
VOID PrintMemoryInfo( DWORD dwPID );
VOID ShowProcessMemoryInfo( DWORD dwPID );
VOID ListHeapInfo( DWORD dwPID );
VOID ListProcessThreads( DWORD dwPID );
VOID PrintError( LPTSTR msg );
/*************************************
* VOID WINAPI EnumProcess1()
* 功能 调用EnumProcesses遍历进程,
* 并调用ListProcessModules1函数和
* ListProcessThreads函数列举模块和线程
*
* 无参数,无返回值
**************************************/
VOID WINAPI EnumProcess1()
{
// 假设不超过1024个进程
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
// 调用EnumProcesses
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
return;
// 进程数
cProcesses = cbNeeded / sizeof(DWORD);
for ( i = 0; i < cProcesses; i++ )
{
// 显示进程信息
printf( "\n\n**************************************************" );
printf("\nPROCESS : %u\n\n",aProcesses[i]);
printf( "\n****************************************************" );
// 列举模块信息和线程信息
ListProcessModules1( aProcesses[i] );
ListProcessThreads( aProcesses[i] );
}
}
/*************************************
* VOID WINAPI EnumProcess2()
* 功能 调用Process32First和Process32Next遍历进程,
* 并调用ListProcessModules2函数列举模块,
* 调用ShowProcessMemoryInfo函数显示内存使用情况
*
* 无参数,无返回值
**************************************/
VOID WINAPI EnumProcess2()
{
HANDLE hProcessSnap;
HANDLE hProcess;
PROCESSENTRY32 pe32;
DWORD dwPriorityClass;
// Snapshot
hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
if( hProcessSnap == INVALID_HANDLE_VALUE )
{
PrintError( "CreateToolhelp32Snapshot (of processes)" );
return ;
}
// 设置输入参数,结构的大小
pe32.dwSize = sizeof( PROCESSENTRY32 );
// 开始列举进程
if( !Process32First( hProcessSnap, &pe32 ) )
{
PrintError( "Process32First" ); // 出错信息
CloseHandle( hProcessSnap );
return ;
}
do
{
// 打印进程名
printf( "\n\n=====================================================" );
printf( "\nPROCESS NAME: %s", pe32.szExeFile );
printf( "\n-----------------------------------------------------" );
// 获取优先级
dwPriorityClass = 0;
hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID );
if( hProcess == NULL )
PrintError( "OpenProcess" );
else
{
dwPriorityClass = GetPriorityClass( hProcess );
if( !dwPriorityClass )
PrintError( "GetPriorityClass" );
CloseHandle( hProcess );
}
// 打印进程相关信息
printf( "\n process ID = 0x%08X", pe32.th32ProcessID );
printf( "\n thread count = %d", pe32.cntThreads );
printf( "\n parent process ID = 0x%08X", pe32.th32ParentProcessID );
printf( "\n Priority Base = %d", pe32.pcPriClassBase );
if( dwPriorityClass )
printf( "\n Priority Class = %d", dwPriorityClass );
// 获取模块信息,显示内存使用情况
ListProcessModules2( pe32.th32ProcessID );
PrintMemoryInfo(pe32.th32ProcessID);
ListHeapInfo(pe32.th32ProcessID);
} while( Process32Next( hProcessSnap, &pe32 ) );
CloseHandle( hProcessSnap ); //关闭句柄
return ;
}
/*************************************
* VOID ListProcessModules1( DWORD dwPID )
* 功能 调用EnumProcessModules函数
* 列举和显示进程加载的模块
*
* 参数 DWORD dwPID 进程PID
**************************************/
VOID ListProcessModules1( DWORD dwPID )
{
HMODULE hMods[1024];
HANDLE hProcess;
DWORD cbNeeded;
unsigned int i;
printf( "\nListProcessModules1 Process ID %u\n", dwPID );
// 打开进程,获得句柄
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, dwPID );
if (NULL == hProcess)
return;
// 调用EnumProcessModules
if( EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
{
for ( i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ )
{
TCHAR szModName[MAX_PATH];
// 获取获取的路径
if ( GetModuleFileNameEx( hProcess, hMods[i], szModName,
sizeof(szModName)/sizeof(TCHAR)))
{
// 打印
printf( TEXT("\t%s (0x%08X)\n"), szModName, hMods[i] );
}
}
}
CloseHandle( hProcess ); // 关闭进程句柄
}
/*************************************
* VOID ListProcessModules2( DWORD dwPID )
* 功能 调用Module32First和Module32Next函数
* 列举和显示进程加载的模块
*
* 参数 DWORD dwPID 进程PID
**************************************/
VOID ListProcessModules2( DWORD dwPID)
{
HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
MODULEENTRY32 me32;
printf( "\nListProcessModules2 Process ID %u\n", dwPID );
// Snapshot
hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwPID );
if( hModuleSnap == INVALID_HANDLE_VALUE )
{
PrintError( "CreateToolhelp32Snapshot (of modules)" );
return ;
}
// 设置输入参数,结构的大小
me32.dwSize = sizeof( MODULEENTRY32 );
// 开始获取模块信息
if( !Module32First( hModuleSnap, &me32 ) )
{
PrintError( "Module32First" ); // Show cause of failure
CloseHandle( hModuleSnap ); // Must clean up the snapshot object!
return ;
}
do
{
printf( "\n\n MODULE NAME: %s", me32.szModule );
printf( "\n executable = %s", me32.szExePath );
printf( "\n process ID = 0x%08X", me32.th32ProcessID );
printf( "\n ref count (g) = 0x%04X", me32.GlblcntUsage );
printf( "\n ref count (p) = 0x%04X", me32.ProccntUsage );
printf( "\n base address = 0x%08X", (DWORD) me32.modBaseAddr );
printf( "\n base size = %d", me32.modBaseSize );
} while( Module32Next( hModuleSnap, &me32 ) );
CloseHandle( hModuleSnap ); // 关闭句柄
return ;
}
/*************************************
* VOID PrintMemoryInfo( DWORD dwPID )
* 功能 显示进程的内存使用情况
*
* 参数 DWORD dwPID 进程PID
**************************************/
VOID PrintMemoryInfo( DWORD dwPID )
{
HANDLE hProcess;
PROCESS_MEMORY_COUNTERS pmc;
printf( "\nProcess ID: %u\n", dwPID );
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, dwPID );
if (NULL == hProcess)
return;
if ( GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc)) )
{
printf( "\tPageFaultCount: 0x%08X\n", pmc.PageFaultCount );
printf( "\tPeakWorkingSetSize: 0x%08X\n",
pmc.PeakWorkingSetSize );
printf( "\tWorkingSetSize: 0x%08X\n", pmc.WorkingSetSize );
printf( "\tQuotaPeakPagedPoolUsage: 0x%08X\n",
pmc.QuotaPeakPagedPoolUsage );
printf( "\tQuotaPagedPoolUsage: 0x%08X\n",
pmc.QuotaPagedPoolUsage );
printf( "\tQuotaPeakNonPagedPoolUsage: 0x%08X\n",
pmc.QuotaPeakNonPagedPoolUsage );
printf( "\tQuotaNonPagedPoolUsage: 0x%08X\n",
pmc.QuotaNonPagedPoolUsage );
printf( "\tPagefileUsage: 0x%08X\n", pmc.PagefileUsage );
printf( "\tPeakPagefileUsage: 0x%08X\n",
pmc.PeakPagefileUsage );
}
CloseHandle( hProcess );
}
/*************************************
* VOID ListHeapInfo( DWORD dwPID )
* 功能 显示进程的堆分配情况
*
* 参数 DWORD dwPID 进程PID
**************************************/
VOID ListHeapInfo( DWORD dwPID )
{
HEAPLIST32 hl;
HEAPENTRY32 he;
HANDLE hSnapshot = INVALID_HANDLE_VALUE;
printf( "\\ListHeapInfo Process ID %u\n", dwPID );
// Snapshot
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPHEAPLIST , dwPID );
if( hSnapshot == INVALID_HANDLE_VALUE )
{
PrintError( "CreateToolhelp32Snapshot (of heaplist)" );
return ;
}
// 设置输入参数,结
没有合适的资源?快使用搜索试试~ 我知道了~
Windows API开发详解:函数、接口、编程实例---源代码
共933个文件
manifest:110个
pdb:107个
obj:96个
4星 · 超过85%的资源 需积分: 50 355 下载量 70 浏览量
2011-11-18
13:28:16
上传
评论 14
收藏 11.08MB RAR 举报
温馨提示
Windows7是微软公司推出的最新的桌面操作系统,《Windows API开发详解:函数、接口、编程实例》采用图解的方式以及生动的操作实例,图文并茂地向用户介绍了Windows7操作系统。《Windows API开发详解:函数、接口、编程实例》共分12讲,第1~第4讲介绍了Windows7的新特性及安装、Windows7的基本操作、如何自定义桌面以及Windows资源管理器的操作,使读者可以很快掌握Windows7的基本操作。第5~第8讲主要讲解了Windows7常用的组件、如何播放和制作多媒体文件以及互联网的相关知识,通过实例的讲解,读者可以很快掌握Windows7日常工作和娱乐所需的操作。第9~第12讲主要介绍了用户账户的管理、软硬件的添加与删除、系统的日常维护及安全防护方面的知识,读者通过这几讲的学习可以初步掌握Windows7系统维护方面的知识。《Windows API开发详解:函数、接口、编程实例》颇具特色之处是将重点课程录制成了视频,配有全程语音讲解,还配有每讲的PPT课件,都收录在《Windows API开发详解:函数、接口、编程实例》所附光盘中,可作为读者学习时的参考和向导。《Windows API开发详解:函数、接口、编程实例》充分考虑了初学者的实际需要,真正“从零开始”。学习《Windows API开发详解:函数、接口、编程实例》,可以使对计算机“一点都不懂”的读者轻松掌握Windows7的基本知识和基本操作。
资源推荐
资源详情
资源评论
收起资源包目录
Windows API开发详解:函数、接口、编程实例---源代码 (933个子文件)
Enum.c.bak 10KB
Fibers.c.bak 6KB
attr.c.bak 5KB
remote.c.bak 5KB
file_map.c.bak 4KB
Eventm.c.bak 4KB
Semaphore.c.bak 4KB
heap.c.bak 4KB
EnumerateVolume.c.bak 3KB
window.cpp.bak 3KB
wr.c.bak 3KB
handle_path.cpp.bak 3KB
GetVolumeInfo.c.bak 3KB
stream.c.bak 3KB
child.c.bak 3KB
env_dll.c.bak 3KB
virtual.c.bak 3KB
Timer.c.bak 3KB
sub_dir.c.bak 2KB
tree.c.bak 2KB
lock.c.bak 2KB
diskspace.c.bak 2KB
Mutex.c.bak 2KB
Event.c.bak 2KB
cur_mod_dir.c.bak 2KB
CreateThread.c.bak 2KB
process.c.bak 2KB
opt.c.bak 2KB
msg.c.bak 2KB
files.c.bak 2KB
Schedule.c.bak 2KB
pro_s1.c.bak 2KB
cdrom.c.bak 1KB
windata.c.bak 1KB
pro_s2.c.bak 1KB
global.c.bak 1KB
StringCode.c.bak 1KB
basic.c.bak 1KB
stat.c.bak 953B
Loader.c.bak 918B
dir.c.bak 761B
env.c.bak 726B
start.c.bak 642B
define.c.bak 374B
rc.bat 47B
F.bmp 4KB
Enum.c 10KB
Fibers.c 6KB
attr.c 5KB
remote.c 5KB
file_map.c 4KB
Eventm.c 4KB
mount.c 4KB
Semaphore.c 4KB
heap.c 4KB
EnumerateVolume.c 3KB
wr.c 3KB
GetVolumeInfo.c 3KB
stream.c 3KB
child.c 3KB
env_dll.c 3KB
virtual.c 3KB
Timer.c 3KB
sub_dir.c 2KB
tree.c 2KB
lock.c 2KB
diskspace.c 2KB
Mutex.c 2KB
Event.c 2KB
cur_mod_dir.c 2KB
CreateThread.c 2KB
process.c 2KB
opt.c 2KB
msg.c 2KB
files.c 2KB
Schedule.c 2KB
pro_s1.c 2KB
cdrom.c 1KB
windata.c 1KB
pro_s2.c 1KB
global.c 1KB
StringCode.c 1KB
basic.c 1KB
stat.c 958B
Loader.c 923B
dir.c 766B
env.c 731B
start.c 647B
define.c 379B
window.cpp 3KB
handle_path.cpp 3KB
exp.def 85B
mt.dep 65B
mt.dep 65B
mt.dep 65B
mt.dep 65B
mt.dep 65B
mt.dep 65B
mt.dep 65B
mt.dep 65B
共 933 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10
shixiaoguo90
- 粉丝: 104
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页