Заводской номер жесткого диска, как определить?..

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
cashman
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 152
Зарегистрирован: 03.06.2004 (Чт) 0:57
Откуда: Россия, г.Екатеринбург

Заводской номер жесткого диска, как определить?..

Сообщение cashman » 18.12.2004 (Сб) 0:14

Подскажите...
Заводской номер жесткого диска, как определить?..
И есть ли разница в определении если разные интерфейсы SCSI, IDE, SATA?...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 18.12.2004 (Сб) 0:22

Изображение

deepslam
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 286
Зарегистрирован: 19.08.2002 (Пн) 2:25
Откуда: Russia

Re: Заводской номер жесткого диска, как определить?..

Сообщение deepslam » 18.12.2004 (Сб) 0:23

cashman писал(а):Подскажите...
Заводской номер жесткого диска, как определить?..
И есть ли разница в определении если разные интерфейсы SCSI, IDE, SATA?...

Разницы в интерфесах нету помоему...
Что то мне подсказывает, что номер из биоса вытащить мона...

Упс че то я не заметил, что ответили уже. Сорри.

cashman
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 152
Зарегистрирован: 03.06.2004 (Чт) 0:57
Откуда: Россия, г.Екатеринбург

Сообщение cashman » 18.12.2004 (Сб) 0:42

2tyomitch:
1 исходник - я его качал уже раньше, в нем-то автор и сомневается на счет SCSI. У меня он на IDE работает. Но прога таскает за собой свой .OCX - хотелось бы без него
2 исходник - определяет не заводской номер, а серийны - не годится

Просто мне нужно, чтоб под каждый жесткий выдавался ответ в виде номера. Я пока проверил на своем IDE, другого не имею. Если кто с дугим интерфейсом (указанным выше), проверьте 1-й исходник на себе (т.е. на своем жестком).
Очень надо.

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Сообщение areh » 18.12.2004 (Сб) 1:22

готов протестировать на SATA дисках, тока что-то у меня не получается запустить эту программу...
чего надо ещё с исходником сделать?

cashman
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 152
Зарегистрирован: 03.06.2004 (Чт) 0:57
Откуда: Россия, г.Екатеринбург

Сообщение cashman » 18.12.2004 (Сб) 3:04

2 areh:
Необходимо
Выполнить : regsvr32 TVicHW32.ocx
Если не знаешь как, то я чирканул прогу "registrator"
для этого. Скопируешь ее в папку с файлом TVicHW32.ocx
и запустишь.

Поместишь файлы:
VicHW00.vxd в c:\windows\system
VicHW00.sys в c:\windows\system32\drivers

+ в Инете давно нашел еще один исходник HDDSerial (под VB6)
Он без запарки с файлами и регистрацией.
Проверь сходятся ли у тебя номера в двух прогах...
и выложи его...
У меня 662201924638

там появится сообщение о незарегистрированной копии - не обращай внимания.
Вложения
HDDSerial.rar
второй исходник для определения заводского №
(10.91 Кб) Скачиваний: 566
registrator for TVicHW.rar
для регистрации
(2.97 Кб) Скачиваний: 269

cashman
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 152
Зарегистрирован: 03.06.2004 (Чт) 0:57
Откуда: Россия, г.Екатеринбург

Сообщение cashman » 18.12.2004 (Сб) 3:13

2 areh:
+ еще один, НО серийник выдает совсем другой...
Не знаю почему...
Кто разберется скажите...
Вложения
FSODrive.zip
(2.25 Кб) Скачиваний: 262

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Заводской номер жесткого диска, как определить?..

Сообщение tyomitch » 18.12.2004 (Сб) 9:56

deepslam писал(а):Что то мне подсказывает, что номер из биоса вытащить мона...

А может, из звуковухи? ;-)
Где биос, и где винчестер :roll:
Изображение

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Сообщение areh » 18.12.2004 (Сб) 14:30

Итак, у меня 2 харда Maxrot'а, по 200 Гб

FSODrive выдал:
С: 671462417
Е: -1943701671

а вторая програмка не признала наличия харов... т.к. SATA не делятся на Primary/Secondary, Master/Slave ...

счас я ещё побалуюсь с номером харда и скажу результаты...

