Pocket PC 2003 / kernel-mode vs user-mode

Pocket PC 2003 / kernel-mode vs user-mode

Post by The Pocket » Wed, 30 Jul 2003 14:58:48

It seems that Pocket PC OEM's have the choice to implement Pocket PC 2003 on
their device so that applications run either in user-mode (i.e. restricted),
or in kernel-mode (i.e. all privileges).

On Pocket PC 2000 and 2002, all applications run always in kernel-mode (i.e.
with all privileges), i.e. they can execute privileged instructions and
performed privileged system calls, such as
KernelIoControl(IOCTL_HAL_GET_DEVICEID, ...) to obtain the unique device ID.

Applications, when restricted to run in user-mode, cannot execute privileged
instructions and performed privileged system calls succh as KernelIO.

This causes serious compatibility issues, i.e. many applications and games
designed for Pocket PC 2002 will not run on the Pocket PC 2003 devices that
restrict applications to run in user-mode only.

Of course, there are security issues involved, and in the case of Pocket PC
"Phone Edition", allowing applications to run in kernel-mode means that all
applications can access the entire system (and network) with no control.
This may be a problem. But security issues for regular Pocket PC does not
seem to be such a big issue.

Restricting Pocket PC 2003 to run applications in user-mode causes serious
compatibility issues and we have experienced the problem already!

On Pocket PC, PocketTV currently relies on some code that can only run in
kernel-mode, so it does not run on the Pocket PC 2003 devices that restrict
applications to run in user-mode. And yes, there are very good reasons for
us to use privileged instructions (and system calls). To give you only one:
There is no reliable system call in the Pocket PC that provide the Processor
ID (i.e. to determine if it is StrongARM, Xscale PXA 250, Xscale PXA 255
etc). We need this information (100% reliably, in order to determine if we
can run Xscale-optimized code or not), so we need to use a privileged
instructions to access the Processor ID. The Pocket PC system calls that
are supposed to return the processor type is almost never implemented
corectly by OEM, so they are not useable
(KernelIoControl(IOCTL_PROCESSOR_INFORMATION,...) and GetSystemInfo()).

On Smartphone 2002, applications run in user-mode unless they have a
credential (certificate) allowing them to run with a more elevated level of
trust. There is a very complicated system to deal with this. And this
creates problems (e.g. impossible to determine the processor type!!!).

Do we really need this on Pocket PC 2003 ?

There seem to be a lot of confusion among Pocket PC OEM's regarding how to
adress this issue.

Can someone from MS comment on this SERIOUS issue ?


1. WinCE kernel-mode vs. user-mode driver

2. Windows CE vs Pocket PC 2000 vs Pocket PC 2002 vs Pocket PC 2003 ????

Hello all

Can someone tell me the difference between all these OS ?

I am not looking for feature difference but what they are exactly.

Is pocket PC a new release of Windows CE ?

I just purchase a Dell Axim iand it came with (in the About icon in the
control pannel)

Microsoft Pocket PC
Version 3.0.11171
Copyright 1996-2001

It is brand new and it did not come with Pocket PC 2000, nor 2002, nor 2003.
I do not understand all these different OS names.

I wish to begin developping with VB.NET. Everything I read about developping
in VB.NET for Visual Studio make reference to Pocket PC 2002 and 2003, never

I search and search MS web site but could not find any explanation.

Can anyone help


3. kernel-mode vs. user mode driver

4. Use an existing kernel-mode driver with a new user-mode driver

5. variable between user-mode and kernel-mode

6. Is user-mode appl's name available to kernel-mode drv

7. Shared memory between User-Mode and Kernel-Mode??

8. Link data kernel-mode <-> user-mode with pipename

9. Call user-mode callback routine from kernel-mode driver

10. Kernel-mode driver calling user-mode DLL

11. Kernel-Mode to User-Mode driver port

12. Link data by Pipe user-mode<--> kernel-mode

13. User Mode Thread vs Kernel Mode Thread

14. Kernel Mode vs. User Mode

15. Performances of Kernel mode vs User mode