C#/.NET vs Windows Native Code | Windows API vs. C Run-Time Library | Comments on the Windows API | Pthreads
Emulation
Download Examples Code. - Version 1.16 April 5, 2013
Last Update - July 25, 2014 (newer entries in red)
I'd like to express my appreciation to the many readers who have contributed to the information here, and I've cited
them whereever possible. Thank you for your assistance and your patience; the contributions have been extremely
helpful - JMH.
This page contains:
• Addtional Information and Errata for Windows System Programming, Edition 3
• Discussion of various topics of interest to me or readers (there is no intent to be inclusive) - These topics are still
relevant with
Windows System Programming, Edition 4
February 26, 2013. Windows and Kernel Versions. Windows 8 and Windows Server 2012. Pages 3-5 (and
elsewhere) discuss Windows version as well as the kernel versions. Since publication, Microsoft has released the new
versions listed above, which all use the updated Kernel, NT 6.2. Visual Studio 2012 is also available. The impact on the
book's topics is minor but worth mentioning.
All application programs will work on the new Windows versions.ll work on the new Windows versioThe Visual
Studio projects can be converted to VS 2012 as required.
NT 6.2 does add some welcome features which are mentioned as encountered elsewhere on this page. For
example, see Chapter 9 on slim reader/writer locks.
Please let me know of any experiences or information that may be of use to other readers.
In all cases, defects discussed in this section are fixed in the s, defects discussed in this section are fixed in the
Examples file. See the ReadMe.txt for a brief explanation of the latest updates.
May 17, 2010. Appendix C program execution times. See the Appendix C entry below for an important comment about
these results.
May 17, 2010. Building examples as C++. Gavin Brewer pointed out that there can be build problems if you build some
example files as C++ rather than C. This can happen, for example, if you change the source file suffix to .cpp from
.c. For more information, go to the Chapter 10 entry.
March 30, 2010. Kwan Ting Chan (KTC), along with several others, has pointed out that I do not use generic strings
and characters consistently in the Examples programs or in the book. There are many examples of this inconsistency; I
have fixed a large number in Examples Version 1.04 (I don't guarantee I found them all). KTC has done a very thorough
job, and, to use one of her favorite quotes, "Experience is a good school but the fees are high." (Heinrich Heine). Also,
see the ReadMe.txt file in the Examples file, including the new Bullet 5.
March 26, 2010. Program Bugs and Enhancements. Explanations with the chapters.
March 5, 2010. Windows 7. I've tested nearly all example programs on Windows 7; at the time of publication, only the
Release Candidate was available. As one would expect, there have been no problems. Furthermore, the performance
results are consistent with those in Appendix C. Nov 17, 2010. This remains true after much more experience.
March 5, 2010. Visual Studio 2010. I've converted and tested several examples without any problems. Nov 17, 2010 and
later. This remains true after much more experience.
March 10, 2010. Chapter 1, all programs, Bug. Balbir Singh <
bsingharora@gmail.com> pointed out (quite correctly) that
the introductory file copy programs set a bad example for two reasons:
Errors messages in all programs but Program 1-1 go to stdout, not stderr, Note: Programs elsewhere in the
book and Examples file use the ReportError() function, which does use stderr.
The input handle (or FILE *) is not properly closed if the output file open fails. Likewise, neither the input nor
the output handle is closed if the file copy fails for some reason. This is not a leak in these examples (the
process terminates and frees resources), but, in general, there would be leaks in a long-running program. It's
best to get in a good habit and close handles.
The Version 4 Examples file fixes the problems. Interestingly, I've used these examples for years, sometimes as a warm
up exercise in classes with very experienced engineers, and no one has ever complained. That does not make it right!
March 10, 2010. Chapter 2, Program 2-1. Mid page. The _T macro was omitted in the _tfprintf statement after the
eMsgLen test.
March 26, 2010. Chapter 2. Program 2-4 (and cci variations). BUF_SIZE is 256, which is too small for efficient
operation. 16384 or larger (use powers of 2) is about optimal. I've changed all the Examples cci variations as well as
the cpW program. This also applies to Program 1-2 (cpW).
April 24, 2011. Chapter 2, Program 2-5 (page 54, mid-page). The two statements after the if statement should be
indented and enclosed in braces.
{ va_end(pMsgList); return FALSE; }
The code in the Examples file is correct. Dylan Tu found this error.
March 10, 2010. Chapter 3, Page 63, Last Line. Comment. GetDiskFreeSpace() is now used in Chapter 5's version
program (Page 180) to display disk sector and cluster size. MSDN says that you should use GetDiskFreeSpaceEx()
for disks larger than 2GB (which would be nearly any modern device). However, the extended function returns
different information, and GetDiskFreeSpace() appears to work well on large disks.
March 10, 2010. Chapter 3, Page 65, Line 5. Mistake. SetEndOfFileEx does not exist; there is no need for an
extended function. Use SetEndOfFile.
March 26, 2010. Chapter 3, pp 75ff, Program 3-2 (lsW). Michael Bruestle (Austria) made a really important point.
The TraverseDirectory function maintains the current directory in a local variable which is kept on the stack
during the recursive traversal. This is very poor practice as it consumes a lot of space and there is a risk of stack
overflow (which, in turn, is a security risk - very bad). The problem would be aggravated and severe if we allowed
\?\ prefixed long path names (the current limit is MAX_PATH or 256). There's a corrected version in the Examples
file (Version 1.0.3, posted today) which corrects this problem and is also a lot simpler than the original. The new
version has a single array for the path name, which grows during the traversal and is restored after each recursive
call. Incidentally, lsReg (Program 3-4) and lsFP (used with Program 15-2) have the same problem; I did not fix them
(an exercise for the reader using the same techniques as in lsW).
July 8, 2010. Chapter 3, pp 75ff, Program 3-2 (lsW). Petr Kuzmic <
http://www.biokin.com> pointed out that
recursive listings through deep directory structures will someitmes omit the backslash and sometimes have two
backslashes in a row between directory names. Petr's fix was straightforward, and I added a few more adjustments.
JMH Associates http://www.jmhartsoftware.com/comments_updates.html
第1页 共5页 2014/10/16 9:33