none
Retornar o ID de um PocketPC RRS feed

Respostas

  • Public Class DeviceID

    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

    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

    Dim outbuff(19) As Byte

    Dim dwOutBytes As Int32

    Dim done As Boolean = False

    Dim nBuffSize As Int32 = outbuff.Length

    BitConverter.GetBytes(nBuffSize).CopyTo(outbuff, 0)

    dwOutBytes = 0

    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 Exception([error]))

    Case ERROR_INSUFFICIENT_BUFFER

    nBuffSize = BitConverter.ToInt32(outbuff, 0)

    outbuff = New Byte(nBuffSize) {}

    BitConverter.GetBytes(nBuffSize).CopyTo(outbuff, 0)

    Case Else

    Throw New Exception("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

    End Class

    quinta-feira, 6 de julho de 2006 13:14

Todas as Respostas

  • Public Class DeviceID

    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

    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

    Dim outbuff(19) As Byte

    Dim dwOutBytes As Int32

    Dim done As Boolean = False

    Dim nBuffSize As Int32 = outbuff.Length

    BitConverter.GetBytes(nBuffSize).CopyTo(outbuff, 0)

    dwOutBytes = 0

    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 Exception([error]))

    Case ERROR_INSUFFICIENT_BUFFER

    nBuffSize = BitConverter.ToInt32(outbuff, 0)

    outbuff = New Byte(nBuffSize) {}

    BitConverter.GetBytes(nBuffSize).CopyTo(outbuff, 0)

    Case Else

    Throw New Exception("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

    End Class

    quinta-feira, 6 de julho de 2006 13:14
  • Show de bola!

    Vou testar, obrigado.

    quinta-feira, 6 de julho de 2006 20:04