none
Número de série do dispositivo RRS feed

  • Pergunta

  • Senhores,

    Alguém saberia me dizer se existe como pegar o número de série do dispositivo ou algo similar que identifique exclusivamente um dispositivo?

    Muito Obrigado

    terça-feira, 26 de junho de 2007 15:11

Respostas

  • Segue o código

     

    Imports System
    Imports System.Drawing
    Imports System.Collections
    Imports System.ComponentModel
    Imports System.Diagnostics
    Imports System.Windows.Forms
    Imports System.Runtime.InteropServices
    Imports System.Text

     

    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


        Private 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

     

    quarta-feira, 27 de junho de 2007 16:06