<Windows核心编程>学习日志
<Windows核心编程>
第3章 1)从注册表中读取RegOpenKeyEx KEY_QUERY_VALUE //查询 KEY_ALL_ACCESS // 不安全 2)创建内核对象的所有函数几乎都有一个参数,用于设定安全属性 3)WaitForInpuIdle 让父进程等待子进程完成初始化 第八章 8.1 原子访问:互锁 P173 InterLockedExchangedAdd(PLONG plAddend, LONG lIncrement); //以原子操作方式来递增 8.2 高速缓存行 P177 始终都让单个线程来访问数据(函数参数和局部变量是确保做到这一点的最好方法). 线程亲缘性 8.3 高级线程同步 P179 不应该在单处理器计算机上使用循环锁,甚至在多处理器计算机上,也小心使用他们. Volatile BOOL g_fFinishedCalculation; 8.4 关键代码段 P180 CRITICAL_SECTION g_cs; EnterCriticalSection (&g_cs); LeaveCriticalSection (&g_cs); 8.5 关键代码段准确的描述 P182 InitializeCritialSection (PCRITICAL_SECTION pcs); EnterCritialSection(PCRITICAL_SECTION pcs); VOID DeleteCriticalSection(PCRITICAL_SECTION pcs); //删除对该结构中的成员变量 1) 堆栈 P452 将ANSI字符串转换成Unicode字符串时, ANSI函数必须分配一个内存块,以便放置Unicode版本的字符串。 2) 为什么要创建辅助堆栈? P452 1.保护组件 2.更加有效地进行内存管理 3.进行本地访问 4.减少线程同步的开销 5.迅速释放 3)如何创建辅助堆栈? P454 HeapCreate() 4)从堆栈中分配内存块 P455 HeapAlloc VirtualAlloc 5)内存映射 P397 CreateFileMapping和MapViewOfFile 6)缓存 P409 7)虚拟内存的状态 P333 GlobalMemoryStatus() GlobalMemoryStatusEx(); // 内存大于4G 8)确定地址空间的状态 P336 VirtualQuery VirtualQueryEx // 查询另一个进程的内存信息 9)两个应用程序之间共享数据? P300 采用预编译指令#pragma data_seg在DLL文件中创建一个新的段,并且在DEF文件中把该段的属性设置为“shared” #pragma pack 10)虚拟地址空间? P300 11)获得3GB用户方式分区 BOOT.ini 12)数据对其的重要性 P319 2) 第23章 1) 内联函数 P575 2) 产生内联(inline)代码,而不是生成调用函数的代码 第25章 1) 虚拟内存技术 2) 结构化异常 3) 异常代码在winError.h文件中定义 4) 异常写到日志或弹出一消息框 5) 与内存有关的异常 EXCEPTION_ACCESS_VIOLATION 线程试图对一个虚地址进行读和写,但没有做适当的存取。 附录B B.1 消息分流器 P686 // 扩展代码的可读性 B.2 Pragma消息帮助宏 P676 #Pragma chMSG(Fix this later) 实用技巧 1) @err,hr 放在watch窗口,将显示线程的最后错误代码的号码和该错误的英文描述. 2) Error Loopup Visual Studio 小实用程序将错误代号转换成相应的文本描述. 效率 1) 字符串的转换,需要占用大量内存,统一使用Unicode字符串 COM仅支持Unicode |
所有的时间均为北京时间。 现在的时间是 08:14 AM. |