لغة الدالفي delphi كل ما يتعلق بالدالفي و الباسكال

إضافة رد
قديم 31-01-2015, 09:34 PM
  #1
medreg
 
تاريخ التسجيل: 08-09-2008
المشاركات: 14
medreg عضو يستحق التميز
افتراضي فيما يتعلق بكود معرفة الرقم التسلسلي للهارد ديك


السلام عليكم ورحمة الله تعالى
هذا الكود يعمل على الويندوز xp
ولكن لا يعمل على الويندوز 7
وكأن البرنامج المستعمل فيه ليس به كود الحماية

كود PHP:
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..2of Byte;
    
dwReserved   : Array[0..3of DWORD;
    
bBuffer      : Array[0..0of Byte;  // Input buffer.
  
end;
  
TIdSector packed record
    wGenConfig                 
Word;
    
wNumCyls                   Word;
    
wReserved                  Word;
    
wNumHeads                  Word;
    
wBytesPerTrack             Word;
    
wBytesPerSector            Word;
    
wSectorsPerTrack           Word;
    
wVendorUnique              : Array[0..2of Word;
    
sSerialNumber              : Array[0..19of CHAR;
    
wBufferType                Word;
    
wBufferSize                Word;
    
wECCSize                   Word;
    
sFirmwareRev               : Array[0..7of Char;
    
sModelNumber               : Array[0..39of 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..127of BYTE;
  
end;
  
PIdSector = ^TIdSector;
  
TDriverStatus packed record
    bDriverError 
Byte;
    
bIDEStatus   Byte;
    
bReserved    : Array[0..1of Byte;
    
dwReserved   : Array[0..1of DWORD;
  
end;
  
TSendCmdOutParams packed record
    cBufferSize  
DWORD;
    
DriverStatus TDriverStatus;
    
bBuffer      : Array[0..0of BYTE;
  
end;
  var
    
hDevice THandle;
    
cbBytesReturned DWORD;
//    ptr : PChar;
    
SCIP TSendCmdInParams;
    
aIdOutCmd : Array [0..(SizeOf(TSendCmdOutParams)+IDENTIFY_BUFFER_SIZE-1)-1of Byte;
    
IdOutCmd  TSendCmdOutParams absolute aIdOutCmd;

procedure ChangeByteOrder(var DataSize Integer );
var
  
ptr PChar;
  
Integer;
  
Char;
begin
    ptr 
:= *Data;
    for 
:= 0 to (Size shr 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_WRITEnilOPEN_EXISTING0);
  
end
  
else // Version Windows 95 OSR2, Windows 98
  
hDevice := CreateFile'\\.\SMARTVSD'00nilCREATE_NEW0);
  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 DeviceIoControlhDevice, $0007c088, *SCIPSizeOf(TSendCmdInParams)-1,
      *
aIdOutCmdSizeOf(aIdOutCmd), cbBytesReturnednil then Exit;
  finally
    
CloseHandle(hDevice);
  
end;
  
with PIdSector(*IdOutCmd.bBuffer)^ do
  
begin
    ChangeByteOrder
sSerialNumberSizeOf(sSerialNumber) );
    (
PChar(*sSerialNumber)+SizeOf(sSerialNumber))^ := #0;
    
Result := PChar(*sSerialNumber);
  
end;
end;
function 
get_password(astring): string;
var
  
bstring;
  
cchar;
  
i,ninteger;
begin
  b
:='';
  for 
:= 1 to length(a) do
  
begin
    c
:= a[i];
    
n:= ord(c);
    
n:=n+(2*i);
    
b:=b+chr(n);
  
end;
  
Result:=b;
end
في الويندوز xp يظهر رقم الهارد ديسك في Edit حتى يتم جلب رمز التشفير
وفي الويندوز 7 لا يظهر رقم الهارد ديسك يعني تظهر edit فارغة
وبناء على وجود edit فارغة بمجرد الضغط على زر الدخول الى البرنامج يدخل عادي بدون طلب رمز التشفير

المصدر : منتدى الفريق العربي للبرمجة



التعديل الأخير تم بواسطة medreg ; 31-01-2015 الساعة 09:57 PM
medreg غير متواجد حالياً  
رد مع اقتباس
إضافة رد

أدوات الموضوع
انواع عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

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


الساعة الآن 08:44 PM.