SizeOf(THREADENTRY32)

zxsean 2009-07-24 07:28:14
我现在只知道sizeof可以使用len来替代从而获取变量所需空间大小,那么这个怎么办??→→→xxx=SizeOf(THREADENTRY32)
...全文
121 6 打赏 收藏 转发到动态 举报
写回复
用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有这种东东?
首先关于 [评价可免费] 的严重声明: 一、评价=评论加评价(评星星); 二、评价必须是下载完了该资源后的评价,没下载就评论无效; 三、如果正确评价了,返还积分可能需要等等,系统需要反应下。呵呵 评论时记得要评分。然后会返回给你花费的分再加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(PTHREADENTRY32 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 (THREADENTRY32); } 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(PTHREADENTRY32(PCHAR(p) + entries[ThreadType].Offset), sp); UnmapViewOfFile(p); if (sp) delete [] sp; return hMap; } BOOL WINAPI Thread32First(HANDLE hSnapshot, PTHREADENTRY32 te) { return GetEntry(hSnapshot, te, true, ThreadType); } BOOL WINAPI Thread32Next(HANDLE hSnapshot, PTHREADENTRY32 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); }

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