delphi4arab منتديات دلفي للعرب
ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 (/showthread.php?tid=6628)



ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 - hamou1982 - 12-12-2014

السلام عليكم ورحمة الله تعالى
هذا الكود يعمل على الويندوز xp
ولكن لا يعمل على الويندوز 7
وكأن البرنامج المستعمل فيه ليس به كود الحماية
كود :
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 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 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 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 : 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 //íãßä ÊÛíÑ PhysicalDrive0 Çáì PhysicalDrive1 Çæ 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) ); (PChar(@sSerialNumber)+SizeOf(sSerialNumber))^ := #0; Result := PChar(@sSerialNumber); end; end; function get_password(a: string): string; var b: string; c: char; i,n: integer; begin b:=''; for i := 1 to length(a) do begin c:= a[i]; n:= ord(c); n:=n+(2*i); b:=b+chr(n); end; Result:=b; end;
وبالتوفيق


ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 - Anew - 13-12-2014

بارك الله بيك اخي ما الذي يفعلة هذا الكود

توضيح اكثر ممكن

ما هوه الشي الذي لا يعمل فيه


ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 - hamou1982 - 13-12-2014

Anew كتب :بارك الله بيك اخي ما الذي يفعلة هذا الكود

توضيح اكثر ممكن

ما هوه الشي الذي لا يعمل فيه

السلام عليكم وؤحمة الله تعالى وبركاته
في الويندوز xp يظهر رقم الهارد ديسك في Edit حتى يتم جلب رمز التشفير
وفي الويندوز 7 لا يظهر رقم الهارد ديسك يعني تظهر edit فارغة
وبناء على وجود edit فارغة بمجرد الضغط على زر الدخول الى البرنامج يدخل عادي بدون طلب رمز التشفير


ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 - hamou1982 - 13-12-2014

اليك المرفق اخي حتى تتضح الامور اكثر


ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 - khalmoh1971 - 19-12-2014

نفس الكود صالح و لكن فى وجود الادمن جرب ان شاء الله يعمل انا استخدم هذا الكود


ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 - bassem_43 - 20-12-2014

السلام عليكم
انصحك اخي باستعمال الوحدة hddinfo الموجودة في هدا الموضوع احسن، استعملها شخصيا مع win7 ولا مشاكل
http://www.delphi4arab.net/forum/showthread.php?tid=5831&highlight=serial
وهدا ايضا سيفيدك
http://www.delphi4arab.net/forum/showthread.php?tid=7967&highlight=serial
بالتوفيق


ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 - أبو معاذ - 20-12-2014

[INDENT]
السلام عليكم ،
وأيضا يمكنك الاستفادة من هذا الموضوع :

مثال كامل لمعرفة الرقم التسلسلي للقرص الصلب + معلومات اخرى
[/INDENT]


ماذا ينقص هذا الكود حتى يشتغل على الويندوز7 - hamou1982 - 26-12-2014

khalmoh1971 كتب :نفس الكود صالح و لكن فى وجود الادمن جرب ان شاء الله يعمل انا استخدم هذا الكود
مرحبا
فعلا كما قلت عند اشغل البرنامج يالادمين يظهر رقم الهارد
لكن كيف يمكنني اضافة الادمين داخل البرنامج ليعمل تلقائيا بالادمين
لأن المشكلة انه اذا لم اشغل البرنامج بالادمين
يشتغل البرنامج بدون طلب كلمة المرور