告示

《Pattern Hatching》中文版即将由人民邮电出版社出版。欢迎访问该书主页,阅读样章并提供意见和建议。

最新消息

《Windows via C/C++》中文版正式命名为《Windows核心编程(第5版)》,已于2008年9月由清华大学出版社出版。读者可以到互动出版网当当网等处购买。

如果读者在阅读过程中发现任何错误,欢迎来信指出,译者将非常乐意更正。

样章试读

章节 标题
第1章 错误处理
第4章 进程
第8章 用户模式下的线程同步
第13章 Windows内存体系结构
第19章 DLL基础
第23章 终止处理程序

请读者注意:以上提供的是各样章开头的部分,并非全部。

勘误表

版次 位置 原文 应更正为 日期 读者
第1版第1次印刷 第32页第1段第1行 AP API 2008/9/29 czwslc3
第1版第1次印刷 第715页第10行 #pragm chMsg(Fix this later) #pragma chMsg(Fix this later) 2008/10/13 sina_666
第1版第1次印刷 第77页第11行 Advanced System Settins Advanced System Settings 2008/10/16 sina_666
第1版第1次印刷 第256页表9-2第9行 TryEnterCriticalSection(&cs); WaitForSingleObject(hmtx, dwMilliseconds); 2008/10/26 georg.ji
第1版第1次印刷 第258页第2段第1行 它指向一个INNER_ELEMENT结构的数组 它指向一个ELEMENT结构的数组 2008/10/27 georg.ji
第1版第1次印刷 第275页第2段第3行 当线程发出一个步设备I/O请求的时候 当线程发出一个步设备I/O请求的时候 2008/10/27 georg.ji
第1版第1次印刷 第294页第4段第2行 大多数Windows函数返回TRUE来表示失败 大多数Windows函数返回FALSE来表示失败 2008/11/5 sina_666
第1版第1,2次印刷 第66页第2段第5行 它们一般不会创建窗口或进程消息 它们一般不会创建窗口或处理消息 2008/12/6 clement
第1版第1,2次印刷 第279页第2行表10-4标题 表10-4 GetFileType函数返回值 表10-4 可以传给CreateFile的dwDesiredAccess参数的通用标志 2008/12/21 fovov
第1版第1,2次印刷 第301页第1段第2行 Microsft对开发人员吹 Microsft对开发人员吹 2008/12/22 fovov
第1版第1,2次印刷 第105页第1段第1行 如果希望创建一个新线 如果希望创建一个新 2008/12/23 wocow3
第1版第1,2次印刷 第146页第2段第3行 要么由cbStack Size的值来指定 要么由cbStackSize的值来指定 2008/12/24 wocow3
第1版第1,2次印刷 第146页第2段第4行 调拨的存储器大小与传递的csStack Size参数值匹配 调拨的存储器大小与传递的cbStackSize参数值匹配 2008/12/24 wocow3
第1版第1,2次印刷 第146页第2段第5行 如果为cbStack Size参数传入0值 如果为cbStackSize参数传入0值 2008/12/24 wocow3
第1版第1,2次印刷 第34页第1段第3行 它们会根据该句柄在我们的进程句柄表的索引来引用,另一个进程中的完全不同的内核对象 它们会根据该句柄在我们的进程句柄表中的索引,来引用另一个进程中的完全不同的内核对象 2009/1/5 pchild
第1版第1,2次印刷 第34页第4段第2行 哪些用户和用户被允许访问或使用此对象 哪些和用户被允许访问或使用此对象 2009/1/5 pchild
第1版第1,2次印刷 第37页第3段第1行 下面列出了一些创建内核对象的函数 下面列出了一些用来创建内核对象的函数 2009/1/5 pchild
第1版第1,2次印刷 第666页第4段第7行 这里有一个一个无穷递归调用 这里有一个无穷递归调用 2009/1/6 zerothree
第1版第1,2次印刷 第202页第2段和第3段之间 PVOID IntelockedCompareExchange LONG IntelockedCompareExchange 2009/1/7 wocow3
第1版第1,2次印刷 第20页第4段第1行 将字符串"1234567890"复制到szBuffer 将字符串"0123456789"复制到szBuffer 2009/1/31 fovov
第1版第1,2,3次印刷 第66页第2段第2行 GUI程序一个图形化的前端。 GUI程序一个图形化的前端。 2009/2/28 KappaPanda
第1版第1,2,3次印刷 第237页第3段第3行 ...这个函数的第一个和第三个参数了 ...这个函数的第一个和最后一个参数了 2009/2/28 wocow3
第1版第1,2,3次印刷 第59页第2段第4行 ...复制hTarget ProcessHandle所标识进程的句柄表中 ...复制hTargetProcessHandle所标识进程的句柄表中 2009/3/1 KappaPanda
第1版第1,2,3次印刷 第59页第2段第5行 用来接收复制得到的HANDLE 用来接收复制得到的HANDLE 2009/3/1
第1版第1,2,3次印刷 第187页倒数第1段第3行 运行在后台优先级的线程可以在获得I/O请求的结果之前... 运行在后台优先级的线程可以在获得I/O请求的结果之前... 2009/3/10 leolee82
第1版第1,2,3次印刷 第187页倒数第1段第4行 ...则normal优先级线程可以在低优先级I/O请求完成之前运行,不等待后台优先级线程 ...则normal优先级线程可能必须等待后台优先级线程,直到低优先级I/O请求完成为止 2009/3/10 leolee82
第1版第1,2,3次印刷 第187页倒数第1段第5行 后台优先级线程甚至不再进行I/O,以免出现问题 后台优先级线程甚至不必发出I/O请求,都可能会出现这种问题 2009/3/10 leolee82
第1版第1,2,3次印刷 第187页倒数第1段第7行 ...以避免normal-优先级线程因为后台优先级线程拥有的锁而被阻塞 ...以避免normal优先级线程因为后台优先级线程拥有的锁而被阻塞 2009/3/10 leolee82
第1版第1,2,3次印刷 第722页第1行 /* Severity code */ (Severity ) | \ /* Severity code */ (Severity << 30) | \ 2009/3/19 zhh
第1版第1,2,3次印刷 第27页第3段 (1) 调用MultiByteToWideChar,为pWideCharStr参数传入NULL,为cchWideChar参数传入0,为cbMultiByte参数传入-1。 (1) 调用MultiByteToWideChar,为pWideCharStr参数传入NULL,为cchWideChar参数传入0,为cbMultiByte参数传入-1。 2009/5/1
第1版第1,2,3次印刷 第27页第4段 (2) 分配一块足以容纳转换后的Unicode字符串的内存。它的大小是上一个MultiByteToWideChar调用的返回值乘以sizeof(wchar_t) (2) 分配一块足以容纳转换后的Unicode字符串的内存。它的大小是上一个MultiByteToWideChar调用的返回值乘以sizeof(wchar_t) 2009/5/1
第1版第1,2,3次印刷 第27页第5段 (3) 再次调用MultiByteToWideChar,这一次将缓冲区地址作为pWideCharStr参数的值传入,将第一次MultiByteToWideChar调用的返回值乘以sizeof(wchar_t)后得到的大小作为cchWideChar参数的值传入。 (3) 再次调用MultiByteToWideChar,这一次将缓冲区地址作为pWideCharStr参数的值传入,将第一次MultiByteToWideChar调用的返回值乘以sizeof(wchar_t)后得到的大小作为cchWideChar参数的值传入。 2009/5/1 bobo
第1版第1,2,3次印刷 第27页第8段 对应地,WideCharToMultiByte函数将宽字符字符串转换为多字节字符串,如下所示: 对应地,WideCharToMultiByte函数将宽字符字符串转换为多字节字符串,如下所示: 2009/5/1
第1版第1,2,3次印刷 第79页第5行 PTCSTR pszSrc pszSrc PCTSTR pszSrc pszSrc 2009/5/1 bobo
第1版第1,2,3次印刷 第83页表4-4第5行 VER_PLATFORM_ WIN32_NT VER_PLATFORM_WIN32_NT 2009/5/1 bobo
第1版第1,2,3次印刷 第128页第4段第1行 其余两个成员ProcessMemoryLimitJobMemoryLimit分别限制着... 其余两个成员ProcessMemoryLimitJobMemoryLimit分别限制着... 2009/5/3 bobo
第1版第1,2,3次印刷 第194页第3,4段之间 DWORD_PTR dw Thread AffinityMask); DWORD_PTR dwThreadAffinityMask); 2009/5/6 bobo
第1版第1,2,3次印刷 第196页图 BOOT Advanced Options Process Affinity 2009/5/6 bobo
第1版第1,2,3次印刷 第202页第3段第3行 但在64位应用程序中,InterlockedCompareExchange对32位值进行操作而InterlockedCompareExchangePointer对64位值进行操作。 但在64位应用程序中,InterlockedCompareExchange对32位值进行操作而InterlockedCompareExchangePointer对64位值进行操作。 2009/5/6 bobo
第1版第1,2,3次印刷 第206页第2段第1行 那就是布尔变量g_fFinishedCalculation可能永远不会被设为TRUE。 那就是BOOL变量g_fFinishedCalculation可能永远不会被设为TRUE。 2009/5/6 bobo
第1版第1,2,3次印刷 第206页第5段第3行 编译器把布尔变量的值载入到CPU寄存器中 编译器把BOOL变量的值载入到CPU寄存器中 2009/5/6 bobo
第1版第1,2,3次印刷 第227页第5段第2行 我们不应该为所有的逻辑资源创建单独的锁 我们不应该为所有的逻辑资源创建一个单独的锁 2009/5/6 bobo
第1版第1,2,3次印刷 第268页第3,4段之间

