PDA

View Full Version : تابعی برای serial hard



firststep
دوشنبه 05 بهمن 1388, 23:44 عصر
سلام بر همگی و با عرض ادب
من نیاز به کدی دارم که کد خود سریال هاردو برام بگردونه البته خوده هارو نه درایوارو. چ.ن چیزایی که تو نت دیدم تمام ولیوم درایوا بودن- یه جورایی می خوام که کد منحصر به فردی باشه برای رایانه که تغییر هم نکنه.:متفکر:............................. .............. ممنونمم از همتون:لبخند::بوس:

yashar666
دوشنبه 05 بهمن 1388, 23:57 عصر
تابع یه کم سخته ولی این ocx ببین به دردت می خوره

BEHESHT*
سه شنبه 06 بهمن 1388, 01:09 صبح
با استفاده از كامپوننت TGetDiskSerial VCL 4.0.0

براي همه ي ويندوز ها و هارد ها حتي جديدترين sataها خوب جواب ميده كار باهاش هم سادست:
آدرس شركت سازنده:


http://www.devlib.net (http://www.devlib.net/)

دلفــي
سه شنبه 06 بهمن 1388, 09:09 صبح
بخش اعلانات (مرجع توابع دلفی)

عنوان مطلب : تابع بدست آوردن مشخصات کامل هارد دیسک

نام تابع : ;function GetIdeSerialNumber(i:Integer) : String

majid_ramak
سه شنبه 06 بهمن 1388, 10:53 صبح
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;
procedure TfrmMain.bbtnSerialNoClick(Sender: TObject);
begin
edSerial.Text:= GetIdeSerialNumber;
end;

mah_par2009
شنبه 17 بهمن 1388, 18:23 عصر
با سلام خدمت شما دوست عزیز
بعضی از کامپوننت های هارد که سریال هارد رو برمی گردونه و اکثرا برنامه نویس های برای کد گذاشتن در برنامشون استفاده می کنند بعد از تعویض سیستم عامل کد هم عوض می شه.اگر برای این منظور می خواهید

yaseriran
شنبه 17 بهمن 1388, 20:22 عصر
درود!
من در لینک زیر بدست آوردن درایورها رو گذاشتم، شاید بدردت بخوره!
http://barnamenevis.org/forum/showthread.php?t=203760

من آنم که در پای خوکان نریزم مر این قیمتی دُرّ لفظ دَری را (http://bidelaan.blogspot.com/2009/03/blog-post.html)

majid_ramak
یک شنبه 18 بهمن 1388, 08:41 صبح
دوست عزیز شماره سریال هارد مقدار یونیک داره که با تعویض سیستم عامل تغییر نمی کنه
تو Function که بالا نوشتم دقیقا مقدار صحیح سریال هارد رو بر میگردونه که دقیقا مقدار حک شده بر روی هارده ، جالب اینکه شما اگه این Function رو در محیط Virtual اجرا کنید مقداری به شما بر نمیگردونه و شما میتونید کنترل کنید که برنامتون در محیط های Virtual کار نکنه.

Emdad2001
پنج شنبه 25 آبان 1391, 21:55 عصر
سلام دوستان، حالا کسی کامپوننت GetDiskSerial VCL کرک شده رو داره ؟ من با نسخه آزمایشی کار کردم خوبه بدرد میخوره خیلی هم راحته اگه بشه که ...

BORHAN TEC
جمعه 26 آبان 1391, 17:37 عصر
سلام
در این آدرس قبلاً یک کامپوننت رو معرفی کرده بودم و لینک دانلودش رو هم قرار داده ام:
http://stackoverflow.com/questions/13215713/get-real-hdd-serial-number-with-delphi/13220400#13220400

شاهرخ عشایری
جمعه 26 آبان 1391, 17:49 عصر
با سلام خدمت دوستان عزیز
کامپوننت THddInfo را برای استفاده دوستان در همین پست ضمیمه کردم