cooler
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 90
Зарегистрирован: 09.08.2004 (Пн) 4:58
Откуда: Che sity

Сообщение cooler » 18.12.2004 (Сб) 18:43

'ВАРИАНТ 1

Private Declare Function GetVolumeSerialNumber 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
Private Function VolumeSerialNumber(ByVal RootPath As String) As String
Dim VolLabel As String
Dim VolSize As Long
Dim Serial As Long
Dim MaxLen As Long
Dim Flags As Long
Dim Name As String
Dim NameSize As Long
Dim s As String
Dim ret as Boolean
ret=GetVolumeSerialNumber(RootPath, VolLabel, VolSize, _
Serial, MaxLen, Flags, Name, NameSize)
If ret Then
'Create an 8 character string
s = Format(Hex(Serial), "00000000")
'Adds the '-' between the first 4 characters and the last 4 characters
VolumeSerialNumber = Left(s, 4) + "-" + Right(s, 4)
Else
'If the call to API function fails the function returns a zero serial number
VolumeSerialNumber = "0000-0000"
End If
End Function

Private Sub Command1_Click()
MsgBox VolumeSerialNumber("C:\") 'Shows the serial number of your Hard Disk
End Sub

'ВАРИАНТ 2

Private Declare Function GetVolumeInformation Lib "kernel32.dll" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal
lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Integer, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long,
lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Function GetSerialNumber(DriveLetter As String) As String
Dim SerialNum As Long
Dim VolNameBuf As String
Dim FileSysNameBuf As String
Select Case Len(DriveLetter)
Case 1
If LCase(DriveLetter) Like "[a-z]" Then
DriveLetter = Left(DriveLetter, 1) & ":\"
Else
GetSerialNumber = "Error - Bad drive designation"
End If
Case 2
If LCase(DriveLetter) Like "[a-z]:" Then
DriveLetter = DriveLetter & "\"
Else
GetSerialNumber = "Error - Bad drive designation"
End If
Case 3
If LCase(DriveLetter) Like "[!a-z]:\" Then
GetSerialNumber = "Error - Bad drive designation"
End If
Case Else
GetSerialNumber = "Error - Bad drive designation"
End Select
If Len(GetSerialNumber) = 0 Then
VolNameBuf = String(255, Chr(0))
FileSysNameBuf = String(255, Chr$(0))
GetVolumeInformation DriveLetter, VolNameBuf, Len(VolNameBuf), SerialNum, 0, 0, FileSysNameBuf, Len(FileSysNameBuf)
GetSerialNumber = Right("00000000" & Hex(SerialNum), 8)
End If
End Function

Private Sub Command1_Click()
MsgBox GetSerialNumber("C:")
End Sub
вобщем думаю всё понятно, имя диска можно менять на любой, в принципе должно работать и для scsi, raid,sata для floppy,cdrom,hdd- работает - проверенно
Windows написанна с применением искусственного интеллекта. И как любое разумное существо старается работать как можно меньше :))

Mizin Alex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 50
Зарегистрирован: 12.06.2004 (Сб) 9:46
Откуда: Россия , Ивдель

Сообщение Mizin Alex » 18.12.2004 (Сб) 22:45

Еще вариант. Но! Пример определяет именно название и серийный номер HDD нанесенный на корпус. Определить SN: можно у всех HDD.
Я закинул пример в класс, но ничего не мешает его задвинуть и в модуль...
Но хотелось-бы узнать о результатах тестирования на SCSI и SATA. На IDE пример работает! Как и все заинтересованные в данном вопросе жду результатов тестирования !
C ув. Alex

Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const OPEN_EXISTING = 3
Private Const CREATE_NEW = 1
Private Const INVALID_HANDLE_VALUE = -1
Private Const VER_PLATFORM_WIN32_NT = 2
Private Const IDENTIFY_BUFFER_SIZE = 512
Private Const OUTPUT_DATA_SIZE = IDENTIFY_BUFFER_SIZE + 16

'GETVERSIONOUTPARAMS contains the data returned
'from the Get Driver Version function
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 Type

'IDE registers
Private 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
bReserved As Byte 'reserved for future use - must be zero
End Type

'SENDCMDINPARAMS contains the input parameters for the
'Send Command to Drive function
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 command to (0,1,2,3).
bReserved(2) As Byte 'Bytes reserved
dwReserved(3) As Long 'DWORDS reserved
bBuffer() As Byte 'Input buffer.
End Type

'Valid values for the bCommandReg member of IDEREGS.
Private Const IDE_ID_FUNCTION = &HEC 'Returns ID sector for ATA.
Private Const IDE_EXECUTE_SMART_FUNCTION = &HB0 'Performs SMART cmd.
'Requires valid bFeaturesReg,
'bCylLowReg, and bCylHighReg

'Cylinder register values required when issuing SMART command
Private Const SMART_CYL_LOW = &H4F
Private Const SMART_CYL_HI = &HC2

'Status returned from driver
Private Type DRIVERSTATUS
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
dwReserved(1) As Long
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
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 As Long
wMultSectorStuff As Integer
ulTotalAddressableSectors As Long
wSingleWordDMA As Integer
wMultiWordDMA As Integer
bReserved(127) As Byte
End Type

'Structure returned by SMART IOCTL commands
Private Type SENDCMDOUTPARAMS
cBufferSize As Long 'Size of Buffer in bytes
DRIVERSTATUS As DRIVERSTATUS 'Driver status structure
bBuffer() As Byte 'Buffer of arbitrary length for data read from drive
End Type

'Vendor specific feature register defines
'for SMART "sub commands"
Private Const SMART_ENABLE_SMART_OPERATIONS = &HD8

'Status Flags Values
Public Enum STATUS_FLAGS
PRE_FAILURE_WARRANTY = &H1
ON_LINE_COLLECTION = &H2
PERFORMANCE_ATTRIBUTE = &H4
ERROR_RATE_ATTRIBUTE = &H8
EVENT_COUNT_ATTRIBUTE = &H10
SELF_PRESERVING_ATTRIBUTE = &H20
End Enum

'IOCTL commands
Private Const DFP_GET_VERSION = &H74080
Private Const DFP_SEND_DRIVE_COMMAND = &H7C084
Private Const DFP_RECEIVE_DRIVE_DATA = &H7C088

Private Type ATTR_DATA
AttrID As Byte
AttrName As String
AttrValue As Byte
ThresholdValue As Byte
WorstValue As Byte
StatusFlags As STATUS_FLAGS
End Type

Private Type DRIVE_INFO
bDriveType As Byte
SerialNumber As String
Model As String
FirmWare As String
Cilinders As Long
Heads As Long
SecPerTrack As Long
BytesPerSector As Long
BytesperTrack As Long
NumAttributes As Byte
Attributes() As ATTR_DATA
End Type

Private Enum IDE_DRIVE_NUMBER
PRIMARY_MASTER
PRIMARY_SLAVE
SECONDARY_MASTER
SECONDARY_SLAVE
TERTIARY_MASTER
TERTIARY_SLAVE
QUARTIARY_MASTER
QUARTIARY_SLAVE
End Enum

Private Declare Function CreateFile Lib "kernel32" _
Alias "CreateFileA" _
(ByVal lpFileName As String, _
ByVal dwDesiredAccess As Long, _
ByVal dwShareMode As Long, _
lpSecurityAttributes As Any, _
ByVal dwCreationDisposition As Long, _
ByVal dwFlagsAndAttributes As Long, _
ByVal hTemplateFile As Long) As Long

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

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 Any) As Long

Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
(hpvDest As Any, _
hpvSource As Any, _
ByVal cbCopy As Long)

Private Type OSVERSIONINFO
OSVSize As Long
dwVerMajor As Long
dwVerMinor As Long
dwBuildNumber As Long
PlatformID As Long
szCSDVersion As String * 128
End Type

Private Declare Function GetVersionEx Lib "kernel32" _
Alias "GetVersionExA" _
(lpVersionInformation As OSVERSIONINFO) As Long
Dim SN As String
Dim DN As String
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\







Property Get GetNum() As String
GetNum = SN
End Property
Property Get GetName() As String
GetName = DN
End Property



Private Function GetDriveInfo(drvNumber As IDE_DRIVE_NUMBER) As DRIVE_INFO

Dim hDrive As Long
Dim di As DRIVE_INFO


hDrive = SmartOpen(drvNumber)

If hDrive <> INVALID_HANDLE_VALUE Then

If SmartGetVersion(hDrive) = True Then

With di
.bDriveType = 0
.NumAttributes = 0
ReDim .Attributes(0)
.bDriveType = 1
End With

If SmartCheckEnabled(hDrive, drvNumber) Then

If IdentifyDrive(hDrive, IDE_ID_FUNCTION, drvNumber, di) = True Then

GetDriveInfo = di

End If 'IdentifyDrive
End If 'SmartCheckEnabled
End If 'SmartGetVersion
End If 'hDrive <> INVALID_HANDLE_VALUE

CloseHandle hDrive

End Function


Private Function IdentifyDrive(ByVal hDrive As Long, _
ByVal IDCmd As Byte, _
ByVal drvNumber As IDE_DRIVE_NUMBER, _
di As DRIVE_INFO) As Boolean

'Function: Send an IDENTIFY command to the drive
'drvNumber = 0-3
'IDCmd = IDE_ID_FUNCTION or IDE_ATAPI_ID
Dim SCIP As SENDCMDINPARAMS
Dim IDSEC As IDSECTOR
Dim bArrOut(OUTPUT_DATA_SIZE - 1) As Byte
Dim cbBytesReturned As Long

With SCIP
.cBufferSize = IDENTIFY_BUFFER_SIZE
.bDriveNumber = CByte(drvNumber)

With .irDriveRegs
.bFeaturesReg = 0
.bSectorCountReg = 1
.bSectorNumberReg = 1
.bCylLowReg = 0
.bCylHighReg = 0
.bDriveHeadReg = &HA0 'compute the drive number
If Not IsWinNT4Plus Then
.bDriveHeadReg = .bDriveHeadReg Or ((drvNumber And 1) * 16)
End If
'the command can either be IDE
'identify or ATAPI identify.
.bCommandReg = CByte(IDCmd)
End With
End With

If DeviceIoControl(hDrive, _
DFP_RECEIVE_DRIVE_DATA, _
SCIP, _
Len(SCIP) - 4, _
bArrOut(0), _
OUTPUT_DATA_SIZE, _
cbBytesReturned, _
ByVal 0&) Then

CopyMemory IDSEC, bArrOut(16), Len(IDSEC)

di.Model = StrConv(SwapBytes(IDSEC.sModelNumber), vbUnicode)
di.SerialNumber = StrConv(SwapBytes(IDSEC.sSerialNumber), vbUnicode)

IdentifyDrive = True

End If

End Function


Private Function IsWinNT4Plus() As Boolean

'returns True if running Windows NT4 or later
Dim osv As OSVERSIONINFO

osv.OSVSize = Len(osv)

If GetVersionEx(osv) = 1 Then

IsWinNT4Plus = (osv.PlatformID = VER_PLATFORM_WIN32_NT) And _
(osv.dwVerMajor >= 4)

End If

End Function


Private Function SmartCheckEnabled(ByVal hDrive As Long, _
drvNumber As IDE_DRIVE_NUMBER) As Boolean

'SmartCheckEnabled - Check if SMART enable
'FUNCTION: Send a SMART_ENABLE_SMART_OPERATIONS command to the drive
'bDriveNum = 0-3
Dim SCIP As SENDCMDINPARAMS
Dim SCOP As SENDCMDOUTPARAMS
Dim cbBytesReturned As Long

With SCIP

.cBufferSize = 0

With .irDriveRegs
.bFeaturesReg = SMART_ENABLE_SMART_OPERATIONS
.bSectorCountReg = 1
.bSectorNumberReg = 1
.bCylLowReg = SMART_CYL_LOW
.bCylHighReg = SMART_CYL_HI

.bDriveHeadReg = &HA0
If Not IsWinNT4Plus Then
.bDriveHeadReg = .bDriveHeadReg Or ((drvNumber And 1) * 16)
End If
.bCommandReg = IDE_EXECUTE_SMART_FUNCTION

End With

.bDriveNumber = drvNumber

End With

SmartCheckEnabled = DeviceIoControl(hDrive, _
DFP_SEND_DRIVE_COMMAND, _
SCIP, _
Len(SCIP) - 4, _
SCOP, _
Len(SCOP) - 4, _
cbBytesReturned, _
ByVal 0&)
End Function


Private Function SmartGetVersion(ByVal hDrive As Long) As Boolean

Dim cbBytesReturned As Long
Dim GVOP As GETVERSIONOUTPARAMS

SmartGetVersion = DeviceIoControl(hDrive, _
DFP_GET_VERSION, _
ByVal 0&, 0, _
GVOP, _
Len(GVOP), _
cbBytesReturned, _
ByVal 0&)
End Function


Private Function SmartOpen(drvNumber As IDE_DRIVE_NUMBER) As Long

'Open SMART to allow DeviceIoControl
'communications and return SMART handle

If IsWinNT4Plus() Then

SmartOpen = CreateFile("\\.\PhysicalDrive" & CStr(drvNumber), _
GENERIC_READ Or GENERIC_WRITE, _
FILE_SHARE_READ Or FILE_SHARE_WRITE, _
ByVal 0&, _
OPEN_EXISTING, _
0&, _
0&)
Else

SmartOpen = CreateFile("\\.\SMARTVSD", _
0&, 0&, _
ByVal 0&, _
CREATE_NEW, _
0&, _
0&)
End If
End Function


Private Function SwapBytes(b() As Byte) As Byte()

'Note: VB4-32 and VB5 do not support the
'return of arrays from a function. For
'developers using these VB versions there
'are two workarounds to this restriction:
'
'1) Change the return data type ( As Byte() )
' to As Variant (no brackets). No change
' to the calling code is required.
'
'2) Change the function to a sub, remove
' the last line of code (SwapBytes = b()),
' and take advantage of the fact the
' original byte array is being passed
' to the function ByRef, therefore any
' changes made to the passed data are
' actually being made to the original data.
' With this workaround the calling code
' also requires modification:
'
' di.Model = StrConv(SwapBytes(IDSEC.sModelNumber), vbUnicode)
'
' ... to ...
'
' Call SwapBytes(IDSEC.sModelNumber)
' di.Model = StrConv(IDSEC.sModelNumber, vbUnicode)

Dim bTemp As Byte
Dim cnt As Long

For cnt = LBound(b) To UBound(b) Step 2
bTemp = b(cnt)
b(cnt) = b(cnt + 1)
b(cnt + 1) = bTemp
Next cnt

SwapBytes = b()

End Function
Private Sub Class_Initialize()
Dim di As DRIVE_INFO
Dim drvNumber As Long
For drvNumber = 0 To PRIMARY_MASTER ' To QUARTIARY_SLAVE-Получить о всех HDD
di = GetDriveInfo(drvNumber)
With di
Select Case .bDriveType
Case 0
SN = ""
DN = SN
Case 1
SN = Trim$(.SerialNumber)
DN = Trim$(.Model)
Case 2
SN = ""
DN = SN
Case Else
SN = ""
DN = SN
End Select
End With
Next
End Sub

Mizin Alex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 50
Зарегистрирован: 12.06.2004 (Сб) 9:46
Откуда: Россия , Ивдель

Сообщение Mizin Alex » 18.12.2004 (Сб) 22:52

Ну и раз пошла такая пьянка ...:)
Рабочий пример определения даты BIOS под XP может найдется у кого...

C ув. Alex

cashman
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 152
Зарегистрирован: 03.06.2004 (Чт) 0:57
Откуда: Россия, г.Екатеринбург

Сообщение cashman » 19.12.2004 (Вс) 1:18

2 Mizin Alex:
Я не силен в классах и модулях (для меня это демучий лес). Как вызвать этот код из формы. Ну типа:
Private Sub Command1_Click()
text1.text = ... ' как это сделать при помощи твоего класса (модуля)
End Sub

Да поясни 2-й пункт NOTE - только на русском...
У меня VB5...


2 cooler:
твой первый пример показывает на "заводской номер", а серийный...
а второй пример не пошел, начал быковать из-за "Rigth" - где твой смайлик...

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Сообщение areh » 19.12.2004 (Вс) 13:05

MizinAlex
твой пример как я понимаю основан на том же, что и выложенная выше прога (HDDSerial.rar)

cooler
два твоих метода выдают одинаковые результаты (как наверное и должно быть), единственная разница, один из них ставит дефис между четыремя цифрами (HEX)

итак, полученны следующие результаты:
C:\ 2805-B411 2805B411
D:\ C624-18A3 C62418A3
E:\ 8C25-7759 8C257759
F:\ 9B1E-3224 9B1E3224
G:\ 204E-5142 204E5142
H:\ 0000-0000 00000000


где С, Е - SATA диски; D, F - DVD резак и виртуальный диск соответственно, G - IDE хард, H - флэшка, которая распознается как "Local Disk"

относительно соотношения с полученными ранее результатами:
при переводе из НЕХ в DEC номер диска С совпал, а у Е получен новый результат (вероятно более правильный): 2351265625

вот так вот...

PS cashman там где счас стоит смайлик должен быть " 8 пробел ) "

Mizin Alex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 50
Зарегистрирован: 12.06.2004 (Сб) 9:46
Откуда: Россия , Ивдель

Сообщение Mizin Alex » 19.12.2004 (Вс) 17:49

Cashman:
Вызываем - получаем :

Dim SerialNum As clsHDD
Set SerialNum = New clsHDD
Text1.text = SerialNum.GetName & " " & SerialNum.GetNum
Set SerialNum = Nothing

Комментарии в примере не мои т.к. пример не мой ...
Note: VB4-32 and VB5 do not ...
Возвращаемый из функции массив не совместим с версиями VB4-32 и VB5
Измени возвращаемые данные As Byte() на As Variant -без скобок.
Измени функцию на процедуру Function -> Sub
Удали последнюю строку -> SwapBytes = b()

Измени вызов :
di.Model = StrConv(SwapBytes(IDSEC.sModelNumber), vbUnicode)

на :
Call SwapBytes(IDSEC.sModelNumber)
di.Model = StrConv(IDSEC.sModelNumber, vbUnicode)

... , а почему VB5 используешь ?

Попробуй пример HDDSerial.rar .
Пробуй ! Пиши !

Areh:
Wrote: "... твой пример как я понимаю основан на том же, что и выложенная выше прога (HDDSerial.rar)"
Да принцип я думаю похож сильно.
С ув. Alex.

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 20.12.2004 (Пн) 10:43

Продолжается переливание из пустого в порожнее.
Привязка к заводскому номеру диска не будет работать под win 9x без установки драйвера и перезагрузки. Полный список гемороев который можно нажить читайте здесь
Выход только один - использование резервного способа привязки к номеру процессора или BIOS (тоже не всегда работает)
После пары недель копания плюнул на всё и оставил привязку к номеру диска, как наиболее надёжному. Ну а в качестве варианта на будущее - стоит попробовать доставать всю информацию из реестра. Там полно серийных номеров железок, вплоть до отдельных чипов на матери. Вопрос только в доступе к этим номерам из под разных виндов.

cashman
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 152
Зарегистрирован: 03.06.2004 (Чт) 0:57
Откуда: Россия, г.Екатеринбург

Сообщение cashman » 26.12.2004 (Вс) 2:54

2Mizin Alex
Твой код у меня пошел, но только в vb6 "MAXTOR 6L040J2 662201924638", а с изменениями в vb5 отказывается, ему не нравится фомулировка:
Private Sub SwapBytes(b() As Byte) As Variant (типа: Expected: end of statement)
а без "As Variant" в этой строчке ошибку не выводит, но она появляется уже в другом месте:
di.SerialNumber = StrConv(SwapBytes(IDSEC.sSerialNumber), vbUnicode) - типа SwapBytes - должно быть Function or Variant
Меняем на Private Function SwapBytes(b() As Byte) As Variant
Результат MAXTOR 6L040J2 т.е. без серийника... Что не так?..
P.S. а VB5 пользуюсь т.к. мне как новичку хелп хоть какой-то нужен.

2areh
Поясни в кратце, что такое "НЕХ" и "DEC"
а также почему ты считаешь, что 2-ой получившийся вариант более правильный.

Я уже совсем запутался, что есть что??? и вытащил жесткий и списал с него все данные:
40 GB AT Maxtor D740X-6L
Maxtor GTLA: VQ40A011-01-B
Maxtor P/N MX6L040J2
P/N t SG-07J378-12547-21L-17EQ
CT: 2526C002QMVEVT P/N: 253454-001
P/N 3: 11S24P3662ZJ1JN260K80Y FRU: 19K1568

У меня прогаммы выдают 3 результата, это:
1)662201924638 (проги: HDD_Num, HDDSerial, и код указанный Mizin Alex) - ну с этим хоть как-то понятно, его я хоть на жестком нашел, а вот другие?!?
2)BCCC-73FA или BCCC-73FA (проги: Serial Num, Drive и коды COOLERa)
3)-1127451654 (это из FSODrive, + одна Access база, где встроена привязка к номеру HDD).

НУ и КАКОЙ из них мне нужен?, Какой дествительно заводской и его НЕЛЬЗЯ ИЗМЕНИТЬ. А остальные тогда что (особенно из FSODrive, я пытаюсь повторить в своей проге тотже код - выдает ошибку в первой же строке. ПОЧЕМУ???)...

HDD_Num http://vbrussian.com/Controls.asp?ID=44
Driver http://vbrussian.com/Controls.asp?ID=10
Access Base http://www.msaccess.ru/Files/NSA_PClock.zip
При запуске Базы Access удерживать "Shift" иначе база проверит ваш №HDD и не пустит вас. А там уже установите доступ в "MainForm

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Сообщение areh » 26.12.2004 (Вс) 10:56

HEX (hexadecimal) шестнадцатиричный
DEC (decimal) десятичный

это все относительно записи числа... думаю ты об этом слышал...

по поводу наиболее правильного, дело в том, что точно так же определяет серийник моих хардов PartitionMagic...
а ещё на днях, мне попался в руки диск Hitachi, на котором SN был указан именно в таком виде...

Mizin Alex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 50
Зарегистрирован: 12.06.2004 (Сб) 9:46
Откуда: Россия , Ивдель

Сообщение Mizin Alex » 26.12.2004 (Вс) 21:44

Cashman:
Wrote: Результат MAXTOR 6L040J2 т.е. без серийника... Что не так?..
P.S. а VB5 пользуюсь т.к. мне как новичку хелп хоть какой-то нужен.
Добивать определение серийного номера HDD тебе придется самому :(!
Т.к. это нужно экспериментировать с VB5. А по поводу справки так это MSDN в VB6 или перетащи куда нибудь файлы справок VB5 и установи VB6!
С ув. Alex.

cashman
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 152
Зарегистрирован: 03.06.2004 (Чт) 0:57
Откуда: Россия, г.Екатеринбург

Сообщение cashman » 27.12.2004 (Пн) 2:12

2areh
Все решился буду привязывать прогу к жесткому, используя 2-ой способ, т.е. BCCC-73FA или BCCC-73FA (установил у себя PartitionMagic - УБЕДИТЕЛЬНО).

2Mizin Alex
Спасибо, НО... Нормальные герои всегда идут в обход. Буду использовать вышеуказанный способ.
P.S. у меня итак стоит VB5 (я в нем программирую) и VB6 (для просмотра исходников ваших, сейчас в основном идут сделанные в VB6, которые не открываются в VB5). Но когда VB овою лучше, то перейду на VB6 - в нем возможностей больше.
"Никогда не останавливайся на достигнутом!!!"

Последный вопрос, а можно взломать этот серийник (BCCC-73FA), т.е. может есть какая-нибудь утилита, которая меняет его на какой хочешь?..

Mizin Alex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 50
Зарегистрирован: 12.06.2004 (Сб) 9:46
Откуда: Россия , Ивдель

Сообщение Mizin Alex » 27.12.2004 (Пн) 20:59

Cashman :
Wrote:''Последный вопрос, а можно взломать этот серийник (BCCC-73FA), т.е. может есть какая-нибудь утилита, которая меняет его на какой хочешь?..''

Уж не знаю откуда там берется BCCC-73FA (исходник не смотрел) ,но я думаю убедительно в моем примере то , что серийник совпадает с серийником HDD , а уж он то прописан в микропрограмме я полагаю ...

С ув. Alex


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 28

    TopList