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