Windows Embedded CE 6.0 introduces a new kernel architecture to support kernel mode drivers (user mode drivers are still supported through a user mode driver manager called udevice.exe, interestingly, with CE 6.0 you can have multiple instances of udevice.exe, each hosting a single user mode driver - Juggs talks about the new driver architecture in his MSDN Channel9 interview).

So what does the new architecture do for application compatibility for existing CE 5.0 based applications ? - the majority of "Well Behaved" applications should just run in their unmodified binary form - there are two types of application supported on Windows CE, native, and managed - native applications are assembled, compiled, and linked into a binary application that runs on the processor it's been targeted at (ARM, MIPS, SH4, x86), a managed application is built against the .NET Compact Framework and is written either in C# or VB.

Managed applications are already abstracted from the underlying operating system by the Compact Framework and therefore should just run (unless the application is using platform invoke to call any of the deprecated (no longer supported) APIs) - native applications may not work if they are using any memory/API "tricks", there are a number of deprecated APIs, these include SetKMode, SetProcPermissions etc... - so how do you determine whether an application will run on CE 6.0 or not ?

The good news is that we're introducing a new command line tool called CeAppCompat which can be used to examine a single application/DLL binary or a complete folder full of applications/DLLs and produces an HTML report listing which binaries might have a problem.

CeAppCompat takes two command line parameters - the command line looks like: CeAppCompat -i \FolderPath -o Foo

Where Foo will be the name of the HTML report Foo.html

The CeAppCompat tool simply examines the import tables for each of the binaries and maps these back to the APIs exposed on the operating system (you can examine the import tables on a binary using the command line tool DumpBin - like so, Dumpbin /Imports MyApp.exe) or you can use the UI based application Depends.exe to do the same thing.

- Mike