On-line: Andrey, PSP, гостей 2. Всего: 4 [подробнее..]
АвторСообщение
администратор




Пост N: 4058
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.06.14 16:10. Заголовок: Серийный номер винта


Как его считать ? Не ID присвоенный при форматировании а номер зашитый на заводе ну по типу
как MAC сетевой платы.

PS
Everest такой номер показывает.
ID модели ST3250624AS
Серийный номер 5ND306E8
Версия 3.AAE

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 10 [только новые]







Пост N: 298
Зарегистрирован: 16.12.08
ссылка на сообщение  Отправлено: 13.06.14 10:29. Заголовок: Дима есть старый при..


Дима есть старый пример, переведённый с С#:

 
#include "fivewin.ch"

function Main()
MsgInfo( GetUSBSerial( "D:" ) )
return nil

*******************************
FUNCTION GetUSBSerial( cDrive )
*******************************
local cDiskNum := "", cPnPDeviceID := "", cTmp, oDiskDrive,;
oLogicalDrive

local oWMIObjA, oWMIServerA, oWMIDiskDrive, oWMIObjA2, oWMIServerA2,;
oWMILogicalDisk

try
oWMIObjA := GetActiveObject( "wbemScripting.SwbemLocator" )
catch
try
oWMIObjA := CreateObject( "wbemScripting.SwbemLocator" )
catch
Alert( "ERRO ! Nao criou objeto wbemScripting")
return
end
end

oWMIServerA := oWMIObjA:ConnectServer()
oWMIDiskDrive := oWMIServerA:ExecQuery( "SELECT * FROM Win32_DiskDrive" )

try
oWMIObjA2 := GetActiveObject( "wbemScripting.SwbemLocator" )
catch
try
oWMIObjA2 := CreateObject( "wbemScripting.SwbemLocator" )
catch
Alert( "ERRO ! Nao criou objeto wbemScripting")
return
end
end

oWMIServerA2 := oWMIObjA2:ConnectServer()
oWMILogicalDisk := oWMIServerA2:ExecQuery( "SELECT * FROM Win32_LogicalDiskToPartition" )

for each oLogicalDrive in oWMILogicalDisk
if substr(oLogicalDrive:Dependent,at('"',oLogicalDrive:Dependent)+1,2 ) == cDrive
cDiskNum :=substr(oLogicalDrive:Antecedent,at('#',oLogicalDrive:Antecedent )+1,1 )
endif
next

