ماذا ينقص هذا الكود حتى يشتغل على الويندوز7
#1
السلام عليكم ورحمة الله تعالى
هذا الكود يعمل على الويندوز 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;
وبالتوفيق
الرد
#2
بارك الله بيك اخي ما الذي يفعلة هذا الكود

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

ما هوه الشي الذي لا يعمل فيه
سبحان الله و بحمده سبحان الله العظيم
الرد
#3
Anew كتب :بارك الله بيك اخي ما الذي يفعلة هذا الكود

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

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

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


الملفات المرفقة
.rar   key_gen.rar (الحجم : 4.05 ك ب / التحميلات : 17)
الرد
#5
نفس الكود صالح و لكن فى وجود الادمن جرب ان شاء الله يعمل انا استخدم هذا الكود
الرد
#6
السلام عليكم
انصحك اخي باستعمال الوحدة hddinfo الموجودة في هدا الموضوع احسن، استعملها شخصيا مع win7 ولا مشاكل
http://www.delphi4arab.net/forum/showthr...ght=serial
وهدا ايضا سيفيدك
http://www.delphi4arab.net/forum/showthr...ght=serial
بالتوفيق
و من طلب العلوم بغير كد _________ سيدركها إذا شاب الغراب
الرد
#7
[INDENT]
السلام عليكم ،
وأيضا يمكنك الاستفادة من هذا الموضوع :

مثال كامل لمعرفة الرقم التسلسلي للقرص الصلب + معلومات اخرى
[/INDENT]
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
الرد
#8
khalmoh1971 كتب :نفس الكود صالح و لكن فى وجود الادمن جرب ان شاء الله يعمل انا استخدم هذا الكود
مرحبا
فعلا كما قلت عند اشغل البرنامج يالادمين يظهر رقم الهارد
لكن كيف يمكنني اضافة الادمين داخل البرنامج ليعمل تلقائيا بالادمين
لأن المشكلة انه اذا لم اشغل البرنامج بالادمين
يشتغل البرنامج بدون طلب كلمة المرور
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم