Welcome to the first in a series of articles about writing secure code for the Win32 API, specifically for Windows 2000 (Win2K) and Windows NT. Although some of the topics also pertain to Windows 9x, these systems don't have the rich set of security features provided by the Windows NT-based line of OSs, so some columns in this series wont apply.
In this column, I'll focus on writing secure code using C and C++ because I'm most familiar with these programming languages. In addition, Microsoft used C and C++ to write Windows 2000 and Windows NT, and you can most easily access some of the OSs' security features using these languages. Finally, these languages are also the ones developers most commonly use to code commercial software.
So why not discuss Java or Visual Basic (VB)? Both languages make writing secure code easy by properly bounds-checking arrays, and Java has the nice automatic garbage-collection feature. To some extent, my choice to focus on C and C++ is
personal preference because only these languages provide such speed and full access to
system calls that I use on a daily basis. Unfortunately, one of the reasons C and C++
executables provide such speed is because these languages give you plenty of room to shoot
yourself in the foot. A friend of mine once said that if C lets programmers shoot
themselves in the foot, then C++ just gives them a machine gun! My experience is that
poorly written C++ code is often worse than poorly written C code. However, C++ provides
some convenient features and lets you write code that is better organized. I encourage
anyone entering a career as a developer to learn C++ thoroughly. This education is
essential to learning Distributed COM (DCOM), which developers are increasingly using to
interface with Win2K and NT.
Finding Resources
The discussions in this column assume that you have some
fundamental familiarity with basic programming techniques. If youre new to
programming in C or C++, I recommend that you start with a good reference. One of the best
titles available is A Book on C: Programming in C by Al Kelly and Ira Pohl (ISBN:
0201183994). Another good reference is C: A Reference Manual by Samuel Harbison and
Guy Steele (ISBN: 0133262243). Ira Pohl has also authored some excellent books on C++, and
if youre learning C++, make sure you spend some time getting to know the standard
template library (STL). STL simplifies many difficult tasksonce you get past the
learning curve. If you're already familiar with coding basics, a great reference that will
improve your coding skills is Writing Solid Code by Steve Macguire (ISBN:
1556155514). Even if youve been programming in C for 15 years, this book is worth
reading. Some of the best programmers I know have told me that theyve learned from
this text, and it's essential to anyone starting out. . . .