Досадные описки и ляпы
1) "Флаг HANDLE_FLAG_PROTECT_FROM_CLOSE [передаваемый функции SetHandleInformation – KK] сообщает системе, что данный описать закрывать нельзя… Если какой-нибудь поток попытается закрыть защищенный описатель, CloseHandle приведет к исключению" стр. 15
Какое – такое – исключение? CloseHandle всего лишь вернет NULL, сигнализируя об ошибке…
2) "DuplicateHandle(GetCurrentProcess, hObjProcessA, hObjProcessB, &hObjProcessB….)" стр. 21
Опечатка – третий аргумент должен быть hProcessB.
3) "Кроме адресного пространства, процессу принадлежат такие ресурсы как файлы…" стр. 23.
Файл – объект ядра и принадлежит ядру, но не процессу.
4) "В Windows 95 функции CreateFileMapping можно передать флаг PAGE_WRITECOPY…" стр. 170
Пропущено слово "только", ибо других флагов Windows 95, увы, не поддерживает!
5) "PAGE + WRITECOPY" стр. 174
Досадная опечатка – конечно же должно быть PAGE_WRITECOPY.
6) "Обычно критические секции представляют собой набор глобальных переменных" стр. 220.
Критические секции – не переменные! Структуры CRITICAL_SECTION, передаваемые им, действительно часто хранятся в глобальных переменных, но это – дурной тон и гораздо лучше размещать их в куче или структуре данных, передаваемой синхронизуемым потокам через lpvThreadParam.
7) "имена файлов и каталогов могут включать буквы разного регистра, но при поиске файлов и каталогов регистр букв не учитывается. Если файл с именем ReadMe.txt уже существует, создание нового файла с именем README.TXT уже не допускается" стр. 416
Тут Рихтер противоречит сам себе – страницей назад от утверждал, что NTFS различает регистр символов, а главой вперед – чтобы заставить ее делать это, достаточно воспользоваться флагом FILE_FLAG_POSIX_SEMANTICS.
8) "…система создает для нового процесса виртуального адресное пространство размером 4 Гб и загружает в него код и данные как для исполняемого файла, так и для любых DLL" стр. 36
Не загружает, а проецирует. Разница принципиальна! Загрузка подразумевает считывание с диска и записи в память, но Windows поступает умнее – исполняемый файл и DLL трактуются как часть виртуальной памяти (о чем позднее сам же Рихтер и рассказывает в главе "Проецируемые в память файлы").