Windows核心编程

Jeffrey Richter

出版时间

2008-07-31

ISBN

9787115182128

评分

★★★★★

标签

计算机

书籍介绍

【内容简介】

本书是Windows 程序设计领域的名著,涵盖了Windows 的最新版本Vista 以及Windows XP 的最新内容。书中全面深入地介绍了Windows 的各种基本要素,如进程、线程池、虚拟内存、DLL、设备I/O 和SEH 等,并列举了大量应用程序,精辟地分析了要素的使用方法。.

本书适于各层次Windows 编程人员阅读。 ...

【目录信息】

Acknowledgments . xxi

Introduction xxiii

64-Bit Windows xxiii

What’s New in the Fifth Edition xxiv

Code Samples and System Requirements xxvi

Support for This Book xxvi

Questions and Comments xxvi

Part I Required Reading

1 Error Handling 3

Defining Your Own Error Codes 7

The ErrorShow Sample Application 7

2 Working with Characters and Strings 11

Character Encodings 12

ANSI and Unicode Character and String Data Types 13

Unicode and ANSI Functions in Windows 15

Unicode and ANSI Functions in the C Run-Time Library 17

Secure String Functions in the C Run-Time Library 18

Introducing the New Secure String Functions 19

How to Get More Control When Performing String Operations 22

<< 查看详细目录

AI导读
核心看点
  • 跨进程共享内核对象:命名、句柄复制与继承机制
  • Windows错误处理与字符编码转换的精要
  • 线程与进程基础:内核对象、栈及同步技巧
适合谁读
  • Windows平台C/C++程序员深入系统编程
  • 希望掌握内核对象与内存管理的开发者
  • 需要理解Windows内部机制的进阶学习者
读前提醒
  • 先掌握操作系统基础概念再读更高效
  • 建议结合《Windows Internals》补充背景
  • 准备多次阅读,重点消化前21章实践
读者共识
  • Windows编程必读经典,内容全面而深刻
  • 多次研读方能领悟内核对象与线程奥秘
  • 部分章节(如SEH)可选择性学习,不影响主干

本导读基于书籍简介、目录、原文摘录、短评和书评生成,不等同于全文精读。

