on 16 April 2014
I've had this book for about a year and it's ideal, if not indispensable for anyone using Windows threading. BUT, there is one important, potentially critical error (about which I emailed the author, without reply).
He sets great store by the SignalObjectAndWait() function, which indeed would be a threading-panacea if it were as he describes it on p343 - "The signal and wait are atomic so that no other thread can possibly signal the event...". However the Microsoft site describes it differently "Note that the "signal" and "wait" are not guaranteed to be performed as an atomic operation."
This is in no way to decry the overall usefulness of this book, but I feel it my duty to point out a weakness that could lead to damaging consequences, if SOAW be applied directly as described by the author.
on 7 December 2010
I read this book from the perspective of an experienced .NET developer with very little knowledge of the Windows API. I liked the author's pace; the initial introduction to the Windows API structure and conventions was detailed enough for me to understand everything without causing me to lose interest through repetition or over-simplification. The examples throughout the book were clear and concise, and illustrated the subject matter well. The reading lists were germane and referenced high quality texts - some of which have made their way onto either my bookshelf or wish list. I find it much easier to grasp concepts by "doing" rather than merely reading, so I was extremely pleased with the exercises - these were well thought out and helpful, and certainly accelerated my learning.
Many of the concepts addressed in this text are familiar to me (multi-threading, security, etc), but only as implemented through the .NET framework. Even if I never write any production code in these areas, it's made me a better .NET developer now that I have a more in-depth understanding of the Windows API. I would absolutely recommend this book to .NET software engineers - even if you never write a line of code against the Windows API directly, it will give you a much broader understanding of what Windows is doing at a lower level. Just ensure that you have at least a basic understanding of C first - this is a prerequisite.