I would like to develop a means to generate a unique ID for licensing purposes
for as wide a range of Pocket PCs as possible. I know that the really ancient
Pocket PCs did not have hardwired device IDs, but what about the others?

I have seen two methods discussed in this forum. One is calling:

KernelIoControl(IOCTL_HAL_GET_DEVICEID,...

The other method is calling:

GetDeviceUniqueID();

The second method is an API that is only available under WM5, but I can
certainly use it on Pocket PCs of that type. The first method, according to
riki's posting (Sun, 18 Feb 2007 18:57:20 -0800) is a "priviledged API, so you
might run into issues on some devices".

Now here is what I have found on some Pocket PCs:

1. On an iPAQ rx1955 (WM 5.1.1702 Build 14367.1.0.2), the KernelIoControl method
works fine and gives me the same ID that is shown as the "UUID" in the Asset
Viewer under Settings. My application is unsigned and so is as un-priviledged
as you can get, so I am confused as to why it worked, despite riki's warning.

2. On a Dell Axim, pre-2003 (WinCE 3.0.11171 Build 11178). the call to
KernelIoControl returns FALSE. And of course GetDeviceUniqueID is out of the
question on this old OS. But there is a UUID shown under Settings, System
Information. Is there any way I can get that ID in my application?

3. On an iPAQ 3635 (WinCE 3.0.9348 Build 9616), KernelIoControl also returns
FALSE. There is no UUID shown under System Information, but there is a "Asset
Tag" and a "Serial Number" that are shown, and they are both the same
12-character alphanumeric string. Is there any way I can get that ID?

It is OK if I have to exclude the old iPAQ (made in 2001). But there are a lot
of Axims out there and some of them have not been upgraded to PPC 2003. I would
like to support everything back to 2002.


Robert Scott
Ypsilanti, Michigan

Re: Unique Device IDs for older Pocket PCs by ctacke/>

ctacke/>
Fri Feb 23 09:01:49 CST 2007

> 1. On an iPAQ rx1955 (WM 5.1.1702 Build 14367.1.0.2), the KernelIoControl
> method
> works fine and gives me the same ID that is shown as the "UUID" in the
> Asset
> Viewer under Settings. My application is unsigned and so is as
> un-priviledged
> as you can get, so I am confused as to why it worked, despite riki's
> warning.

Not all WM devices lock down the APIs. Try it on a SmartPhone and
KernelIoControl will probably fail.

> 2. On a Dell Axim, pre-2003 (WinCE 3.0.11171 Build 11178). the call to
> KernelIoControl returns FALSE. And of course GetDeviceUniqueID is out of
> the
> question on this old OS. But there is a UUID shown under Settings, System
> Information. Is there any way I can get that ID in my application?

It's likely a DELL-specific API, and it might now even be exposed. If you
can get the base address of the flash and they use Intel parts, you could
read the flash chip serial number, but that's quite a bit of work.

> 3. On an iPAQ 3635 (WinCE 3.0.9348 Build 9616), KernelIoControl also
> returns
> FALSE. There is no UUID shown under System Information, but there is a
> "Asset
> Tag" and a "Serial Number" that are shown, and they are both the same
> 12-character alphanumeric string. Is there any way I can get that ID?

Again, it's OEM specific. Compaq did have a special API set for their
devices that would allow you to read this.


--
Chris Tacke - Embedded MVP
OpenNETCF Consulting
Managed Code in the Embedded World
www.opennetcf.com
--