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
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.
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...
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.
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;
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....
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
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