DLL—动态链接库
- lib中包含 如何调用动态链接库中的代码
- 有一个动态链接库 dll 真正的代码是存在与dll中
- 本地程序从lib中读取 如何调用动态链接库代码的方法,去调用dll
LIB—静态链接库
- 一堆程序指令和数据,构成静态链接库
- 将lib文件拷贝到当前运行的程序中
一、列举出当前系统中的所有进程
列举出进程中的线程
1、通过函数CreateToolhelp32Snapshot函数,创建一个快照句柄
2、通过*32First函数获得第一个要列举的对象
3、通过*32Next获取其他要列举的对象
注意:列举进程最好是X64位进程,因为32位进程不能列举64位进程
尽量在列举进程前,提升自己的权限等级,如果使用了UAC机制,还要使用到前面的UAC搭桥机制
#include<Windows.h>
#include<tchar.h>
#include<Tlhelp32.h>
int _tmain()
{
HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 pe={0};
pe.dwSize=sizeof(pe);
Process32First(hSnapshot,&pe);
DWORD processID=0;
do
{
_tprintf(L"%d:%s\n",pe.th32ProcessID,pe.szExeFile);
if(CSTR_EQUAL==CompareStringOrdinal(L"Thunder.exe",7,pe.szExeFile,7,TRUE))
{
processID=pe.th32ProcessID;
}
}while(Process32Next(hSnapshot,&pe));
if(!processID)
{
_tprintf(L"not fund Thunder.exe process\n");
_gettchar();
return 0;
}
CloseHandle(hSnapshot);
hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPALL,processID);
//注意,这个快照,并不是拍摄的某个进程中线程的id,他拍到的是系统中所有线程。
THREADENTRY32 te={0};
te.dwSize=sizeof(te);
BOOL re=Thread32First(hSnapshot,&te);
do
{
if(te.th32OwnerProcessID==processID)
{
DWORD code=0;
GetExitCodeThread(OpenThread(THREAD_ALL_ACCESS,FALSE,te.th32ThreadID),&code);
_tprintf(L"%d:%d:%d\n",te.th32OwnerProcessID,te.th32ThreadID,code);
}
}while(Thread32Next(hSnapshot,&te));
DWORD code=0;
HANDLE hThread=OpenThread(THREAD_ALL_ACCESS,FALSE,15264);
GetExitCodeThread(hThread,&code);
_gettchar();
CloseHandle(hSnapshot);
return 0;
}
二、列举出当前系统中的所有线程
————————————————
版权声明:本文为CSDN博主「poppy飞翔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_22423659/article/details/53365955