原文链接1 原文链接2
1.进程的环境变量
每个进程都有一个与它关联的环境块(environment block),这是在进程地址空间内分配的一块内存,其中包含字符串类似于:
=::=::\...
VarName=VarValue\0...
\0
除第一个=::=::\外,块中可能还有其他字符串是以等号开头的,这种字符串不作为环境变量使用。
访问环境块...
1、原子锁
使用InterlockedExchangeAdd函数来实现原子增长,InterlockedExchange\InterlockedExchangePointer用来交换两个变
量的值,InterlockedCompareExchange对比数值,相等则交换(对应的InterlockedCompareExchangePointer)。对应的
还有64位函数。
Interlocke...
分类:
编程语言 时间:
2015-01-29 16:01:57
阅读次数:
233
1、操作系统线程调度过程
每个线程都有一个上下文CONTEXT结构体,保存在线程的内核对象中,这个上下文中保存了线程上一次执行时CPU寄存器
的状态。每隔固定时间,Windows会查看所有当前存在的线程内核对象,其中只有一些是可调度的。Windows在可调度的
线程中选择一个,并将上次保存到线程上下文中的数据载入CPU寄存器中。(上下文切换)
CPU时间片到后,Windows移出这个线程,...
分类:
编程语言 时间:
2015-01-28 13:10:00
阅读次数:
220
1、进程与线程
进程是惰性的,从来不执行任何东西,它只是一个线程的容器。线程必定是在某个进程的上下文中创建的,
而且其生命周期都在该进程中。因为句柄表是针对每一个进程的,因此同一个进程中的多个线程可以共享
内核对象句柄。进程运行需要占用许多的内存资源(加载DLL等),进程只需要一个内核对象和一个进程栈,
无需占用多少内存。
2、终止线程的几种方式:
2.1线程函数返回(强烈推荐)
2....
分类:
编程语言 时间:
2015-01-27 16:26:54
阅读次数:
215
/*1、如果进程已经与一个作业相关联,就无法将当前进程及其任何子进程从作业中移除,这个安全特性可以保证
/* 进程无法摆脱对它施加的限制。
/*2、在调试程序时,调试器是从资源管理器启动的,程序会从调试器继承带“PCA”前缀的作业。因此,调试程序
/* 时总是显示进程已经加入了作业。使用命令行来运行程序时就不会有这个问题了。
/*3、关闭一个作业对象,并不会终止作业内所有的进程。作业对象实际上只是...
[C++]《Windows核心编程》读书笔记 这篇笔记是我在读《Windows核心编程》第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入,但应该是合理的。开头几章由于我追求简洁,往往是很多单独的字句,....
6 进程实例句柄
6.1 每一个EXE或者DLL被加载到内存中后,都会被赋予一个独一无二的句柄(HINSTANCE),该句柄在WinMain函数调用时传入。获取应用程序相关信息(资源、路径)时,有的需要传入HINSTANC有的需要传入HMODULE,实际上HINSTANC与HMODULE完全是一回事,这是16位Windows系统上不同数据类型造成的。
WinMain函数的第一个参数:实例句柄是...
Windows内核句柄的内部机制(创建、销毁、复制),Win32编程不能不看的基础知识。...
Windows内核句柄的内部机制(创建、销毁、复制),Win32编程不能不看的基础知识。...
为了支持Unicode编码,需要多字节与宽字节之间的相互转换。这两个系统函数在使用时需要指定代码页,在实际应用过程中遇到乱码问题,然后重新阅读《Windows核心编程》,总结出正确的用法。WideCharToMultiByte的代码页用来标记与新转换的字符串相关的代码页。MultiByteToWid...
分类:
其他好文 时间:
2015-01-07 23:34:17
阅读次数:
208