Share via


LS4D Device ID and Device Group ID Overview

Windows CE 5.0 Not SupportedWindows Embedded NavReady 2009 Supported

10/16/2008

An LS4D paired identifier includes both the Device ID and the Device Group ID and is attached to a search request before it is routed to the LS4D server.

LS4D Device ID and Device Group ID

When a portable navigation device (PND) uses Live Search for Devices (LS4D) to retrieve search results, it must provide an LS4D Device ID and Device Group ID in the request header to obtain access to the Live Search servers. The Device ID uniquely identifies the portable navigation device (PND), while the Device Group ID uniquely identifies the group of devices that belong to an OEM.

OEMs are required to store the LS4D IDs on each PND.

Every time that a search request is invoked, the LS4D API checks that the IDs are included in the request, before the LS4D API sends the request to the LS4D server. If the IDs are not in the request, the request will fail.

Device ID Overview

The following overview provides information about how you can create and store the Device ID, and how LS4D obtains the Device ID stored in the portable navigation device (PND).

Creating and Storing the Device ID

OEMs can create and store the Device ID in the run-time image on each portable navigation device (PND). OEMs can also let the system generate a Device ID, as long as the OEM has implemented IOCTL_HAL_GET_UUID to return a GUID. Each Device ID must be unique and also persistent. A persistent registry is a requirement for this feature; see LS4D IDs and Persistent Data later in this topic.

You can decide how to create and store the Device ID. The following are three options you can use for creating and storing the Device ID:

  • Use a hardware identifier
    To create the device ID, use a physical attribute on the device that has a unique hardware identifier. Examples include flash-storage chips or processors that have a unique identifier on the hardware. With this option, the unique identifier will be the same as the Device ID.
    To use a hardware identifier, you must implement IOCTL_HAL_GET_UUID to return a GUID.
    To retrieve the device ID, on first boot, use an IOCTL call that identifies the unique hardware. Then, the hardware ID, represented as the Device ID, is passed to the LS4D function call that goes to the LS4D Web service on the LS4D server. With this option, the hardware identifier is not stored in the persistent registry.
    If the hardware identifier is returned as null (for example, 0x000… or 0xFFF…), a software identifier should be generated instead.
  • Use a software identifier created by using an OEM-specific function call
    Create a unique ID by using an OEM-specific call. On first boot, generate a Device ID by using an OEM-specific function call that auto-generates a unique Device ID. The newly generated Device ID is stored in the persistent registry.
  • Use a software identifier created by using an LS4D function call
    To let the device generate a GUID, make sure that you have implemented IOCTL_HAL_GET_UUID to return a GUID.
    Initially, the local LS4D API call is invoked on the client device which also exposes the functionality to generate a Device ID when no Device ID is predefined in the registry. If no Device ID is defined in the registry, LS4D automatically generates a unique Device ID by using an algorithm. This new Device ID is persisted in memory.

How LS4D Obtains the Device ID

LS4D obtains the Device ID by performing the following checks in the specified order:

  1. Before an application starts using the LS4D API, LS4D searches the DeviceGroupID cache in memory.

  2. If the cache is null, LS4D calls IOCTL_HAL_GET_UUID.

    Note

    To use IOCTL_HAL_GET_UUID, a board support package (BSP) must be implemented. Otherwise, the ID will not be unique. Therefore, IOCTL_HAL_GET_UUID will not obtain a unique identifier on a Windows Embedded CE PC-based platform (CEPC). The implementation of IOCTL_HAL_GET_UUID must be unique to the DeviceGroupID that you are using for your portable navigation devices (PNDs).

  3. If the IOCTL returns a null UUID or a UUID in which all bytes are the same, LS4D looks in the registry.

  4. If no Device ID is found in the registry, LS4D generates a UUID, converts it to a string, saves it to the registry, and returns the Device ID. If an error occurs, it returns ERROR_INTERNAL_ERROR.

Note

When a Device ID registry key is cleared, this results in behavior that is the same as performing a factory reset on the device.

Device Group ID Overview

The Device Group ID is not included with Windows Embedded NavReady. OEMs must obtain a Device Group ID from Microsoft. For more information on how to obtain and store the Device Group ID, see How to Register for the LS4D Service.

As soon as a Device Group ID is obtained, the OEM must store this value and return the same Device Group ID value across multiple cold boots of the portable navigation device (PND).

Or, the OEM can add a Device Group ID to the run-time image at manufacturing time, or store a Device Group ID in the registry before the product is shipped. If the Device Group ID is stored in the registry, the registry data must be persistent.

Storing the Device Group ID

The Device Group ID can be stored in the registry. For more information, see Adding the Device Group ID to a Run-Time Image.

LS4D IDs and Persistent Data

To save data across a cold boot of the operating system, the Windows Embedded NavReady powered device must support a persistent registry. The hive-based registry stores data inside files, or hives, which can be kept on any file system. This removes the need to perform backup and restore of registry data and power off. Removing this work during start up and power off makes the cold-boot process faster. With a hive-based registry, the IDs will remain valid in the registry after cold boots, although not after factory resets.

Blocked Users

The Web service on the LS4D server has a mechanism to gate queries from client devices that pass through the LS4D server to the Live Search server. The LS4D server is able to meter usage and block client devices from which malicious usage is originating.

See Also

Tasks

Adding the Device Group ID to a Run-Time Image

Reference

LS4D Registry Settings

Concepts

LS4D OS Design Development
How to Register for the LS4D Service