How can i get device id of wm5 motorola smartphone Q device.

I am converting my application from pocket pc to smart phone
I wants to get device id in this "3606d294-0000-0100-0008-0050bf3f5171"format for smart phone.
Previously i were using KernelIoControl.
Now I want's to use GetDeviceUniqueID
My code for KernelIoControl and GetDeviceuniqueID is

private static Int32 FILE_DEVICE_HAL = 0x00000101;
private static Int32 FILE_ANY_ACCESS = 0x0;
private static Int32 METHOD_BUFFERED = 0x0;

private static Int32 IOCTL_HAL_GET_DEVICEID =
((FILE_DEVICE_HAL) << 16) | ((FILE_ANY_ACCESS) << 14)
| ((21) << 2) | (METHOD_BUFFERED);


public static string GetDeviceID()
{
byte[] OutputBuffer = new byte[256];
Int32 OutputBufferSize, BytesReturned;
OutputBufferSize = OutputBuffer.Length;
BytesReturned = 0;

// Call KernelIoControl passing the previously defined
// IOCTL_HAL_GET_DEVICEID parameter
// We don’t need to pass any input buffers to this call
// so InputBuffer and InputBufferSize are set to their null
// values
bool retVal = KernelIoControl(IOCTL_HAL_GET_DEVICEID,
IntPtr.Zero,
0,
OutputBuffer,
OutputBufferSize,
ref BytesReturned);

// If the request failed, exit the method now
if (retVal == false)
{
return null;
}

// Examine the OutputBuffer byte array to find the start of the
// Preset ID and Platform ID, as well as the size of the
// PlatformID.
// PresetIDOffset – The number of bytes the preset ID is offset
// from the beginning of the structure
// PlatformIDOffset - The number of bytes the platform ID is
// offset from the beginning of the structure
// PlatformIDSize - The number of bytes used to store the
// platform ID
// Use BitConverter.ToInt32() to convert from byte[] to int
Int32 PresetIDOffset = BitConverter.ToInt32(OutputBuffer, 4);
Int32 PlatformIDOffset = BitConverter.ToInt32(OutputBuffer, 0xc);
Int32 PlatformIDSize = BitConverter.ToInt32(OutputBuffer, 0x10);

// Convert the Preset ID segments into a string so they can be
// displayed easily.
StringBuilder sb = new StringBuilder();
sb.Append(String.Format("{0:X8}-{1:X4}-{2:X4}-{3:X4}-",
BitConverter.ToInt32(OutputBuffer, PresetIDOffset),
BitConverter.ToInt16(OutputBuffer, PresetIDOffset +4),
BitConverter.ToInt16(OutputBuffer, PresetIDOffset +6),
BitConverter.ToInt16(OutputBuffer, PresetIDOffset +8)));

// Break the Platform ID down into 2-digit hexadecimal numbers
// and append them to the Preset ID. This will result in a
// string-formatted Device ID
for (int i = PlatformIDOffset;
i < PlatformIDOffset + PlatformIDSize;
i ++ )
{
sb.Append( String.Format("{0:X2}", OutputBufferIdea));
}

// return the Device ID string
return sb.ToString();
}

[DllImport("coredll.dll")]
private static extern bool KernelIoControl(Int32 IoControlCode, IntPtr
InputBuffer, Int32 InputBufferSize, byte[] OutputBuffer, Int32
OutputBufferSize, ref Int32 BytesReturned);

[DllImport("coredll.dll")]

private extern static int GetDeviceUniqueID([In, Out] byte[] appdata,

int cbApplictionData,

int dwDeviceIDVersion,

[In, Out] byte[] deviceIDOuput,

out uint pcbDeviceIDOutput);



public static string GetDeviceIDNew() //i got this sample
{
string AppString = "NOW";
// Call the GetDeviceUniqueID

byte[] AppData = new byte[AppString.Length];

for (int count = 0; count < AppString.Length; count++)

AppData[count] = (byte)AppString[count];

int appDataSize = AppData.Length;

byte[] DeviceOutput = new byte[20];

uint SizeOut = 20;

GetDeviceUniqueID(AppData, appDataSize, 1, DeviceOutput, out SizeOut);



return DeviceOutput.ToString();
//it will not return my desired format

}



Answer this question

How can i get device id of wm5 motorola smartphone Q device.

  • SuperNova298

    In C# I want's to get device id of wm5 motorola smartphone Q device.
    I know for pocket pc I can get it KernelIoControl.
    But How Can I do for windows mobile 5.0 Smartphone motorolla Q device.


  • DevDiver

    I have sign my code but still HAL_GET_DEVICEID is not working.I am using i-mate sp5m.[is it the device problem ]

    Also I doesn't wants application specific unique id.I wants Device unique ID for smart phone as i get it for pocket pc



  • Blair Allen Stark

    GetDeviceUniqueID requires at least 8 bytes of data () to generate a hash. You are only supplying 3 ('N', 'O', 'W'). Furthemore, you should not expect GetDeviceUniqueID to return the UUID string as HAL_GET_DEVICEID does. Read the documentation: it will return application-specific hash that is unique for this particular device. You should treat it as a sequence of bytes.

    As for HAL_GET_DEVICEID method - it will not work on Smartphone unless your code is signed with a privleged certificate, and no, there is no way around it by design



  • Phil Gould

    Stop multiposting!

    You cannot keep asking the same question in several forums over and over again.

    See the answer in C++ forum



  • Sarwanan

    If you can do this for PPC than you should be able to do this for SP as both are based on WM5 codebase.

    Manav



  • Handi

    I doesn't wants application specific unique id.I wants Device unique ID for smart phone as i get it for pocket pc

  • Leonard Lee

    But I am getting nothing when I providing following method for smart phone.

    I have also sign my code

    private static Int32 FILE_DEVICE_HAL = 0x00000101;
    private static Int32 FILE_ANY_ACCESS = 0x0;
    private static Int32 METHOD_BUFFERED = 0x0;

    private static Int32 IOCTL_HAL_GET_DEVICEID =
    ((FILE_DEVICE_HAL) << 16) | ((FILE_ANY_ACCESS) << 14)
    | ((21) << 2) | (METHOD_BUFFERED);


    public static string GetDeviceID()
    {
    byte[] OutputBuffer = new byte[256];
    Int32 OutputBufferSize, BytesReturned;
    OutputBufferSize = OutputBuffer.Length;
    BytesReturned = 0;

    // Call KernelIoControl passing the previously defined
    // IOCTL_HAL_GET_DEVICEID parameter
    // We don’t need to pass any input buffers to this call
    // so InputBuffer and InputBufferSize are set to their null
    // values
    bool retVal = KernelIoControl(IOCTL_HAL_GET_DEVICEID,
    IntPtr.Zero,
    0,
    OutputBuffer,
    OutputBufferSize,
    ref BytesReturned);

    // If the request failed, exit the method now
    if (retVal == false)
    {
    return null;
    }

    // Examine the OutputBuffer byte array to find the start of the
    // Preset ID and Platform ID, as well as the size of the
    // PlatformID.
    // PresetIDOffset – The number of bytes the preset ID is offset
    // from the beginning of the structure
    // PlatformIDOffset - The number of bytes the platform ID is
    // offset from the beginning of the structure
    // PlatformIDSize - The number of bytes used to store the
    // platform ID
    // Use BitConverter.ToInt32() to convert from byte[] to int
    Int32 PresetIDOffset = BitConverter.ToInt32(OutputBuffer, 4);
    Int32 PlatformIDOffset = BitConverter.ToInt32(OutputBuffer, 0xc);
    Int32 PlatformIDSize = BitConverter.ToInt32(OutputBuffer, 0x10);

    // Convert the Preset ID segments into a string so they can be
    // displayed easily.
    StringBuilder sb = new StringBuilder();
    sb.Append(String.Format("{0:X8}-{1:X4}-{2:X4}-{3:X4}-",
    BitConverter.ToInt32(OutputBuffer, PresetIDOffset),
    BitConverter.ToInt16(OutputBuffer, PresetIDOffset +4),
    BitConverter.ToInt16(OutputBuffer, PresetIDOffset +6),
    BitConverter.ToInt16(OutputBuffer, PresetIDOffset +8)));

    // Break the Platform ID down into 2-digit hexadecimal numbers
    // and append them to the Preset ID. This will result in a
    // string-formatted Device ID
    for (int i = PlatformIDOffset;
    i < PlatformIDOffset + PlatformIDSize;
    i ++ )
    {
    sb.Append( String.Format("{0:X2}", OutputBuffer));
    }

    // return the Device ID string
    return sb.ToString();
    }

    [DllImport("coredll.dll")]
    private static extern bool KernelIoControl(Int32 IoControlCode, IntPtr
    InputBuffer, Int32 InputBufferSize, byte[] OutputBuffer, Int32
    OutputBufferSize, ref Int32 BytesReturned);



  • How can i get device id of wm5 motorola smartphone Q device.