HDD fabrika seri no

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ssoyut
Üye
Mesajlar: 12
Kayıt: 14 Ağu 2003 06:21

HDD fabrika seri no

Mesaj gönderen ssoyut »

arkadaslar HDD fabrika seri nosunu bulan kod bulmam lazim. Delphi6 kullaniyorum. bir de galiba bazi kodlar W98 de calisirken W2000 de calismiomus. W2000 de calisan varsa tercih sebebidir :) cok sey mi istedim???
herkese kolay gele

e-mail: ssoyut@hotmail.com
Kullanıcı avatarı
altunway
Üye
Mesajlar: 217
Kayıt: 11 Haz 2003 09:16
Konum: İstanbul
İletişim:

Mesaj gönderen altunway »

S.A

Öncelikle Merhaba..
Bu Kod Zaten Sitemizde mevcut keşke biraz inceleme yapsaydınız.. :D

Neyse Kod Aşağıda.Ama Lütfen ipuçları kısmına bir göz atın.

procedure TForm1.Button1Click(Sender: TObject);
var
VolumeSerialNumber : DWORD;
MaximumComponentLength : DWORD;
FileSystemFlags : DWORD;
SerialNumber : string;
begin
GetVolumeInformation('C:\',
nil,
0,
@VolumeSerialNumber,
MaximumComponentLength,
FileSystemFlags,
nil,
0);
SerialNumber := IntToHex(HiWord(VolumeSerialNumber), 4) + '-' +
IntToHex(LoWord(VolumeSerialNumber), 4);
Memo1.Lines.Add(SerialNumber);
end;




Kolay Gelsin..
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

arkadaşın bahsettiği farklı birşey altunway. Harddisklerde iki tür seri no var. İlki bahsettiğin kodla alınan bir seri no. Bu çok kolay bir şekilde değiştirilebiliyor + her formatta değişiyor.

Diğeri de fabrika no. Unique oluyor ve değişmiyor.

Eğer koruma amaçlı birşey yapacaksanız TurboPower OnGuard'ı tavsiye ederim. Sitede 3. parti bileşenler kısmına bir bak.

Kolay gelsin.
ssoyut
Üye
Mesajlar: 12
Kayıt: 14 Ağu 2003 06:21

Mesaj gönderen ssoyut »

altunway kardesime tesekkur ediyorum fakat mustafa bey in dedigi gibi HDD fabrika no sunu bulmak icin farklı bir kod lazim. yine de tesekkr ederim.
Mustafa Bey, TurboPower OnGuard'dan haberim var. kullanmadim fakat iyi bir component olduguna eminim. fakat ben farklı bir algoritma için calisiyorum. kendi yaptigim bir algoritma olacak. eger bu seri no yu bulan kod bulursanız ve gonderirseniz cok memnun olurum...
Kolay gelsin...
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Mysysinfo isimli kodu ile birlikte free bir component var. PC uzerinde donanim ile iligili akliniza gelebilecek her turlu veriyi sizin icin buluyor. Yuzlerce bilgisayarda (300 den fazla) calismasinda bir sorun yasamadim.
Fakat runtime'da biraz ugrastirmisti beni sadece bu componenti iceren bir datamodule kullanip bu datamodulu de try excep blogu icinde create ederek kullaniyorum.

Biraz arastirarak componentin son verisoyunnu bulabilirsiniz saniyorum. Bende D5 ve D6 icin olan hali var.

Kolay gelsin....
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

HDD fabrika no

Mesaj gönderen gkimirti »

umarım faydalı olur

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)

Button1: TButton;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation


function GetIdeSerialNumber ():string;
const IDENTIFY_BUFFER_SIZE = 512;
type
TIDERegs = packed record
bFeaturesReg : BYTE; // Used for specifying SMART "commands".
bSectorCountReg : BYTE; // IDE sector count register
bSectorNumberReg : BYTE; // IDE sector number register
bCylLowReg : BYTE; // IDE low order cylinder value
bCylHighReg : BYTE; // IDE high order cylinder value
bDriveHeadReg : BYTE; // IDE drive/head register
bCommandReg : BYTE; // Actual IDE command.
bReserved : BYTE; // reserved for future use. Must be zero.
end;
TSendCmdInParams = packed record
// Buffer size in bytes
cBufferSize : DWORD;
// Structure with drive register values.
irDriveRegs : TIDERegs;
// Physical drive number to send command to (0,1,2,3).
bDriveNumber : BYTE;
bReserved : Array[0..2] of Byte;
dwReserved : Array[0..3] of DWORD;
bBuffer : Array[0..0] of Byte; // Input buffer.
end;
TIdSector = packed record
wGenConfig : Word;
wNumCyls : Word;
wReserved : Word;
wNumHeads : Word;
wBytesPerTrack : Word;
wBytesPerSector : Word;
wSectorsPerTrack : Word;
wVendorUnique : Array[0..2] of Word;
sSerialNumber : Array[0..19] of CHAR;
wBufferType : Word;
wBufferSize : Word;
wECCSize : Word;
sFirmwareRev : Array[0..7] of Char;
sModelNumber : Array[0..39] of Char;
wMoreVendorUnique : Word;
wDoubleWordIO : Word;
wCapabilities : Word;
wReserved1 : Word;
wPIOTiming : Word;
wDMATiming : Word;
wBS : Word;
wNumCurrentCyls : Word;
wNumCurrentHeads : Word;
wNumCurrentSectorsPerTrack : Word;
ulCurrentSectorCapacity : DWORD;
wMultSectorStuff : Word;
ulTotalAddressableSectors : DWORD;
wSingleWordDMA : Word;
wMultiWordDMA : Word;
bReserved : Array[0..127] of BYTE;
end;
PIdSector = ^TIdSector;
TDriverStatus = packed record
// Error code from driver, or 0 if no error.
bDriverError : Byte;
// Contents of IDE Error register. Only valid when bDriverError is SMART_IDE_ERROR.
bIDEStatus : Byte;
bReserved : Array[0..1] of Byte;
dwReserved : Array[0..1] of DWORD;
end;
TSendCmdOutParams = packed record
// Size of bBuffer in bytes
cBufferSize : DWORD;
// Driver status structure.
DriverStatus : TDriverStatus;
// Buffer of arbitrary length in which to store the data read from the drive.
bBuffer : Array[0..0] of BYTE;
end;

var
hDevice : THandle;
cbBytesReturned : DWORD;
ptr : PChar;
SCIP : TSendCmdInParams;
aIdOutCmd : Array
[0..(SizeOf(TSendCmdOutParams)+IDENTIFY_BUFFER_SIZE-1)-1] of Byte;
IdOutCmd : TSendCmdOutParams absolute aIdOutCmd;

procedure ChangeByteOrder( var Data; Size : Integer );
var ptr : PChar;
i : Integer;
c : Char;


begin
ptr := @Data;
for i := 0 to (Size shr 1)-1 do
begin
c := ptr^;
ptr^ := (ptr+1)^;
(ptr+1)^ := c;
Inc(ptr,2);
end;
end;

