الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يتم الحصول على سيريال الهارد ديسك بالدلفي.......؟؟؟؟؟؟؟؟؟؟؟؟

بدأه Maycon في 7 أكتوبر 2009 · 6 رد · 1,372 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــه

إخواني رواد هذا المنتدى أرجو من كل من لديه معلومة أو كود سورس لكيفية الحصول على سيريال الهارد ديسك من الدلفي ووضعه داخل الإيديت...؟

ملاحظة: سيريال الهارد ديسك الحقيقي أي السيريال الذي يتوضح لنا عند إعادة تشغيل النظام.

علما أن هذه المعلومة مهمة بالنسبة لي لإكمال إنجاز برنامج نهاية التخرج

تقبلوا مني تحياتي الخالصة

#2

هذا الكود لدالفي يقوم باستخارد رقم الهارديسك الحقيقي

function GetIdeSerialNumber0():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

cBufferSize : DWORD;

irDriveRegs : TIDERegs;

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

wBufferType : Word;

wBufferSize : Word;

wECCSize : Word;

sFirmwareRev : Array[0..7] of ansiCHAR;

sModelNumber : Array[0..39] of ansiCHAR;

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

bDriverError : Byte;

bIDEStatus : Byte;

bReserved : Array[0..1] of Byte;

dwReserved : Array[0..1] of DWORD;

end;

TSendCmdOutParams = packed record

cBufferSize : DWORD;

DriverStatus : TDriverStatus;

bBuffer : Array[0..0] of BYTE;

end;

var

hDevice : THandle;

cbBytesReturned : DWORD;

ptr : pansiCHAR;

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 : PansiCHAR;

i : Integer;

c : ansiCHAR;

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

//???? EU?? PhysicalDrive0 C?? PhysicalDrive1 C? PhysicalDrive2

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;

with SCIP do

begin

cBufferSize := IDENTIFY_BUFFER_SIZE;

bDriveNumber := 0;

with irDriveRegs do

begin

bSectorCountReg := 1;

bSectorNumberReg := 1;

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

(pansiChar(@sSerialNumber)+SizeOf(sSerialNumber))^ := #0;

Result := PansiCHAR(@sSerialNumber);

end;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

Edit1.Text:=GetIdeSerialNumber0;

end;

الموضوع منقول عن صديق اخر

#3

شكرا لك أخي Bousaada2000 على الرد.

لكن أقولك أني جربت هاذ الكود لكن عند استعماله أحصل على سيريال غير السيريال الحقيقي للهارد ديسك ( السيريال اللي نحصل عليه عند بداية تشغيل النظام).

أتمنى من الأعضاء الكرام وخبراء الدلفي أن يزودونا بكتب أو معلومات حول هذا الموضوع.

تقبوا مني تحياتي الخالصة.

#4

راجع هذا الموضوع وإن شاء الله تجد طلبك وزيادة

/index.php?showtopic=193511

أتمنى التوفيق

#5

شكرا لك أخي حسين طي على الرد.

مع أني سبق وأن تطرقت إلى كل المواضيع الخاصة بهذا الموضوع في هذا المنتدى الثري بالمعلومات والذي أتمنى مزيدا من التطور والرقي.

لكن ياريت لو الأعضاء الكرام يزودونا بكتب حول هذا المجال حتى يتم الفهم الجيد للكود لأنو النقل بدون فهم لا معنى له بالرغم انو يؤدي إلى النتيجة المطلوبة.

شكرا لكم مرة أخرى أعضاء ومشرفي المنتدى.

تقبلوا مني فائق الاحتلرام.

#6

السلام عليكم و رحمة و الله و بركاته. الموضوع شيق و البحث فيه ايضا شيق لان حلول حماية البرامج موجودة مع انها ليست كثيرة. المهم احببت الاضافة فقط يوجد ملف اسمه HardDriveInfo.DLL

هذا الملف يقوم بتجميع معضم المعلومات عن القرص الصلب في جهاز الكمبيوتر.

هذه صورة للمعلومات الصادرة عنهget-hard-drive-info.gif

يعني بهذه الطريقة لا احد يقول الرقم يتغير بعد الفورمات او حتى بعد اعادة تجزئة القرص من جديد بواسطة FDISK

انا لم اضع اي كود و لا تجربة لإستعمال هذا الملف لاني بكل بساطة لا املك خبرة كبيرة في البرمجة.

اتمنى ان عباقرتنا العرب يتكرموا و يضعو لنا تجربة صغيرة باستعمال هذا الملف يمكن تحميله من المرفقات او من موقعه الاصلي.

شكرا على الموضوع.

HardDriveInfo.zip

i-love-algerie-laura23920090720132603.gif
#7

السلام عليكــم ورحمـة الله وبركاتــه ،،

شكرا لك أخي على هذا البرنامج الرائع

لكن أرجو منك التوضيح أكثر حول طريقة عمله لأنه عبارة عن ملف من نوع

Dll

تقبلوا مني فائق التقدير والاحترام

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…