精彩摘录
  • "垮进程边界共享内核对象的第二个办法是为对象命名。许多(但不是全部)内核对象都可以进行命名。 CreateMutex,CreateEvent,CreateSemaphore,CreateWaitableTimer,CreateFileMapping,CreateObject这些API都可以创建命名的内核对象。 用于创建内核对象的函数总是返回具有完全访问权限的句柄。如果想限制一个句柄的访问权限,可以使用这些函数带Ex后缀的扩展版本。 通过名称来创建内核对象共享时,请注意:进程B调用CreateMutex时,它向函数传递安全属性信息和第二个参数。如果已经存在一个指定名称的对象,这些参数就会被忽略。事"
  • "在正在运行终端服务的计算机中,有多个用于内核对象的命名空间。其中一个是全局命名空间,所有客户端都能访问的内核对象要放在这个命名空间中。这个命名空间主要由服务使用。此外每个客户端会话(Client Session)都有自己的一个命名空间 一个服务的命名内核对象始终位于全局命名空间内的。默认情况下,在终端服务中,引用程序自己的命名内核对象在会话的命名空间内。我们可以强制把一个命名对象放入全局命名空间,做法是在其名称前加入“Global\”前缀,同理,可以把一个命名对象放入当前会话的命名空间,做法是在其名称前加入“Local\”前缀。 CreateEvent(NULL,FALSE,FALSE,TEX"
  • "创建一个内核对象时,可以传递一个安全描述符指针,从而保护该对象的访问。不过在windows Vista以前,不可能防止一个共享对象的名称被“劫持”。任何进程,即使是最低权限的进程都能用任何指定的名称来创建一个对象。这样就很容易另外写一个应用程序来创建一个同名的内核对象。如果它先于单实例应用程序启动,那么单实例的应用程序就变成了无实例的应用程序-------始终一启动就退出,错误地认为它自己的另一个实例已经在运行。这就是DOS攻击的基本机制。但是注意,未命名的内核对象不会遭到DOS攻击。未命名的对象是不能在进程之间共享的。 CreatePrivateNamespace创建一个专有的命名空间。"
  • "跨进程边界共享内核对象的最后一招是使用DuplicateHandle,简单的说,这个函数获得一个进程的句柄表中的一个记录项,然后在另一个进程的句柄表中创建这个记录的一个副本。"
  • "第1章 错误处理 P3 常见Windows函数返回值数据类型:VOID, BOOL, HANDLE, PVOID, LONG/DWORD P4 DWORD GetLastError(); 返回由上一个函数调用设置的线程的32位错误代码 (WinError.h) 在Visual Studio 的Watch窗口中使用$err,hr来查看当前线程的“上一个错误代码” P6 FormatMessage 第2章 字符和字符串处理 P21 _countof //errno_t result = _tcscpy_s(szBuffer, _countof(szBuffer), TEXT("0123456789"
  • "P36 进程内核对象句柄表:只是由数据结构组成的数组,每个数据结构包含指向一个内核对象的指针,一个访问掩码和一些标志。 P38 注意创建一个新内核对象后返回的句柄,有可能是NULL,也有可能是INVALID_HANDLE_VALUE P40 假定忘记调用CloseHandle,会发生对象泄漏的情况吗?嗯,不一定。 P42 3种不同的机制允许进程共享内核对象:1使用对象句柄继承,2为对象命名,3复制对象句柄 P44 对象句柄的继承只会在生成子进程的时候发生。之后父进程又有什么新的句柄被创建跟子进程无关,不会被继承。 子进程并不知道自己继承了任何句柄。 P46 改变句柄的标志 SetHandleI"
  • "P101 调用ExitProcess或ExitThread会导致进程或线程直接终止运行——再也不会返回当前函数调用。 P101 只有在无法通过其他方法来强制进程退出时,才应使用TerminateProcess 一旦进程终止,系统会保证不留它的任何部分。绝对没有任何办法知道那个进程是否运行过。进程在终止后绝对不会泄漏任何东西。 P104 Windows提供了几种方式在不同进程之间传递数据,DDE,OLE,管道,邮件槽;共享数据最方便的方式之一就是使用内存映射文件。 P105 独立的进程:一旦进程创建并开始执行,父进程就不再与新进程通信,或者不用等它完成工作之后才继续自己的工作。 P111 Cre"
  • "P131 作业中的进程可以调用QueryInformationJobObject获得其所属作业的相关信息 第6章 线程基础 理解线程跟进程的区别( 进程:一个内核对象,一个地址空间 ) 理解如何用线程内核对象来管理线程 P140 每个进程至少都有一个线程 线程也有2个部分组成:1线程的内核对象,2线程栈。几乎不涉及记录活动,不需要占用多少内存 线程要在其进程的地址空间内执行代码和处理数据。共享内核对象句柄 P144 创建新线程CreateThread"
作者简介
Jeffrey Richter全球享有盛誉的微软技术专家,著名技术咨询和培训公司Wintellect创始人之一,MSDN Magazine杂志特邀编辑。多年来,他担任微软各开发团队顾问,参与了微软的许多关键产品包括各版本Windows、Visual Studio、Microsoft Offce和.NET框架的设计和编程。他撰写了一系列著作,包括本书和《深入理解.NET》(第2版·英文版,人民邮电出版社。2008),都堪称技术图书的典范,影响了一代Windows程序员,并因此荣获微软公司杜区最高技术荣誉“微软软件传奇人物”(Software Legend)称号。
目录
Part I Required Reading
1 Error Handling
Defining Your Own Error Codes
The ErrorShow Sample Application
2 Working with Characters and Strings

显示全部
用户评论
windows c/c++程序员必读
重拾童年记忆...
最初是被API Hooking吸引来的,不过坚持到最后,收获颇丰,今后可以为所欲为了
如果只保留前21章,对读者的时间效率会更友好。最后结构化异常处理的一部分,一般开发中几乎用不到,尤其是C++本身已支持异常处理。第22章关于DLL注入和API Hook的部分适合别的书来讲。然而仅冲前面21章也值得打五星的。
写的真好。
windows程序员必看
收藏