Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];

Вниз

Как узнать серийный номер винта   Найти похожие ветки 

 
snake7   (2003-07-14 18:38) [0]

Подскажите как узнать серийный номер винта ФИЗИЧЕСКИЙ
не серийный номер раздела (getvolumeinfo)
а именно физический номер винта из под делфи!
Спасибо!


 
Marser   (2003-07-14 19:00) [1]

var
SerialNum : dword;
a, b : dword;
Buffer : array [0..255] of char;
begin
GetVolumeInformation("c:\", Buffer, SizeOf(Buffer), @SerialNum, a, b, nil, 0)
end;


 
Marser   (2003-07-14 19:07) [2]

Прошу прощения, невнимательно прочитал, хотя в загашнике есть и это. Может, поможет:
Sernumu;

interface

uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;

type

TMediaID = Record
InfoLevel : Word;
SerialNumber : LongInt;
VolumeLabel : Array[0..10] of Char;
SysName : Array[0..7] of Char;
End;
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
MediaID : TMediaID;
public
{ Public declarations }
end;

var

Form1: TForm1;

implementation

{$R *.DFM}

type

DPMIRegisters =
record
DI : LongInt;
SI : LongInt;
BP : LongInt;
Reserved : LongInt;
BX : LongInt;
DX : LongInt;
CX : LongInt;
AX : LongInt;
Flags : Word;
ES : Word;
DS : Word;
FS : Word;
GS : Word;
IP : Word;
CS : Word;
SP : Word;
SS : Word;
end;



function RealIntr(IntNo : Byte; var Regs : DPMIRegisters) : Word; Assembler;
asm
xor bx,bx
mov bl,IntNo
xor cx,cx {StackWords = 0}
les di,Regs
mov ax,0300h
int 31h
jc @@ExitPoint
xor ax,ax
@@ExitPoint:
end;


function GetDiskInfo(Drive : Word; var MediaID : TMediaID) : Boolean;
type

tLong = Record
LoWord, HiWord : Word;
End;
var

Regs : DPMIRegisters;
dwAddress : LongInt;
Address : tLong absolute dwAddress;
begin

Result := False;
FillChar(MediaID, SizeOf(MediaID), 0);
dwAddress := GlobalDosAlloc(SizeOf(MediaID)); { два параграфа памяти DOS }
if dwAddress = 0
then { в случае ошибки адрес будет нулевым }
exit;


With Regs do
begin
bx := Drive;
cx := $66;
ds := Address.HiWord;
ax := $6900;
dx := 0;
es := 0;
flags := 0;
end;
If RealIntr($21, Regs) <> 0
Then
Exit;
Move(ptr(Address.LoWord, 0)^, MediaID, SizeOf(MediaID));
GlobalDosFree(Address.LoWord) ( Sender: TObject) Прошу прощения, невнимательно прочитал, хотя в загашнике есть и это. Может, поможет:
Sernumu;

interface

uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;

type

TMediaID = Record
InfoLevel : Word;
SerialNumber : LongInt;
VolumeLabel : Array[0..10] of Char;
SysName : Array[0..7] of Char;
End;
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
MediaID : TMediaID;
public
{ Public declarations }
end;

var

Form1: TForm1;

implementation

{$R *.DFM}

type

DPMIRegisters =
record
DI : LongInt;
SI : LongInt;
BP : LongInt;
Reserved : LongInt;
BX : LongInt;
DX : LongInt;
CX : LongInt;
AX : LongInt;
Flags : Word;
ES : Word;
DS : Word;
FS : Word;
GS : Word;
IP : Word;
CS : Word;
SP : Word;
SS : Word;
end;



function RealIntr(IntNo : Byte; var Regs : DPMIRegisters) : Word; Assembler;
asm
xor bx,bx
mov bl,IntNo
xor cx,cx {StackWords = 0}
les di,Regs
mov ax,0300h
int 31h
jc @@ExitPoint
xor ax,ax
@@ExitPoint:
end;


function GetDiskInfo(Drive : Word; var MediaID : TMediaID) : Boolean;
type

tLong = Record
LoWord, HiWord : Word;
End;
var

Regs : DPMIRegisters;
dwAddress : LongInt;
Address : tLong absolute dwAddress;
begin

Result := False;
FillChar(MediaID, SizeOf(MediaID), 0);
dwAddress := GlobalDosAlloc(SizeOf(MediaID)); { два параграфа памяти DOS }
if dwAddress = 0
then { в случае ошибки адрес будет нулевым }
exit;


With Regs do
begin
bx := Drive;
cx := $66;
ds := Address.HiWord;
ax := $6900;
dx := 0;
es := 0;
flags := 0;
end;
If RealIntr($21, Regs) <> 0
Then
Exit;
Move(ptr(Address.LoWord, 0)^, MediaID, SizeOf(MediaID));
GlobalDosFree(Address.LoWord) { освобождаем блок DOS памяти }
Result := True;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin

GetDiskInfo(1, MediaID);
With MediaID do
Begin
Label1.Caption := IntToHex(SerialNumber, 8);
Label2.Caption := VolumeLabel;
Label3.Caption := SysName;
End;
end;

end.


 
ZZ   (2003-07-14 19:12) [3]

http://blackman.wp-club.net/myfaq/1212_23122002a.php#anc12
Читаем.. (знакомые лица :) и заходим на страницу http://home.earthlink.net/~akonshin/index.htm

Нашлось в google по запросу Как узнать серийный номер винта


 
snake7   (2003-07-15 11:21) [4]

ВСем спасибо за внимания , но примеры на сайте
http://home.earthlink.net/~akonshin/ работают конечно хорошо под
win 2k а под win98 не работают :(
Что делать? Где искать исходники?
Помогите!!!!!!!!


 
snake7   (2003-07-15 11:55) [5]

а пример присланый Marser в delphi7 вообще не компилица (много ошибок)


 
Е-Моё имя   (2003-07-15 12:05) [6]


> snake7 (15.07.03 11:55)

он его по памяти писал


 
Alex Konshin   (2003-07-15 12:19) [7]

А ты прочитай readme, он специально для тебя написан.
Если же все сделано, как сказано, то он вполне может не работать по многим причинам:
- IdeSN читает серийный номер мастера на первом контроллере, чтоб читать другие - нужно изменить этот пример или использовать другой;
- у вас не ATA винчестер (редкость на Win9x, но почему бы и нет?);
- используется кривой драйвер для IDE контроллера, который не пропускает команды SMART (такое бывает с драйверами для ATA100);

Если все равно не работает - в сад, то есть не ко мне: я 9x видеть не вижу и видеть не хочу. В конце концов можете поискать примеры для прямой работы с портами под 9x.


 
snake7   (2003-07-16 11:15) [8]

Все что было написано в readme я зделал(файл SMARTVSD.VXD есть)
и винти у меня АТА66 WD 8GB, но ладно.
Я чуть-чуть поискал в инете и нашел исходник на VC++ который
нормально все читает и под win98 и win2k даже не требует никаких
vxd драйверов
Вот теперь пытаюсь засунуть этот исходник в dll чтобы потом из
делфи взять его ф-ии, но опять не получаеться!
Почемуто передача параметров гльчит!:(


 
Alex Konshin   (2003-07-16 11:36) [9]

Охотно верю. Я не открывал Америку. В интернете есть много примеров о том, как использовать прямую работу с портами под 9x или использовать SMART API под NT+. Разница моих примеров только в том, что они работают в NT/2K/XP под ЛЮБЫМ аккаунтом, а не только под админом. Это не готовое решение, я только показываю как это сделать, и если с руками все в порядке, то все будет работать (естественно, если это принципиально возможно).



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.01 c
14-82474
Baklan
2003-09-09 11:23
2003.09.25
Туплю


14-82487
наблюдатель
2003-09-05 18:50
2003.09.25
Блиц тест


14-82392
waw
2003-09-05 11:47
2003.09.25
Компоненты для программирования под Palm OS?


4-82542
xZero
2003-07-23 23:28
2003.09.25
.LNK файлы


7-82513
Xandr
2003-07-14 08:13
2003.09.25
Модем





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский