اذهب الي المحتوي
أوفيسنا

تعديل كود للتعرف على رقم الهارد


aecc

الردود الموصى بها

السادة محترفي الاكسيس الرحاء تعديل كود تعديل كود للتعرف على رقم الهارد وهو كزد قديم نقلته من المنتدى ولكن الكود غير صالح للهاردات الجديدة 

ارجو تعديل الكود من اهل الخبرة

شاكرا اكم جخودكم

Hdd Copy.accdb

تم تعديل بواسطه aecc
رابط هذا التعليق
شارك

Option Compare Database
Option Explicit


Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const OPEN_EXISTING = 3
Private Const CREATE_NEW = 1
Private Const INVALID_HANDLE_VALUE = -1
Private Const VER_PLATFORM_WIN32_NT = 2
Private Const IDENTIFY_BUFFER_SIZE = 512
Private Const OUTPUT_DATA_SIZE = IDENTIFY_BUFFER_SIZE + 16


Private Type GETVERSIONOUTPARAMS
   bVersion       As Byte
   bRevision      As Byte
   bReserved      As Byte
   bIDEDeviceMap  As Byte
   fCapabilities  As Long
   dwReserved(3)  As Long
End Type


Private Type IDEREGS
   bFeaturesReg     As Byte
   bSectorCountReg  As Byte
   bSectorNumberReg As Byte
   bCylLowReg       As Byte
   bCylHighReg      As Byte
   bDriveHeadReg    As Byte
   bCommandReg      As Byte
   bReserved        As Byte
End Type


Private Type SENDCMDINPARAMS
   cBufferSize     As Long
   irDriveRegs     As IDEREGS
   bDriveNumber    As Byte
   bReserved(2)    As Byte
   dwReserved(3)   As Long
   bBuffer()      As Byte
End Type


Private Const IDE_ID_FUNCTION = &HEC
Private Const IDE_EXECUTE_SMART_FUNCTION = &HB0
                                               
                                               


Private Const SMART_CYL_LOW = &H4F
Private Const SMART_CYL_HI = &HC2


Private Type DRIVERSTATUS
   bDriverError  As Byte
   bIDEStatus    As Byte
                                  
   bReserved(1)  As Byte
   dwReserved(1) As Long
 End Type

Private Type IDSECTOR
   wGenConfig                 As Integer
   wNumCyls                   As Integer
   wReserved                  As Integer
   wNumHeads                  As Integer
   wBytesPerTrack             As Integer
   wBytesPerSector            As Integer
   wSectorsPerTrack           As Integer
   wVendorUnique(2)           As Integer
   sSerialNumber(19)          As Byte
   wBufferType                As Integer
   wBufferSize                As Integer
   wECCSize                   As Integer
   sFirmwareRev(7)            As Byte
   sModelNumber(39)           As Byte
   wMoreVendorUnique          As Integer
   wDoubleWordIO              As Integer
   wCapabilities              As Integer
   wReserved1                 As Integer
   wPIOTiming                 As Integer
   wDMATiming                 As Integer
   wBS                        As Integer
   wNumCurrentCyls            As Integer
   wNumCurrentHeads           As Integer
   wNumCurrentSectorsPerTrack As Integer
   ulCurrentSectorCapacity    As Long
   wMultSectorStuff           As Integer
   ulTotalAddressableSectors  As Long
   wSingleWordDMA             As Integer
   wMultiWordDMA              As Integer
   bReserved(127)             As Byte
End Type


Private Type SENDCMDOUTPARAMS
  cBufferSize   As Long
  DRIVERSTATUS  As DRIVERSTATUS
  bBuffer()    As Byte
End Type


Private Const SMART_ENABLE_SMART_OPERATIONS = &HD8


Public Enum STATUS_FLAGS
   PRE_FAILURE_WARRANTY = &H1
   ON_LINE_COLLECTION = &H2
   PERFORMANCE_ATTRIBUTE = &H4
   ERROR_RATE_ATTRIBUTE = &H8
   EVENT_COUNT_ATTRIBUTE = &H10
   SELF_PRESERVING_ATTRIBUTE = &H20
End Enum


Private Const DFP_GET_VERSION = &H74080
Private Const DFP_SEND_DRIVE_COMMAND = &H7C084
Private Const DFP_RECEIVE_DRIVE_DATA = &H7C088

