Home > Sample chapters > Programming > Windows

Software Development in Windows

Summary

This chapter introduced some common terminology and also served as a very short and, admittedly, fast-paced introduction to important layers (Kernel, Executive, NTDLL, Win32, COM/.NET) in the Windows architecture and software development landscape. The following points are also worth remembering as you read the rest of this book:

  • Server and client Windows releases share a common kernel and follow a relatively similar release schedule, so it's important to know the client variant of each server release and vice versa. When this book states that a certain kernel feature is added in Windows 7, for example, it's also implied that the Windows Server 2008 R2 kernel has the same capability.
  • The CPU architecture of your OS (x86 or x64) is always important to know when performing debugging and tracing experiments.
  • When studying a new API set or platform feature, you should try to piece together an architectural diagram in your mind and understand where that new feature fits relative to the existing OS layers and development frameworks. This comes in handy when you later need to debug or trace the code in your software that uses the feature in question.
  • When analyzing development frameworks and whether to use them in building your software, you should also try to understand how they are implemented on top of the built-in OS services and what additional functionality they provide. This should help you make an informed choice as to what frameworks fit your scenario best and whether taking the dependency is worth the productivity benefits you would gain.

Many of the concepts discussed in this chapter will be revisited in practical debugging and tracing situations. If you are like me, you will find that these topics start hitting a lot closer to home, so to speak, once you get into the habit of using debugging and tracing to confirm your understanding of the theoretical background. So, don't hesitate to come back and consult this chapter again as you run the debugging and tracing explorations proposed in this book. You might want to double-check some of the theory that has been covered here.