for each oDiskDrive in oWMIDiskDrive
if oDiskDrive:Name == "\\.\PHYSICALDRIVE" + cDiskNum
if oDiskDrive:InterfaceType == "USB"
cTmp := substr( oDiskDrive:PnPDeviceID, 1,rat("&",oDiskDrive:PnPDeviceID ) - 1 )
cPnPDeviceID := substr( cTmp, rat( "&", cTmp ) + 1 )
cPnPDeviceID := substr( cPnPDeviceID, at( "\",cPnPDeviceID) +1 )
elseif oDiskDrive:InterfaceType == "IDE"
cPnPDeviceID := substr( oDiskDrive:PnPDeviceID,rat("\",oDiskDrive:PnPDeviceID ) + 1 )
endif
cPnPDeviceID := "BUS Type: " + oDiskDrive:InterfaceType +"("+oDiskDrive:MediaType + ") " + " Model: " + oDiskDrive:Model + ;
" SerialNumber: " + cPnPDeviceID + " Serial Volume: " + NumToHex(VolSerial(cDrive ) )
endif
next
RETURN cPnPDeviceID


Можна ещё попробовать такой пример:

 
function SerNumHddDisk()
local oWMI, objWMI, oPhysicalMedia, oData
sComp :="."

oWMI := CreateObject( "winmgmts:\\"+sComp+"\root\CIMV2" )
objWMI := oWMI:ConnectServer()
oPhysicalMedia := objWMI:ExecQuery( "Select * from Win32_PhysicalMedia" )
for each oData in oPhysicalMedia
MsgInfo( oData:SerialNumber )
next
return nil


нужно тестить, выдаёт ошибки.

Дима запусти вот эту утилиту, очень помагает. Написана на шарпе.
WMI Code Creator


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 71
Зарегистрирован: 17.10.05
ссылка на сообщение  Отправлено: 13.06.14 10:52. Заголовок: HKLM\Software ..


HKLM\Software\Microsoft\Windows Genuine Advantage - HDSLN

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 72
Зарегистрирован: 17.10.05
ссылка на сообщение  Отправлено: 13.06.14 11:10. Заголовок: или по wmic получить..


или по wmic получить Signature

wmic diskdrive get signature

получаем что то вроде этого:
=============
Signature
1703225753
1335371724
=============

а уж сама сигнатура это...
======================
Definition: The disk signature, one part of the master boot record, is a unique, identifying number for a hard disk drive or other storage device.

In Windows, a list of every disk signature ever recorded on an individual computer since installing Windows
======================
надеюсь, без перевода понятно...



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4059
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.06.14 11:13. Заголовок: Спасибо , буду пробо..


Спасибо , буду пробовать.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 228
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 13.06.14 11:23. Заголовок: Это не оно ? VolSer..


Это не оно ?

VolSerial() - Returns the serial number of a disk drive. (Harbour)


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 157
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 13.06.14 11:24. Заголовок: Gopa:=nSerialHD() ..


Gopa:=nSerialHD()


#include <Windows.h>
#include <hbapi.h>
#include <dos.h>

typedef struct
{
WORD DUM;
LONG lSerie;
BYTE Volume[ 11 ];
BYTE fat[ 8 ];
} HDINFO;

typedef struct
{
DWORD edi, esi, ebp, reserved, ebx, edx, ecx, eax;
WORD flags, es, ds, fs, gs, ip, cs, sp, ss;
} REALMODEINT;

void pascal Dos3Call( void );

//----------------------------------------------------------------//

#ifndef __FLAT__

static BOOL RealModeInt( WORD wIntNo, REALMODEINT * pReal )
{
asm {
push di
mov bx, wIntNo
and bx, 0x00FF
mov cx, 0
les di, pReal
mov ax, 0x0300
int 0x31
pop di
}

return pReal->flags & 1;
}

//----------------------------------------------------------------//

static LONG lSerialHD( WORD wDrive )
{
DWORD DosHandle = GlobalDosAlloc( sizeof( HDINFO ) );
REALMODEINT sInt;
LONG lHD;

memset( ( LPBYTE ) &sInt, ( BYTE ) 0, sizeof( REALMODEINT ) );

sInt.eax = 0x00006900;
sInt.ebx = wDrive; // C: = 3
sInt.ds = HIWORD( DosHandle );
sInt.edx = 0L;

RealModeInt( 0x0021, &sInt );

// Check for error result
if( RealModeInt( 0x0021, &sInt ) )
lHD = 0; // returned value if there is an error
else
lHD = ( ( HDINFO * ) MK_FP( LOWORD( DosHandle ), sInt.edx ) )->lSerie;

GlobalDosFree( LOWORD( DosHandle ) );

return lHD;
}

#endif

//----------------------------------------------------------------//

#ifdef __FLAT__

HB_FUNC( NSERIALHD )
{
DWORD dwVolumeSerialNumber;
BYTE VolumeNameBuffer[ 256 ];
BYTE FileSystemNameBuffer[ 256 ];

GetVolumeInformation( hb_pcount() ? hb_parc( 1 ): "C:\\",
( char * ) VolumeNameBuffer, sizeof( VolumeNameBuffer ),
&dwVolumeSerialNumber, 0, 0,
( char * ) FileSystemNameBuffer,
sizeof( FileSystemNameBuffer ) );

hb_retnl( dwVolumeSerialNumber );
}

HB_FUNC( VOLUMENAME )
{
DWORD dwVolumeSerialNumber;
BYTE VolumeNameBuffer[ 256 ];
BYTE FileSystemNameBuffer[ 256 ];

GetVolumeInformation( hb_pcount() ? hb_parc( 1 ): "C:\\",
( char * ) VolumeNameBuffer, sizeof( VolumeNameBuffer ),
&dwVolumeSerialNumber, 0, 0,
( char * ) FileSystemNameBuffer,
sizeof( FileSystemNameBuffer ) );

hb_retc( ( char * ) VolumeNameBuffer );
}

#else

HB_FUNC( nSerialHD )
{
WORD wDrive;

if( hb_pcount() )
{
wDrive = hb_parc( 1 )[ 0 ];
if( wDrive >= 'a' && wDrive <= 'z' )
wDrive -= ( 'a' - 1 );
else
wDrive -= ( 'A' - 1 );
}
else
{
_AH = 0x19;
Dos3Call();
wDrive = _AL + 1;
}

hb_retnl( lSerialHD( wDrive ) );
}

#endif

//----------------------------------------------------------------//

#ifndef __FLAT__

static LONG lSerialA( void )
{
DWORD DosHandle = GlobalDosAlloc( 512 );
REALMODEINT sInt;
LONG lHD;

memset( ( LPBYTE ) &sInt, ( BYTE ) 0, sizeof( REALMODEINT ) );

sInt.eax = 0x00000201; // AL n sectors to read
sInt.ebx = 0x00000000; // BX offset buffer
sInt.ecx = 0x00000001; // CH track, CL sector (1...)
sInt.edx = 0x00000000; // DH Head, DL drive
sInt.es = HIWORD( DosHandle ); // ES segment buffer

RealModeInt( 0x0013, &sInt );

if( sInt.flags & 1 )
lHD = 0;
else
lHD = * ( long * ) MK_FP( LOWORD( DosHandle ), 39 );

GlobalDosFree( LOWORD( DosHandle ) );

return lHD;
}

//----------------------------------------------------------------//

HB_FUNC( nSerialA )
{
hb_retnl( lSerialA() );
}

//----------------------------------------------------------------//

#else

HB_FUNC( NSERIALA )
{
BYTE VolumeNameBuffer[ 100 ];
BYTE FileSystemNameBuffer[ 100 ];
DWORD dwVolumeSerialNumber;

GetVolumeInformation( "A:\\",
( char * ) VolumeNameBuffer, sizeof( VolumeNameBuffer ),
&dwVolumeSerialNumber, 0, 0,
( char * ) FileSystemNameBuffer,
sizeof( FileSystemNameBuffer ) );

hb_retnl( dwVolumeSerialNumber );
}

#endif


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4060
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.06.14 14:08. Заголовок: Вот такой скрипт VB ..


Вот такой скрипт VB у меня показывает серийник только на одном винте (в Harbour тоже)
На остальных в поле серийник пусто........

test.vbs
 
strComputer = "."
Result = ""

Dim Model(10), InterfaceType(10), SerialNumber(10)
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Rem Enumerating Physical Disk Model, etc - http://msdn2.microsoft.com/en-us/library/aa394132.aspx
i = 0
Set colDiskDrives = objWMIService.ExecQuery ("Select * from Win32_DiskDrive")
For each objDiskDrive in colDiskDrives
Model(i) = objDiskDrive.Model
InterfaceType(i) = objDiskDrive.InterfaceType
i=i+1
Next


Set colDiskDrives = objWMIService.ExecQuery ("Select * from Win32_PhysicalMedia")
i = 0
For each objDisk in colDiskDrives
SerialNumber(i) = objDisk.SerialNumber
Result = Result & "HDD " & i & ":" & vbCrLf & vbTab & _
"Model: " & Model(i) & vbCrLf & vbTab & _
"InterfaceType: " & InterfaceType(i) & vbCrLf & vbTab & _
"SerialNumber: " & SerialNumber(i) & vbCrLf
i=i+1
Next


WScript.Echo Result


PS
У меня 3 HDD

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 299
Зарегистрирован: 16.12.08
ссылка на сообщение  Отправлено: 13.06.14 15:06. Заголовок: // один серийник Get..


// один серийник
GetUSBSerial( "C:" )
GetUSBSerial( "D:" )
// другой серийник
GetUSBSerial( "F:" )
GetUSBSerial( "G:" )



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4061
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.06.14 15:29. Заголовок: santy пишет: GetUSB..


santy пишет:

 цитата:
GetUSBSerial( "C:" )


Да как бы работает но в Serial Volume на диске С выдает -1 , на остальных дисках норм.
В то же время SerialNumber на всех дисках отработал верно.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4062
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.06.14 15:51. Заголовок: Dima пишет: Да как ..


Dima пишет:

 цитата:
Да как бы работает но в Serial Volume на диске С выдает -1


Понял. Нужно слэш добавлять

А как преобразовать
5&18123253&0&0.0.0
или
5&55881AE&0&0.0.0
к виду 5ND306E8 ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 439
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет