yogy 发表于 2007-5-20 08:50:41

<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
页: [1]
查看完整版本: &lt;Windows核心编程&gt;学习日志