Device Id-Standard way

G

Guest

Hi,
I am using the following code(below this doubt) in vb.net to get the
Device Id of pocket pc.
It is working fine.

Public Shared Function GetDeviceID() is giving out a string of width 32,
containing numbers and characters (20 +12). But I came to know that several
other ways are also there to get the Device Id and I have used one more
method to find out the same. But it is generating a different Id(first 20
characters are slightly differnt or misplaced), but the last 12 remains same
in both cases.

So which can be used as the standard? If another person is generating the
Device Id using his own code, both of us have to generate the same on the
same device. Currently I am using the last 12 characters.

Apart from that, does the first 20 characters represent Preset Id and the
last 12 represents Platform specific Id? Please elaborate on preset and
platform specific.

Regards,
Hari

code here
=======
Public Class DeviceID
Inherits System.Windows.Forms.Form

Declare Function KernelIoControl Lib "CoreDll.dll" (ByVal
dwIoControlCode As Int32, _
ByVal lpInBuf As IntPtr, ByVal nInBufSize As Int32, ByVal lpOutBuf() As
Byte, _
ByVal nOutBufSize As Int32, ByRef lpBytesReturned As Int32) As Boolean

Public Sub New()
'
' Required for Windows Form Designer support
'
InitializeComponent()
End Sub

'
' TODO: Add any constructor code after InitializeComponent call
'


Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
MyBase.Dispose(disposing)
End Sub

#Region "Windows Form Designer generated code"

Private Sub InitializeComponent()
'
' DeviceID
'
Me.Text = "DeviceID"
End Sub 'InitializeComponent


Shared Sub Main()
Application.Run(New DeviceId)
End Sub 'Main
#End Region


Private Shared METHOD_BUFFERED As Int32 = 0
Private Shared FILE_ANY_ACCESS As Int32 = 0
Private Shared FILE_DEVICE_HAL As Int32 = &H101

Private Const ERROR_NOT_SUPPORTED As Int32 = &H32
Private Const ERROR_INSUFFICIENT_BUFFER As Int32 = &H7A


Private Shared IOCTL_HAL_GET_DEVICEID As Int32 = (&H10000 *
FILE_DEVICE_HAL) Or (&H4000 * FILE_ANY_ACCESS) Or (&H4 * 21) Or
METHOD_BUFFERED


Public Shared Function GetDeviceID() As String


' Initialize the output buffer to the size of a Win32 DEVICE_ID
structure
'
Dim outbuff(19) As Byte
Dim dwOutBytes As Int32
Dim done As Boolean = False

Dim nBuffSize As Int32 = outbuff.Length
' Set DEVICEID.dwSize to size of buffer. Some platforms look at
' this field rather than the nOutBufSize param of KernelIoControl
' when determining if the buffer is large enough.
'
BitConverter.GetBytes(nBuffSize).CopyTo(outbuff, 0)
dwOutBytes = 0


' Loop until the device ID is retrieved or an error occurs
'
While Not done
If KernelIoControl(IOCTL_HAL_GET_DEVICEID, IntPtr.Zero, 0,
outbuff, nBuffSize, dwOutBytes) Then
done = True
Else
Dim [error] As Integer = Marshal.GetLastWin32Error()
Select Case [error]
Case ERROR_NOT_SUPPORTED
Throw New
NotSupportedException("IOCTL_HAL_GET_DEVICEID is not supported on this
device", New Win32Exception([error]))

Case ERROR_INSUFFICIENT_BUFFER
' The buffer is not big enough for the data. The
required size
' is in the first 4 bytes of the output buffer
(DEVICE_ID.dwSize).
nBuffSize = BitConverter.ToInt32(outbuff, 0)
outbuff = New Byte(nBuffSize) {}
' Set DEVICEID.dwSize to size of buffer. Some
' platforms look at this field rather than the
' nOutBufSize param of KernelIoControl when
' determining if the buffer is large enough.
'
BitConverter.GetBytes(nBuffSize).CopyTo(outbuff, 0)

Case Else
Throw New Win32Exception([error], "Unexpected error")
End Select
End If
End While

Dim dwPresetIDOffset As Int32 = BitConverter.ToInt32(outbuff, &H4)
' DEVICE_ID.dwPresetIDOffset
Dim dwPresetIDSize As Int32 = BitConverter.ToInt32(outbuff, &H8)
' DEVICE_ID.dwPresetIDSize
Dim dwPlatformIDOffset As Int32 = BitConverter.ToInt32(outbuff, &HC)
' DEVICE_ID.dwPlatformIDOffset
Dim dwPlatformIDSize As Int32 = BitConverter.ToInt32(outbuff, &H10)
' DEVICE_ID.dwPlatformIDBytes
Dim sb As New StringBuilder
Dim i As Integer

For i = dwPresetIDOffset To (dwPresetIDOffset + dwPresetIDSize) - 1
sb.Append(String.Format("{0:X2}", outbuff(i)))
Next i
sb.Append("-")
For i = dwPlatformIDOffset To (dwPlatformIDOffset +
dwPlatformIDSize) - 1
sb.Append(String.Format("{0:X2}", outbuff(i)))
Next i
Return sb.ToString()
End Function

Private Sub DeviceID_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Try
Dim strDeviceID As String = GetDeviceID()
MessageBox.Show(("The ID for this device is " + strDeviceID))

Catch ex As Exception
MessageBox.Show(ex.Message.ToString())
End Try
End Sub
End Class
 

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