Uniquely identify a PDA

I

iKiLL

Hi all,



How can I Uniquely identify a PDA?



My Environment: VS2005, C#, CF2, SQL Mobile (Merge Replication Dynamic
Filters using Host Name), SQL 2005



I need to make sure that a User can only log in to 1 PDA and Sync at any one
time?



I was thinking maybe of storing the IMEI number in the User Table but there
dose not seem to be an easy way of getting hold of it in the CF2.0.



Is there something else Uniquely I could use.



Thanks,

ink
 
P

Peter Morris

#region DeviceId support

[DllImport("coredll.dll")]

private static extern bool KernelIoControl(Int32 IoControlCode, IntPtr

InputBuffer, Int32 InputBufferSize, byte[] OutputBuffer, Int32

OutputBufferSize, ref Int32 BytesReturned);





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);

private 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();

}

#endregion
 
P

Peter Morris

And please do not cross post, it is annoying, especially when people like me
reply to all groups without noticing!
 
M

Matt Lacey

Hi all,

How can I Uniquely identify a PDA?

My Environment: VS2005, C#, CF2, SQL Mobile (Merge Replication Dynamic
Filters using Host Name), SQL 2005

I need to make sure that a User can only log in to 1 PDA and Sync at any one
time?

I was thinking maybe of storing the IMEI number in the User Table but there
dose not seem to be an easy way of getting hold of it in the CF2.0.

Is there something else Uniquely I could use.

Thanks,

ink

If using Windows Mobile 5.0, each device has a unique ID, accessed via
GetDeviceUniqueID.
See:
http://blogs.msdn.com/windowsmobile/archive/2006/01/09/510997.aspx
 
I

iKiLL

Thanks to you both for your input.

I am sorry about the post to the SQL CE news group, that was infact an
accident.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top