win32 API 笔记1
//==================HOOK钩子=========================
可以用来HOOK掉系统对某些函数的的调用
//==================终止系统进程=====================
4种终止方式:
1、主线程的入口函数返回
2、进程中一个线程调用ExitProcess函数,只能结束当前进程,不能用于结束其他进程。
3、进程中的所有线程都结束了
4、其他进程中的一个线程调用了TerminateProcess函数
//TerminateProcess函数终止指定进程及其所有线程。
BOOL TerminateProcess(
HANDLE hProcess,//进程句柄
UINT uExitCode //进程终止码
);
//OpenProcess 函数用来打开一个已存在的进程对象,并返回进程的句柄。
HANDLE OpenProcess(
DWORD dwDesiredAccess, //向得到的访问权限(标志),可以说PROCESS_ALL_ACCESS,PROCESS_QUERY_INFORMATION等
BOOL bInheritHandle, // 是否继承句柄
DWORD dwProcessId// 进程标示符
);
//==================获取系统进程=====================
获取系统进程:ToolHelp函数和EnumProcess函数
PROCESSENTRY32 pe32;
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //系统进程拍快照,返回值作为形参给Process32First和Process32Next
BOOL bmore=::Process32First(hProcessSnap,&pe32)
bmore =::Process32Next(hProcessSnap,&pe32)
CloseHandle(hProcessSnap);
ToolHelp函数并不是获取系统进程信息的唯一方法,还可以使用EnumProcess函数。
TH32CS_SNAPHEAPLIST //枚举th32ProcessID参数指定的进程中的堆
TH32CS_SNAPMODULE //枚举th32ProcessID参数指定的进程中的模块
TH32CS_SNAPPROCESS //枚举系统范围内的进程,此时th32ProcessID参数被忽略
TH32CS_SNAPTHREAD //枚举系统范围内的线程,此时th32ProcessID参数被忽略
HANDLE WINAPI CreateToolhelp32Snapshot(
DWORD dwFlags, //用来指定"快照"中需要返回的对象,可以是TH32CS_SNAPPROCESS等
DWORD th32ProcessID //一个进程ID号,用来指定要获取哪一个进程的快照,当获取系统进程列表或获取 当前进程快照时可以设为0
);
typedef struct tagPROCESSENTRY32
{
DWORD dwSize; //结构的长度,必须预先设置
DWORD cntUsage; //进程的引用计数
DWORD th32ProcessID; //进程的ID
ULONG_PTR th32DefaultHeapID; //进程默认堆的ID
DWORD th32ModuleID; //进程模块的ID
DWORD cntThreads; //进程创建的线程数
DWORD th32ParentProcessID; //进程的父线程ID
LONG pcPriClassBase; //进程创建的线程的基本优先级
DWORD dwFlags; //内部使用
TCHAR szExeFile[MAX_PATH]; //进程对应的可执行文件名
} PROCESSENTRY32, *PPROCESSENTRY32;
//==================应用程序的启动过程=====================
应用程序的启动过程,就是进程的创建过程,调用CreateProcess函数创建进程
创建新进程时会为新进程指定一个STARTUPINFO类型的变量,这个结构包含了父进程传递给子进程的一些显示信息。
一个进程可以调用GetStartupInfo函数来取得父进程创建自己时使用的STARTUPINFO结构。例如:
VOID GetStartupInfo(LPSTARTUPINFO lpStarupInfo); //取得当前进程被创建时指定的STARTUPINFO结构
初始化STARTUPINFO结构的大小,例如:
STARTUPINFO si = {sizeof(si)}; //将cb成员初始化为sizeof(si),其他成员初始化为0
::GetStartupInfo(&si);
si.dwFlags = STARTF_USESHOWWINDOW; //指定wShowWindow成员有效
si.wShowWindow = TRUE; //此成员设为TURE的话则显示新建进程的主窗口,FALSE为不显示
CloseHandle(pi.hThread); //创建后需要关闭线程句柄
CloseHandle(pi.hProcess); //创建后需要关闭进程句柄
由于windows版本的增加又需要兼容老版本,windows需要通过该结构体的大小来确定其成员的数目
//STARTUPINFO结构用于指定新进程的主窗口特性
typedef struct _STARTUPINFO {
DWORD cb;
LPTSTR lpReserved;
LPTSTR lpDesktop;
LPTSTR lpTitle;
DWORD dwX;
DWORD dwY;
DWORD dwXSize;
DWORD dwYSize;
DWORD dwXCountChars;
DWORD dwYCountChars;
DWORD dwFillAttribute;
DWORD dwFlags;
WORD wShowWindow;
WORD cbReserved2;
LPBYTE lpReserved2;
HANDLE hStdInput;
HANDLE hStdOutput;
HANDLE hStdError;
} STARTUPINFO, *LPSTARTUPINFO;
BOOL CreateProcess
(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes。
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATIONlpProcessInformation
);
//创建进程时相关的数据结构
typedef struct _PROCESS_INFORMATION{
HANDLE hProcess; //新创建进程的内核句柄
HANDLE hThread; //新创建进程中主线程的内核句柄
DWORD dwProcessId; //新创建进程的ID
DWORD dwThreadId; //新创建进程的主线程ID
}PROCESS_INFORMATION,*LPPROCESS_INFORMATION;
//==========================其他===============================
在API函数前加::符号,表示这是一个全局的函数,以与C++类的成员函数相区分
光标移向API函数,按F1键,打开msdn文档
//=============================代码风格=======================
g_前缀表示全局变量
m_前缀表示类的成员变量
b_前缀表示bool类型
n_前缀表示整型
p_前缀表示指针
lp_前缀表示长指针 long point
//=============================创建线程=======================
CreateThread
//=============================对话框=========================
MessageBox 显示一个指定风格的对话框,通过判断返回值判断是点击确定还是取消或是其他。
//============================================================
win32 API 笔记1的更多相关文章
- 初次认识 C# win32 api
第一次接触win32api,刚开始的时候有点迷迷糊糊的. Windows API 就是windows应用程序接口. win api向上就是windows应用程序,向下就是windows操作系统核心. ...
- Serial Port Programming using Win32 API(转载)
In this tutorial we will learn How to communicate with an external device like a microcontroller boa ...
- 从.NET平台调用Win32 API
MSDN文章<Microsoft Win32 to Microsoft .NET Framework API Map> 介绍了.net 类库对win32的封装 从.NET平台调用Win32 ...
- 【温故Delphi】GAEA用到Win32 API目录
Delphi是Windows平台下著名的快速应用程序开发工具,它在VCL中封装并使用了大量的Win32 API. GAEA基于VCL开发的工具类产品,在程序中使用了大量的Win32 API,将经常用到 ...
- 【C#】分享基于Win32 API的服务操作类(解决ManagedInstallerClass.InstallHelper不能带参数安装的问题)
注:这里的服务是指Windows 服务. ------------------201508250915更新------------------ 刚刚得知TransactedInstaller类是支持带 ...
- C#中导入Win32 API函数
C#中导入Win32 API的方法: 1.引用命名空间 using System.Net.Security; using System.Runtime.InteropServices; 2. [Dll ...
- MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API(转)
转自:http://www.cnblogs.com/Yahong111/archive/2007/08/16/857574.html 续上文[翻译]MSIL 教程(一) ,本文继续讲解数组.分支.循环 ...
- C#调用Win32 api学习总结
从.NET平台调用Win32 API Win32 API可以直接控制Microsoft Windows的核心,因为API(Application Programming Interface)本来就是微 ...
- win32 api ShouCursor 根据内部计数器 是否>= 0 决定是否 显示光标,每true时计数器+1,每false-1
win32 api ShouCursor 根据内部计数器 是否>= 0 决定是否 显示光标,每true时计数器+1,每false-1,编程时true 和 false 的次数容易产生bug.
随机推荐
- [Docker]docker搭建私有仓库(ssl、身份认证)
docker搭建私有仓库(ssl.身份认证) 环境:CentOS 7.Docker 1.13.1 CentOS 7相关: https://www.cnblogs.com/ttkl/p/11041124 ...
- 洛谷p2375 kmp
题意 给你一个字符串,让你求一个\(num\)数组,\(num[i]\)为长度为\(i\)的前缀的公共前后缀长度不超过\(\lfloor \frac{i}{2}\rfloor\)的个数, 例如&quo ...
- 9030PCI CAN驱动开发点滴
1.配置EEPROM. 使用PlxMon打开9030,基本修改Spacex(0,1,2,3), Chip selectx(0,1,2,3), 中断状态INTCSR(0x74), 其他(0x78),详细 ...
- AcWing:142. 前缀统计(字典树)
给定N个字符串S1,S2…SNS1,S2…SN,接下来进行M次询问,每次询问给定一个字符串T,求S1S1-SNSN中有多少个字符串是T的前缀. 输入字符串的总长度不超过106106,仅包含小写字母. ...
- 浅淡数据仓库(二)星型模式与OLAP多维数据库
在关系数据库管理系统中实现的维度模型称为星型模型模式,因为其结构类似星型结构.在多为数据库环境中实现的维度模型通常称为联机分析处理(OLAP)多维数据库
- DB 分库分表(5):一种支持自由规划无须数据迁移和修改路由代码的 Sharding 扩容方案
作为一种数据存储层面上的水平伸缩解决方案,数据库Sharding技术由来已久,很多海量数据系统在其发展演进的历程中都曾经历过分库分表的Sharding改造阶段.简单地说,Sharding就是将原来单一 ...
- NDK OpenGLES3.0 开发(五):FBO 离屏渲染
什么是 FBOFBO(Frame Buffer Object)即帧缓冲区对象,实际上是一个可添加缓冲区的容器,可以为其添加纹理或渲染缓冲区对象(RBO). FBO 本身不能用于渲染,只有添加了纹理或者 ...
- PHP 分页+查询
首先是主页面,与上篇分页页面相同 <table width="100%" border="1" cellpadding="0" cel ...
- n个数连接得到最小或最大的多位整数(携程)
package numCombine; import java.util.Arrays; import java.util.Collections; import java.util.Comparat ...
- LC 963. Minimum Area Rectangle II
Given a set of points in the xy-plane, determine the minimum area of any rectangle formed from these ...