[笔记] 《Windows核心编程(第5版)》

[第三章 内核对象]

  • 区分内核对象和用户/GDI对象的方法:几乎所有创建内核对象的函数都有一个允许指定安全属性的参数。
  • 句柄实际作为进程句柄表的索引来使用(句柄值为4的倍数,操作系统内部使用了最后类位)
  • 无论以什么方式创建的内核对象,都要调用CloseHandle关闭之(从进程句柄表中删除,内核对象本身不一定销毁,因为可能还有其他进程在用)。
  • 当进程终止运行,操作系统会确保此进程所使用的所有资源都被释放。这适用于所有内核对象、资源(包括GDI对象)以及内存块。
  • 世界上根本没有“对象继承”,Windows支持的是“对象句柄的继承”,换言之,只有句柄才是可以继承的,对象本身不能继承。
  • 内核对象的内容被保存在内核地址空间中——系统上运行的所有进程都共享这个空间。
  • 进程间共享内核对象的三种机制:使用对象句柄继承、为对象命名、复制对象句柄。


[第四章 进程]

  • 进程在终止后绝对不会泄露任何东西

[第六章 线程基础]

  • 进程从来不执行任何东西,它只是一个线程的容器。
  • 窗口只用一个线程
  • 新创建的线程可以访问进程内核对象的所有句柄、进程中的所有内存以及同一个进程中其他所有线程的栈。
  • 用_beginthreadex而不要用CreateThread创建线程
  • GetCurrentProcess和GetCurrentThread返回的是伪句柄,不会在主调进程的句柄表中新建句柄,也不会影响进程内核对象或线程内核对象的使用计数。可使用DuplicateHandke将伪句柄转换为真正的句柄。

[第七章 线程调度、优先级和关联性]

  • 任何线程都可以调用SuspendThread函数挂起另一个线程(只要有线程的句柄);线程可以将自己挂起,但无法自己恢复;一个线程最多可以挂起MAXIMUN_SUSPEND_COUNT(WinNT.h中定义为127)次。
  • Windows中不存在挂起和恢复进程的概念,因为系统从来不会给进程调度CPU时间。
  • 一种挂起进程的实现
  • 在Windows定义的所有数据结构中,CONTEXT结构是唯一一个特定于CPU的。
  • 任何时刻系统中大多数线程都是不可调度的
  • 优先级高的线程就是霸道
  • 线程优先级的使用范围
  • 系统对线程优先级的动态提升
  • 如果传一个变量的地址给函数,那么函数必须从内存中读取它的值,编译器的优化程序不会对此产生影响。——这种情况下可以不用volatile修饰


[第八章 用户模式下的线程同步]

  • 在调用EnterCriticalSection之前必须调用InitializeCriticalSection或InitializeCriticalSectionAndSpinCount(关键段与旋转锁结合)对CRITICAL_SECTION结构进行初始化
  • 线程同步机制性能比较


[第九章 用内核对象进行线程同步]


[第十五章 在应用程序中使用虚拟内存]


[第十七章 内存映射文件]

  • P447 使用共享段实现同一程序多个实例间的变量共享,可用来控制只允许运行一个实例(另一种方法是使用互斥量)。
  • 内存映射文件三部曲:CreateFile创建文件内核对象、CreateFileMapping创建文件映射内核对象、MapViewOfFile将文件的数据映射到进程地址空间


[第十八章 堆]

  • 一次只允许一个线程访问默认堆,自己创建的堆也最好如此规定(不使用HEAP_NO_SERIALIZE标签)。

  • 没弄明白
  • extern "C"
  • FreeLibraryAndExitThread


[第二十章 DLL高级技术]

  • DLL重定向
[第二十一章 线程局部存储区]
  • 应尽量避免使用全局变量和静态变量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值