// Perform some work. ... SetEvent(hEventWorkerThreadDone);

WaitForSingleObject(hEventMoreWorkToBeDone, INFINITE);

// Do more work. ...

// Perform some work.

...

SetEvent(hEventWorkerThreadDone);

WaitForSingleObject(hEventMoreWorkToBeDone, INFINITE);

// Do more work.

...

2009/5/10 bobo
第1版第1,2,3次印刷 第268页第3,4段之间

// Perform some work. ... SignalObjectAndWait(hEventWorkerThreadDone,

hEventMoreWorkToBeDone, INFINITE, FALSE);

// Do more work. ...

// Perform some work.

...

SignalObjectAndWait(hEventWorkerThreadDone,

hEventMoreWorkToBeDone, INFINITE, FALSE);

// Do more work.

...

2009/5/10 bobo
第1版第1,2,3次印刷 第269页表9-4表头 表9-4 WCF所记录的同步机制的类型 表9-4 WCT所记录的同步机制的类型 2009/5/10
第1版第1,2,3次印刷 第566页图21-1左下角 索引TLS_MINIMUM_AVAILABLE-2 索引TLS_MINIMUM_AVAILABLE-1 2009/5/31 bobo
第1版第1,2,3次印刷 第106页第2段第4行 每当有代码试图一个受保护的安全资源时时 每当有代码试图访问一个受保护的安全资源时 2009/6/9 LeoHuang
第1版第1,2,3次印刷 第724页倒数第1段第1行 我们不再需要记住那些晦涩难懂的Windows 我们不再需要记住那些晦涩难懂的Windows函数 2009/6/22 bobo
第1版第1,2,3次印刷 第725页第2段第4行 或者正好相反(高16位部分是通知码,低16位部分是控件ID)?我总是会忘记这些参数的具体含义 或者正好相反(高16位部分是通知码,低16位部分是控件ID)?我总是会忘记这些参数的具体含义 2009/6/22 bobo
第1版第1,2,3次印刷 第493页第3段第3行 当然,这会造成一种假象,使我们觉得链表的代码有缺陷。 当然,这会造成一种假象,使我们觉得二叉树的代码有缺陷,虽然事实上问题出在链表的代码中 2009/6/22 wocow3
第1版第1,2,3次印刷 第539页倒数第1段第3行 但是,老线程在创建新线程的时候,会导致系统向新线程的DllMain发送DLL_PROCESS_ATTACH通知,由于这时老线程尚未完成对DllMain的处理,因此新线程会被挂起。 但是,老线程在创建新线程的时候,会导致系统向新线程的DllMain发送DLL_PROCESS_ATTACH通知,由于这时老线程尚未完成对DllMain的处理,因此新线程会被挂起。 2009/6/27 wocow3
第1版第1,2,3次印刷 第277页表10-2第五行 CreateFile(pszName为"\\.\PHYSICALDRIVEx") CreateFile(pszName为"\\.\PHYSICALDRIVEx") 2009/7/12 bobo
第1版第1,2,3,4次印刷 第219页第2段第1行 线程0处理数号请求,线程1处理数号请求 线程0处理数号请求,线程1处理数号请求 2009/7/18 施博
第1版第1,2,3,4次印刷 第443页倒数第2段第1行 在上图中被标记为“New page 在上图中被标记为“新页面 2009/8/5 bobo
第1版第1,2,3,4次印刷 第640页表24-1第3行 EXCEPTION_EXECUTE_SEARCH EXCEPTION_CONTINUE_SEARCH 2009/8/5 black
第1版第1,2,3,4次印刷 第82页最后一段第2行 后者没有wServicePackMajor,wSuiteMask,wProductType和wReservedMembers成员 后者没有wServicePackMajor,wServicePackMinor,wSuiteMask,wProductType和wReservedMembers成员 2009/12/20 zxueh
第1版第1,2,3,4次印刷 第130页表5-4第3行 指定要禁止对哪些SID进行访问访问检查 指定要禁止对哪些SID进行访问访问检查 2010/1/6 周靖
第1版第1,2,3,4次印刷 第14页样例代码第4行 #define __TEXT(quote) quote // r_winnt #define __TEXT(quote) quote // r_winnt 2010/1/24 周靖
第1版第1,2,3,4次印刷 第14页倒数第1行 如果一个Windows函数的数列表 如果一个Windows函数的数列表 2010/1/24 周靖
第1版第1,2,3,4次印刷 第168页第2版段第2行 可能创建一个新的 可能创建一个新的线 2010/2/5 wyong27

联系译者

请输入你的昵称:

   

请输入你的电子邮件地址:

   

请输入要发送的内容: