NET获取硬盘序列号的几个方法

合集下载

硬盘物理序列号的得到方法_hemfanings

硬盘物理序列号的得到方法_hemfanings

网址或邮箱: (选填)
内 容:插入表情▼ 闪光字
验证码: 请点击后输入四位验证码,字母不区分大小写
看不清?
取消回复", , 48)
For Each objItem In colItems
MsgValue = MsgValue & vbCrLf & "主板=" & objItem.SerialNumber
Next
MsgValue = MsgValue & vbCrLf & "硬盘 = " & objItem.SerialNumber
Next
'获取主板序列号
Set colItems = objWMIService.ExecQuery("Select * from
'获取CPU ID
Set colItems = objWMIService.ExecQuery("Select * from
Win32_Processor", , 48)
For Each objItem In colItems
•DELPHI中读取硬盘的物理序列号 •C++ 硬盘物理序列号
•获取硬盘物理序列号 •取得硬盘物理和逻辑序列号
•VB 利用硬盘物理序列号进行软件... •初步实现系统级拦截应用程序取硬...
48)
For Each objItem In colItems
MsgValue = MsgValue & vbCrLf & "BIOS= " & objItem.SerialNumber

查询电脑硬盘序列号的方法

查询电脑硬盘序列号的方法

查询电脑硬盘序列号的方法1.通过操作系统查询大多数操作系统都提供了查询硬盘序列号的功能,以下是在Windows 和Mac操作系统上查询的方法:- Windows操作系统:a.打开“我的电脑”或者“此电脑”文件夹。

b.右键点击硬盘驱动器,选择“属性”。

c.在“属性”对话框中,在“常规”选项卡中可以看到“硬件编号”或者“硬件ID”,这个就是硬盘的序列号。

- Mac操作系统:a.点击“应用程序”文件夹,然后点击“实用工具”文件夹。

b.打开“磁盘工具”。

c.在“磁盘工具”中选择硬盘,然后点击“信息”按钮。

d.在弹出的窗口中,可以看到硬盘的序列号。

2.通过命令行查询通过使用命令行工具也可以查询电脑硬盘序列号,以下是在Windows 和Mac操作系统上查询的方法:- Windows操作系统:a. 打开命令提示符,可以通过按下Win + R键,然后输入“cmd”或者直接“命令提示符”来打开。

b. 在命令提示符中输入以下命令:wmic diskdrive get serialnumberc.根据电脑硬盘数量,会列出每个硬盘的序列号。

- Mac操作系统:a.打开“应用程序”文件夹,然后点击“实用工具”文件夹。

b.打开“终端”。

c. 在终端中输入以下命令:diskutil info disk0 , grep Serial Numberd.根据电脑硬盘数量,会列出每个硬盘的序列号。

3.通过硬件设备管理工具查询硬件设备管理工具是第三方软件,可以用于查询电脑硬盘序列号。

- CrystalDiskInfo:这是一款免费的硬盘健康和温度监控工具,同时还能显示硬盘的序列号。

-HWiNFO:这是一款全面的硬件信息和监控工具,可以提供硬盘的详细信息,包括序列号。

- Speccy:这是一款由Piriform公司开发的硬件信息工具,可以提供硬盘的序列号等详细信息。

通过安装和使用这些硬件设备管理工具,可以轻松地查询电脑的硬盘序列号。

总结:通过操作系统和硬件设备管理工具可以查询电脑硬盘序列号。

硬盘序列号获取的实际操作

硬盘序列号获取的实际操作

硬盘序列号是基本常识,然后我就学习及深入的研究硬盘序列号,在这里和大家一起探讨硬盘序列号的使用方法,希望对大家有用。
要获取硬盘序列号,需要访问注册表.实际操作如下,建立一个新的窗体,在上面添加一个标签Label1,一个按钮command1,实现:按下按钮,在标签上显示硬盘序列号.
代码:
namespace monPrj {
#region how use this?
/*
string sVol = getvol.GetVolOf("C");
*/
#endregion
public class getvol{
[DllImport("kernel32.dll")]
End Type
Private Sub Command1_Click()
Dim x As DRIVER_INFO_OK
Dim i As Long
If IsWinNT = 1 Then
i = ReadPhysicalDriveInNT(ByVal 0, ByVal VarPtr(x), ByVal 256)
Private Declare Function ReadPhysicalDriveInNT Lib "DiskID.DLL" (driveID As Long, buffer As Long, bufLen As Long) As Long
Private Type DRIVER_INFO_OK
SerialNum: LongInt;
VolLabel: Packed Array [0..10] of Char;
FileSysType: Packed Array [0..7] of Char;

获取硬盘序列号的代码

获取硬盘序列号的代码

获取硬盘序列号的代码网上有很多获取硬盘序列号的代码,但大部分都只能取得逻辑分区的序列号,而不能取得硬盘的物理序列号。

我们知道,逻辑分区的序列号是FORMAT时产生的,重新FORMAT将会改变。

这对于要求唯一识别码的程式来说是致命的。

这段代码利用API可以取得物理硬盘的很多特性,包括硬盘出厂时的唯一编号。

这段代码我是从CSDN 论坛获得,原作者不详。

我将其稍做修改和增添,独立出两个常用的函数:GetDiskVolume 、GetHardDiskInfo ......'====================================== ======'模块功能: 取得硬盘的信息'编程:来自互联网,阿勇修改'更新日期:2005/7/8'调用方法:' GetDiskVolume() 取得逻辑盘的序列号' GetHardDiskInfo() 取得物理盘的型号或序列号'====================================== ======Private Const MAX_IDE_DRIVES As Long = 4 ' Max number of drives assuming primary/secondary, master/slave topology Private Const READ_ATTRIBUTE_BUFFER_SIZE As Long = 512 Private Const IDENTIFY_BUFFER_SIZE As Long = 512Private Const READ_THRESHOLD_BUFFER_SIZE As Long = 512Private Const DFP_GET_VERSION As Long = &H74080Private Const DFP_SEND_DRIVE_COMMAND As Long = &H7C084Private Const DFP_RECEIVE_DRIVE_DATA As Long = &H7C088Private Type GETVERSIONOUTPARAMSbVersion 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 Const CAP_IDE_ID_FUNCTION As Long = 1 ' ATA ID command supportedPrivate Const CAP_IDE_ATAPI_ID As Long = 2 ' ATAPI ID command supportedPrivate Const CAP_IDE_EXECUTE_SMART_FUNCTION As Long = 4 ' SMART commannds supportedPrivate Type IDEREGSbFeaturesReg As Byte ' Used for specifying SMART "commands".bSectorCountReg As Byte ' IDE sector count registerbSectorNumberReg As Byte ' IDE sector number registerbCylLowReg As Byte ' IDE low order cylinder valuebCylHighReg As Byte ' IDE high order cylinder valuebDriveHeadReg As Byte ' IDE drive/head registerbCommandReg As Byte ' Actual IDE command.bReserved As Byte ' reserved for future use. Must be zero.End TypePrivate Type SENDCMDINPARAMScBufferSize As Long ' Buffer size in bytesirDriveRegs As IDEREGS ' 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.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 Const SMART_CYL_LOW As Long = &H4FPrivate Const SMART_CYL_HI As Long = &HC2Private Type DRIVERSTATUSbDriverError As Byte ' Error code from driver,bIDEStatus As Byte ' Contents of IDE Error register.bReserved(1) As Byte ' Reserved for future expansion.dwReserved(1) As Long ' Reserved for future expansion.End TypePrivate Const SMART_NO_ERROR As Long = 0 ' No errorPrivate Const SMART_IDE_ERROR As Long = 1 ' Error fromIDE controllerPrivate Const SMART_INVALID_FLAG As Long = 2 ' Invalid command flagPrivate Const SMART_INVALID_COMMAND As Long = 3 ' Invalid command bytePrivate Const SMART_INVALID_BUFFER As Long = 4 ' Bad buffer (null, invalid addr..)Private Const SMART_INVALID_DRIVE As Long = 5 ' Drive number not validPrivate Const SMART_INVALID_IOCTL As Long = 6 ' Invalid IOCTLPrivate Const SMART_ERROR_NO_MEM As Long = 7 ' Could not lock user's bufferPrivate Const SMART_INVALID_REGISTER As Long = 8 ' Some IDE Register not validPrivate Const SMART_NOT_SUPPORTED As Long = 9 ' Invalid cmd flag setPrivate Const SMART_NO_IDE_DEVICE As Long = 10 ' Cmd issued to device not presentPrivate Type SENDCMDOUTPARAMScBufferSize As Long ' Size of bBuffer in bytesdrvStatus As DRIVERSTATUS ' Driver status structure.bBuffer(0) As Byte ' Buffer of arbitrary length in which to store the data read from the ' drive.End TypePrivate Const SMART_READ_ATTRIBUTE_VALUES As Long = &HD0 ' ATA4: RenamedPrivate Const SMART_READ_ATTRIBUTE_THRESHOLDS AsLong = &HD1 ' Obsoleted in ATA4!Private Const SMART_ENABLE_DISABLE_ATTRIBUTE_AUTOSAVE As Long = &HD2Private Const SMART_SAVE_ATTRIBUTE_VALUES As Long = &HD3Private Const SMART_EXECUTE_OFFLINE_IMMEDIATE As Long = &HD4 ' ATA4Private Const SMART_ENABLE_SMART_OPERATIONS As Long = &HD8Private Const SMART_DISABLE_SMART_OPERATIONS As Long = &HD9Private Const SMART_RETURN_SMART_STATUS As Long = &HDAPrivate Type DRIVEATTRIBUTEbAttrID As Byte ' Identifies which attributewStatusFlags As Integer ' see bit definitions belowbAttrValue As Byte ' Current normalized valuebWorstValue As Byte ' How bad has it ever been?bRawValue(5) As Byte ' Un-normalized valuebReserved As Byte ' ...End TypePrivate Type ATTRTHRESHOLDbAttrID As Byte ' Identifies which attributebWarrantyThreshold As Byte ' Triggering valuebReserved(9) As Byte ' ...End TypePrivate Type IDSECTORwGenConfig As IntegerwNumCyls As IntegerwReserved As IntegerwNumHeads As IntegerwBytesPerTrack As IntegerwBytesPerSector As IntegerwSectorsPerTrack As IntegerwVendorUnique(2) As IntegersSerialNumber(19) As BytewBufferType As IntegerwBufferSize As IntegerwECCSize As IntegersFirmwareRev(7) As BytesModelNumber(39) As BytewMoreVendorUnique As IntegerwDoubleWordIO As IntegerwCapabilities As IntegerwReserved1 As IntegerwPIOTiming As IntegerwDMATiming As IntegerwBS As IntegerwNumCurrentCyls As IntegerwNumCurrentHeads As IntegerwNumCurrentSectorsPerTrack As IntegerulCurrentSectorCapacity(3) As Byte '这里只能用byte,因为VB 没有无符号的LONG型变量wMultSectorStuff As IntegerulTotalAddressableSectors(3) As Byte '这里只能用byte,因为VB没有无符号的LONG型变量wSingleWordDMA As IntegerwMultiWordDMA As IntegerbReserved(127) As ByteEnd TypePrivate Const ATTR_INVALID As Long = 0Private Const ATTR_READ_ERROR_RATE As Long = 1Private Const ATTR_THROUGHPUT_PERF As Long = 2Private Const ATTR_SPIN_UP_TIME As Long = 3Private Const ATTR_START_STOP_COUNT As Long = 4Private Const ATTR_REALLOC_SECTOR_COUNT As Long = 5 Private Const ATTR_READ_CHANNEL_MARGIN As Long = 6 Private Const ATTR_SEEK_ERROR_RATE As Long = 7Private Const ATTR_SEEK_TIME_PERF As Long = 8Private Const ATTR_POWER_ON_HRS_COUNT As Long = 9 Private Const ATTR_SPIN_RETRY_COUNT As Long = 10Private Const ATTR_CALIBRATION_RETRY_COUNT As Long = 11Private Const ATTR_POWER_CYCLE_COUNT As Long = 12Private Const PRE_FAILURE_WARRANTY As Long = &H1Private Const ON_LINE_COLLECTION As Long = &H2Private Const PERFORMANCE_ATTRIBUTE As Long = &H4Private Const ERROR_RATE_ATTRIBUTE As Long = &H8Private Const EVENT_COUNT_ATTRIBUTE As Long = &H10 Private Const SELF_PRESERVING_ATTRIBUTE As Long = &H20Private Const NUM_ATTRIBUTE_STRUCTS As Long = 30Private Const INVALID_HANDLE_VALUE As Long = -1Private Const VER_PLATFORM_WIN32s As Long = 0Private Const VER_PLATFORM_WIN32_WINDOWS As Long = 1Private Const VER_PLATFORM_WIN32_NT As Long = 2Private Type OSVERSIONINFOdwOSVersionInfoSize As LongdwMajorVersion As LongdwMinorVersion As LongdwBuildNumber As LongdwPlatformId As LongszCSDVersion As String * 128 ' Maintenance string for PSS usageEnd TypePrivate Const CREATE_NEW As Long = 1Private Const GENERIC_READ As Long = &H80000000Private Const GENERIC_WRITE As Long = &H40000000Private Const FILE_SHARE_READ As Long = &H1Private Const FILE_SHARE_WRITE As Long = &H2Private Const OPEN_EXISTING As Long = 3Private m_DiskInfo As IDSECTORPrivate Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As LongPrivate 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 AsLong) 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 Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)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'信息类型枚举Enum eumInfoTypehdmodelsn = 0hdOnlyModel = 1hdOnlySN = 2End Enum'磁盘通道枚举Enum eumDiskNohdPrimaryMaster = 0hdPrimarySlave = 1hdSecondaryMaster = 2hdSecondarySlave = 3End Enum'取得逻辑盘序列号 (非唯一)Function GetDiskVolume(Optional ByVal strDiskName = "C") As StringDim TempStr1 As String * 256, TempStr2 As String * 256Dim TempLon1 As Long, TempLon2 As Long, GetVal As Long Dim tmpVol As StringCall GetVolumeInformation(strDiskName & ":\", TempStr1, 256, GetVal, TempLon1, TempLon2, TempStr2, 256)If GetVal = 0 ThentmpVol = ""ElsetmpVol = Hex(GetVal)tmpVol = String(8 - Len(tmpVol), "0") & tmpVoltmpVol = Left(tmpVol, 4) & "-" & Right(tmpVol, 4)End IfGetDiskVolume = tmpVolEnd Function'取得硬盘信息:型号/物理系列号(唯一)Function GetHardDiskInfo(Optional ByVal numDisk As eumDiskNo = hdPrimaryMaster, Optional ByVal numType As eumInfoType = hdOnlySN) As StringIf GetDiskInfo(numDisk) = 1 ThenDim pSerialNumber As String, pModelNumber As StringpSerialNumber = StrConv(m_DiskInfo.sSerialNumber, vbUnicode)pModelNumber = StrConv(m_DiskInfo.sModelNumber, vbUnicode)Select Case numTypeCase hdOnlyModel '仅型号GetHardDiskInfo = Trim(pModelNumber)Case hdOnlySN '仅系列号GetHardDiskInfo = Trim(pSerialNumber)Case Else '型号,系列号GetHardDiskInfo = Trim(pModelNumber) & "," & Trim(pSerialNumber)End SelectEnd IfEnd FunctionPrivate Function OpenSMART(ByVal nDrive As Byte) As Long Dim hSMARTIOCTL As LongDim hd As StringDim VersionInfo As OSVERSIONINFOhSMARTIOCTL = INVALID_HANDLE_VALUEVersionInfo.dwOSVersionInfoSize = Len(VersionInfo)GetVersionEx VersionInfoSelect Case VersionInfo.dwPlatformIdCase VER_PLATFORM_WIN32sOpenSMART = hSMARTIOCTLCase VER_PLATFORM_WIN32_WINDOWShSMARTIOCTL = CreateFile("\\.\SMARTVSD", 0, 0, 0, CREATE_NEW, 0, 0)Case VER_PLATFORM_WIN32_NTIf nDrive < MAX_IDE_DRIVES Thenhd = "\\.\PhysicalDrive" & nDrivehSMARTIOCTL = CreateFile(hd, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0)End IfEnd SelectOpenSMART = hSMARTIOCTLEnd FunctionPrivate Function DoIDENTIFY(ByVal hSMARTIOCTL As Long, pSCIP As SENDCMDINPARAMS, pSCOP() As Byte, ByVal bIDCmd As Byte, ByVal bDriveNum As Byte, lpcbBytesReturned As Long) As BooleanpSCIP.cBufferSize = IDENTIFY_BUFFER_SIZEpSCIP.irDriveRegs.bFeaturesReg = 0pSCIP.irDriveRegs.bSectorCountReg = 1pSCIP.irDriveRegs.bSectorNumberReg = 1pSCIP.irDriveRegs.bCylLowReg = 0pSCIP.irDriveRegs.bCylHighReg = 0pSCIP.irDriveRegs.bDriveHeadReg = &HA0 Or ((bDriveNum And 1) * 2 ^ 4)'pSCIP.irDriveRegs.bCommandReg = bIDCmdpSCIP.bDriveNumber = bDriveNumpSCIP.cBufferSize = IDENTIFY_BUFFER_SIZEDoIDENTIFY = CBool(DeviceIoControl(hSMARTIOCTL, DFP_RECEIVE_DRIVE_DATA, _pSCIP, 32, _pSCOP(0), 528, _lpcbBytesReturned, 0))End FunctionPrivate Function DoEnableSMART(ByVal hSMARTIOCTL As Long, pSCIP As SENDCMDINPARAMS, pSCOP As SENDCMDOUTPARAMS, ByVal bDriveNum As Byte, lpcbBytesReturned As Long) As BooleanpSCIP.cBufferSize = 0pSCIP.irDriveRegs.bFeaturesReg = SMART_ENABLE_SMART_OPERATIONSpSCIP.irDriveRegs.bSectorCountReg = 1pSCIP.irDriveRegs.bSectorNumberReg = 1pSCIP.irDriveRegs.bCylLowReg = SMART_CYL_LOWpSCIP.irDriveRegs.bCylHighReg = SMART_CYL_HIpSCIP.irDriveRegs.bDriveHeadReg = &HA0 Or ((bDriveNum And 1) * 2 ^ 4)pSCIP.irDriveRegs.bCommandReg = IDE_EXECUTE_SMART_FUNCTIONpSCIP.bDriveNumber = bDriveNumDoEnableSMART = CBool(DeviceIoControl(hSMARTIOCTL, DFP_SEND_DRIVE_COMMAND, _pSCIP, LenB(pSCIP) - 1, _pSCOP, LenB(pSCOP) - 1, _lpcbBytesReturned, 0))End Function'---------------------------------------------------------------------'---------------------------------------------------------------------Private Sub ChangeByteOrder(szString() As Byte, ByVal uscStrSize As Integer)Dim i As IntegerDim bTemp As ByteFor i = 0 To uscStrSize - 1 Step 2bTemp = szString(i)szString(i) = szString(i + 1)szString(i + 1) = bTempNext iEnd SubPrivate Sub DisplayIdInfo(pids As IDSECTOR, pSCIP As SENDCMDINPARAMS, ByVal bIDCmd As Byte, ByVal bDfpDriveMap As Byte, ByVal bDriveNum As Byte)ChangeByteOrder pids.sModelNumber, UBound(pids.sModelNumber) + 1ChangeByteOrder pids.sFirmwareRev, UBound(pids.sFirmwareRev) + 1ChangeByteOrder pids.sSerialNumber, UBound(pids.sSerialNumber) + 1End SubPublic Function GetDiskInfo(ByVal nDrive As Byte) As LongDim hSMARTIOCTL As LongDim cbBytesReturned As LongDim VersionParams As GETVERSIONOUTPARAMSDim scip As SENDCMDINPARAMSDim scop() As ByteDim OutCmd As SENDCMDOUTPARAMSDim bDfpDriveMap As ByteDim bIDCmd As Byte ' IDE or ATAPI IDENTIFY cmdDim uDisk As IDSECTORm_DiskInfo = uDisk''hSMARTIOCTL = OpenSMART(nDrive)If hSMARTIOCTL <> INVALID_HANDLE_VALUE ThenCall DeviceIoControl(hSMARTIOCTL, DFP_GET_VERSION, ByVal 0, 0, VersionParams, Len(VersionParams), cbBytesReturned, 0)If Not (VersionParams.bIDEDeviceMap \ 2 ^ nDrive And &H10) ThenIf DoEnableSMART(hSMARTIOCTL, scip, OutCmd, nDrive, cbBytesReturned) ThenbDfpDriveMap = bDfpDriveMap Or 2 ^ nDriveEnd IfEnd IfbIDCmd = IIf((VersionParams.bIDEDeviceMap \ 2 ^ nDrive And &H10), IDE_ATAPI_ID, IDE_ID_FUNCTION)ReDim scop(LenB(OutCmd) + IDENTIFY_BUFFER_SIZE - 1) As ByteIf DoIDENTIFY(hSMARTIOCTL, scip, scop, bIDCmd, nDrive, cbBytesReturned) ThenCopyMemory m_DiskInfo, scop(LenB(OutCmd) - 4), LenB(m_DiskInfo)Call DisplayIdInfo(m_DiskInfo, scip, bIDCmd, bDfpDriveMap, nDrive)CloseHandle hSMARTIOCTLGetDiskInfo = 1Exit Function '>---> Bottom End IfCloseHandle hSMARTIOCTL GetDiskInfo = 0Else 'NOT HSMARTIOCTL... GetDiskInfo = -1End IfEnd Function。

win10查看硬盘序列号

win10查看硬盘序列号

查看硬盘序列号
第一步:win+r
第二步:cmd
第三步:diskpart
第四步:选“是”
第五步:select disk 0
第六步:detail disk
第七步:复制序列号
第八步:粘贴序列号
查看硬盘序列号详细请看一下操作:第一步:win+r(两个键一起按)
左下角会弹出以下输入框。

第二步:输入“cmd”(在输入框内填上“cmd”三个英文字母,大小写都可以)
输入“cmd”后,按<回车(enter)键>或者鼠标点【确定】按钮。

弹出以下弹窗口。

第三步:输入“diskpart”(在光标闪烁的地方输入“diskpart”)
输入“diskpart”后,按<回车(enter)键>。

弹出如下弹窗口。

第四步:选“是”(鼠标点击“是”即可)
鼠标点击“是”后,弹出如下弹窗口。

第五步:输入命令“select disk 0”(在光标闪烁的地
方输入命令“select disk 0”,选取磁盘为0的磁盘,可以输入命令“list disk”来查看硬盘数量)
第六步:然后再输入命令“detail disk”(在光标闪烁的地方输入命令“detail disk”)
第七步:复制序列号(鼠标左键选择要复制的内容,
然后右击即可)
第八步:粘贴序列号(在记事本或者word中,ctrl+v 或者右击粘贴即可)。

如何得到唯一的硬盘序号

如何得到唯一的硬盘序号

如何得到唯一的硬盘序号/educast/article/details/83643732012不正确的序列号利用GetVolumelnformation获取的计算机硬盘卷序列号,不是正确的唯一序列号:01.voidCWJGISApp::Register()02.{03. DWORDVolumeSerialNumber;04. GetVolumeInformation("c:\\",NULL,NULL,&VolumeSeri aINumber,NULL,NULL,NULL,NULL);05. charcharVolumeSerialNumber[l0];06. itoa(VolumeSerlalNumber,charVoIumeSerialNumber,10 );07. CString strTemp;08. strTemp.Format("%s",charVolumeSerialNumber);09.}该函数获取的序列号在硬盘格式化后会发生变化。

正确获取硬盘的序列号正确获取硬盘序列号代码如下:[cpp] view plain copyprint?1.//读般硬盘序列号函数2.char* CGetHDSerial::GetHDSerial()3.{4.m_buffer[0]='\n';5.//得到当前操作系统版本6.OSVERSIONINFO OSVersionInfo;7.OSVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSION INFO);8.GetVersionEx(&OSVersionInfo);9.if(OSVersionInfo.dwPlatformld != VER_PLATFORM_WIN32 _NT)10.{11.//Windows 9x/ME下读取硬盘序列号12.WORD m_wWin9xl'HDSerial[256];13.Win9xReadHDSerial(m_wWin9xHDSerial);14.strcpy (m_buffer, WORDT oChar(m _wWin9xHDSerial, 1 0, 19));15.}16.else17.{18.//Windows NT/2000/XP下读取硬盘序列弓19.DWORD m_wWinNTHDSerial[256];20.//判断是否有SCSI硬盘21.if (!WinNTReadIDEHDSerial(m_wWinNTHDSerial))22.WinNTReadSCSIHDSerial(m_wWinNTHDSerial);23.strcpy (m_buffer,DWORDT oChar(m_wWinNTHDSerial,1 0, 19));24.}25.return m_buffer;26.}27.//Windows NT/2000/XP下读取IDE硬盘序列号28.BOOL CGetHDScriaI::WinNTReadIDEHDSerial(DWORD * buffer)29.{30.BYTE JdOutCmd [sizeof(SENDCMDOUTPARAMS)+IDF NTIFY_BUFFER_SIZE - 1];31.BOOL bFlag = FALSE;32.int drive = 0;33.Char driveName[256];34.HANDLE hPhysicalDrivelOCTL=0;35.36.Sprintf(driveName,"\\\.\\PhysicalDrive%d",drive);37.//Windows NT/2000/XP 下创建文件需要管理员权限38.hPhysicalDriveIOCTL=CreateFile(driveName,GENERIC_ READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,N ULL,OPEN_EXISTING,0,NULL);39.40.if(hPhysicalDriveIOCTL!=INVALID_HANDLE_VALUE)41.{42.GETVERSIONOUTPARAMS VersionParams;43.DWORD cbBytesReturned=0;44.//得到驱动器的I/O控制器版本45.memser((void*)&VersionParams,0,sizeof(VersionParam s));46.if(DeviceIoControl(hPhysicalDriveIOCTL,IOCTL_GET_VE RSION,NULL,0,&VersionPaiams,sizeof(VersionParams),sizeof(Ver sionParams),47.&cbBytesReturned,NULL))48.{49.if(VersionParams.bIDEDeviceMap>0)50.{51.BYTE bIDCmd=0;//IDE或者ATAPI识别命令52.SENDCMDINPARAMS scip;53.//如果驱动器是光驱,采用命令IDE_ATAPI_IDENTIFY,command,否则采用命令IDE_ATA_IDENTIFY读取驱动器信息54.bIDCmd=(VersionParams.bIDEDeviceMap>>drive&0x10)? IDE_ATAPI_IDENTIFY : IDE_ATA_IDENTIFY;55.56.memset(&scip,0,sizeof(scip));57.memset(IdOutCmd,0,sizeof(IdOutCmd));58.//获取驱动器信息59.if(WinNTGetIDEHDInfo(hPhysicalDrivelOCTL,&scip,(PS ENDCMDOUTPARMS)&IdOutCmd,(BYTE)bIDCmd,(BYTE)drive,&c bBytesReturned))60.{61.int m=0;HORT*pldSector=(USHORT*)((PSENDCMDOUTPAR AMS)IdOutCmd)->bBuffer;63.for(m=0;m<256;m++)64.buffer[m]=pIdSector[m];65.bFlag=TRUE; //读取硬盘信息成功66.}67.}68.}69.CloseHandle(hPhysicalDriyeIOCTL); //关闭句柄70.}71.Return bFlag;72.}。

NET获取硬盘序列号的几个方法

NET获取硬盘序列号的几个方法
/// </summary>
[STAThread]
static void Main(string[] args)
{
//在Vista下面失败
ArrayList hdCollection = new ArrayList();
wmiSearcher.Query = new SelectQuery(
"Win32_DiskDrive",
"",
new string[] { "PNPDeviceID", "signature" }
string id = mo.Properties["signature"].Value.ToString().Trim();
return id;
}
有人说,使用 signature 需要程序以管理员身份运行(经过测试,2003系统上非管理员身份也可以运行),而且查询相关资料说,可能在2000系统上获取的值为空。
int i = 0;
foreach(ManagementObject wmi_HD in searcher.Get())
{
// get the hard drive from collection
使用上很简单:
HardDiskInfo hdd = AtapiDevice.GetHddInfo(0); // 第一个硬盘
Console.WriteLine("Module Number: {0}", hdd.ModuleNumber);
Console.WriteLine("Serial Number: {0}", hdd.SerialNumber);

NetApp常用管理命令总结

NetApp常用管理命令总结

一、系统相关:sysconfig -v 查看硬件信息,主要显示了硬件平台、版本、序列号、适配器(网卡、光纤卡等)、硬盘等硬件信息sysconfig -r 显示磁盘、raid、volume信息,等同于vol status -r-每个RAID会显示RAID的类型、RAID中每个磁盘是属于数据盘(data)、校验盘(parity 或dparity);-volume的划分信息;-磁盘基本信息,不属于RAID中的spare是本控制器的,partner是对端控制器的;-磁盘详细信息,HA=host adapter,比如4a表示slot4槽上卡的a口;shelf表示磁盘柜编号(如1表示1号盘柜);BAY表示在盘柜的第几块;-当有盘损坏的时候,可以用sysconfig -r命令来看具体是那块盘损坏了;二、配置RAID组:2.1 查看aggr信息aggr show_space -h aggr0 查看aggr空间的使用情况(-h是以MB为单位,-g是以GB为单位,如果不指定aggr,则列出所有aggr的space使用情况)vol status -r 可以看到每个aggr包含几个raid组(rg),每个raid组有几块磁盘等信息,并列出所有spare磁盘aggr status aggr0 -r 列出指定的aggr0的信息-aggr status [<atv-name>] [-d | -r | -v | -l | -c | -b | -s | -f | -i | -?]nas3020a*> aggr statusAggr State Status Optionsaggr0 online raid_dp, aggr rootnas3020a*> aggr status -v aggr2 查看aggr2的一些options的值,如raidsize默认是16(16块盘一个RAID,超过16块盘会创建一个新的raid组)Aggr State Status Optionsaggr2 online raid_dp, aggr nosnap=off, raidtype=raid_dp,raidsize=16,ignore_inconsistent=off,snapmirrored=off,resyncsnaptime=60,fs_size_fixed=off,snapshot_autodelete=on,lost_write_protect=onV olumes: <none>Plex /aggr2/plex0: online, normal, activeRAID group /aggr2/plex0/rg0: normalnas3020a*> aggr help options 查看aggr相关的options的帮助信息(options的功能介绍和使用方法)aggr options <aggr-name> <option-name> <option-val>The following commands are available; for more informationtype "aggr help options <command>"fs_size_fixed raidsize resyncsnaptime snapmirroredlost_write_protect raidtype root snapshot_autodeletenosnapnas3020a*> aggr help options raidtype 查看aggr的raidtype的说明和使用方法aggr options <atv-name> raidtype <new-type = {raid4 | raid_dp}>- change aggregate or traditional volume <atv-name>'sRAID type to <new-type>2.2 创建aggraggr create aggr1 -d 0a.20 0a.21 0a.22 0a.23 0a.24 指定哪些盘组成aggr1aggr create aggr2 8 指定由8块盘组成aggr2nas3020a*> aggr status aggr2 -r 查看aggr2的信息,可知系统自动从oa和ob各选择4块盘组成aggr2(负载分担)Aggregate aggr2 (online, raid_dp) (block checksums)Plex /aggr2/plex0 (online, normal, active)RAID group /aggr2/plex0/rg0 (normal)RAID Disk Device HA SHELF BAY CHAN Pool Type RPM Used (MB/blks) Phys (MB/blks)--------- ------ ------------- ---- ---- ---- ----- -------------- --------------dparity 0b.25 0b 1 9 FC:A - FCAL 10000 136000/278528000 137104/280790184parity 0a.35 0a 2 3 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0b.32 0b 2 0 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0a.25 0a 1 9 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0b.26 0b 1 10 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0a.36 0a 2 4 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0b.35 0b 2 3 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0a.26 0a 1 10 FC:A - FCAL 10000 136000/278528000 137104/280790184nas3020a*> aggr status aggr1 -r 查看aggr1的信息,由自定义的5块盘组成Aggregate aggr1 (online, raid_dp) (block checksums)Plex /aggr1/plex0 (online, normal, active)RAID group /aggr1/plex0/rg0 (normal)RAID Disk Device HA SHELF BAY CHAN Pool Type RPM Used (MB/blks) Phys (MB/blks)--------- ------ ------------- ---- ---- ---- ----- -------------- --------------dparity 0a.20 0a 1 4 FC:A - FCAL 10000 136000/278528000137104/280790184parity 0a.21 0a 1 5 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0a.22 0a 1 6 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0a.23 0a 1 7 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0a.24 0a 1 8 FC:A - FCAL 10000 136000/278528000 137104/2807901842.3 扩展aggraggr add命令的用法:nas3020a> aggr help addaggr add <aggr-name> [-f] [-n] [-g <raid-group>|new|all] <disk-list>- add disks listed in <disk-list> to aggregate <aggr-name>;<disk-list> is either:<ndisks>[@<disk-size>]or-d <disk-name1> <disk-name2> ... <disk-nameN>[-d <disk-name1> <disk-name2> ... <disk-nameN>].参数说明:-n 预演命令的执行,如:nas3020a> aggr add aggr2 -n 3aggr add aggr2 -d 0b.21 0a.27 0b.45-g 可以将盘加入指定的RG中(raid-group),或加入到一个新建的RG中(new),而使用all 选项,则会先向存在的RG里面添加磁盘,直到它们满了,然后再新创建RG 如果没有使用-g选项,则磁盘首先被加入到最近创建的RG里面,直到它满了才会创建新的RG(同"-g all")-d 指定具体的磁盘,如:aggr add aggr2 -d 0b.20 0a.24 0b.42...Addition of 3 disks to the aggregate has completed.实例演示:nas3020a*> aggr add aggr1 3 往aggr1中增加3块盘nas3020a*> aggr status aggr1 -r 再次查看后,发现在aggr1中原来的raid组中增加了3块数据盘(而不是增加一个raid组)Aggregate aggr1 (online, raid_dp) (block checksums)Plex /aggr1/plex0 (online, normal, active)RAID group /aggr1/plex0/rg0 (normal)RAID Disk Device HA SHELF BAY CHAN Pool Type RPM Used (MB/blks) Phys (MB/blks)--------- ------ ------------- ---- ---- ---- ----- -------------- --------------dparity 0a.20 0a 1 4 FC:A - FCAL 10000 136000/278528000 137104/280790184parity 0a.21 0a 1 5 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0a.22 0a 1 6 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0a.23 0a 1 7 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0a.24 0a 1 8 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0b.36 0b 2 4 FC:A - FCAL 10000 136000/278528000 137422/281442144data 0a.37 0a 2 5 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0b.27 0b 1 11 FC:A - FCAL 10000 136000/278528000 137104/280790184nas3020a*> aggr options aggr1 raidsize 4 设置随后加入aggr1中的盘,由4块盘组成一个raid 组,但是不影响前面已创建好的raid组nas3020a*> aggr add aggr1 4 然后再往aggr1中增加4块盘nas3020a*> aggr status aggr1 -r 再次查看aggr1的信息,发现aggr1中增加了一个4块盘组成的raid组Aggregate aggr1 (online, raid_dp) (block checksums)Plex /aggr1/plex0 (online, normal, active)RAID group /aggr1/plex0/rg0 (normal)RAID Disk Device HA SHELF BAY CHAN Pool Type RPM Used (MB/blks) Phys (MB/blks)--------- ------ ------------- ---- ---- ---- ----- -------------- --------------dparity 0a.20 0a 1 4 FC:A - FCAL 10000 136000/278528000 137104/280790184parity 0a.21 0a 1 5 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0a.22 0a 1 6 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0a.23 0a 1 7 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0a.24 0a 1 8 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0b.36 0b 2 4 FC:A - FCAL 10000 136000/278528000 137422/281442144data 0a.37 0a 2 5 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0b.27 0b 1 11 FC:A - FCAL 10000 136000/278528000 137104/280790184RAID group /aggr1/plex0/rg1 (normal)RAID Disk Device HA SHELF BAY CHAN Pool Type RPM Used (MB/blks) Phys (MB/blks)--------- ------ ------------- ---- ---- ---- ----- -------------- --------------dparity 0b.37 0b 2 5 FC:A - FCAL 10000 136000/278528000 139072/284820800parity 0a.38 0a 2 6 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0b.28 0b 1 12 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0a.27 0a 1 11 FC:A - FCAL 10000 136000/278528000 137104/280790184nas3020a*> aggr add aggr1 5 如果指定加入aggr1中的盘数是5,则会提示不是所有的盘都会用到,因为之前已经定义了raidsize=4Not all disks usedNote: preparing to add 2 data disks and 2 parity disks.Continue? ([y]es, [n]o, or [p]review RAID layout) y....nas3020a*> aggr status aggr1 -r 然后可以看到虽然指定加入aggr1的盘是5块,但是实际只增加了一个4块盘的raid组Aggregate aggr1 (online, raid_dp) (block checksums)Plex /aggr1/plex0 (online, normal, active)RAID group /aggr1/plex0/rg0 (normal)......RAID group /aggr1/plex0/rg1 (normal)......RAID group /aggr1/plex0/rg2 (normal)RAID Disk Device HA SHELF BAY CHAN Pool Type RPM Used (MB/blks) Phys (MB/blks)--------- ------ ------------- ---- ---- ---- ----- -------------- --------------dparity 0a.39 0a 2 7 FC:A - FCAL 10000 136000/278528000 137104/280790184parity 0b.40 0b 2 8 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0a.28 0a 1 12 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0b.29 0b 1 13 FC:A - FCAL 10000 136000/278528000 137422/281442144nas3020a*> aggr add aggr1 3 如果指定加入aggr1中的盘是3块,则虽然指定的raidsize是4,也只会加入3块盘组成的raid组Note: preparing to add 1 data disk and 2 parity disks.Continue? ([y]es, [n]o, or [p]review RAID layout) y......nas3020a*> aggr status aggr1 -r 新加入的是一个3块盘组成的raid组......RAID group /aggr1/plex0/rg3 (normal)RAID Disk Device HA SHELF BAY CHAN Pool Type RPM Used (MB/blks) Phys (MB/blks)--------- ------ ------------- ---- ---- ---- ----- -------------- --------------dparity 0a.40 0a 2 8 FC:A - FCAL 10000 136000/278528000 137104/280790184parity 0b.42 0b 2 10 FC:A - FCAL 10000 136000/278528000 137104/280790184data 0a.29 0a 1 13 FC:A - FCAL 10000 136000/278528000 137104/280790184补充:aggr创建后,其默认raidsize=16(aggr status aggr_name -v命令可以查看),假设创建了原始aggrN中包含了14块磁盘,使用aggr add aggrN 8命令往aggrN中增加8块磁盘,则结果会先往aggrN中原来的rg里增加2块数据盘,然后再用剩下的6块盘创建一个新的rg (4块数据,2块校验),而系统则会提示“增加6块数据盘和2块校验盘”(如果是RAID DP)。

计算机序列号查询方法

计算机序列号查询方法

计算机序列号查询方法全文共四篇示例,供读者参考第一篇示例:计算机序列号是每台计算机唯一的标识符,它是由计算机制造商在生产过程中赋予计算机的,用于区分不同计算机的标识符。

计算机序列号对于计算机的管理和维护非常重要,它可以帮助我们跟踪计算机的硬件信息、保修信息等。

如果你想查询计算机的序列号,可以通过以下几种方法来实现:1.在计算机上查找序列号大多数计算机在机箱上或底部都会有一个序列号标签,你可以直接在计算机上查找这个标签,上面通常会包含计算机的序列号、型号等信息。

如果你无法找到这个标签,也可以在计算机的启动界面中查看序列号信息,不同计算机在启动界面中显示方式可能会有一些差别。

2.在操作系统中查询序列号如果你想查询计算机的序列号但是无法直接在计算机上找到标签,可以在计算机的操作系统中查找。

在Windows系统中,你可以按下Win+R组合键打开运行窗口,然后输入cmd命令打开命令提示符,输入wmic bios get serialnumber命令查看计算机的序列号。

在Mac系统中,你可以点击苹果菜单,选择“关于本机”来查看计算机的序列号。

3.使用第三方软件查询序列号如果以上两种方法都无法查询到计算机的序列号,你还可以使用一些第三方软件来帮助你查询。

有许多免费的序列号查询工具可以帮助你快速准确地查找计算机的序列号,如Belarc Advisor、SIW等等。

在查询计算机序列号时,需要注意以下几点:1.保护个人信息安全在查询计算机序列号时,需要注意保护个人信息的安全,避免将序列号泄露给不法分子造成不必要的麻烦。

2.与厂家核对信息当查询计算机序列号时,最好与计算机的厂家核对信息,确保查询到的序列号是正确的,避免因为错误的信息导致后续维护和管理问题。

3.定期备份计算机信息在查询计算机序列号的也需要定期备份计算机的重要信息,确保在计算机出现故障或丢失时可以及时恢复数据。

查询计算机序列号是计算机管理和维护工作中非常重要的一环,通过查询计算机序列号可以帮助我们更好地管理计算机的硬件信息和保修情况,提升计算机的使用效率和安全性。

硬盘序列号查询方法

硬盘序列号查询方法

硬盘序列号查询方法硬盘序列号是硬盘的唯一标识,通过查询硬盘序列号可以方便用户进行硬盘的管理和维护。

下面将介绍几种常见的硬盘序列号查询方法。

1. Windows系统下的查询方法。

在Windows系统下,可以通过命令提示符来查询硬盘序列号。

首先打开命令提示符窗口,输入以下命令:wmic diskdrive get serialnumber。

然后按下回车键,系统会显示硬盘的序列号信息。

另外,也可以通过“设备管理器”来查询硬盘序列号。

在“设备管理器”中找到“磁盘驱动器”,右键点击对应的硬盘,选择“属性”,在“详细信息”选项卡中可以找到硬盘序列号的信息。

2. Linux系统下的查询方法。

在Linux系统下,可以通过命令行来查询硬盘序列号。

打开终端窗口,输入以下命令:sudo hdparm -i /dev/sda | grep SerialNo。

其中“/dev/sda”为硬盘的设备文件名,根据实际情况进行替换。

执行命令后,系统会显示硬盘的序列号信息。

3. Mac系统下的查询方法。

在Mac系统下,可以通过“系统报告”来查询硬盘序列号。

点击苹果菜单中的“关于本机”,在弹出的窗口中点击“系统报告”,然后在左侧的列表中选择“存储”,右侧会显示硬盘的序列号信息。

另外,也可以通过终端来查询硬盘序列号。

打开终端窗口,输入以下命令:system_profiler SPStorageDataType | grep "Serial Number"执行命令后,系统会显示硬盘的序列号信息。

4. BIOS中的查询方法。

在一些情况下,可以在计算机的BIOS中查询硬盘序列号。

在开机时按下相应的按键(通常是Del、F2或F10),进入BIOS界面,然后在相应的选项中可以找到硬盘的序列号信息。

总结。

通过以上介绍,我们可以看到,在不同的操作系统下,查询硬盘序列号的方法略有不同。

无论是在Windows、Linux还是Mac系统下,都可以通过命令行或系统工具来查询硬盘序列号。

查看硬盘序列号的方法

查看硬盘序列号的方法

查看硬盘序列号的方法硬盘序列号是硬盘的唯一标识符,用于识别不同的硬盘设备。

在某些情况下,我们可能需要查看硬盘序列号,例如在故障排除或系统管理中。

本文将介绍几种常见的方法来查看硬盘序列号。

方法一:使用命令行工具在Windows操作系统中,我们可以使用命令行工具来查看硬盘序列号。

首先,打开命令提示符窗口,可以通过按下Win+R键,然后输入"cmd"并点击"确定"来打开。

在命令提示符窗口中,输入以下命令:```wmic diskdrive get serialnumber```按下回车键后,系统会显示硬盘的序列号。

需要注意的是,有些硬盘可能没有序列号,此时会显示空值。

方法二:使用硬盘管理工具在Windows操作系统中,我们还可以使用硬盘管理工具来查看硬盘序列号。

首先,打开"控制面板",然后点击"系统和安全"。

在"管理工具"下找到"计算机管理"并点击打开。

在"计算机管理"窗口中,点击左侧的"磁盘管理",然后在右侧的窗口中可以看到已连接的硬盘列表。

右击目标硬盘,选择"属性",在弹出的对话框中可以看到硬盘的序列号。

方法三:使用第三方工具除了以上两种方法,我们还可以使用一些第三方工具来查看硬盘序列号。

这些工具通常提供更多的硬盘信息,并且界面友好,操作简单。

例如,CrystalDiskInfo是一款免费的硬盘信息工具,可以查看硬盘序列号、健康状态、温度等信息。

需要注意的是,为了保证系统的安全性,我们应当只从可靠的来源下载和使用第三方工具,并确保其没有恶意软件或病毒。

总结:本文介绍了三种常见的方法来查看硬盘序列号,包括使用命令行工具、硬盘管理工具和第三方工具。

通过这些方法,我们可以方便地获得硬盘的序列号信息。

在使用第三方工具时,需要保证其安全性,以免给系统带来风险。

查看计算机序列号的命令

查看计算机序列号的命令

查看计算机序列号的命令一、文档概览本文档旨在指导用户如何通过不同的命令行工具来查看计算机的序列号。

计算机序列号,又称为系统唯一识别码(System Unique Identifier, S/N),是用于标识一台计算机硬件的唯一字符串。

了解并能够检索此信息对于系统管理、硬件维护及防盗等方面至关重要。

二、准备工作在开始之前,请确保您具有管理员权限或相应权限来执行以下命令。

某些命令可能需要以管理员身份运行,以便访问系统级别的信息。

2.1 Windows 操作系统在Windows操作系统中,可以通过几种不同的方式来查看计算机序列号:2.1.1 方法一:使用系统信息命令1. 打开命令提示符(Command Prompt)。

2. 输入`wmic bios get serialnumber` 命令。

3. 按回车键执行命令。

4. 系统将返回一个包含序列号的结果。

2.1.2 方法二:使用系统管理性能工具1. 按下`Win + R` 键打开运行对话框。

2. 输入`msinfo32` 并按回车键。

3. 在打开的系统信息窗口中,查找到“系统摘要”部分。

4. 序列号通常会显示在“系统SKU编号”或“系统序列号”字段中。

2.1.3 方法三:使用第三方软件除了使用命令行工具,还可以使用第三方软件如CPU-Z、Speccy等来查看详细的硬件信息,包括序列号。

2.2 macOS 操作系统在macOS上查看序列号的方法相对简单:1. 点击苹果菜单(Apple Menu)。

2. 选择“关于本机”(About This Mac)。

3. 在打开的窗口中,点击“系统报告”(System Report)按钮。

4. 在硬件概览中可以找到序列号信息。

2.3 Linux 操作系统在Linux系统中,可以使用终端来查看序列号:2.3.1 方法一:使用dmidecode 命令1. 打开终端。

2. 输入`sudo dmidecode -s system-serial-number` 命令。

电脑硬盘序列号查询方法

电脑硬盘序列号查询方法

电脑硬盘序列号查询方法
电脑硬盘序列号是硬盘的唯一标识,它可以帮助用户更好地管理硬盘、识别硬盘、甚至在需要时进行硬盘的维修。

那么,如何查询电脑硬盘的序列号呢?下面将介绍几种简单有效的方法。

方法一,使用命令提示符。

1. 打开“开始菜单”,在搜索栏中输入“cmd”并回车,打开命令提示符窗口。

2. 在命令提示符窗口中输入“wmic diskdrive get serialnumber”,然后按回车键。

3. 等待片刻,系统会显示硬盘的序列号。

方法二,查看硬盘外壳。

1. 如果您的电脑是台式机,可以直接打开机箱,查看硬盘外壳上的标签,通常
序列号会在标签上清晰可见。

2. 如果您的电脑是笔记本,可以尝试从底部打开电脑,找到硬盘位置,然后查
看硬盘外壳上的标签。

方法三,使用第三方软件。

1. 在互联网上有很多免费的硬盘信息查询软件,您可以通过搜索引擎找到并下
载安装。

2. 安装完成后,打开软件,它会自动扫描您的电脑硬件信息,包括硬盘序列号。

方法四,在操作系统中查找。

1. 在Windows系统中,您可以通过“设备管理器”来查看硬盘序列号。

2. 打开“设备管理器”,找到“磁盘驱动器”选项,展开后右键点击硬盘,选
择“属性”,在“详细信息”选项卡中可以找到硬盘序列号。

以上就是几种查询电脑硬盘序列号的简单方法,您可以根据自己的实际情况选择其中一种方法来查询。

在使用这些方法时,需要注意保护好自己的电脑安全,避免下载不明来源的软件,以及注意个人隐私信息的泄露。

希望这些方法能够帮助到您,让您更方便地查询电脑硬盘的序列号。

.net获取电脑硬件信息

.net获取电脑硬件信息

using System;using System.Management;namespace mon.Register{/// <summary>/// 计算机信息类/// </summary>internal class Computer{public string CpuID;public string MacAddress;public string DiskID;public string IpAddress;public string LoginUserName;public string ComputerName;public string SystemType;public string T otalPhysicalMemory; //单位:Mprivate static Computer _instance;internal static Computer Instance(){if (_instance == null)_instance = new Computer();return _instance;}internal Computer(){CpuID = GetCpuID();MacAddress = GetMacAddress();DiskID = GetDiskID();IpAddress = GetIPAddress();LoginUserName = GetUserName();SystemType = GetSystemType();TotalPhysicalMemory = GetTotalPhysicalMemory(); ComputerName = GetComputerName();}string GetCpuID(){try{//获取CPU序列号代码string cpuInfo = "";//cpu序列号ManagementClass mc = new ManagementClass("Win32_Processor");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){cpuInfo = mo.Properties["ProcessorId"].Value.ToString();}moc = null;mc = null;return cpuInfo;}catch{return "unknow";}finally{}}string GetMacAddress(){try{//获取网卡硬件地址string mac = "";ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConf iguration");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){if ((bool)mo["IPEnabled"] == true){mac = mo["MacAddress"].ToString();break;}}moc = null;mc = null;return mac;}catch{return "unknow";}finally{}}string GetIPAddress(){try{//获取IP地址string st = "";ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConf iguration");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){if ((bool)mo["IPEnabled"] == true){//st=mo["IpAddress"].ToString();System.Array ar;ar = (System.Array)(mo.Properties["IpAddress"].Value);st = ar.GetValue(0).ToString();break;}}moc = null;mc = null;return st;}catch{return "unknow";}finally{}}string GetDiskID(){try{//获取硬盘IDManagementClass mc = new ManagementClass("Win32_DiskDrive");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){HDid = (string)mo.Properties["Model"].Value;}moc = null;mc = null;return HDid;}catch{return "unknow";}finally{}}/// <summary>/// 操作系统的登录用户名/// </summary>/// <returns></returns>string GetUserName(){try{string st = "";ManagementClass mc = new ManagementClass("Win32_ComputerSystem"); ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){st = mo["UserName"].ToString();}moc = null;mc = null;return st;}catch{}finally{}}/// <summary>/// PC类型/// </summary>/// <returns></returns>string GetSystemType(){try{string st = "";ManagementClass mc = new ManagementClass("Win32_ComputerSystem"); ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){st = mo["SystemType"].ToString();}moc = null;mc = null;return st;}catch{return "unknow";}finally{}}/// <summary>/// 物理内存/// </summary>/// <returns></returns>string GetTotalPhysicalMemory(){try{string st = "";ManagementClass mc = new ManagementClass("Win32_ComputerSystem"); ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){st = mo["TotalPhysicalMemory"].ToString();}moc = null;mc = null;return st;}catch{return "unknow";}finally{}}/// <summary>/// 获取计算机名称/// </summary>/// <returns></returns>string GetComputerName(){try{return System.Environment.GetEnvironmentVariable("ComputerName");}catch{return "unknow";}finally{}}} }。

盘符的逻辑序列号

盘符的逻辑序列号

盘符的逻辑序列号(Logical Disk Identifier)指的是操作系统(如Windows)为硬盘分区所分配的唯一标识符。

每个硬盘分区都有自己的盘符,可以通过盘符来对不同的硬盘分区进行访问和管理。

盘符的逻辑序列号可以帮助操作系统对硬盘分区进行识别和区分。

盘符的逻辑序列号通常是一个字符串,可以用于在命令行中执行各种磁盘操作和管理任务。

在Windows系统中,盘符通常以一个字母作为标识,如“C:”、“D:”等。

盘符的逻辑序列号可以通过多种方式获取,下面是一些常见的方法:1.使用命令行工具:在Windows系统中,可以使用命令行工具如“Diskpart”、“Disk Management”等来获取盘符的逻辑序列号。

在命令行中输入“diskpart”命令后,再输入“list volume”命令,即可列出硬盘分区和它们对应的盘符以及逻辑序列号。

2.使用注册表编辑器:盘符的逻辑序列号也可以通过注册表进行查看。

打开注册表编辑器(regedit),导航到“HKEY_LOCAL_MACHINE”路径,在该路径下可以找到与每个硬盘分区对应的键值,其中包含了逻辑序列号相关的信息。

3.使用第三方工具:还可以使用一些第三方工具来获取盘符的逻辑序列号,如硬盘管理工具、文件管理工具等。

这些工具可以通过图形界面直观地显示硬盘分区和对应的逻辑序列号。

盘符的逻辑序列号在磁盘管理和文件操作中起到了重要的作用。

通过逻辑序列号,我们可以在命令行或文件管理器中快速定位和访问特定的硬盘分区。

例如,通过逻辑序列号可以对某个硬盘分区进行格式化、分配驱动器号、设置文件系统等操作。

在进行数据备份、恢复或重建引导等操作时,逻辑序列号也非常有用。

此外,盘符的逻辑序列号还可以用于识别硬盘分区的变化。

当插入或拔出USB存储设备、外接硬盘等时,系统可能重新分配盘符,此时可以通过逻辑序列号来准确定位和操作相应的设备。

总之,盘符的逻辑序列号是操作系统为硬盘分区分配的唯一标识符。

硬盘序列号怎么查

硬盘序列号怎么查

硬盘序列号怎么查引言:在计算机中,硬盘是存储数据的关键组件之一,而硬盘序列号是硬盘的唯一标识符。

了解硬盘序列号的方法可以帮助用户轻松地获取硬盘的相关信息,以便进行故障诊断、硬盘管理或验证硬盘的真实性。

本文将介绍几种常见的方法,可帮助用户查找硬盘序列号。

第一部分:通过操作系统查找硬盘序列号大多数操作系统都提供了一种简单的方法来查找硬盘序列号。

以下是几种常见操作系统的方法:1. Windows 操作系统:在Windows 操作系统中,可以使用以下步骤来查找硬盘序列号: - 打开“命令提示符”(在开始菜单中搜索“命令提示符”)- 键入命令“wmic diskdrive get serialnumber”并按下回车键- 系统将显示硬盘序列号2. macOS 操作系统:在 macOS 操作系统中,可以通过以下步骤来查找硬盘序列号:- 打开“应用程序”文件夹- 进入“实用工具”文件夹- 打开“终端”- 键入命令“diskutil info /dev/disk0 | grep 'Serial Number'”并按下回车键(请注意,这里的“disk0”可能会因为硬盘数量和类型的不同而有所变化)- 系统将显示硬盘序列号3. Linux 操作系统:在 Linux 操作系统中,可以使用以下步骤来查找硬盘序列号:- 打开终端- 键入命令“sudo hdparm -I /dev/sda | grep 'Serial Number'”并按下回车键(这里的“/dev/sda”可能会因为硬盘数量和类型的不同而有所变化)- 系统将显示硬盘序列号第二部分:使用硬盘管理工具查找硬盘序列号除了操作系统自带的工具之外,还可以使用一些专门的硬盘管理工具来查找硬盘序列号。

以下是两个常用的工具:1. HD Tune:HD Tune 是一个广泛使用的硬盘管理工具,它提供了许多硬盘相关的功能,包括查找硬盘序列号。

其中有一个选项可以直接显示硬盘序列号。

获取硬盘物理序列号

获取硬盘物理序列号

scip.irDriveRegs.bFeaturesReg=0; scip.irDriveRegs.bSectorCountReg=1; scip.irDriveRegs.bSectorNumberReg=1; scip.irDriveRegs.bCylLowReg=0; scip.irDriveRegs.bCylHighReg=0; scip.irDriveRegs.bDriveHeadReg=0xA0 | (((BYTE) drive & 1) << 4); scip.irDriveRegs.bCommandReg=bIDCmd; scip.bDriveNumber=(BYTE) drive; scip.cBufferSize=IDENTIFY_BUFFER_SIZE; if (!DeviceIoControl(drive, DFP_RECEIVE_DRIVE_DATA, &scip, sizeof (SENDCMDINPARAMS) - 1,
获取硬盘物理序列号 最近才做完了这个获取 IDE 硬盘物理序列号的程序。声明一下,这个程序是我根据 Lynn McGuire 的那个 DiskID32 的源代码做了些自以为是的改动得到的,只能在 NT 平台下获 得第一块 IDE 硬盘的物理序列号。同时,这个程序用到了不少未公开的 Windows 的结构 和常量......
sizeof (VersionParams), &cbBytesReturned, NULL)) {
// 错误处理 return ; } if (VersionParams.bIDEDeviceMap<=0) { // 错误处理 return ; } BYTE bIDCmd = 0; SENDCMDINPARAMS scip; bIDCmd = (VersionParams.bIDEDeviceMap >> 0 & 0x10) ? IDE_ATAPI_IDENTIFY : IDE_ATA_IDENTIFY; memset (&scip, 0, sizeof(scip)); memset (IdOutCmd, 0, sizeof(IdOutCmd)); scip.cBufferSize=IDENTIFY_BUFFER_SIZE;

获取硬盘序列号

获取硬盘序列号

Private Const MAX_IDE_DRIVES As Long = 4 ' Max number of drives assuming primary/secondary, master/slave topologyPrivate Const READ_A TTRIBUTE_BUFFER_SIZE As Long = 512Private Const IDENTIFY_BUFFER_SIZE As Long = 512Private Const READ_THRESHOLD_BUFFER_SIZE As Long = 512Private Const DFP_GET_VERSION As Long = &H74080Private Const DFP_SEND_DRIVE_COMMAND As Long = &H7C084Private Const DFP_RECEIVE_DRIVE_DA TA As Long = &H7C088Private Type GETVERSIONOUTPARAMSbV ersion 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 Const CAP_IDE_ID_FUNCTION As Long = 1 ' A TA ID command supportedPrivate Const CAP_IDE_A TAPI_ID As Long = 2 ' A TAPI ID command supportedPrivate Const CAP_IDE_EXECUTE_SMART_FUNCTION As Long = 4 ' SMART commannds supportedPrivate Type IDEREGSbFeaturesReg As Byte ' Used for specifying SMART "commands".bSectorCountReg As Byte ' IDE sector count registerbSectorNumberReg As Byte ' IDE sector number registerbCylLowReg As Byte ' IDE low order cylinder valuebCylHighReg As Byte ' IDE high order cylinder valuebDriveHeadReg As Byte ' IDE drive/head registerbCommandReg As Byte ' Actual IDE command.bReserved As Byte ' reserved for future use. Must be zero.End TypePrivate Type SENDCMDINPARAMScBufferSize As Long ' Buffer size in bytesirDriveRegs As IDEREGS ' 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.bBuffer(0) As Byte ' Input buffer.End TypePrivate Const IDE_A TAPI_ID As Long = &HA1 ' Returns ID sector for A TAPI.Private Const IDE_ID_FUNCTION As Long = &HEC ' Returns ID sector for A TA.Private Const IDE_EXECUTE_SMART_FUNCTION As Long = &HB0 ' Performs SMART cmd.Private Const SMART_CYL_LOW As Long = &H4FPrivate Const SMART_CYL_HI As Long = &HC2Private Type DRIVERSTA TUSbDriverError As Byte ' Error code from driver,bIDEStatus As Byte ' Contents of IDE Error register.bReserved(1) As Byte ' Reserved for future expansion.dwReserved(1) As Long ' Reserved for future expansion.End TypePrivate Const SMART_NO_ERROR As Long = 0 ' No errorPrivate Const SMART_IDE_ERROR As Long = 1 ' Error from IDE controllerPrivate Const SMART_INV ALID_FLAG As Long = 2 ' Invalid command flagPrivate Const SMART_INV ALID_COMMAND As Long = 3 ' Invalid command bytePrivate Const SMART_INV ALID_BUFFER As Long = 4 ' Bad buffer (null, invalid addr..) Private Const SMART_INV ALID_DRIVE As Long = 5 ' Drive number not validPrivate Const SMART_INV ALID_IOCTL As Long = 6 ' Invalid IOCTLPrivate Const SMART_ERROR_NO_MEM As Long = 7 ' Could not lock user's bufferPrivate Const SMART_INV ALID_REGISTER As Long = 8 ' Some IDE Register not valid Private Const SMART_NOT_SUPPORTED As Long = 9 ' Invalid cmd flag setPrivate Const SMART_NO_IDE_DEVICE As Long = 10 ' Cmd issued to device not presentPrivate Type SENDCMDOUTPARAMScBufferSize As Long ' Size of bBuffer in bytesdrvStatus As DRIVERSTA TUS ' Driver status structure.bBuffer(0) As Byte ' Buffer of arbitrary length in which to store the data read from the ' drive.End TypePrivate Const SMART_READ_A TTRIBUTE_V ALUES As Long = &HD0 ' A TA4: Renamed Private Const SMART_READ_A TTRIBUTE_THRESHOLDS As Long = &HD1 ' Obsoleted in A TA4!Private Const SMART_ENABLE_DISABLE_A TTRIBUTE_AUTOSA VE As Long = &HD2 Private Const SMART_SA VE_A TTRIBUTE_V ALUES As Long = &HD3Private Const SMART_EXECUTE_OFFLINE_IMMEDIA TE As Long = &HD4 ' A TA4 Private Const SMART_ENABLE_SMART_OPERA TIONS As Long = &HD8Private Const SMART_DISABLE_SMART_OPERA TIONS As Long = &HD9Private Const SMART_RETURN_SMART_STA TUS As Long = &HDAPrivate Type DRIVEA TTRIBUTEbAttrID As Byte ' Identifies which attributewStatusFlags As Integer ' see bit definitions belowbAttrV alue As Byte ' Current normalized valuebWorstV alue As Byte ' How bad has it ever been?bRawV alue(5) As Byte ' Un-normalized valuebReserved As Byte ' ...End TypePrivate Type A TTRTHRESHOLDbAttrID As Byte ' Identifies which attributebWarrantyThreshold As Byte ' Triggering valuebReserved(9) As Byte ' ...End TypePrivate Type IDSECTORwGenConfig As IntegerwNumCyls As IntegerwReserved As IntegerwNumHeads As IntegerwBytesPerTrack As IntegerwBytesPerSector As IntegerwSectorsPerTrack As IntegerwV endorUnique(2) As IntegersSerialNumber(19) As BytewBufferType As IntegerwBufferSize As IntegerwECCSize As IntegersFirmwareRev(7) As BytesModelNumber(39) As BytewMoreV endorUnique As IntegerwDoubleWordIO As IntegerwCapabilities As IntegerwReserved1 As IntegerwPIOTiming As IntegerwDMA Timing As IntegerwBS As IntegerwNumCurrentCyls As IntegerwNumCurrentHeads As IntegerwNumCurrentSectorsPerTrack As IntegerulCurrentSectorCapacity(3) As Byte '这里只能用byte,因为VB没有无符号的LONG 型变量wMultSectorStuff As IntegerulTotalAddressableSectors(3) As Byte '这里只能用byte,因为VB没有无符号的LONG 型变量wSingleWordDMA As IntegerwMultiWordDMA As IntegerbReserved(127) As ByteEnd TypePrivate Const A TTR_INV ALID As Long = 0Private Const A TTR_READ_ERROR_RA TE As Long = 1Private Const A TTR_THROUGHPUT_PERF As Long = 2Private Const A TTR_SPIN_UP_TIME As Long = 3Private Const A TTR_START_STOP_COUNT As Long = 4Private Const A TTR_REALLOC_SECTOR_COUNT As Long = 5Private Const A TTR_READ_CHANNEL_MARGIN As Long = 6Private Const A TTR_SEEK_ERROR_RA TE As Long = 7Private Const A TTR_SEEK_TIME_PERF As Long = 8Private Const A TTR_POWER_ON_HRS_COUNT As Long = 9Private Const A TTR_SPIN_RETRY_COUNT As Long = 10Private Const A TTR_CALIBRA TION_RETRY_COUNT As Long = 11Private Const A TTR_POWER_CYCLE_COUNT As Long = 12Private Const PRE_FAILURE_WARRANTY As Long = &H1Private Const ON_LINE_COLLECTION As Long = &H2Private Const PERFORMANCE_A TTRIBUTE As Long = &H4Private Const ERROR_RA TE_A TTRIBUTE As Long = &H8Private Const EVENT_COUNT_A TTRIBUTE As Long = &H10Private Const SELF_PRESERVING_A TTRIBUTE As Long = &H20Private Const NUM_A TTRIBUTE_STRUCTS As Long = 30Private Const INV ALID_HANDLE_V ALUE As Long = -1Private Const VER_PLA TFORM_WIN32s As Long = 0Private Const VER_PLA TFORM_WIN32_WINDOWS As Long = 1Private Const VER_PLA TFORM_WIN32_NT As Long = 2Private Type OSVERSIONINFOdwOSV ersionInfoSize As LongdwMajorV ersion As LongdwMinorV ersion As LongdwBuildNumber As LongdwPlatformId As LongszCSDV ersion As String * 128 ' Maintenance string for PSS usageEnd TypePrivate Const CREA TE_NEW As Long = 1Private Const GENERIC_READ As Long = &H80000000Private Const GENERIC_WRITE As Long = &H40000000Private Const FILE_SHARE_READ As Long = &H1Private Const FILE_SHARE_WRITE As Long = &H2Private Const OPEN_EXISTING As Long = 3Private m_DiskInfo As IDSECTORPrivate Declare Function GetV ersionEx Lib "kernel32" Alias "GetV ersionExA" (lpV ersionInformation As OSVERSIONINFO) As LongPrivate Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByV al lpFileName As String, ByV al dwDesiredAccess As Long, ByV al dwShareMode As Long, ByV al lpSecurityAttributes As Long, ByV al dwCreationDisposition As Long, By V al dwFlagsAndAttributes As Long, ByV al hTemplateFile As Long) As LongPrivate Declare Function DeviceIoControl Lib "kernel32" (ByV al hDevice As Long, ByV al dwIoControlCode As Long, lpInBuffer As Any, ByV al nInBufferSize As Long, lpOutBuffer As Any, ByV al nOutBufferSize As Long, lpBytesReturned As Long, ByV al lpOverlapped As Long) As LongPrivate Declare Function CloseHandle Lib "kernel32" (ByV al hObject As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByV al Length As Long)Private Declare Function GetV olumeInformation Lib "kernel32" Alias "GetV olumeInformationA" (ByV al lpRootPathName As String, ByV al lpV olumeNameBuffer As String, ByV al nV olumeNameSize As Long, lpV olumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByV al lpFileSystemNameBuffer As String, ByV al nFileSystemNameSize As Long) As Long'信息类型枚举Enum eumInfoTypehdmodelsn = 0hdOnlyModel = 1hdOnlySN = 2End Enum'磁盘通道枚举Enum eumDiskNohdPrimaryMaster = 0hdPrimarySlave = 1hdSecondaryMaster = 2hdSecondarySlave = 3End Enum'取得逻辑盘序列号(非唯一)Function GetDiskV olume(Optional ByV al strDiskName = "C") As StringDim TempStr1 As String * 256, TempStr2 As String * 256Dim TempLon1 As Long, TempLon2 As Long, GetV al As LongDim tmpV ol As StringCall GetV olumeInformation(strDiskName & ":\", TempStr1, 256, GetV al, TempLon1, TempLon2, TempStr2, 256)If GetV al = 0 ThentmpV ol = ""ElsetmpV ol = Hex(GetV al)tmpV ol = String(8 - Len(tmpV ol), "0") & tmpV oltmpV ol = Left(tmpV ol, 4) & "-" & Right(tmpV ol, 4)End IfGetDiskV olume = tmpV olEnd Function'取得硬盘信息:型号/物理系列号(唯一)Function GetHardDiskInfo(Optional ByV al numDisk As eumDiskNo = hdPrimaryMaster, Optional ByV al numType As eumInfoType = hdOnlySN) As StringIf GetDiskInfo(numDisk) = 1 ThenDim pSerialNumber As String, pModelNumber As StringpSerialNumber = StrConv(m_DiskInfo.sSerialNumber, vbUnicode)pModelNumber = StrConv(m_DiskInfo.sModelNumber, vbUnicode)Select Case numTypeCase hdOnlyModel '仅型号GetHardDiskInfo = Trim(pModelNumber)Case hdOnlySN '仅系列号GetHardDiskInfo = Trim(pSerialNumber)Case Else '型号,系列号GetHardDiskInfo = Trim(pModelNumber) & "," & Trim(pSerialNumber) End SelectEnd IfEnd FunctionPrivate Function OpenSMART(ByV al nDrive As Byte) As LongDim hSMARTIOCTL As LongDim hd As StringDim V ersionInfo As OSVERSIONINFOhSMARTIOCTL = INV ALID_HANDLE_V ALUEV ersionInfo.dwOSV ersionInfoSize = Len(V ersionInfo)GetV ersionEx V ersionInfoSelect Case V ersionInfo.dwPlatformIdCase VER_PLA TFORM_WIN32sOpenSMART = hSMARTIOCTLCase VER_PLA TFORM_WIN32_WINDOWShSMARTIOCTL = CreateFile("\\.\SMARTVSD", 0, 0, 0, CREA TE_NEW, 0, 0)Case VER_PLA TFORM_WIN32_NTIf nDrive < MAX_IDE_DRIVES Thenhd = "\\.\PhysicalDrive" & nDrivehSMARTIOCTL = CreateFile(hd, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0)End IfEnd SelectOpenSMART = hSMARTIOCTLEnd FunctionPrivate Function DoIDENTIFY(ByV al hSMARTIOCTL As Long, pSCIP As SENDCMDINPARAMS, pSCOP() As Byte, ByV al bIDCmd As Byte, ByV al bDriveNum As Byte, lpcbBytesReturned As Long) As BooleanpSCIP.cBufferSize = IDENTIFY_BUFFER_SIZEpSCIP.irDriveRegs.bFeaturesReg = 0pSCIP.irDriveRegs.bSectorCountReg = 1pSCIP.irDriveRegs.bSectorNumberReg = 1pSCIP.irDriveRegs.bCylLowReg = 0pSCIP.irDriveRegs.bCylHighReg = 0pSCIP.irDriveRegs.bDriveHeadReg = &HA0 Or ((bDriveNum And 1) * 2 ^ 4)'pSCIP.irDriveRegs.bCommandReg = bIDCmdpSCIP.bDriveNumber = bDriveNumpSCIP.cBufferSize = IDENTIFY_BUFFER_SIZEDoIDENTIFY= CBool(DeviceIoControl(hSMARTIOCTL, DFP_RECEIVE_DRIVE_DA TA, _pSCIP, 32, _pSCOP(0), 528, _lpcbBytesReturned, 0))End FunctionPrivate Function DoEnableSMART(ByV al hSMARTIOCTL As Long, pSCIP As SENDCMDINPARAMS, pSCOP As SENDCMDOUTPARAMS, ByV al bDriveNum As Byte, lpcbBytesReturned As Long) As BooleanpSCIP.cBufferSize = 0pSCIP.irDriveRegs.bFeaturesReg = SMART_ENABLE_SMART_OPERA TIONSpSCIP.irDriveRegs.bSectorCountReg = 1pSCIP.irDriveRegs.bSectorNumberReg = 1pSCIP.irDriveRegs.bCylLowReg = SMART_CYL_LOWpSCIP.irDriveRegs.bCylHighReg = SMART_CYL_HIpSCIP.irDriveRegs.bDriveHeadReg = &HA0 Or ((bDriveNum And 1) * 2 ^ 4)pSCIP.irDriveRegs.bCommandReg = IDE_EXECUTE_SMART_FUNCTIONpSCIP.bDriveNumber = bDriveNumDoEnableSMART = CBool(DeviceIoControl(hSMARTIOCTL, DFP_SEND_DRIVE_COMMAND, _pSCIP, LenB(pSCIP) - 1, _pSCOP, LenB(pSCOP) - 1, _lpcbBytesReturned, 0))End Function'---------------------------------------------------------------------'---------------------------------------------------------------------Private Sub ChangeByteOrder(szString() As Byte, ByV al uscStrSize As Integer)Dim i As IntegerDim bTemp As ByteFor i = 0 To uscStrSize - 1 Step 2bTemp = szString(i)szString(i) = szString(i + 1)szString(i + 1) = bTempNext iEnd SubPrivate Sub DisplayIdInfo(pids As IDSECTOR, pSCIP As SENDCMDINPARAMS, ByV al bIDCmd As Byte, ByV al bDfpDriveMap As Byte, ByV al bDriveNum As Byte)ChangeByteOrder pids.sModelNumber, UBound(pids.sModelNumber) + 1ChangeByteOrder pids.sFirmwareRev, UBound(pids.sFirmwareRev) + 1ChangeByteOrder pids.sSerialNumber, UBound(pids.sSerialNumber) + 1End SubPublic Function GetDiskInfo(ByV al nDrive As Byte) As LongDim hSMARTIOCTL As LongDim cbBytesReturned As LongDim V ersionParams As GETVERSIONOUTPARAMSDim scip As SENDCMDINPARAMSDim scop() As ByteDim OutCmd As SENDCMDOUTPARAMSDim bDfpDriveMap As ByteDim bIDCmd As Byte ' IDE or A TAPI IDENTIFY cmdDim uDisk As IDSECTORm_DiskInfo = uDisk''hSMARTIOCTL = OpenSMART(nDrive)If hSMARTIOCTL <> INV ALID_HANDLE_V ALUE ThenCall DeviceIoControl(hSMARTIOCTL, DFP_GET_VERSION, ByV al 0, 0, V ersionParams, Len(V ersionParams), cbBytesReturned, 0)If Not (V ersionParams.bIDEDeviceMap \ 2 ^ nDrive And &H10) ThenIf DoEnableSMART(hSMARTIOCTL, scip, OutCmd, nDrive, cbBytesReturned) ThenbDfpDriveMap = bDfpDriveMap Or 2 ^ nDriveEnd IfEnd IfbIDCmd = IIf((V ersionParams.bIDEDeviceMap \ 2 ^ nDrive And &H10), IDE_A TAPI_ID, IDE_ID_FUNCTION)ReDim scop(LenB(OutCmd) + IDENTIFY_BUFFER_SIZE - 1) As ByteIf DoIDENTIFY(hSMARTIOCTL, scip, scop, bIDCmd, nDrive, cbBytesReturned) ThenCopyMemory m_DiskInfo, scop(LenB(OutCmd) - 4), LenB(m_DiskInfo)Call DisplayIdInfo(m_DiskInfo, scip, bIDCmd, bDfpDriveMap, nDrive)CloseHandle hSMARTIOCTLGetDiskInfo = 1Exit Function '>---> BottomEnd IfCloseHandle hSMARTIOCTLGetDiskInfo = 0Else 'NOT HSMARTIOCTL...GetDiskInfo = -1End IfEnd FunctionPrivate Sub Form_Load()'MsgBox GetDiskV olumeMsgBox GetHardDiskInfo(hdSecondarySlave, hdmodelsn) 'MsgBox OpenSMART(1)'DoIDENTIFY 1'DoEnableSMART'MsgBox GetDiskInfo(2)End Sub。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最近作软件注册,收集了很多.NET相关的获取硬盘物理序列号的方法,主要分为使用WMI方式和API方式。

但这些方法均可能有问题。

1,使用WMI方式,有的机器根本取不到硬盘序列号,有的方式在Vista下面会报错。

常用的使用WMI的方式主要有下面一些方式:class HardDrive{private string model = null;private string type = null;private string serialNo = null;public string Model{get {return model;}set {model = value;}}public string Type{get {return type;}set {type = value;}}public string SerialNo{get {return serialNo;}set {serialNo = value;}}}class TestProgram{/// <summary>/// The main entry point for the application./// </summary>[STAThread]static void Main(string[] args){//在Vista下面失败ArrayList hdCollection = new ArrayList();ManagementObjectSearcher searcher = newManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");foreach(ManagementObject wmi_HD in searcher.Get()){HardDrive hd = new HardDrive();hd.Model = wmi_HD["Model"].ToString();hd.Type = wmi_HD["InterfaceType"].ToString();hdCollection.Add(hd);}searcher = newManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");int i = 0;foreach(ManagementObject wmi_HD in searcher.Get()){// get the hard drive from collection// using indexHardDrive hd = (HardDrive)hdCollection[i];// get the hardware serial no.if (wmi_HD["SerialNumber"] == null)hd.SerialNo = "None";elsehd.SerialNo = wmi_HD["SerialNumber"].ToString();++i;}// Display available hard drivesforeach(HardDrive hd in hdCollection){Console.WriteLine("Model\t\t: " + hd.Model);Console.WriteLine("Type\t\t: " + hd.Type);Console.WriteLine("Serial No.\t: " + hd.SerialNo);Console.WriteLine();}// Pause applicationConsole.WriteLine("Press [Enter] to exit...");Console.ReadLine();}}上面的方式先查询Win32_DiskDrive,然后再查询 Win32_PhysicalMedia,经过测试,这种方式不能保证在所有机器上均取得硬盘序列号,而且在Vista下面还会出错,程序直接抛出无法处理的异常。

另外,还可以使用另外一WMI方式,就是查询 PNPDeviceID 的 signature,代码如下:/// <summary>/// 获取硬盘唯一序列号(不是卷标号),可能需要以管理员身份运行程序/// </summary>/// <returns></returns>public static string GetHdId(){ManagementObjectSearcher wmiSearcher = new ManagementObjectSearcher(); /** PNPDeviceID 的数据是由四部分组成的:1、接口,通常有 IDE,ATA,SCSI;2、型号3、(可能)驱动版本号4、(可能)硬盘的出厂序列号***///signature 需要程序以管理员身份运行(经过测试,2003系统上非管理员身份也可以运行,查相关资料说,可能在2000系统上获取的值为空)wmiSearcher.Query = new SelectQuery("Win32_DiskDrive","",new string[] { "PNPDeviceID", "signature" });ManagementObjectCollection myCollection = wmiSearcher.Get();ManagementObjectCollection.ManagementObjectEnumerator em =myCollection.GetEnumerator();em.MoveNext();ManagementBaseObject mo = em.Current;//string id = mo.Properties["PNPDeviceID"].Value.ToString().Trim(); string id = mo.Properties["signature"].Value.ToString().Trim();return id;}有人说,使用 signature 需要程序以管理员身份运行(经过测试,2003系统上非管理员身份也可以运行),而且查询相关资料说,可能在2000系统上获取的值为空。

使用这种方式,在Vista上面工作良好。

经过测试,使用 signature 均能够取得硬盘序列号,但是跟 Win32_PhysicalMedia 查询出来的号不一样。

目前我也不能肯定使用 signature 能够100%取道硬盘序列号。

使用WMI方式需要客户机开启WMI服务,但这个往往不能保证,所以使用这种方式有一定局限性。

2,使用API方式。

在网上找到一片资料,说使用 RING3调用 API DeviceIoControl()来获取硬盘信息,下面是原话:硬盘序列号(Serial Number)不等于卷标号(Volume Name),后者虽然很容易得到,但是格式化分区后就会重写,不可靠。

遗憾的是很多朋友往往分不清这一点。

要得到硬盘的物理序列号,可以通过WMI,也就是Win32_PhysicalMedia.SerialNumber。

可惜的是Windows 98/ME的WMI并不支持这个类,访问时会出现异常。

受陆麟的例子的启发,我们还可以通过S.M.A.R.T.接口,直接从RING3调用API DeviceIoControl()来获取硬盘信息,而不需要写VXD或者DRIVER。

这样这个问题就解决了,我对它进行了封装,大量使用了 P/Invoke技术,一个完整的Library。

支持Windows 98-2003。

使用上很简单:HardDiskInfo hdd = AtapiDevice.GetHddInfo(0); // 第一个硬盘Console.WriteLine("Module Number: {0}", hdd.ModuleNumber);Console.WriteLine("Serial Number: {0}", hdd.SerialNumber);Console.WriteLine("Firmware: {0}", hdd.Firmware);Console.WriteLine("Capacity: {0} M", hdd.Capacity);感谢原文作者的贡献,(在这里我已经不知道原文作者是谁了,网上的文章都是转载的),经过测试,这种方式比较准确,但是需要管理员权限运行。

下面把代码分享:using System;using System.Runtime.InteropServices;using System.Text;namespace HardwareUtility{[Serializable]public struct HardDiskInfo{/// <summary>/// 型号/// </summary>public string ModuleNumber;/// <summary>/// 固件版本/// </summary>public string Firmware;/// <summary>/// 序列号/// </summary>public string SerialNumber;/// <summary>/// 容量,以M为单位/// </summary>public uint Capacity;}#region Internal Structs[StructLayout(LayoutKind.Sequential, Pack = 1)]internal struct GetVersionOutParams{public byte bVersion;public byte bRevision;public byte bReserved;public byte bIDEDeviceMap;public uint fCapabilities;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public uint[] dwReserved; // For future use.}[StructLayout(LayoutKind.Sequential, Pack = 1)]internal struct IdeRegs{public byte bFeaturesReg;public byte bSectorCountReg;public byte bSectorNumberReg;public byte bCylLowReg;public byte bCylHighReg;public byte bDriveHeadReg;public byte bCommandReg;public byte bReserved;}[StructLayout(LayoutKind.Sequential, Pack = 1)]internal struct SendCmdInParams{public uint cBufferSize;public IdeRegs irDriveRegs;public byte bDriveNumber;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]public byte[] bReserved;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]public uint[] dwReserved;public byte bBuffer;}[StructLayout(LayoutKind.Sequential, Pack = 1)]internal struct DriverStatus{public byte bDriverError;public byte bIDEStatus;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]public byte[] bReserved;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]public uint[] dwReserved;}[StructLayout(LayoutKind.Sequential, Pack = 1)]internal struct SendCmdOutParams{public uint cBufferSize;public DriverStatus DriverStatus;public IdSector bBuffer;}[StructLayout(LayoutKind.Sequential, Pack = 1, Size = 512)]internal struct IdSector{public ushort wGenConfig;public ushort wNumCyls;public ushort wReserved;public ushort wNumHeads;public ushort wBytesPerTrack;public ushort wBytesPerSector;public ushort wSectorsPerTrack;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public ushort[] wVendorUnique;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] public byte[] sSerialNumber;public ushort wBufferType;public ushort wBufferSize;public ushort wECCSize;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] sFirmwareRev;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 40)] public byte[] sModelNumber;public ushort wMoreVendorUnique;public ushort wDoubleWordIO;public ushort wCapabilities;public ushort wReserved1;public ushort wPIOTiming;public ushort wDMATiming;public ushort wBS;public ushort wNumCurrentCyls;public ushort wNumCurrentHeads;public ushort wNumCurrentSectorsPerTrack;public uint ulCurrentSectorCapacity;public ushort wMultSectorStuff;public uint ulTotalAddressableSectors;public ushort wSingleWordDMA;public ushort wMultiWordDMA;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] public byte[] bReserved;}#endregion/// <summary>/// ATAPI驱动器相关/// </summary>public class AtapiDevice{#region DllImport[DllImport("kernel32.dll", SetLastError = true)] static extern int CloseHandle(IntPtr hObject);[DllImport("kernel32.dll", SetLastError = true)] static extern IntPtr CreateFile(string lpFileName,uint dwDesiredAccess,uint dwShareMode,IntPtr lpSecurityAttributes,uint dwCreationDisposition,uint dwFlagsAndAttributes,IntPtr hTemplateFile);[DllImport("kernel32.dll")]static extern int DeviceIoControl(IntPtr hDevice,uint dwIoControlCode,IntPtr lpInBuffer,uint nInBufferSize,ref GetVersionOutParams lpOutBuffer,uint nOutBufferSize,ref uint lpBytesReturned,[Out] IntPtr lpOverlapped);[DllImport("kernel32.dll")]static extern int DeviceIoControl(IntPtr hDevice,uint dwIoControlCode,ref SendCmdInParams lpInBuffer,uint nInBufferSize,ref SendCmdOutParams lpOutBuffer,uint nOutBufferSize,ref uint lpBytesReturned,[Out] IntPtr lpOverlapped);const uint DFP_GET_VERSION = 0x00074080;const uint DFP_SEND_DRIVE_COMMAND = 0x0007c084; const uint DFP_RECEIVE_DRIVE_DATA = 0x0007c088;const uint GENERIC_READ = 0x80000000;const uint GENERIC_WRITE = 0x40000000;const uint FILE_SHARE_READ = 0x00000001;const uint FILE_SHARE_WRITE = 0x00000002;const uint CREATE_NEW = 1;const uint OPEN_EXISTING = 3;#endregion#region GetHddInfo/// <summary>/// 获得硬盘信息/// </summary>/// <param name="driveIndex">硬盘序号</param>/// <returns>硬盘信息</returns>/// <remarks>/// 参考lu0的文章:/App/2k1103.html/// by sunmast for everyone/// thanks lu0 for his great works/// 在Windows 98/ME中,S.M.A.R.T并不缺省安装,请将SMARTVSD.VXD拷贝到%SYSTEM%\IOSUBSYS目录下。

相关文档
最新文档