//==================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的更多相关文章

  1. 初次认识 C# win32 api

    第一次接触win32api,刚开始的时候有点迷迷糊糊的. Windows API 就是windows应用程序接口. win api向上就是windows应用程序,向下就是windows操作系统核心. ...

  2. Serial Port Programming using Win32 API(转载)

    In this tutorial we will learn How to communicate with an external device like a microcontroller boa ...

  3. 从.NET平台调用Win32 API

    MSDN文章<Microsoft Win32 to Microsoft .NET Framework API Map> 介绍了.net 类库对win32的封装 从.NET平台调用Win32 ...

  4. 【温故Delphi】GAEA用到Win32 API目录

    Delphi是Windows平台下著名的快速应用程序开发工具,它在VCL中封装并使用了大量的Win32 API. GAEA基于VCL开发的工具类产品,在程序中使用了大量的Win32 API,将经常用到 ...

  5. 【C#】分享基于Win32 API的服务操作类(解决ManagedInstallerClass.InstallHelper不能带参数安装的问题)

    注:这里的服务是指Windows 服务. ------------------201508250915更新------------------ 刚刚得知TransactedInstaller类是支持带 ...

  6. C#中导入Win32 API函数

    C#中导入Win32 API的方法: 1.引用命名空间 using System.Net.Security; using System.Runtime.InteropServices; 2. [Dll ...

  7. MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API(转)

    转自:http://www.cnblogs.com/Yahong111/archive/2007/08/16/857574.html 续上文[翻译]MSIL 教程(一) ,本文继续讲解数组.分支.循环 ...

  8. C#调用Win32 api学习总结

    从.NET平台调用Win32 API Win32 API可以直接控制Microsoft Windows的核心,因为API(Application Programming Interface)本来就是微 ...

  9. win32 api ShouCursor 根据内部计数器 是否>= 0 决定是否 显示光标,每true时计数器+1,每false-1

    win32 api ShouCursor 根据内部计数器 是否>= 0 决定是否 显示光标,每true时计数器+1,每false-1,编程时true 和 false 的次数容易产生bug.

随机推荐

  1. javaScript高级3笔记2

    DOM0级事件 <img src = "../..."  onclick = "function()" />  // 处理事件 elment.onc ...

  2. codevs 2977 二叉堆练习1x

    时间限制: 10 s 空间限制: 32000 KB 题目等级 : 白银 Silver       题目描述 Description 已知一个二叉树,判断它是否为二叉堆(小根堆) 输入描述 Input ...

  3. HGOI 20190830 题解

    Problem A 钥匙 有$n$个人和$m$个钥匙在数轴上,人的坐标为$a_i$,钥匙的坐标为$b_i$ 而门的坐标为$p$,要让所有人获得一把不同钥匙,并且到达门,最长时间最短是多少. 对于$10 ...

  4. Java根据余弦定理计算文本相似度

    项目中需要算2个字符串的相似度,是根据余弦相似性算的,下面具体介绍一下: 余弦相似度计算 余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小.余弦值越接近1,就表明夹角越接近0度, ...

  5. docker打包flask简单程序

    简单代码: from flask import Flask app=Flask(__name__) @app.route('/') def hello(): return 'hello world' ...

  6. jQuery文档操作之插入操作

    append() 语法 父元素.append(子元素) 解释:追加某元素,在父元素中添加新的子元素.子元素可以为:string/element(js对象)/jQuery元素 代码如下: var oli ...

  7. Codeforces 437D The Child and Zoo(并查集)

    Codeforces 437D The Child and Zoo 题目大意: 有一张连通图,每个点有对应的值.定义从p点走向q点的其中一条路径的花费为途径点的最小值.定义f(p,q)为从点p走向点q ...

  8. js获取键盘编码

    原理:键盘上的按键都有各自的键码,通过这个键码可以来判断按下的是哪个键,下面函数可以获取键盘的键码,按下键盘按键就会在控制台打印出相应的键码 document.addEventListener(&qu ...

  9. [清华集训2016]如何优雅地求和——NTT

    题目链接: [清华集训2016]如何优雅地求和 题目大意:给出一个多项式$m+1$个点值$a_{0},a_{1}...a_{m}$(其中$f(i)=a_{i}$),并给出两个数$n,x$,求$Q(f, ...

  10. HearthBuddy Plugin编写遇到的问题

    错误1 赋值问题 貌似编译器版本有点低,无法识别C#的高级语法糖 属性的初始值,必须是public bool IsEnabled { get{return true;} } 不能写成public bo ...