begin
Result := ''; // return empty string on error
if SysUtils.Win32Platform=VER_PLATFORM_WIN32_NT then // Windows NT,Windows 2000
begin
// warning! change name for other drives: ex.: second drive '\\.\PhysicalDrive1\'
hDevice := CreateFile( '\\.\PhysicalDrive0', GENERIC_READ or
GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );
end
else // Version Windows 95 OSR2, Windows 98
hDevice := CreateFile( '\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0 );
if hDevice=INVALID_HANDLE_VALUE then Exit;
try
FillChar(SCIP,SizeOf(TSendCmdInParams)-1,#0);
FillChar(aIdOutCmd,SizeOf(aIdOutCmd),#0);
cbBytesReturned := 0;
// Set up data structures for IDENTIFY command.
with SCIP do
begin
cBufferSize := IDENTIFY_BUFFER_SIZE;
// bDriveNumber := 0;
with irDriveRegs do
begin
bSectorCountReg := 1;
bSectorNumberReg := 1;
// if Win32Platform=VER_PLATFORM_WIN32_NT then bDriveHeadReg := $A0
// else bDriveHeadReg := $A0 or ((bDriveNum and 1) shl 4);
bDriveHeadReg := $A0;
bCommandReg := $EC;
end;
end;
if not DeviceIoControl( hDevice, $0007c088, @SCIP,
SizeOf(TSendCmdInParams)-1,
@aIdOutCmd, SizeOf(aIdOutCmd), cbBytesReturned, nil ) then Exit;
finally
CloseHandle(hDevice);
end;
with PIdSector(@IdOutCmd.bBuffer)^ do
begin
ChangeByteOrder( sSerialNumber, SizeOf(sSerialNumber) );
(PChar(@sSerialNumber)+SizeOf(sSerialNumber))^ := #0;
Result := PChar(@sSerialNumber);
end;
end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var s : String;
rc : DWORD;
begin
s := GetIdeSerialNumber;
if s='' then
begin
rc := GetLastError;
if rc=0 then label4.caption:='IDE drive is not support SMART feature'
else label4.caption:=SysErrorMessage(rc);
end
else label4.caption:= s;


end;

end.
ssoyut
Üye
Mesajlar: 12
Kayıt: 14 Ağu 2003 06:21

Mesaj gönderen ssoyut »

gkimirti arkadasim, kod icin cok saol.
W2000 de seri no yu buldum. fakat aynı kodu Win ME de denedigimde calismadi. aslinda soyle soyliyeyim, "belirtilen dosya bulunamiyor" hatasi verdi. bunun sebebi system dosyalarının her işletim sisteminde farklı klasorlerde olması mı? kod da bu farklılıgı nasil cozucez? çözen varsa bana da anlatırsa cok sevincem.
herkese kolay gele....
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

acıkcası ben sadece 2000 de denedim
winme de de kullanıp hix kurcalamadım
zaten bende kodu netten bulmustum:)
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

Win9x için bir vxd dosyası vardı. Ben de evde vardı dosya. Akşam siteye koyup haber veririm. O vxd'yi kopyalarsanız, Win9x'de de çalışıyor kod.

Kolay gelsin.
ssoyut
Üye
Mesajlar: 12
Kayıt: 14 Ağu 2003 06:21

Mesaj gönderen ssoyut »

Mustafa bey, o bahsettiginiz vxd dosyasını siteye koydunuz mu? ben sitede ufak bi arastirma yaptım ama bulamadim. bi de bu dosyalar hakkında bilgi nereden bulabilirim? yani bu tip dosyalardan Win ME yada Win XP icin de bulmak istiyorum. bir bilginiz var mı?
bu arada siteye koymakta sorun varsa ve dosya buyutu cok buyuk degilse mail olarak da gonderebilirsiniz. Tesekkürler

Herkese kolay gele....
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

kusura bakmayın biraz geç oldu :oops:

Windows 9x'te SMARTVSD.VXD isimli dosyayı "windows\system" klasöründen "windows\system\iosubsys" klasörüne kopyalayıp restart etmek gerekiyormuş.

Kolay gelsin.
rayiha
Üye
Mesajlar: 1
Kayıt: 21 Nis 2009 03:42

Mesaj gönderen rayiha »

merhabalar..elde ettiğimiz fabrika seri nosunu 16 hane hex sayı olarak şifreleyen ve verilen şifreyi deşifre ederek kontrol edebilen bir component yazmam gerekiyor.yardımcı olur musunuz
Cevapla