Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Pocket PC DeviceId
Message
General information
Forum:
Palm, Pocket PC and Handheld
Category:
ActiveSync
Miscellaneous
Thread ID:
01170232
Message ID:
01171193
Views:
7
>
>If you have any source that you can post I would love to look at it.

It looks like I grabbed the code I'm using from Microsoft, so I'm not using the OpenNetCF...

Anyway, here it is:
using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;

namespace ParkWestGallery.CE.Utilities
{

	/// <summary>
	/// Class to retrieve the device ID
	/// Code snagged from: http://msdn.microsoft.com/mobility/understanding/articles/default.aspx?pull=/library/en-us/dnnetcomp/html/retrievedeviceid.asp
	/// PCM - 1/19/2006
	/// </summary>
	class RetrieveDeviceID
	{
		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);

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


		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main(string[] args)
		{
			string defaultFile = @"\Application\deviceid.txt";

			// Assumes that, if a path/file is passed in, the path exists.
			// Also assumes they are including the file name.
			if (args.Length > 0)
			{
				defaultFile = args[0];
			}			

			try
			{
				string deviceID = GetDeviceID();
				
				System.IO.StreamWriter swText = new StreamWriter(defaultFile);

				using (swText)
				{
					swText.WriteLine(deviceID);
				}
				
			}
			catch (System.Exception ex)
			{
				//System.Console.WriteLine("Exception: " + ex.Message);
			}
		}	

			
		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[i]));
			}
    
			// return the Device ID string
			return sb.ToString();
		}


	}
}
-Paul

RCS Solutions, Inc.
Blog
Twitter
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform