[00023]-[2015-09-19]-[01]-[Windows 平台基础知识1]

[进程,线程, DLL(动态链接库)的枚举]
[快照处理 CreateToolhelp32SnapShot()]

// THCS32_SNAPMODULE
// THCS32_SNAPPROCESS
// THCS32_SNAPTHREAD
HANDLE hSnap = CreateToolhelp32SnapShot(
    DWORD dwFlags,     // 建立快照系统的类型 进程? 线程? DLL?
    DWORD dwProcssId,     // NULL OR ProcessId
);

[***32First() / ***32Next()]

// PROCESSENTRY32

/*
typedef struct tagPROCESSENTRY32
{
DWORD dwSize;     // 结构体大小
DWORD cntUsage;     // 该进程的引用计数
DWORD th32ProcessID;     // 该进程的ID ===> PID
ULONG_PTR th32DefaultHeapID;     // 进程默认堆的ID = 0
DWORD th32ModuleID;     // 进程模块ID = 0
DWORD cntThreads;     // 进程开启的线程计数
DWORD th32ParentProcessID;     // 该进程的父进程的ID
LONG pcPriClassBase;     // 线程的优先权
DWORD dwFlags;     // == 0
TCHAR szExeFile[MAX_PATH];     // 进程的可执行文件的名称
} PROCESSENTRY32, *PPROCESSENTRY32;
*/

// THREADENTRY32
/*
typedef struct tagTHREADENTRY32 {
  DWORD dwSize;     // 结构体大小
  DWORD cntUsage;     // == 0
  DWORD th32ThreadID;     // ....
  DWORD th32OwnerProcessID;     // 线程所属进程的PID
  LONG tpBasePri;     // 线程在内核中分配的优先级 (0 - 31) 0 为最低优先级
  LONG tpDeltaPri;     // = 0
  DWORD dwFlags;     // = 0
  } THREADENTRY32, *PTHREADENTRY32;
*/
// MODULEENTRY32
/*
typedef struct tagMODULEENTRY32 {
DWORD dwSize;     // 结构体大小
DWORD th32ModuleID;     // = 1
DWORD th32ProcessID;     // 正在检查的进程标识符
DWORD GlblcntUsage;     // 全局模块的使用计数 即模块的总载入次数 一般没有意义 = 0xffff
DWORD ProccntUsage;     // 全局模块的使用计数 与GlblcntUsage相同)。通常这一项也是没有意义的,被设置为0xFFFF。
BYTE *modBaseAddr;     // 模块的基址,在其所属的进程范围内。
DWORD modBaseSize;     // 模块的大小,单位字节。
HMODULE hModule;     // 所属进程的范围内,模块句柄。
TCHAR szModule[MAX_PATH];     // NULL结尾的字符串,其中包含模块名。
TCHAR szExePath[MAX_PATH];     // NULL结尾的字符串,其中包含的位置,或模块的路径。
} MODULEENTRY32, *PMODULEENTRY32, *LPMODULEENTRY32;
*/
BOOL WINAPI Process32First(HANDLE hSnap, LPPROCESSENTRY32 lppe);
BOOL WINAPI Process32Next(HANDLE hSnap, LPPROCESSENTRY32 lppe);

BOOL WINAPI Thread32First(HANDLE hSnap, LPTHRADENTRY32 lpte);
BOOL WINAPI Thread32Next(HANDLE hSnap, LPTHRADENTRY32 lpte);

BOOL WINAPI Module32First(HANDLE hSnap, LPMODULEENTRY32 lpme);
BOOL WINAPI Module32Next(HANDLE hSnap, LPMODULEENTRY32 lpme);

egcode:

HANDLE hSnap = CreateToolhelp32Snapshot(THCS32_SNAPPROCESS, NULL); // 给系统中的进程 进行一次快照 快照是一瞬间的动作,因为系统的进程,线程, DLL都是在动态

变化的

PROCESSENTRYY32 pe = {0};
pe.dwSize = sizeof(PROCESSENTRY32);
BOOL bRet = Process32First(hSnap, &pe);
while(bRet)
{
// now the pe do contain the content of a Process Entry
.......

bRet = Process32Next(hSnap, &pe); // get the next Process Entry content
}

[调整当前进程的权限]
(1) 使用OpenProcessToken() 打开当前进程的访问令牌
(2) 使用LookupPrivilegeValue() 获取描述权限的LUID
(3) 使用AdjustTokenPrivileges() 调整访问令牌的权限 ---> [SeDebugPrivilege]

egcode:

