Ever since I discovered programming five years ago, I've done a lot of things. I've learned numerous programming languages and technologies and tried out many interesting things. I've written games, both console and with graphics, console and windowed applications that run in the desktop, CRUD web applications, my own (crappy) PHP XML-based flat file database. In addition to Web and desktop, I've tried mobile development with Android but didn't enjoy it, so I stopped that. I recently finished a Web project of mine and am learning functional programming right now (Haskell).
But I have never dabbled into system programming before. The idea of building software (I'm not even sure if that's the correct terminology to use for it) at a low level that interacts with the operating system seems interesting. The problem is, I'm not sure how exactly to get started, and need more examples of what I do with this.
Should I start by learning the Win32 API? I know some C++ as I've used it to make quite a few console apps and games, but haven't used it in a few years. Is that the way to go? Also, what about C? I am planning to learn some more about C (using the K&R book) before the summer ends and college starts. I want to get a good head start as a college freshman with a solid programming background.