Posted by: Sue Loh
I am occasionally asked whether I know any good books or other resources to help learn about Windows CE internals, APIs, and more. I wish we had the Windows CE equivalent of the deep Windows Internals books written by Russinovich and Solomon. But we don't. There is an old book, "Inside Microsoft Windows CE," which I believe was Microsoft Press' attempt to take the same type of look at Windows CE. But it was written about CE 3.0; it was hot off the presses when I started working at Microsoft back in 1999. Needless to say, it's a little outdated now. I heard a rumor years ago that MS-Press refuses to do another revision because that book didn't sell enough copies. I don't know if that's true. Anyway, it's probably still not a bad introduction for a newcomer; many of the concepts in that book are still the same in Windows CE today. Plus you get the added bonus of seeing pictures of some people who now don't have quite so much hair.
I hesitate to list other books because I must confess, I haven't read any of them. But the major ones I see out there are:
- "Programming Microsoft Windows CE" by Doug Boling. This book is about how to write applications for Windows CE (managed and native).
- A new (2007) book, Microsoft Mobile Development Handbook, also teaches how to build applications for mobile devices.
- Jim Wilson's "Building Powerful Platforms with Windows CE" is starting to get a little dated too, but it is the only OEM-level book I know about.
- If you are interested in writing managed code for Windows Mobile, you may want to take a look at ".NET Compact Framework Programming with C#" by Paul Yao and David Durant, and "Microsoft .NET Compact Framework (Core Reference)" by, well, a bunch of people I don't know.
Doug, Jim and Paul are all very knowledgeable about Windows CE.
[UPDATE: 4/2/2009] I am updating this article to mention a new important book, "Windows Embedded CE 6.0 Preparation Kit" which you can download for free from Microsoft. It is packed with information to tell OEM developers how to build devices.
Some of the posts on this blog are my own attempt at providing information about the internals of Windows CE. For example my API call post and memory marshalling post. I confess I don't read most of the networking team's blog posts in detail, because they're far outside my own realm of understanding, but I think they make similar efforts over there. The WindowsMobile blog discussions are usually more user-level than deep into the internals of the system, but sometimes you'll see some internals there. Also look to the Windows Mobile shell team's blog; I hope they keep posting more information like they have in the past.
If you are building a BSP and looking for a resource about BSP development, look at the BSP wiki on Channel9.
Microsoft doesn't offer training classes, but there is third-party training you can take, and it is probably the quickest way to introduce yourself to Windows CE and Windows Mobile. Multiple companies offer training courses. Here are a few, in no particular order. I am not listing these to favor these companies; please shop around, and if you feel others should be listed, please feel free to post a reply with your own opinions for other people to see.
Additionally, we hold an annual Developer's Conference. At the conference there are many talks, some labs, and personal access to Microsoft engineers as well as our eMVPs. You can find information about this year's MEDC (Mobile & Embedded Developers Conference) at medc2007.com. They also usually hold a series of smaller international DevCons around the world following the big one in the U.S.
If you are looking for help on a particular problem, my recommendation is to ask your question on one of our newsgroups. There is a list of mobile and embedded newsgroups you can look at, but these are my main recommendations:
Microsoft engineers do read and reply to questions on the newsgroups, but you can also get expert help there from our eMVPs and from other members of our community. Actually I prefer using the newsgroups to having people email me (or my team, via this blog) with questions. That way, not only can you get help from the rest of the community, but also other people who have similar questions can search and find the discussion. Know how to search old posts -- I use http://groups.google.com/groups?hl=en&group=microsoft.public.windowsce to search only in microsoft.public.windowsce.*
Once a month we also hold chats about Windows CE (and Windows Mobile). Usually we have about 20 Microsoft engineers on the chat. See http://msdn.microsoft.com/chats/ for the schedule, and http://msdn.microsoft.com/chats/transcripts/default.aspx for transcripts of past chats.
I don't have a lot of experience with managed programming, but I know if you are interested in managed programming on mobile and embedded devices, you can't go wrong with OpenNetCF.org. Chris Tacke and the other people there are very experienced and very helpful. Other resources on managed code come from a few blogs run by the Microsoft .NET Compact Framework team members; see http://blogs.msdn.com/netcfteam/ for a start. Finally, I think the .NET Compact Framework team holds monthly chats. Just like the general Windows CE chats, the schedule for .NET CF chats is at http://msdn.microsoft.com/chats/, and http://msdn.microsoft.com/chats/transcripts/default.aspx has transcripts of past chats.
If you are part of a university or other academic organization, and looking to teach classes using Windows Embedded, there is an official academic curriculum you should check out.
Another thing people occasionally ask for is information about the Windows CE APIs, and listings of registry settings. The main resource for the APIs would be in Platform Builder or Visual Studio help, which is also online on MSDN.
Note also that many Win32 APIs from desktop Windows are used in Windows CE, with some behavior differences and unsupported features. You could use desktop references to learn about the APIs, but only if you're careful to cross-reference with the Windows CE documentation to find out what's different. Implementations may be different and may be more limited. Ported APIs like DirectX probably diverge less. Similarly, registry settings are rarely in common between Windows CE and the desktop.
Finally, there are many links for OEMs and application developers at our online portals:
UPDATE Sept 4, 2007: Added link to Microsoft Mobile Development Handbook.
UPDATE Mar 28, 2008: Added link to BSP wiki