实在抱歉,因为图床的原因,可能文章中的某些图片看不到,如果需要查看相关图片,请联系我,或者到我的公众号里查看。
我的个人微信号是 BianChengNan
,公众号是 编程难
。
前一阵子,我在编写文件变化监控程序的时候遇到了文件被占用的问题。很早之前写过一篇关于 CreateFile
函数的 dwDesiredAccess
和 dwShareMode
参数的笔记。我发现之前的理解不够全面、准确。为了更好的理解这两个参数的作用,我搜索了大量资料,编写了测试程序及测试脚本,参考了 xp
源码,终于搞清楚这两个参数的作用。简而言之,需要遵循以下两个规则:
规则 1:后续的访问权限与先前的共享模式不能冲突。
规则 2:后续的共享模式与先前的访问权限不能冲突。
如果你对下面的几个问题有明确的答案并且清楚的知道原因,那么可以跳过本文了。
很早之前,我遇到过几个与栈相关的问题,当时总结过几篇关于线程栈的文章,分别是 《栈大小可以怎么改?》、《栈局部变量优化探究,意外发现了 vs 的一个 bug ?》、《栈又溢出了》、《有趣的异常》。在这几篇总结中,简单的总结了栈溢出的原因,设置线程栈大小的方法。但是还有一点没弄清楚:操作系统是怎么知道一个线程的栈大小的?一定记录在某个位置了,否则就不能正确的在栈溢出的时候抛出异常了。不能根据 PE
头中的字段判断,因为在创建线程的时候可以指定线程栈大小。TEB
中的 StackLimit
是真正的栈底吗?带着这些疑问一起来刨根问底吧~
友情提示:结论在文章末尾。
在 Windows
中,通过 RegisterWindowMessage() 注册的消息,其消息 ID
在 0xC000 ~ 0xFFFF
之间。可以使用 GetClipboardFormatName() 根据消息 ID
反向查找已注册消息的名称。