vb获取cpuid 硬盘物理序列号和逻辑盘序列号 的方法

您所在的位置:网站首页 查询主板序列号软件 vb获取cpuid 硬盘物理序列号和逻辑盘序列号 的方法

vb获取cpuid 硬盘物理序列号和逻辑盘序列号 的方法

2024-07-12 23:24| 来源: 网络整理| 查看: 265

一、使用WMI获取

 通过WMI获得硬盘和CPU的物理序列号(VB.net) ''获得硬盘序列号 Dim cmicWmi As New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive") Dim Uint32 As UInt32 For Each cmicWmiObj As ManagementObject In cmicWmi.Get Uint32 = cmicWmiObj("signature") Next TextBox1.Text = Uint32.ToString ''获得CPU序列号 Dim Wmi As New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_Processor") Dim Uint32 As String For Each WmiObj As ManagementObject In Wmi.Get Uint32 = WmiObj("ProcessorId") Next TextBox1.Text = Uint32 ''获得硬盘总容量 Dim Wmi As New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive") Dim Uint64 As UInt64 For Each WmiObj As ManagementObject In Wmi.Get Uint64 = WmiObj("size") Next TextBox1.Text = Uint64.ToString 首先,引用System.Management;然后在代码中Imports System.Management;

private void GetInfo()  {   string cpuInfo = "";//cpu序列号    ManagementClass cimobject = new ManagementClass("Win32_Processor");    ManagementObjectCollection moc = cimobject.GetInstances();    foreach(ManagementObject mo in moc)    {     cpuInfo = mo.Properties["ProcessorId"].Value.ToString();     Response.Write ("cpu序列号:"+cpuInfo.ToString ());   }

   //获取硬盘ID    String HDid;    ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");    ManagementObjectCollection moc1 = cimobject1.GetInstances();    foreach(ManagementObject mo in moc1)    {     HDid = (string)mo.Properties["Model"].Value;     Response.Write ("硬盘序列号:"+HDid.ToString ());    }

   //获取网卡硬件地址 9558821702001755616          ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");    ManagementObjectCollection moc2 = mc.GetInstances();    foreach(ManagementObject mo in moc2)    {     if((bool)mo["IPEnabled"] == true)      Response.Write("MAC address/t{0}"+mo["MacAddress"].ToString());     mo.Dispose();    }   }

 

 

 

 

 

二、获取物理硬盘的id

Private Const MAX_IDE_DRIVES       As Long = 4Private Const IDENTIFY_BUFFER_SIZE       As Long = 512Private Const DFP_SEND_DRIVE_COMMAND       As Long = &H7C084Private Const DFP_RECEIVE_DRIVE_DATA       As Long = &H7C088

Private Type GETVERSIONOUTPARAMS        bVersion   As Byte                 '   Binary   driver   version.        bRevision   As Byte               '   Binary   driver   revision.        bReserved   As Byte               '   Not   used.        bIDEDeviceMap   As Byte       '   Bit   map   of   IDE   devices.        fCapabilities   As Long       '   Bit   mask   of   driver   capabilities.        dwReserved(3)   As Long       '   For   future   use.End TypePrivate Type IDEREGS        bFeaturesReg   As Byte                 '   Used   for   specifying   SMART   "commands".        bSectorCountReg   As Byte           '   IDE   sector   count   register        bSectorNumberReg   As Byte         '   IDE   sector   number   register        bCylLowReg   As Byte                     '   IDE   low   order   cylinder   value        bCylHighReg   As Byte                   '   IDE   high   order   cylinder   value        bDriveHeadReg   As Byte               '   IDE   drive/head   register        bCommandReg   As Byte                   '   Actual   IDE   command.End Type

Private Type SENDCMDINPARAMS        cBufferSize   As Long                   '   Buffer   size   in   bytes        irDriveRegs   As IDEREGS             '   Structure   with   drive   register   values.        bDriveNumber   As Byte                 '   Physical   drive   number   to   send        bReserved(2)   As Byte                 '   Reserved   for   future   expansion.        dwReserved(3)   As Long               '   For   future   use.        bBuffer(0)   As Byte                     '   Input   buffer.End TypePrivate Const IDE_ATAPI_ID       As Long = &HA1           '   Returns   ID   sector   for   ATAPI.Private Const IDE_ID_FUNCTION       As Long = &HEC           '   Returns   ID   sector   for   ATA.Private Const IDE_EXECUTE_SMART_FUNCTION       As Long = &HB0           '   Performs   SMART   cmd.Private Type DRIVERSTATUS        bReserved(1)   As Byte                 '   Reserved   for   future   expansion.        dwReserved(1)   As Long               '   Reserved   for   future   expansion.End Type

Private Type SENDCMDOUTPARAMS        cBufferSize   As Long                   '   Size   of   bBuffer   in   bytes        drvStatus   As DRIVERSTATUS       '   Driver   status   structure.        bBuffer(0)   As Byte                     '   Buffer   of   arbitrary   length   in   which   to   store   the   data   read   from   the                                                                                     '   drive.End Type

Private Type ATTRTHRESHOLD        bAttrID   As Byte                           '   Identifies   which   attribute        bWarrantyThreshold   As Byte     '   Triggering   value        bReserved(9)   As Byte               'End Type

Private Type IDSECTOR        wGenConfig   As Integer        wNumCyls   As Integer        wReserved   As Integer        wNumHeads   As Integer        wBytesPerTrack   As Integer        wBytesPerSector   As Integer        wSectorsPerTrack   As Integer        wVendorUnique(2)   As Integer        sSerialNumber(19)   As Byte        wBufferType   As Integer        sFirmwareRev(7)   As Byte        sModelNumber(39)   As ByteEnd Type

Private Const VER_PLATFORM_WIN32s As Long = 0Private Const VER_PLATFORM_WIN32_WINDOWS As Long = 1Private Const VER_PLATFORM_WIN32_NT As Long = 2Private Type OSVERSIONINFO        dwOSVersionInfoSize   As Long        dwMajorVersion   As Long        dwMinorVersion   As Long        dwBuildNumber   As Long        dwPlatformId   As Long        szCSDVersion   As String * 128                   '     Maintenance   string   for   PSS   usageEnd Type

Private Declare Function GetVersionEx Lib "KERNEL32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As LongPrivate Const GENERIC_READ       As Long = &H80000000Private Const GENERIC_WRITE       As Long = &H40000000Private Const OPEN_EXISTING         As Long = 3Private Declare Function CreateFile Lib "KERNEL32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As LongPrivate Declare Function DeviceIoControl Lib "KERNEL32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, ByVal lpOverlapped As Long) As LongPrivate Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Declare Function CloseHandle Lib "KERNEL32" (ByVal hObject As Long) As LongPrivate m_DiskInfo As IDSECTOR

Private Function OpenSMART(ByVal nDrive As Byte) As Long      Dim hSMARTIOCTL&, hd$      Dim VersionInfo     As OSVERSIONINFO      VersionInfo.dwOSVersionInfoSize = Len(VersionInfo)      GetVersionEx VersionInfo      Select Case VersionInfo.dwPlatformId            Case VER_PLATFORM_WIN32s                  OpenSMART = hSMARTIOCTL            Case VER_PLATFORM_WIN32_WINDOWS                  hSMARTIOCTL = CreateFile("//./SMARTVSD", 0, 0, 0, CREATE_NEW, 0, 0)            Case VER_PLATFORM_WIN32_NT                  If nDrive < MAX_IDE_DRIVES Then                        hd = "//./PhysicalDrive" & nDrive                        hSMARTIOCTL = CreateFile(hd, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0)                  End If      End Select      OpenSMART = hSMARTIOCTLEnd Function

Private Function DoIDENTIFY(ByVal hSMARTIOCTL As Long, pSCIP As SENDCMDINPARAMS, pSCOP() As Byte, ByVal bIDCmd As Byte, ByVal bDriveNum As Byte, lpcbBytesReturned As Long) As Boolean      pSCIP.irDriveRegs.bDriveHeadReg = &HA0 Or ((bDriveNum And 1) * 2 ^ 4)      pSCIP.irDriveRegs.bCommandReg = bIDCmd      pSCIP.bDriveNumber = bDriveNum      DoIDENTIFY = CBool(DeviceIoControl(hSMARTIOCTL, DFP_RECEIVE_DRIVE_DATA, pSCIP, 32, pSCOP(0), 528, lpcbBytesReturned, 0))End Function

Public Function GetDiskInfo(ByVal nDrive As Byte) As Long      Dim hSMARTIOCTL&, cbBytesReturned&      Dim VersionParams     As GETVERSIONOUTPARAMS      Dim scip     As SENDCMDINPARAMS      Dim scop()     As Byte      Dim OutCmd     As SENDCMDOUTPARAMS      Dim bDfpDriveMap     As Byte      Dim bIDCmd     As Byte                                           '   IDE   or   ATAPI   IDENTIFY   cmd      Dim uDisk     As IDSECTOR      m_DiskInfo = uDisk      hSMARTIOCTL = OpenSMART(nDrive)      If hSMARTIOCTL INVALID_HANDLE_VALUE Then            Call DeviceIoControl(hSMARTIOCTL, DFP_GET_VERSION, ByVal 0, 0, VersionParams, Len(VersionParams), cbBytesReturned, 0)            bIDCmd = IIf((VersionParams.bIDEDeviceMap / 2 ^ nDrive And &H10), IDE_ATAPI_ID, IDE_ID_FUNCTION)            ReDim scop(LenB(OutCmd) + IDENTIFY_BUFFER_SIZE - 1) As Byte            If DoIDENTIFY(hSMARTIOCTL, scip, scop, bIDCmd, nDrive, cbBytesReturned) Then                  CopyMemory m_DiskInfo, scop(LenB(OutCmd) - 4), LenB(m_DiskInfo)                  CloseHandle hSMARTIOCTL                  GetDiskInfo = 1                  Exit Function            End If            CloseHandle hSMARTIOCTL            GetDiskInfo = 0      End IfEnd Function

Public Function GetHDlist() As String      If GetDiskInfo(0) = 1 Then            GetHDlist = "硬盘物理系列号:" & Trim(StrConv(m_DiskInfo.sSerialNumber, vbUnicode))            'GetHDlist = "硬盘型号:" & StrConv(m_DiskInfo.sModelNumber, vbUnicode)      Else        GetHDlist = "读取错误"      End IfEnd Function

Private Sub Command1_Click()MsgBox GetHDlist()End Sub

 

 

 

逻辑盘序列号:

  Private Declare Function GetVolumeInformation& Lib "KERNEL32" _  Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, _  ByVal pVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, _  lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, _  lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, _  ByVal nFileSystemNameSize As Long)  Private Const MAX_FILENAME_LEN = 256

  Public Function DriveSerial(ByVal sDrv As String) As Long    Dim RetVal     As Long    Dim str     As String * MAX_FILENAME_LEN    Dim str2     As String * MAX_FILENAME_LEN    Dim a     As Long    Dim b     As Long    GetVolumeInformation sDrv & ":/", str, MAX_FILENAME_LEN, RetVal, _    a, b, str2, MAX_FILENAME_LEN    DriveSerial = RetVal  End Function

Private Sub Command1_Click()    Dim mCode As Long     mCode = DriveSerial("C")     machine.Text = "c:" & mCode & " "     machine.Text = machine.Text & "d:" & DriveSerial("D")End Sub



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3