分类 win32 articles

物理内存和虚拟内存的关系

物理内存和虚拟内存的关系 进程容器中4GB空间的内容分布 在所谓的4GB空间内,系统内核占据了高2GB的空间,普通进程看不见摸不着,而且高2GB的空间是全局共享。全局就那么一份,各个进程间共享 观察进程内存分布,我们发现进程中真正使用的内存远远不到2gb,而且地址不是连续的。说明操作系……

Continue reading

事件和线程同步

事件和线程同步 函数 //创建一个时间对象 HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, // SD 安全属性 BOOL bManualReset, // reset type 0自动复位(互斥)、1手动复位(通知模式) BOOL bInitialState, // initial state 初始创建时时间是否具备信号 LPCTSTR lpName // object name 对象的名称 ); //将目标事件对象设置为有信号的(同时通知其他线程) BOOL SetEvent( HANDLE hEvent // handle to event //目标事件的句柄 ); //将目标事件对象设置为……

Continue reading

临界区、线程锁和互斥体

临界区、线程锁和互斥体 不可重入函数 不可重入函数: 当这个函数返回前,不可以被其他线程调用 原因: printf : 访问了引用全局变量stdout malloc : 引用了全局内存分配表 free : 引用的全局内存分配表 类似的 假如我在我的线程中使用全局变量会不会出现类似问题? 坑: 当多线程同时去访问所谓不可重入函数的时候,当A……

Continue reading

线程的创建和控制

线程的创建和控制 进程和线程的关系:进程提供资源,线程使用资源完成工作 创建线程函数 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD /安全属性 DWORD dwStackSize, // initial stack size //线程栈大小- LPTHREAD_START_ROUTINE lpStartAddress, // thread function //线程代码 LPVOID lpParameter, // thread argument //线程参数 DWORD dwCreationFlags, // creation option //创建标识 LPDWORD lpThreadId // thread identifier //线程id ); 线程的控制 //线程等待 //等待一个 DWORD WaitForSingleObject( HANDLE hHandle, // handle to object……

Continue reading

句柄表和继承

句柄表和继承 句柄代表着备操作的对象 句柄的本质(handler) 句柄表可以看做一个非常大的结构体数组 句柄表的结构 索引值: 进程通过索引找到句柄表中对应的选项 内核对象地址: 通过地址直接找到对应的内核对象 访问掩码: 控制了访问权限 标志位: 标志改句柄能否被继承 句柄表是如何工作的: 每个进程的内……

Continue reading

ListView控件

ListView控件 实现简单进程管理 用到的相关api函数 //获取控件句柄 HWND GetDlgItem( HWND hDlg,//获得控件所处的窗口的句柄 int nIDDlgItem //控件id ); //初始化列表的列 (listview插入新的一列 int ListView_InsertColumn( HWNDhwnd, //控件的句柄 int iCol, //第几列 (索引 index const LPLVCOLUMNpcol //结构体指针 (包含新列的结构体 ); //插入新的一行条……

Continue reading

进程的遍历、获取与销毁

进程的遍历、获取与销毁 创建快照遍历 //获得进程所使用的堆,模块和线程的信息快照 HANDLE WINAPI CreateToolhelp32Snapshot ( DWORD dwFlags,//标志位 DWORD th32ProcessID //进程ID ) //dwFlags: 指定的快照中,指定需要拍的系统部分 TH32CS_INHERIT 声明快照句柄是可继承的。 TH32CS_SNAPALL 在快照中包含系统中所有的 进程和线程。 TH32CS_SNAPHEAPLIST 在快照中包含ID所指定的进程的所有的堆。 TH32CS_SNAPMODULE 在快……

Continue reading

进程的创建

进程的创建 进程的启动过程 打开目标exe的映象文件 创建进程内核对象 映射NTDLL到内存 创建线程内核对象 通知子系统对进程进行管理 启动线程初始化空间和加载其他DLL 跳转到入口处开始执行 CreateProcess api BOOL CreateProcess( LPCTSTR lpApplicationName, // name of executable module LPTSTR lpCommandLine, // command line string LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD BOOL bInheritHandles, // handle inheritance option DWORD dwCreationFlags, // creation flags LPVOID lpEnvironment, // new environment block LPCTSTR lpCurrentDirectory, // current directory name LPSTARTUPINFO lpStartupInfo, //……

Continue reading

进程和线程

进程和线程 什么是进程? 进程和普通计算机程序的区别 进程 是运行中的程序 进程 活在内存中 有血有肉有灵魂 程序 死在 硬盘上的 有肉没血没灵魂 如果进程是空间的概念,那么这段空间里有什么? 如果进程是空间概念,那么进程是怎么工作的? 进程和线程的关系 进程: 提供了必要的资源和空间 线程: 使用进程中的资源完成……

Continue reading

窗口与事件

窗口与事件 窗口 什么是窗口? Windows中称为视窗,是一个程序的操作显示界面 窗口执行动作是由什么驱动的? Windows中通过什么机制将发生的一些动作和响应的响应函数连接起来 事件消息机制 事件 用户操作或者Windows系统自身所产生的动作就是发生了什么,事件总是和一个ID有关 消息 就是……

Continue reading