社区
API
帖子详情
SizeOf(THREADENTRY32)
zxsean
2009-07-24 07:28:14
我现在只知道sizeof可以使用len来替代从而获取变量所需空间大小,那么这个怎么办??→→→xxx=SizeOf(THREADENTRY32)
...全文
121
6
打赏
收藏
SizeOf(THREADENTRY32)
我现在只知道sizeof可以使用len来替代从而获取变量所需空间大小,那么这个怎么办??→→→xxx=SizeOf(THREADENTRY32)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
贝隆
2009-07-27
打赏
举报
回复
学习了。
嗷嗷叫的老马
2009-07-27
打赏
举报
回复
............对哦,我没注意...
Sandrer
2009-07-27
打赏
举报
回复
[Quote=引用 2 楼 myjian 的回复:]
xxx=len(THREADENTRY32)
[/Quote]
终于看到老马犯傻啦!!!
VB中不能直接 Len(类型名)
只能 Len(变量)
myjisgreat
2009-07-27
打赏
举报
回复
sizeof 不是 c的吗?
嗷嗷叫的老马
2009-07-24
打赏
举报
回复
xxx=len(THREADENTRY32)
SYSSZ
2009-07-24
打赏
举报
回复
sizeof?VB有这种东东?
Windows 2000 Native API 电子书的源代码 [评价可免费]
首先关于 [评价可免费] 的严重声明: 一、评价=评论加评价(评星星); 二、评价必须是下载完了该资源后的评价,没下载就评论无效; 三、如果正确评价了,返还积分可能需要等等,系统需要反应下。呵呵 评论时记得要评分。然后会返回给你花费的分再加1分.理论上有十分就可以下载完所有的资源了。一般人我不告诉他。 Example 1.1: A Partial ToolHelp Library Implementation #include “ntdll.h” #include
#include
struct ENTRIES { ULONG Offset; ULONG Count; ULONG Index; ENTRIES() : Offset(0), Count(0), Index(0) {} ENTRIES(ULONG m, ULONG n) : Offset(m), Count(n), Index(0) {} }; enum EntryType { ProcessType, ThreadType, MaxType }; NT::PSYSTEM_PROCESSES GetProcessesAndThreads() { ULONG n = 0x100; NT::PSYSTEM_PROCESSES sp = new NT::SYSTEM_PROCESSES[n]; while (NT::ZwQuerySystemInformation( NT::SystemProcessesAndThreadsInformation, sp, n *
sizeof
*sp, 0) == STATUS_INFO_LENGTH_MISMATCH) delete [] sp, sp = new NT::SYSTEM_PROCESSES[n = n * 2]; return sp; } ULONG ProcessCount(NT::PSYSTEM_PROCESSES sp) { ULONG n = 0; bool done = false; for (NT::PSYSTEM_PROCESSES p = sp; !done; p = NT::PSYSTEM_PROCESSES(PCHAR(p) + p->NextEntryDelta)) n++, done = p->NextEntryDelta == 0; return n; } ULONG ThreadCount(NT::PSYSTEM_PROCESSES sp) { ULONG n = 0; bool done = false; for (NT::PSYSTEM_PROCESSES p = sp; !done; p = NT::PSYSTEM_PROCESSES(PCHAR(p) + p->NextEntryDelta)) n += p->ThreadCount, done = p->NextEntryDelta == 0; return n; } VOID AddProcesses(PPROCESSENTRY32 pe, NT::PSYSTEM_PROCESSES sp) { bool done = false; for (NT::PSYSTEM_PROCESSES p = sp; !done; p = NT::PSYSTEM_PROCESSES(PCHAR(p) + p->NextEntryDelta)) { pe->dwSize =
sizeof
*pe; pe->cntUsage = 0; pe->th32ProcessID = p->ProcessId; pe->th32DefaultHeapID = 0; pe->th32ModuleID = 0; pe->cntThreads = p->ThreadCount; pe->th32ParentProcessID = p->InheritedFromProcessId; pe->pcPriClassBase = p->BasePriority; pe->dwFlags = 0; sprintf(pe->szExeFile, “%.*ls”, p->ProcessName.Length / 2, p->ProcessName.Buffer); pe++; done = p->NextEntryDelta == 0; } } VOID AddThreads(P
THREADENTRY
32 te, NT::PSYSTEM_PROCESSES sp) { bool done = false; for (NT::PSYSTEM_PROCESSES p = sp; !done; p = NT::PSYSTEM_PROCESSES(PCHAR(p) + p->NextEntryDelta)) { for (ULONG i = 0; i < p->ThreadCount; i++) { te->dwSize =
sizeof
*te; te->cntUsage = 0; te->th32ThreadID = DWORD(p->Threads[i].ClientId.UniqueThread); te->th32OwnerProcessID = p->ProcessId; te->tpBasePri = p->Threads[i].BasePriority; te->tpDeltaPri = p->Threads[i].Priority - p->Threads[i].BasePriority; te->dwFlags = 0; te++; } done = p->NextEntryDelta == 0; } } template
BOOL GetEntry(HANDLE hSnapshot, T entry, bool first, EntryType type) { ENTRIES *entries = (ENTRIES*)MapViewOfFile(hSnapshot, FILE_MAP_WRITE, 0, 0, 0); if (entries == 0) return FALSE; BOOL rv = TRUE; entries[type].Index = first ? 0 : entries[type].Index + 1; if (entries[type].Index >= entries[type].Count) SetLastError(ERROR_NO_MORE_FILES), rv = FALSE; if (entry->dwSize <
sizeof
*entry) SetLastError(ERROR_INSUFFICIENT_BUFFER), rv = FALSE; if (rv) *entry = T(PCHAR(entries)+entries[type].Offset)[entries[type].Index]; UnmapViewOfFile(entries); return rv; } HANDLE WINAPI CreateToolhelp32Snapshot(DWORD flags, DWORD) { NT::PSYSTEM_PROCESSES sp = (flags & (TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD)) ? GetProcessesAndThreads() : 0; ENTRIES entries[MaxType]; ULONG n =
sizeof
entries; if (flags & TH32CS_SNAPPROCESS) { entries[ProcessType] = ENTRIES(n, ProcessCount(sp)); n += entries[ProcessType].Count *
sizeof
(PROCESSENTRY32); } if (flags & TH32CS_SNAPTHREAD) { entries[ThreadType] = ENTRIES(n, ThreadCount(sp)); n += entries[ThreadType].Count *
sizeof
(
THREADENTRY
32); } SECURITY_ATTRIBUTES sa = {
sizeof
sa, 0, (flags & TH32CS_INHERIT) != 0}; HANDLE hMap = CreateFileMapping(HANDLE(0xFFFFFFFF), &sa, PAGE_READWRITE | SEC_COMMIT, 0, n, 0); ENTRIES *p = (ENTRIES*)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0); for (int i = 0; i < MaxType; i++) p[i] = entries[i]; if (flags & TH32CS_SNAPPROCESS) AddProcesses(PPROCESSENTRY32(PCHAR(p) + entries[ProcessType].Offset), sp); if (flags & TH32CS_SNAPTHREAD) AddThreads(P
THREADENTRY
32(PCHAR(p) + entries[ThreadType].Offset), sp); UnmapViewOfFile(p); if (sp) delete [] sp; return hMap; } BOOL WINAPI Thread32First(HANDLE hSnapshot, P
THREADENTRY
32 te) { return GetEntry(hSnapshot, te, true, ThreadType); } BOOL WINAPI Thread32Next(HANDLE hSnapshot, P
THREADENTRY
32 te) { return GetEntry(hSnapshot, te, false, ThreadType); } BOOL WINAPI Process32First(HANDLE hSnapshot, PPROCESSENTRY32 pe) { return GetEntry(hSnapshot, pe, true, ProcessType); } BOOL WINAPI Process32Next(HANDLE hSnapshot, PPROCESSENTRY32 pe) { return GetEntry(hSnapshot, pe, false, ProcessType); }
进程篇----获取线程ID(By ProcessName) CreateToolhelp32Snapshot
通过ToolHelper中的API函数CreateToolhelp32Snapshot来获取目标进程中的线程ID。 BOOL GetThreadIdentify(HANDLE ProcessIdentify, vector<HANDLE>& ThreadIdentify) { BOOL IsOk = FALSE; HANDLE SnapshotHandle = INVALID_HANDLE_VALUE;
THREADENTRY
32
ThreadEntry
32..
CreateToolhelp32Snapshot TH32CS_SNAPTHREAD
TlHelp32.h CreateToolhelp32Snapshot TH32CS_SNAPTHREAD
THREADENTRY
32 Thread32First Thread32Next CloseHandle
进程注入系列一之APC注入
什么是APC APC 是一个简称,全称为Asynchronous Procedure Call,叫异步过程调用,是指函数在特定线程中被异步执行,在操作系统中,APC是一种并发机制。 MSDN解释为: 相关函数 QueueUserApc:函数作用,添加制定的异步函数调用(回调函数)到执行的线程的APC队列中 APCproc:函数作用: 回调函数的写法. 核心函数 QueueUserAPC DWORD QueueUserAPC( PAPCFUNCpfnAPC, // APC function HANDLEhT
获取主线程ID
// 获取主线程ID(需要头文件tlhelp32.h) // 失败返回0 DWORD GetMainThreadId() { DWORD idThread = 0; // 进程ID DWORD idProcess = GetCurrentProcessId(); // 获取进程的主线程ID
THREADENTRY
32 te; // 线程信息 te.dwSize =
sizeof
(
THREADENTRY
32); HANDLE hSnapshot = CreateToo.
API
1,486
社区成员
23,279
社区内容
发帖
与我相关
我的任务
API
VB API
复制链接
扫一扫
分享
社区描述
VB API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章