您的位置 首页 > 电脑维修

vb硬盘序列号

vb硬盘序列号

       现在,请允许我来为大家解答一些关于vb硬盘序列号的问题,希望我的回答能够给大家带来一些启示。关于vb硬盘序列号的讨论,我们开始吧。

1.vb中用什么东西可以看到电脑硬盘的序列号啊?

2.vb 获取硬盘序列号序列号

3.求获取SCSI硬盘物理序列号的VB源代码

4.关于取硬盘序列号的问题VB与ASP

5.VB获取硬盘物理序列号 源码

6.vb如何读取硬盘序列号丶总容量

vb硬盘序列号

vb中用什么东西可以看到电脑硬盘的序列号啊?

       原作: Bardo

       '出处: 《东方热讯》网站

       '网址: www.easthot.net

       '****************************************************************

       '(如需转载,请不在删除以上信息,否则视为侵权!)

       '****************************************************************

        要这个有什么用?可以生成与硬件相关的注册码。控制软件不重复使用!那么,很多多人认为VB实现不了。自然没有找到方法,一定是实现不了。然而,感谢WWW,我们能在上面找到VC的源码,DELPHI的源码。但是VB的就是见不到。为此,我决定将VC的源码改成VB的,以下即是:

       'VC原作说明部分(再发行时,请注意采用注解的方式,请不要删除的方式侵权,谢谢!)

       '*************************************************************************

       '通常情况下,我们通过=&HEC命令对IDE端口进行监测.获取硬盘信息.

       '一般情况下,我们就写个VXD或者DRIVER来完成.但是现在,通过MS的S.M.A.R.T.接口,

       '我们可以直接从RING3调用API DeviceIoControl()来获取硬盘信息.下面乃是我的例程:

       '另外,也有编译好的版本供大家平时使用.欢迎下载.

       '/*+++

       'HDID.CPP

       'Written by Lu Lin

       '

       '2000.11.3

       '---*/

       '*************************************************************************

       'VB程序编制: BARDO

       '本来我想写一个只取盘动物理序列号的。但是考虑到大家学习的方便。还是将原来的代码

       '全部翻译了出来。如果你需要单一的只查一个主硬盘的序列号的程序,欢迎到本站下载。

       '

       '网站:东方热讯:mands".

        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.

        bReserved As Byte 'reserved for future use. Must be zero.

       End Type

       Private Type TSENDCMDINPARAMS

        cBufferSize As Long 'Buffer size in bytes

        irDriveRegs As TIDEREGS 'Structure with drive register values.

        bDriveNumber As Byte 'Physical drive number to send 'command to (0,1,2,3).

        bReserved(2) As Byte 'Reserved for future expansion.

        dwReserved(3) As Long 'For future use.

        ''BYTE bBuffer(1) 'Input buffer.

       End Type

       Private Type TDRIVERSTATUS

        bDriverError As Byte 'Error code from driver, 'or 0 if no error.

        bIDEStatus As Byte 'Contents of IDE Error register.

        'Only valid when bDriverError 'is SMART_IDE_ERROR.

        bReserved(1) As Byte 'Reserved for future expansion.

        dwReserved(1) As Long 'Reserved for future expansion.

       End Type

       Private Type TSENDCMDOUTPARAMS

        cBufferSize As Long 'Size of bBuffer in bytes

        DRIVERSTATUS As TDRIVERSTATUS 'Driver status structure.

        bBuffer(511) As Byte 'Buffer of arbitrary length

        'in which to store the data read from the drive.

       End Type

       '下面的结构是要从另一结构复制数据过来的,所以,必须是字节数与VC的完全一致

       '而不能用兼容变量,但这里的我们还是用了兼容变量,Integer,因为此结构中这一

       '类型的的变量程序中没有用到,如果要用到,建议改为Byte类型。因为VB没有USHORT

       Private Type TIDSECTOR

        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

        wBufferSize As Integer

        wECCSize As Integer

        sFirmwareRev(7) As Byte

        sModelNumber(39) As Byte

        wMoreVendorUnique As Integer

        wDoubleWordIO As Integer

        wCapabilities As Integer

        wReserved1 As Integer

        wPIOTiming As Integer

        wDMATiming As Integer

        wBS As Integer

        wNumCurrentCyls As Integer

        wNumCurrentHeads As Integer

        wNumCurrentSectorsPerTrack As Integer

        ulCurrentSectorCapacity(3) As Byte '这里只能用byte,因为VB没有无符号的LONG型变量

        wMultSectorStuff As Integer

        ulTotalAddressableSectors(3) As Byte '这里只能用byte,因为VB没有无符号的LONG型变量

        wSingleWordDMA As Integer

        wMultiWordDMA As Integer

        bReserved(127) As Byte

       End Type

       '/*+++

       'Global vars

       '---*/

       Private vers As TGETVERSIONOUTPARAMS

       Private in_data As TSENDCMDINPARAMS

       Private out_data As TSENDCMDOUTPARAMS

       Private h As Long

       Private i As Long

       Private j As Byte

       Private Type OSVERSIONINFO

        dwOSVersionInfoSize As Long

        dwMajorVersion As Long

        dwMinorVersion As Long

        dwBuildNumber As Long

        dwPlatformId As Long

        szCSDVersion As String * 128

       End Type

       Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" _

        (LpVersionInformation As OSVERSIONINFO) As Long

       Private Const VER_PLATFORM_WIN32S = 0

       Private Const VER_PLATFORM_WIN32_WINDOWS = 1

       Private Const VER_PLATFORM_WIN32_NT = 2

       Private 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 Long

       Private Const CREATE_NEW = 1

       Private Const GENERIC_READ = &H80000000

       Private Const GENERIC_WRITE = &H40000000

       Private Const OPEN_EXISTING = 3

       Private Const FILE_SHARE_READ = &H1

       Private Const FILE_SHARE_WRITE = &H2

       Private Type OVERLAPPED

        Internal As Long

        InternalHigh As Long

        offset As Long

        OffsetHigh As Long

        hEvent As Long

       End Type

       Private 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, lpOverlapped As OVERLAPPED) As Long

       Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

       Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _

        hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)

       Private Sub CopyRight()

       'VC原版权代码(再发行时,请注意采用注解的方式,请不要删除的方式侵权,谢谢!)

       '****************************************************************************

       ' cerr<<endl<<"HDD identifier v1.0 for WIN95/98/Me/NT/2000. written by Lu Lin"<<endl

       ' cerr<<"For more information, please visit Inside Programming: "<<endl

       ' cerr<<"2000.11.3"<<endl<<endl

       '****************************************************************************

       Dim StrMsg As String

       StrMsg = StrMsg & "直接从RING3调用API DeviceIoControl()来获取硬盘信息的VB程序 "

       StrMsg = StrMsg & vbCrLf & "VC源作板权信息如下:"

       StrMsg = StrMsg & vbCrLf & "***********************************************************"

       StrMsg = StrMsg & vbCrLf & "HDD identifier v1.0 for WIN95/98/Me/NT/2000. written by Lu Lin"

       StrMsg = StrMsg & vbCrLf & "For more information, please visit Inside Programming: "

       StrMsg = StrMsg & vbCrLf & "2000.11.3"

       StrMsg = StrMsg & vbCrLf & "***********************************************************"

       StrMsg = StrMsg & vbCrLf & "VB程序编制:BARDO"

       StrMsg = StrMsg & vbCrLf & "网站:东方热讯:mand not supported, fails

       If (vers.fCapabilities And 1) <> 1 Then

        hdid9x = "Error: IDE identify command not supported."

        CloseHandle (h)

        Exit Function

       End If

       'Display IDE drive number detected

       Dim sPreOutStr As String

       sPreOutStr = DetectIDE(vers.bIDEDeviceMap)

       hdid9x = sPreOutStr

       'Identify the IDE drives

       For j = 0 To 3

        Dim phdinfo As TIDSECTOR

        Dim s(40) As Byte

        If (j And 1) = 1 Then

        in_data.irDriveRegs.bDriveHeadReg = &HB0

        Else

        in_data.irDriveRegs.bDriveHeadReg = &HA0

        End If

        If (vers.fCapabilities And (16 \ (2 ^ j))) = (16 \ (2 ^ j)) Then

        'We don't detect a ATAPI device.

        hdid9x = "Drive " & CStr(j + 1) & " is a ATAPI device, we don't detect it"

        Else

        in_data.irDriveRegs.bCommandReg = &HEC

        in_data.bDriveNumber = j

        in_data.irDriveRegs.bSectorCountReg = 1

        in_data.irDriveRegs.bSectorNumberReg = 1

        in_data.cBufferSize = 512

        lRet = DeviceIoControl(h, DFP_RECEIVE_DRIVE_DATA, in_data, Len(in_data), out_data, Len(out_data), ByVal i, olp)

        If lRet = 0 Then

        hdid9x = "DeviceIoControl failed:DFP_RECEIVE_DRIVE_DATA"

        CloseHandle (h)

        Exit Function

        End If

        Dim StrOut As String

        CopyMemory phdinfo, out_data.bBuffer(0), Len(phdinfo)

        CopyMemory s(0), phdinfo.sModelNumber(0), 40

        s(40) = 0

        ChangeByteOrder s, 40

        StrOut = ByteArrToString(s, 40)

        hdid9x = hdid9x & vbCrLf & "Module Number:" & StrOut

        CopyMemory s(0), phdinfo.sFirmwareRev(0), 8

        s(8) = 0

        ChangeByteOrder s, 8

        StrOut = ByteArrToString(s, 8)

        hdid9x = hdid9x & vbCrLf & "Firmware rev:" & StrOut

        CopyMemory s(0), phdinfo.sSerialNumber(0), 20

        s(20) = 0

        ChangeByteOrder s, 20

        StrOut = ByteArrToString(s, 20)

        hdid9x = hdid9x & vbCrLf & "Serial Number:" & StrOut

        CopyMemory s(0), phdinfo.ulTotalAddressableSectors(0), 4

        s(5) = 0

        Dim dblStrOut As Double

        dblStrOut = ByteArrToLong(s)

        hdid9x = hdid9x & vbCrLf & "Capacity:" & dblStrOut / 2 / 1024 & "M"

        End If

       Next j

       'Close handle before quit

       CloseHandle (h)

       CopyRight

       End Function

       Private Function hdidnt() As String

       Dim hd As String * 80

       Dim phdinfo As TIDSECTOR

       Dim s(40) As Byte

       Dim StrOut As String

       hdidnt = ""

       'We start in NT/Win2000

vb 获取硬盘序列号序列号

       软件注册比较复杂,你说的获取硬盘序列号只是第一步,然后需要发给开发商,用一个算法生成注册号,再发给你,你再把这个注册号注入程序,才能完成注册。

       开发商那边是加密,用户这边是解密,算法相反,可以复杂也可以简单。

       一般来说,要求用户提供用户名、地址、硬盘号等多种资料,组合生成一个数字,最简单用个网上找的MD5算法,生成20位注册号,用户端也用这个,然后比对输入的注册号是不是一样

       下面是网上给你找的硬盘号代码

       /wenzhang.asp?id=13

求获取SCSI硬盘物理序列号的VB源代码

       Option Explicit

       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)

       Const MAX_FILENAME_LEN = 256

       Private Sub Form_Load()

       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

       Me.Show

       Call GetVolumeInformation("C:\", str, MAX_FILENAME_LEN, RetVal, A, B, str2, MAX_FILENAME_LEN)

       Text1 = RetVal

       End Sub

关于取硬盘序列号的问题VB与ASP

       一、关于SCSI硬盘

       SCSI的硬盘很多根本没有物理序列号,很多有序列号也无法得到。

       这取决于SCSI卡,打个比方,一个单位对果信息公开,公布其每个单位的个人姓名与身份证号,那外界才能知道这个单位的每个人的这方面的情况,如果这个单位不公开,仅告诉你这个单位能为你做什么,那你就没办法了。

       很多SCSI卡接上硬盘后,它的硬盘是以一个整体来面向外界的,比如典型的RAID5,4个甚至更多的硬盘对外界来说,就象是在操作一个硬盘一样,至于数据的保存和处理是经过SCSI这个中间层去接管的,外界根本无法获知SCSI卡里面的详情(表现在win中,就是看起来它就是只有一个硬盘)。

       如果实在要知道SCSI卡后面硬盘的详情,那得了解某个SCSI卡的硬件接口的具体代码,而这个代码各SCSI卡是完全不同的,多数也是根本不公开的。

       二、关于IDE硬盘。

       IDE硬盘的序列号是比较容易得到的,也很容易在网上搜到相关的资料。但必需提示的一点是,IDE硬盘并不是所有的品牌、型号都拥有物理序号。

       SATA没有试过,不是很清想,你可以用IDE的代码去试试。

       三、在当前,抓硬盘物理序号只有一个用处,那就是得到机器唯一特征。很抱歉地说,现在的机器不会,也不允许让你通过一个硬件来得到机器的物征,因为这会给用户自身的安全带来很大的问题!曾经Intel不是想通过在CPU上加上ID来确定机器身份吗?后来因为绝大多数人的反感和抵制而中途而废。

       四、在当前,想得到一个机器的特征,只能通过多个硬件来确定!如硬盘型号、主板型号、内存型号、CPU型号等等。

VB获取硬盘物理序列号 源码

       您可以参考如下程序代码:

       ----------------------------

       磁盘序列号在每次软盘或硬盘格式化后都重新生成,并且不会重复。许多程序员用此加密。其实也可以修改该函数,可以得到磁盘卷标和文件系统类型信息。

       声明:

        Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long

       代码:

       Public Function GetCSerialNumber(sRoot As String) As Long

        Dim lSerialNum As Long

        Dim R As Long

        Dim strLabel As String, strType As String

        strLabel = String$(255, Chr$(0))

        '磁盘卷标

        strType = String$(255, Chr$(0))

        '文件系统类型 一般为 FAT

        R = GetVolumeInformation(sRoot, strLabel, Len(strLabel), lSerialNum, 0, 0, strType, Len(strType))

        GetCSerialNumber = lSerialNum

        '在 strLabel 中为 磁盘卷标

        '在 strType 中为 文件系统类型

       End Function

       用法:

       当驱动器不存在时,函数返回 0。如果是个非根目录,也将返回 0:

       Private Sub Form_Load()

       '注意一定要加盘符的\符号,否则有些无法读出.

       Me.Caption =GetCSerialNumber("c:\")

       End Sub

vb如何读取硬盘序列号丶总容量

       Private Declare Function GetVolumeInformation _

        Lib "kernel32" Alias "GetVolumeInformationA" _

        (ByVal lpRootPathName As String, _

        ByVal lpszVolumeNameBuffer As String, _

        ByVal lVolumeNameSize As Long, _

        lpVolumeSerialNumber As Long, _

        lpMaximumComponentLength As Long, _

        lpFileSystemFlags As Long, _

        ByVal lpszFileSystemNameBuffer As String, _

        ByVal nFileSystemNameSize As Long) As Long

       Public Function GetVolumeSerialNumber(ByVal RootPath As String) As String

        Dim lpszVolumeNameBuffer As String

        Dim lpszFileSystemNameBuffer As String

        Dim lVolumeNameSize As Long

        Dim lpVolumeSerialNumber As Long

        Dim lpMaximumComponentLength As Long

        Dim lpFileSystemFlags As Long

        Dim nFileSystemNameSize As Long

        Dim lRetVal As Long

       lpVolumeSerialNumber = 0

        lpMaximumComponentLength = 0

        lpFileSystemFlags = 0

       lpszVolumeNameBuffer = Space$(255)

        lpszFileSystemNameBuffer = Space(255)

       lVolumeNameSize = Len(lpszVolumeNameBuffer)

        nFileSystemNameSize = Len(lpszFileSystemNameBuffer)

        lRetVal = GetVolumeInformation(RootPath, _

        lpszVolumeNameBuffer, _

        lVolumeNameSize, _

        lpVolumeSerialNumber, _

        lpMaximumComponentLength, _

        lpFileSystemFlags, _

        lpszFileSystemNameBuffer, _

        nFileSystemNameSize)

        GetVolumeSerialNumber = Hex$(lpVolumeSerialNumber)

       End Function

       Private Sub Command1_Click()

        Dim sRetVal As String

        sRetVal = GetVolumeSerialNumber("C:\")

        MsgBox "VolumeSerialNumber is: " & sRetVal

       End Sub

       只需在窗体建一个COMMAND1。

win64 下如何用VB获取硬盘参数,序列号?

       Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias _

        "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, _

        ByVal lpBuffer As String) As Long

       取得当前所有盘符

       Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" _

        (ByVal nDrive As String) As Long

       判断盘符类型

       Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) As Long

       这个或者下面函数取得磁盘信息

       Private Declare Function GetDiskFreeSpaceEx Lib "kernel32.dll" Alias "GetDiskFreeSpaceExA" (ByVal lpDirectoryName As String, ByRef lpFreeBytesAvailableToCaller As ULARGE_INTEGER, ByRef lpTotalNumberOfBytes As ULARGE_INTEGER, ByRef lpTotalNumberOfFreeBytes As ULARGE_INTEGER) As Long

       private Declare Function MymachineC Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long

       dim ReturnValue As Long, HDSN, MaxLen As Long, SysFlag As Long, VolName As String, fSysName As String

       private sub commadn1_click()

       ReturnValue = MymachineC("C:\", VolName, 256, HDSN, MaxLen, SysFlag, fSysName, 256)

       msgbox hdsn,,"硬盘序列号"

       end sub

       好了,今天我们就此结束对“vb硬盘序列号”的讲解。希望您已经对这个主题有了更深入的认识和理解。如果您有任何问题或需要进一步的信息,请随时告诉我,我将竭诚为您服务。

热门文章