Private Type ATTR_DATA
   AttrID As Byte
   AttrName As String
   AttrValue As Byte
   ThresholdValue As Byte
   WorstValue As Byte
   StatusFlags As STATUS_FLAGS
End Type

Private Type DRIVE_INFO
   bDriveType As Byte
   SerialNumber As String
   Model As String
   FirmWare As String
   Cilinders As Long
   Heads As Long
   SecPerTrack As Long
   BytesPerSector As Long
   BytesperTrack As Long
   NumAttributes As Byte
   Attributes() As ATTR_DATA
End Type

Private Enum IDE_DRIVE_NUMBER
   PRIMARY_MASTER
   PRIMARY_SLAVE
   SECONDARY_MASTER
   SECONDARY_SLAVE
   TERTIARY_MASTER
   TERTIARY_SLAVE
   QUARTIARY_MASTER
   QUARTIARY_SLAVE
End Enum

Private Declare Function CreateFile Lib "kernel32" _
   Alias "CreateFileA" _
  (ByVal lpFileName As String, _
   ByVal dwDesiredAccess As Long, _
   ByVal dwShareMode As Long, _
   lpSecurityAttributes As Any, _
   ByVal dwCreationDisposition As Long, _
   ByVal dwFlagsAndAttributes As Long, _
   ByVal hTemplateFile As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" _
  (ByVal hObject As Long) As Long
  
Private Declare Function DeviceIoControl Lib "kernel32" _
  (ByVal hDevice As Long, _
   ByVal dwIoControlCode As Long, _
   lpInBuffer As Any, _
   ByVal nInBufferSize As Long, _
   lpOutBuffer As Any, _
   ByVal nOutBufferSize As Long, _
   lpBytesReturned As Long, _
   lpOverlapped As Any) As Long
  
Private Declare Sub CopyMemory Lib "kernel32" _
   Alias "RtlMoveMemory" _
  (hpvDest As Any, _
   hpvSource As Any, _
   ByVal cbCopy As Long)
  
Private Type OSVERSIONINFO
   OSVSize As Long
   dwVerMajor As Long
   dwVerMinor As Long
   dwBuildNumber As Long
   PlatformID As Long
   szCSDVersion As String * 128
End Type

Private Declare Function GetVersionEx Lib "kernel32" _
   Alias "GetVersionExA" _
  (LpVersionInformation As OSVERSIONINFO) As Long

Sub ShowMoreDriveInfo()
'
On Error GoTo ErrMsg
ShowAllDriveInfo ("C:")
'
Exit Sub
'
ErrMsg:
MsgBox Err.Description
End Sub
'
'
Sub ShowAllDriveInfo(DriveName As String)
'
Dim Drive As Object, Info As String, DriveTypeIs As String
'
Set Drive = CreateObject("Scripting.FileSystemObject").GetDrive(DriveName)
'
Select Case Drive.DriveType
Case 0: DriveTypeIs = "Unknown"
Case 1: DriveTypeIs = "Removable"
Case 2: DriveTypeIs = "Fixed"
Case 3: DriveTypeIs = "Network"
Case 4: DriveTypeIs = "CD-ROM"
Case 5: DriveTypeIs = "RAM Disc"
End Select
'
If Drive.VolumeName = Empty Then Drive.VolumeName = "(di)"
Info = "Drive " & Drive.DriveLetter & ": " & vbNewLine & _
"Drive Type: " & DriveTypeIs & vbNewLine & _
"Drive Name: " & Drive.VolumeName & vbNewLine & _
"Total Size: " & FormatNumber(Drive.TotalSize / 1024, 0) & " Kbytes" & vbNewLine & _
"Available Space: " & FormatNumber(Drive.AvailableSpace / 1024, 0) & " Kbytes"
'
If Drive.IsReady Then Info = Info & vbNewLine & "Drive " & Drive.DriveLetter & " is Ready."
'
MsgBox Info
'
Set Drive = Nothing

'
End Sub
Private Function GetDriveInfo(drvNumber As IDE_DRIVE_NUMBER) As DRIVE_INFO
    
   Dim hDrive As Long
   Dim di As DRIVE_INFO
   
   hDrive = SmartOpen(drvNumber)
   
   If hDrive <> INVALID_HANDLE_VALUE Then
   
      If SmartGetVersion(hDrive) = True Then
      
         With di
            .bDriveType = 0
            .NumAttributes = 0
            ReDim .Attributes(0)
            .bDriveType = 1
         End With
         
         If SmartCheckEnabled(hDrive, drvNumber) Then
            
            If IdentifyDrive(hDrive, IDE_ID_FUNCTION, drvNumber, di) = True Then
         
            GetDriveInfo = di
               
            End If
         End If
      End If
   End If
   
   CloseHandle hDrive
   
End Function


Private Function IdentifyDrive(ByVal hDrive As Long, _
                               ByVal IDCmd As Byte, _
                               ByVal drvNumber As IDE_DRIVE_NUMBER, _
                               di As DRIVE_INFO) As Boolean
    
 
   Dim SCIP As SENDCMDINPARAMS
   Dim IDSEC As IDSECTOR
   Dim bArrOut(OUTPUT_DATA_SIZE - 1) As Byte
   Dim cbBytesReturned As Long
   
   With SCIP
      .cBufferSize = IDENTIFY_BUFFER_SIZE
      .bDriveNumber = CByte(drvNumber)
        
      With .irDriveRegs
         .bFeaturesReg = 0
         .bSectorCountReg = 1
         .bSectorNumberReg = 1
         .bCylLowReg = 0
         .bCylHighReg = 0
         .bDriveHeadReg = &HA0
         If Not IsWinNT4Plus Then
            .bDriveHeadReg = .bDriveHeadReg Or ((drvNumber And 1) * 16)
         End If
        
         .bCommandReg = CByte(IDCmd)
      End With
   End With
   
   If DeviceIoControl(hDrive, _
                      DFP_RECEIVE_DRIVE_DATA, _
                      SCIP, _
                      Len(SCIP) - 4, _
                      bArrOut(0), _
                      OUTPUT_DATA_SIZE, _
                      cbBytesReturned, _
                      ByVal 0&) Then
                      
      CopyMemory IDSEC, bArrOut(16), Len(IDSEC)

      di.Model = StrConv(SwapBytes(IDSEC.sModelNumber), vbUnicode)
      di.SerialNumber = StrConv(SwapBytes(IDSEC.sSerialNumber), vbUnicode)
      
      IdentifyDrive = True
      
    End If
    
End Function


Private Function IsWinNT4Plus() As Boolean

  
   Dim osv As OSVERSIONINFO

   osv.OSVSize = Len(osv)

   If GetVersionEx(osv) = 1 Then
   
      IsWinNT4Plus = (osv.PlatformID = VER_PLATFORM_WIN32_NT) And _
                     (osv.dwVerMajor >= 4)
 
   End If

End Function


Private Function SmartCheckEnabled(ByVal hDrive As Long, _
                                   drvNumber As IDE_DRIVE_NUMBER) As Boolean
   
  
   Dim SCIP As SENDCMDINPARAMS
   Dim SCOP As SENDCMDOUTPARAMS
   Dim cbBytesReturned As Long
   
   With SCIP
   
      .cBufferSize = 0
      
      With .irDriveRegs
           .bFeaturesReg = SMART_ENABLE_SMART_OPERATIONS
           .bSectorCountReg = 1
           .bSectorNumberReg = 1
           .bCylLowReg = SMART_CYL_LOW
           .bCylHighReg = SMART_CYL_HI

           .bDriveHeadReg = &HA0
            If Not IsWinNT4Plus Then
               .bDriveHeadReg = .bDriveHeadReg Or ((drvNumber And 1) * 16)
            End If
           .bCommandReg = IDE_EXECUTE_SMART_FUNCTION
           
       End With
       
       .bDriveNumber = drvNumber
       
   End With
   
   SmartCheckEnabled = DeviceIoControl(hDrive, _
                                      DFP_SEND_DRIVE_COMMAND, _
                                      SCIP, _
                                      Len(SCIP) - 4, _
                                      SCOP, _
                                      Len(SCOP) - 4, _
                                      cbBytesReturned, _
                                      ByVal 0&)
End Function


Private Function SmartGetVersion(ByVal hDrive As Long) As Boolean
   
   Dim cbBytesReturned As Long
   Dim GVOP As GETVERSIONOUTPARAMS
   
   SmartGetVersion = DeviceIoControl(hDrive, _
                                     DFP_GET_VERSION, _
                                     ByVal 0&, 0, _
                                     GVOP, _
                                     Len(GVOP), _
                                     cbBytesReturned, _
                                     ByVal 0&)
   
End Function


Private Function SmartOpen(drvNumber As IDE_DRIVE_NUMBER) As Long

  

   If IsWinNT4Plus() Then
      
      SmartOpen = CreateFile("\\.\PhysicalDrive" & CStr(drvNumber), _
                             GENERIC_READ Or GENERIC_WRITE, _
                             FILE_SHARE_READ Or FILE_SHARE_WRITE, _
                             ByVal 0&, _
                             OPEN_EXISTING, _
                             0&, _
                             0&)

   Else
      
      SmartOpen = CreateFile("\\.\SMARTVSD", _
                              0&, 0&, _
                              ByVal 0&, _
                              CREATE_NEW, _
                              0&, _
                              0&)
   End If
   
End Function


Private Function SwapBytes(b() As Byte) As Byte()
   
  
   
   Dim bTemp As Byte
   Dim cnt As Long

   For cnt = LBound(b) To UBound(b) Step 2
      bTemp = b(cnt)
      b(cnt) = b(cnt + 1)
      b(cnt + 1) = bTemp
   Next cnt
      
   SwapBytes = b()
      
End Function


Private Sub cmdClose_Click()
DoCmd.Quit acQuitSaveAll
End Sub


Private Sub Form_Load()
Me.lic = DLookup("[lic]", "serial_h")
  
  Dim di As DRIVE_INFO
  Dim drvNumber As Long
 
  di = GetDriveInfo(drvNumber)
  With di
  Select Case .bDriveType
           
       Case 0
       Me.text05.Value = "[Not present]"
           Case 1
           Me.text05.Value = Trim$(.SerialNumber)
                Dim rep, irep As Integer
                Dim asp, ass, dg, df As String
                dg = 0
                For irep = 1 To Len(Trim$(.SerialNumber))
                asp = mID((Trim$(.SerialNumber)), irep, 1)
                If IsNumeric(asp) = True Then
                ass = dg & asp
                dg = ass
                End If
                Next irep
                '''''''''''''''''''
                df = ""
                For irep = 1 To Len(Trim$(.SerialNumber))
                asp = mID((Trim$(.SerialNumber)), irep, 1)
                If IsNumeric(asp) = False Then
                ass = df & asp
                df = ass
                End If
                Next irep
                Me.text05 = Asc(df) & dg
                '''''''''''''''
           
           Case 2
           text05.Value = "[ATAPI drive - info not available]"
           Case Else
           text05.Value = "[drive type not known]"
           End Select
               End With


Err_hem:
Exit Sub

End Sub


 

رابط هذا التعليق
شارك

السلام عليكم

يوجد الكثير من الاكواد بالمندى لمعرفة رقم الهادر

وتفضل هذا كود مختصر لمعرفة رقم الهادر ايأ كان نوعه

Sub ShowDriveInfo()

        On Error GoTo MyErr
        
        'تحديد القرص المراد وضع السيريال نمبر له .. محرك الأقراص سي هنا
        Set fs = CreateObject("Scripting.FileSystemObject")
        Set h = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName("d:")))
          
        Forms!HardiskNo!HardiskSerial.Value = h.SerialNumber
        
        Dim Srl As String
        Srl = Nz(DLookup("SerialNo", "SerialNo"))
            If (h.SerialNumber + 123456) * 3 = Val(Srl) Then
                DoCmd.Close
                DoCmd.OpenForm "login"
            Else
                MsgBox "لم تقم بعد بتسجيل البرنامج", vbInformation, "officena"
            End If
MyErr:

End Sub

ثم في نموذج HardiskNo نضع الكود التالي في حدث عند الفتح

Call ShowDriveInfo

تحياتي

رابط هذا التعليق
شارك

بخصوص المرفق اللى حضرتك وضعته غير كامل 

وهذا للحماية برقم الهارد ديسك من خلال رمز وليس لاحضار الارقام التسلسلية

تم تعديل بواسطه ابا جودى
رابط هذا التعليق
شارك

1 دقيقه مضت, aecc said:

جزاك الله خيرا

جزانا الله واياكم خير الجزاء ان شاؤ الله :fff:

واتمنى القاعدة التى ارفقتها لك وجدت بها ضالتك ان شاء الله

رابط هذا التعليق
شارك

اردت تعديل نفس الكود لاني اقتطعته من باقي الكود حيث فيه تشفير وكذلك ربط بتاريخ التسجيل اما مجرد اظهار رقم الهارد فهو امر سهل ان شاء الله

وجزاك الله خيرا على اجابتكم كما لا اريد ان اثقل عليكم

رابط هذا التعليق
شارك

9 دقائق مضت, aecc said:

اردت تعديل نفس الكود لاني اقتطعته من باقي الكود حيث فيه تشفير وكذلك ربط بتاريخ التسجيل اما مجرد اظهار رقم الهارد فهو امر سهل ان شاء الله

وجزاك الله خيرا على اجابتكم كما لا اريد ان اثقل عليكم

طيب ممكن المرفق كامل دون ان تقتطع منه شئ

رابط هذا التعليق
شارك

ماذا تعني برابط الموضوع؟

 

اذا كنت تسأل عن الكود فهو من تجميعي من مواضيع عديدة

كنت عضوا قديما في هذا المنتدى وكذلك منتدى المحيط العربي للبرمجه ولكن غلبنا العمر الله المعين

رابط هذا التعليق
شارك

الان, aecc said:

ماذا تعني برابط الموضوع؟

 

اذا كنت تسأل عن الكود فهو من تجميعي من مواضيع عديدة

كنت عضوا قديما في هذا المنتدى وكذلك منتدى المحيط العربي للبرمجه ولكن غلبنا العمر الله المعين

اعتقد لديك مشكلة في التشفير وفك التشفير 

انظر المرفق .....

 

prog.accdb

  • Like 1
رابط هذا التعليق
شارك

30 دقائق مضت, ناقل said:

اعتقد لديك مشكلة في التشفير وفك التشفير 

انظر المرفق .....

 

prog.accdb 1.05 \u0645\u064a\u062c\u0627 \u0628\u0627\u064a\u062a · 5 downloads

ممكن رابط الموضوع الاصلى يا استاذ @ناقل :fff:

  • Like 1
رابط هذا التعليق
شارك

اعتقد الكود مقتطع من هنا للاستاذ رضا عقيل ...

في ٢٦‏/٣‏/٢٠٠٧ at 18:07, رضا عقيل said:
لراغبي الإبداع والتميز

 

أداة تركيب الحماية من النسخ للبرامج المصنوعة بأكسس ( برقم الهارد الحقيقي / رقم المعالج /رقم اللوحة الأم ) الإصدار الثاني.

برنامج القلعة لحماية برامج أكسس من النسخ الأول من نوعه في منتديات الأكسس

مبدئياً : هذه النوع من الأدوات ندر إنتاجها داخل منتدياتنا العربية والتي كان السبق في إنتاجها لأول مره داخل منتدى الأكسس لأخونا مهند عبادي وعلى أثره نحاول إنتاج أدوات لخدمة المبرمجين بصورة فعالة في القضايا الهامة والتي يكثر فيها الأسئلة مثل الحماية وقد سبق وأنتجت أداة لحل مشاكل التقارير ...
ولكن أنا أومن بأن لها ضرراً من ناحية أخرى على المبرمجين بجعلهم يتوقفون عن التفكير في حل المشاكل طالما أن حلولها جاهزة وميسرة وبالتالي يضيع عليهم ثبوتية العلم بمشقة طلبه ... لن أطيل عليكم
أخواني .....
كثرت الأسئلة و المواضيع الخاصة بحماية قواعد البيانات من النسخ وكثرت الرسائل على بريدي لمن يطلبون حماية برامجهم لذلك كان لا بد من صنع أداة تقوم بهذه المهمة بصورة آلية وحسب اختيارات ورغبات المبرمج و وفاءاً بوعدي سأضع الأداة بصورة غير محمية قابلة للنسخ ( وهي مجانية للاستخدام الشخصي وغير التجاري أما من يستخدمها بشكل تجاري أو يستفيد منها مادياً فيجب عليه سداد ثمنها وبذلك نكون حافظنا على جميع الحقوق وحتى لا يضيع مجهودي هباءاً ) .
قبل استخدام الأداة
1- قم بعمل نسخه احتياطية لبرنامجك
2- قم بإزالة جميع أنواع التامين من برنامجك
3- التركيب يجب أن يكون قبل تقسيم قاعدة البيانات في حالة البرامج المقسمة إلى واجهة وجداول .
3- وقف عمل مضاد الفيروسات الخاص بك قبل البدء ( ولا تخاف )
البرنامج لا يحتاج لأي مراجع إضافية وسيقوم بتركيب المراجع للقاعدة الهدف في حال احتياجها لها
البرنامج يركب الحماية من النسخ المدمجة مع مدة التشغيل كما يقوم بإنشاء كراك للبرنامج مع القاعدة الهدف كما ينشئ ملف نصي يوثق فيه كل ما تم عمله في برنامجك .
كما يصلح لبناء نسخ تجريبية
ما بعد حماية البرنامج
بعد حماية البرنامج وإعطائه للعميل وعند فتحه لأحد النماذج التي تم تركيب الحماية عليها ستظهر له شاشة ممانعه تمنعه من استخدام البرنامج قبل تسجيل نسخه شرعية ... يقوم العميل بالاتصال بك ويعطيك الرقم الظاهر أمامه على الشاشة ، فتقوم أنت بفتح الكراك الذي أنشأه برنامج القلعة في نفس مجلد البرنامج وتقوم بإدخال الرقم في الخانه المخصصة له ثم تختار مدة التشغيل التي ترغب بها أي المدة التي سيعمل خلالها البرنامج لدى العميل ثم يتوقف عن العمل طالباً فك الحماية مره أخرى ( طبعاً تستطيع فتح المده تماماً إذا كان العميل اشترى البرنامج وليس تحت التجربة ) وحسب المدة سينتج لك الكراك رقم تعطيه للعميل وبذلك تكون فتحت له النسخة مدة الاستخدام التي تراها مناسبة .
إلى أخواني المشرفين ( الرجاء تثبيت الموضع لمدة طويلة )

 

 

 

 

 

تم وضع برنامج القلعة (( الإصدار الثاني ))
على نفس الرابط الأول
ومن مميزاته
انقسم البرنامج إلى ثلاث شعب
1- حماية برنامج
2- إزالة الحماية من برنامج
3- تصفير مدة الاستخدام لبرنامج
,,, تم وضع خيار جديد لتصدير أداة إخفاء إظهار الجداول المرتبطة والمضمنة والتي لا يمكن إظهارها بالخيارات العادية
""" تم اعتماد تسجيل المرجع DAO3.6 مع المراجع الأخرى ( لأنني كنت أظن سابقاً أن كل مبرمج يستخدمه بشكل أساسي )
يستطيع الإصدار الثاني معرفة هل تم حماية هذا البرنامج من قبل بهذه الأداة وبأي نوع من الحماية منعاً للأخطاء
"""""
تم تبني فكرة عداد التاريخ من تاريخ تركيب البرنامج وليس من تاريخ الاستخدام
ولذلك كان لا بد من وضع القسم الثالث وهو تصفير مدة الاستخدام وذلك حتى إذا قام المبرمج بتجربة البرنامج لديه قبل إعطائه للعميل سيتم تسجيل المدة التى قام بالتجربه فيها لذلك يجب علها تصفيرها قبل إعطائه للعميل .. إما إذا لم يقم بتجربة البرنامج فلا داعي ..

 

 

 

 

 

 

 

 

 

 

حجم البرنامج 856 كيلو بايت

 

 

 

تم تعديل الموضوع من قبل أخوكم في الله /بو يوسف الراشد وذلك نظراً لنزول الإصدار الثاني من البرنامج
وذلك بناءً على طلب أخونا المبدع / رضا عقيل كما تم وضع تعليقه على الإصدار الثاني

                                               http://www.al-wed.com/pic-vb/19.gif

تم رفع البرنامج + الشرح + مثال 
حماية برامج الأكسس.rar

 

رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information