自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (4)
  • 收藏
  • 关注

原创 windows核心编程之内核对象同步(3)

常规的等待内核对象的函数已经不用我说明了 我们来将内核对象做个纵向对比 现在我们要介绍一个用于等待子进程初始化的函数 DWORD WaitForInputIdle( HANDLE hProcess, //子进程句柄 DWORD dwMilliseconds // 超时时间 ); 该函数一直处于等待状态,直到子进程不再处理任何输入为止MsgWaitForMultipl

2017-09-29 15:16:16 186

原创 windows核心编程之互斥量对象

为什么非要把互斥量对象单独拉出来说下呢,因为,互斥量对象在特性方面与关键代码段特别相似互斥量对象的使用规则: 1.如果线程ID为0,则表示这个线程不被任何对象所拥有,此时,互斥量对象发出信号 2.如果ID不是0,就表示这个互斥量对象已经被某个线程所拥有,此时互斥量对象不会发出信号,等待函数也无法 3.特殊情况:当等待函数发现ID不是0时,系统会比较试图获取线程对象的ID和互斥对象中记录的ID是

2017-09-29 14:48:14 278

原创 windows核心编程之线程内核对象同步(2)

我们也可以创建一个内核定时器,等待定时器内核对象 创建函数 HANDLE CreateWaitableTimer( LPSECURITY_ATTRIBUTES lpTimerAttributes, BOOL bManualReset, LPCTSTR lpTimerName); lpTimerAttributes:安全属性,一般可以不管,如果考虑到继承性的话,需要设置此项

2017-09-28 23:24:55 165

原创 windows核心编程之线程内核对象同步(1)

如果要等待内核对象,我们必须要使用相关的函数家族 DWORD WaitForSingleObject( HANDLE hHandle, // 内核对象句柄 DWORD dwMilliseconds // 超时时间(ms) ); hHandle:内核对象的句柄(所有创建时带名字参数的都属于内核对象) dwMilliseconds:超时时间(ms),若是想永久等待,

2017-09-26 22:35:40 258

原创 windows核心编程之关键代码

先看一下下面的代码:#include <windows.h>#include <stdio.h>DWORD WINAPI FirstThread(LPVOID param);DWORD WINAPI SecondThread(LPVOID param);const int MAX_TIMES=30;int g_nIndex=0;DWORD g_dwTimes[MAX_TIMES];in

2017-09-21 20:52:15 1162

原创 CPU高速缓存行

高速缓存行:当一个数据需要反复使用的时候,我们就会把该数据读入CPU的高速缓存行(内存读取数据太慢),可以说高速缓存行大大提高了程序性能 但是在多处理器的计算机上,高速缓存行却有一个重大的问题 在芯片设计合理的情况下 假设,两个CPU需要读取同一个字节 1.CPU0读取一个字节,并把它写入CPU0的高速缓存行 2.CPU1读取一个字节,并把它写入CPU1的高速缓存行 3.CPU0修改这个

2017-09-21 16:36:30 1184

原创 windows核心编程之线程暂停和恢复

每个线程都有一个线程内核对象,内核对象里包含各种信息 该对象里有一个暂停计数,当暂停计数大于0的时候,线程暂停 DWORD SuspendThread( HANDLE hThread //线程句柄 );//这个函数可以暂停线程,使得暂停计数加1 DWORD ResumeThread( HANDLE hThread // 线程句柄 );//这个函数使得线程的暂停计数减1,

2017-09-21 16:17:20 1427

原创 windows核心编程之亲缘性

我们先来看张图: 假设这是一台电脑,这台电脑上,有3块插件板,12个CPU,3个内存 假设有1个线程,他可以在这12个CPU中的任何一个中运行,当CPU访问的内存是他自己插件板上的内存,运行的就快一些,否则就慢一些 所以,控制线程在某个特定的CPU或CPU子集上运行,这就叫做亲缘性我们可以限制某个进程在哪个CPU上运行 BOOL SetProcessAffinityMask( HA

2017-09-18 23:19:43 1781

原创 windows核心编程之线程同步与原子函数

多线程必然要考虑同步问题,先举个例子#include <windows.h>#include <stdio.h>DWORD WINAPI WorkThread1(LPVOID param);DWORD WINAPI WorkThread2(LPVOID param);long g_x=0;int main(){ CloseHandle(CreateThread(NULL,0,Wo

2017-09-18 16:17:33 605

原创 进程暂停

我们有SuspendThread函数,但大家发现,并没有SuspendProcess函数,其实,这跟windows操作系统时密切相关的(线程的变化非常快,我们无法预料) 下面我就提供一个SuspendProcess的版本,其实这跟我以前讲过的系统快照函数CreateToolhelp32Snapshot是有关的,要想写这个功能,必须列举某个进程的所有线程typedef HANDLE (WINAPI

2017-09-17 22:29:07 809

原创 CreateToolhelp32Snapshot详解

HANDLE WINAPI CreateToolhelp32Snapshot( DWORD dwFlags, DWORD th32ProcessID ); dwFlags: TH32CS_INHERIT :使用这个标志表示,这个快照句柄是可继承的TH32CS_SNAPALL :表示使用了以下的全部标志,总共四个TH32CS_SNAPHEAPLIST, TH32CS_SNAPMODU

2017-09-17 21:51:40 11177

原创 windows核心编程之线程补充

我们来看下着张结构图 CreateThread函数创建内核对象 SP:堆栈指针寄存器 IP:指令指针寄存器(这里待会做详细讲解) 其他CPU寄存器:存放其他若干数据的寄存器 使用次数:至少为1,若打开了线程内核对象,则使用计数会加1 暂停计数:若创建线程的时候使用了CREATE_SUSPEND,则计数从1开始,每次使用SuspendThread都会时暂停计数加1,如果暂停计数

2017-09-15 14:59:15 179

原创 windows核心编程之线程

线程的构成:内核对象和堆栈 1.内核对象 内核对象是一个数据结构 线程内核对象的结构示意图 SP:堆栈指针寄存器 IP:指令指针寄存器(这里待会做详细讲解) 其他CPU寄存器:存放其他若干数据的寄存器 使用次数:至少为1,若打开了线程内核对象,则使用计数会加1 暂停计数:若创建线程的时候使用了CREATE_SUSPEND,则计数从1开始,每次使用SuspendThread都会时暂

2017-09-15 11:17:25 240

原创 windows核心编程之作业

为了大家熟悉作业,我先介绍一下作业: 大家都知道,进程没有活性,只是线程的容器,那么我也可以类比一下,作业时什么,作业是进程的容器 由于windows的机制及其复杂,若一个进程生成了无数的子进程,我们能否在关闭父进程的同时关闭所有的子进程呢,答案是不能,子进程在生成的那一刻就已不受父进程的控制,所以无法控制这个过程,但是使用”作业”可以HANDLE CreateJobObject( LPS

2017-09-13 21:24:43 1092 7

原创 获得线程或者进程的真实句柄的方法

上章我们讲到伪句柄带来的一系列麻烦,那么怎么办呢 一个方法是使用duplicateHandle把伪句柄转化程实句柄 DuplicateHandle原本是进程间复制句柄的函数,原理其实很简单把一个进程的句柄复制到另一个进程句柄表 在这里我们要说下,什么是伪句柄,伪句柄返回了对象的引用,但是,在句柄表中查找不到该句柄,所以,可用,但是在句柄表中找不到的句柄是伪句柄,反之能在句柄表中找到的句柄是真实

2017-09-13 00:00:42 2541

原创 GetCurrentThread的伪句柄陷阱

今天写了个测试程序,想要看看线程的创建,退出内核模式时间,和用户模式时间#include <windows.h>#include <iostream>#include <process.h>using namespace std;unsigned int WINAPI WorkThread(void* param); typedef HANDLE (WINAPI * OPENTHRE

2017-09-12 23:46:26 2113 1

原创 句柄再谈

windows核心编程曾经提到过句柄表示的其实不是内核所在的地址 我们通过句柄的值就可以知道该句柄在句柄表中的位置,进而通过句柄表中这个位置的信息来对真正的内核对象进行操作 所以如果重复使用OpenProcess或者OpenThread打开相同的进程或者线程,每次得到的值都是不一样的 这就好比一张表,第一次我用OpenProcess打开了一个进程内核对象,在表的第1个位置插入了一个句柄,该句柄

2017-09-12 23:13:27 206

原创 PDH:获取系统计数器路径的方法

performance data helper库函数可以说是非常强大 如何获取计数器的路径呢,msdn讲述的规则可以说是非常的麻烦 当然,msdn也告诉我们可以使用 PdhBrowseCounters 函数来选择计数器,其实系统本身也有现成的程序给我们提供计数器路径首先运行perfmon.msc 打开之后是这样的 然后在如图所示菜单弹出的地方右键 点击”添加计数器” 弹出

2017-09-08 14:58:19 904

原创 程序的内核态和用户态

什么是内核态,什么是用户态 用户态是系统执行用户代码的时间 内核态是当用户调用了系统函数,程序就会跳转到系统DLL所在的空间,即内核空间,执行内核空间的代码所用的时间(这是我的理解,若有不对,望见谅) 那么怎样进入内核态呢? 1.调用系统函数,比如fork,CreateProcess等等 2.异常中断,一旦程序发生异常,就会进入异常处理程序,这当然是系统内核事先编写好的 3.外围设备中断

2017-09-06 22:54:15 410

原创 windows核心编程之进程(4)

进程的退出,前面已经描述过进程退出的最好办法是让进程从入口点函数返回 还有两个进程退出的函数 ExitProcess,TerminateProcess这两个函数都会导致程序退出时系统资源无法释放,比如c++对象之类的,但是ExitProcess只能使本进程退出,TerminateProcess不仅可以使本进程退出,还可使别的进程退出,只要你有这个进程的句柄 枚举进程:#include "std

2017-09-04 22:02:43 226

原创 windows核心编程之进程(3)

获取系统版本的函数: GetVersion返回一个DWORD类型的值,高子返回MS-DOS版本号,低字返回windows版本号 本来按照逻辑来说应该是低字的高字节返回windows的主版本号,低字节返回此版本号,但是编写该代码程序员犯了一个小错误,主版本号和次版本号的位置弄反了,高字节返回次版本号,低字节返回主版本号 由于GetVersion的混乱,MicroSoft推出了GetVersion

2017-09-04 20:09:27 264

原创 windows核心编程之进程(2)

加载到进程空间的每个可执行文件或者DLL均被赋予一个独一无二的实例句柄,许多函数都要用到这个值,比如LoadIcon,LoadBitmap,LoadImage等加载图片资源的函数等等,他们的第一个参数都要求是一个HINSTANCE或者HMODULE类型的参数,这个参数直接为NULL 也可以用LoadLibrary加载DLL文件或者Exe文件,记住,只是把exe文件加载到内存中,而不是执行这个exe

2017-09-03 14:26:08 203

原创 windows核心编程之进程(1)

进程的定义:正在运行的一个程序的实例 进程的构成:由进程对象和地址空间构成,进程对象负责存储进程的统计信息,地址空间存放着进程的代码和数据我对进程的理解,由于进程是不活泼的,活泼的是进程里面的线程。所以,进程相当于一个容器,只有里面有东西(线程),该容器才有存在的必要,如果里面的东西用光了(线程全部终止运行),瓶子就被回收(进程的地址空间就被系统回收或重新分配给新的进程)多任务抢占式操作系统:每个

2017-09-03 11:33:30 203

深度探索C++对象模型中文清晰版.rar

本书扫描版,但还是比较清晰的,对于想了解c++对象内部结构的同学来说,是本不 可多得的好书,如果觉得书不错,请给予正面评价,谢谢

2019-05-22

windows核心编程第7章 SchedLab

windows核心编程第7章,自编代码,无需用windows核心编程的库文件,如看这本书不懂的,可以下载下来看看,代码如有错误,请提出

2017-09-18

windows核心编程 JobLab.rar

windows核心编程附带的资源在win7上有些运行不畅(可能跟函数库有关系),我按照自己的理解重新写了一个,不需要原作者编撰的库

2017-09-13

金文老师的VB视频讲义.pdf

很多人看金文老师的VB视频教程却苦于没有讲义,我把这些放在这里

2015-01-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除