/*
*    调整当前进程 具有 SeDebugPrivilege 权限
*/
void SetDebugPrivilege()
{
  HANDLE hToken = NULL;
  BOOL bRet = OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken);

  if(bRet == TRUE)
  {
    TOKEN_PRIVILEGE tp;
    tp.PrivilegeCount = 1;
    LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLE;
    AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
    CloseHandle(hToken);
  }
  else
  {
    CloseHandle(hToken);
  }
}
时间: 2024-11-07 23:12:18

[00023]-[2015-09-19]-[01]-[Windows 平台基础知识1]的相关文章

[00022]-[2015-09-19]-[00]-[Windows 平台基础知识0]

[文件的相关操作] [CreateFile] // 打开或创建文件 HANDLE CreateFile( LPCTSTR lpFileName, // 文件名 DWORD dwDesiredAccess, // 文件的访问模式 GENERIC_READ|GENERIC_WRITE DWORD dwShareMode, // 文件的共享模式 LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 文件的安全属性 NULL DWORD dwCreationDis

深度学习Caffe实战笔记(19)Windows平台 Faster-RCNN 制作自己的数据集

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 深度学习Caffe实战笔记(19)Windows平台 Faster-RCNN 制作自己的数据集 - gybheroin的博客 - 博客频道 - CSDN.NET gybheroin的博客 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [

01.04_计算机基础知识(键盘功能键和快捷键)

* A:键盘功能键 * a:Tab * b:Shift * c:Ctrl * d:Alt * e:空格 * f:Enter * g:Window * h:上下左右键 * i:PrtSc(PrintScreen)屏幕截图* B:键盘快捷键 * a:Ctrl+A 全选 * b:Ctrl+C 复制 * c:Ctrl+V 粘贴 * d:Ctrl+X 剪切 * e:Ctrl+Z 撤销 * f:Ctrl+S 保存 ###01.05_计算机基础知识(如何打开DOS控制台)* A:xp下如何打开DOS控制台?

Java基础知识强化之多线程笔记01:多线程基础知识(详见Android(java)笔记61~76)

1. 基础知识: Android(java)学习笔记61:多线程程序的引入    ~    Android(java)学习笔记76:多线程-定时器概述和使用 

How to build a blog 01:Web基础知识

一.Internet基础知识 1. Internet的出现后,我们可以从本地(客户端)访问世界各地(服务器)的各种资源,最基本的客户端就是Web浏览器. 2. HTTP协议,则定义了客户端与服务器应该如何通讯,比如规定传输的数据的格式,这样的话我们就不用去担心数据在传输过程中是否会损坏.所以,你可以发现网站的开头,大多数是HTTP开头的,代表了使用该协议进行通讯 3. 但是,服务器众多,比如单单视频网站就有youku.爱奇艺.乐视.搜狐TV等,为了识别不同的服务端,每台服务就有了自己的独特的名字

MFC入门教程01 Windows编程基础

公众平台基础知识

1.1 公众平台简介 公众平台是腾讯公司在微信的基础上新增的功能模块,通过这一平台,个人和企业都可以打造一个微信公众账号(以下简称公众账号或公众号),并实现与特定群体的文字.图片及语音的全方位沟通.互动. 公众平台主要面向名人.政府.媒体.企业等,在这里可以通过微信渠道将品牌推广给上亿的微信用户,减少宣传成本,提高品牌知名度,打造更具影响力的品牌形象. 1.1.1 平台定位 在公众平台上线初期,就有大量媒体.公司涌入,迅速将这里开辟成为除官方微博外的另一大互联网营销战场.当时,许多公众账号都没有

让我们首先来了解下windows入门基础知识!

1.1.Windows的介绍 Windows是一种基于图形界面的多任务操作系统.为这个环境开发的程序有着相同的外观和命令结构.对用户 来说,这使得学习使用Windows应用程序变得轻易了.为了帮助开发Windows应用程序,Windows提供了大量的内建 函数以方便地使用弹出菜单.滚动条.对话框.图标和其他一些友好的用户界面应该具有的特性. Windows运行应用程序以硬件无关的方式来处理视频显示.键盘.鼠标.打印机.串行口以及系统时钟.最值 得注重的Windows特性就是其标准化的图形用户界面

我的 FPGA 学习历程(01)—— FPGA 基础知识和 Quartus 的安装

高级的嵌入式市场主要分为以下三类:ARM.DSP 和 FPGA. 其中 ARM 是行业内的佼佼者,目前几乎所有的安卓智能手机都使用 ARM 授权的 CPU架构:而 DSP(数字信号处理器) 早年就被大面积的应用与电话.DVD.通讯基站等领域.DSP 与 ARM 的区别在于,ARM 是通用 CPU,DSP 则是专用 CPU.FPGA 则与他们不同,FPGA 的名称的由来是由于 FPGA 功能的成型是在实验室等通常工作环境下进行的:区别与专有集成电路 (ASIC)在晶圆工厂的制造,所以 FPGA 被