Windows核心编程
文章平均质量分 80
疯狂-的-蜗牛
https://github.com/JelinYao
展开
-
Windows核心编程笔记(5)----线程调度,优先级
1、操作系统线程调度过程每个线程都有一个上下文CONTEXT结构体,保存在线程的内核对象中,这个上下文中保存了线程上一次执行时CPU寄存器的状态。每隔固定时间,Windows会查看所有当前存在的线程内核对象,其中只有一些是可调度的。Windows在可调度的线程中选择一个,并将上次保存到线程上下文中的数据载入CPU寄存器中。(上下文切换)CPU时间片到后,Windows移出这个线程,原创 2015-01-28 11:12:01 · 2850 阅读 · 0 评论 -
Windows核心编程笔记(4)----线程
1、进程与线程 进程是惰性的,从来不执行任何东西,它只是一个线程的容器。线程必定是在某个进程的上下文中创建的, 而且其生命周期都在该进程中。因为句柄表是针对每一个进程的,因此同一个进程中的多个线程可以共享 内核对象句柄。进程运行需要占用许多的内存资源(加载DLL等),进程只需要一个内核对象和一个进程栈, 无需占用多少内存。2、终止线程的几种方式: 2.1线程函数返回(强烈推荐) 2.原创 2015-01-27 15:26:29 · 867 阅读 · 0 评论 -
windows核心编程之使用线程APC回调安全退出多个等待线程
前言程序开发中经常遇到需要这些情况:辅助线程正在等待内核对象的触发,主线程需要强制终止辅助线程。我们常常做的就是使用:TerminateThread来强制终止线程。这样做当然是不太好的,强制终止线程后系统不会销毁此线程的堆栈,长久下去内存泄露问题就会很严重了。线程最安全的退出方式当然还是让它自己返回了。本文主要介绍windows核心编程中介绍的一种安全退出线程方式:使用可等待API等待内核对象原创 2015-03-16 12:49:14 · 2657 阅读 · 0 评论 -
Windows上CAtlFileMapping共享内存的使用以及内部机制
前言:使用CEF加载网页,做JS与C++交互时,需要向主窗口发送一些消息来通知界面做相应的处理。但是,由于CEF使用chrome内核是多进程架构的,渲染引擎与主程序都不在同一个进程里面。因此,理所当然的就想到了使用共享内存了。为了更容易地使用,我们选择的是ATL里面封装的共享内存操作类:CAtlFileMapping。CAtlFileMapping使用:定义结构体,包含你所需要共享的数原创 2015-03-19 11:06:34 · 2546 阅读 · 2 评论 -
Windows核心编程笔记(3)----作业
/*1、如果进程已经与一个作业相关联,就无法将当前进程及其任何子进程从作业中移除,这个安全特性可以保证/* 进程无法摆脱对它施加的限制。/*2、在调试程序时,调试器是从资源管理器启动的,程序会从调试器继承带“PCA”前缀的作业。因此,调试程序/* 时总是显示进程已经加入了作业。使用命令行来运行程序时就不会有这个问题了。/*3、关闭一个作业对象,并不会终止作业内所有的进程。作业对象实际上只是原创 2015-01-26 15:59:14 · 864 阅读 · 0 评论 -
Windows核心编程笔记(7)----内核模式下的线程同步
1、内核对象同步与用户模式下同步对比使用内核对象的唯一缺点就是性能,调用内核对象函数时,调用线程必须从用户模式切换到内核模式,这种切换是相当耗时的。内核对象(进程、线程、作业)要么处于触发态,要么处于未触发状态。进程内核对象在创建时总是处于未触发状态,当进程终止时,操作系统会自动使进程内核对象变成触发状态。当进程内核对象处于触发状态后,将永远保持这种状态,再也不能变回未触发状态原创 2015-03-01 10:07:10 · 1783 阅读 · 0 评论 -
Windows异步过程调用(APC)
原文转载自:http://blog.sina.com.cn/s/blog_6c617ee301017nhr.html,感谢原作者。apc可以看成就是内核里的定时器,为了给自己一个在本函数返回后还能执行的一次机会,有很多操作是需要在函数返回后才能执行.类似于析构函数但不完全是。apc的最大特点就是在本函数返回后才执行,而且是在本线程中。而内核提供的原生的定时器,执行的转载 2015-03-01 10:09:59 · 4413 阅读 · 1 评论 -
Windows核心编程笔记(1)----句柄
Windows内核句柄的内部机制(创建、销毁、复制),Win32编程不能不看的基础知识。原创 2015-01-12 14:24:08 · 1417 阅读 · 0 评论 -
Windows核心编程笔记(2)----进程
6 进程实例句柄6.1 每一个EXE或者DLL被加载到内存中后,都会被赋予一个独一无二的句柄(HINSTANCE),该句柄在WinMain函数调用时传入。获取应用程序相关信息(资源、路径)时,有的需要传入HINSTANC有的需要传入HMODULE,实际上HINSTANC与HMODULE完全是一回事,这是16位Windows系统上不同数据类型造成的。WinMain函数的第一个参数:实例句柄是原创 2015-01-14 14:23:04 · 992 阅读 · 0 评论 -
Windows核心编程之创建可等待定时器及其APC回调
创建可等待定时器是Windows内部线程同步的方式之一,本文简单讲述如何使用这一内核对象进行线程同步。创建对象://创建事件内核对象,默认未触发状态 HANDLE hTimer = CreateWaitableTimer(NULL, TRUE, NULL);设置对象属性:CreateWaitableTimer创建完成后内核对象处于未触发状态,需要使用API BOOL WIN原创 2015-02-27 17:40:59 · 3308 阅读 · 0 评论 -
Windows核心编程笔记(6)----用户模式下的线程同步
1、原子锁使用InterlockedExchangeAdd函数来实现原子增长,InterlockedExchange\InterlockedExchangePointer用来交换两个变量的值,InterlockedCompareExchange对比数值,相等则交换(对应的InterlockedCompareExchangePointer)。对应的还有64位函数。Interlocke原创 2015-01-29 15:04:51 · 1311 阅读 · 2 评论 -
Windows消息机制详解
文章转载自:http://www.cppblog.com/suiaiguo/archive/2009/07/18/90412.html,感谢原作者。消息是指什么? 消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉。一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向 Windows发出一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺转载 2015-03-09 15:35:55 · 5084 阅读 · 0 评论