PDA

View Full Version : سوال: به دست آوردن سریال فلش مموری و ...



butterfly8528
یک شنبه 18 اسفند 1387, 02:32 صبح
سلام به تمام دوستان و استادان عزیز

من برای طراحی یک قفل برای برنامه ام به اطلاعات زیر احتیاج دارم . لطفا هرچه زود تر من رو راهنمایی کنید .

1- چگونه میتوان کد سخت افزاری یک فلش مموری را بدست آورد ؟

2- چگونه میتوان کد سخت افزاری یک فلاپی را بدست آورد ؟

3- چگونه میتوان اتصال یک فلش مموری خاص را به کامپیوتر برسی کرد ؟

راستش من میخوام یک قفل USP ( فلش مموری ) و یک قفل فلاپی برای برنامه ام طراحی کنم .

لطفا هر کی میتونه جواب سوال هامو بده.

mbf5923
جمعه 11 اردیبهشت 1388, 23:26 عصر
Private Declare Function GetLogicalDrives Lib "Kernel32" () As Long
Private Declare Function GetDriveType Lib "Kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Declare Function GetVolumeInformation Lib "Kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Dim A(0 To 25) As String, I As Integer, C(1 To 10) As String, T As Integer, F(1 To 10) As String
Dim Serial As Long, VName As String, FSName As String
Private Sub Command1_Click()
End
End Sub
Private Sub Form_Paint()
Timer1.Interval = 2
End Sub
Private Sub Timer1_Timer()
Dim LDs As Long, Cnt As Long, sDrives As String
LDs = GetLogicalDrives
I = 0
T = 0
Serial = 0
Text1.Text = ""
List1.Clear
For R = 0 To 25
A(R) = ""
Next R
For E = 1 To 10
C(E) = ""
Next E
For U = 1 To 10
F(U) = ""
Next U
For Cnt = 0 To 25
I = I + 1
If (LDs And 2 ^ Cnt) <> 0 Then
A(I) = Chr$(65 + Cnt)
End If
Next Cnt
For B = 0 To 25

If A(B) <> "" Then
Select Case GetDriveType(A(B) & ":\")
Case 2
T = T + 1
C(T) = A(B) & ":\"
End Select
End If
Next B
For S = 1 To 10
If C(S) <> "" Then
If C(S) <> "A:\" Then
List1.AddItem C(S)
F(S) = C(S)
End If
End If
Next S
Label1.Caption = List1.ListCount
For H = 1 To 10
If F(H) <> "" Then
VName = String$(255, Chr$(0))
FSName = String$(255, Chr$(0))
GetVolumeInformation F(H), VName, 255, Serial, 0, 0, FSName, 255
VName = Left$(VName, InStr(1, VName, Chr$(0)) - 1)
FSName = Left$(FSName, InStr(1, FSName, Chr$(0)) - 1)
If Serial = 0 Then
Text1.Text = Text1.Text + "Drive Status : DISCONNECTED" + vbNewLine + "Drive : " & F(H) + vbNewLine + "The Volume name of " & F(H) & " is '" + VName + "', the File system name of " & F(H) & " is '" + FSName + "' and the serial number of " & F(H) & " is '" + Trim(Str$(Serial)) + "'" + vbNewLine + vbNewLine
Else
Text1.Text = Text1.Text + "Drive Status : CONNECTED" + vbNewLine + "Drive : " & F(H) + vbNewLine + "The Volume name of " & F(H) & " is '" + VName + "', the File system name of " & F(H) & " is '" + FSName + "' and the serial number of " & F(H) & " is '" + Trim(Str$(Serial)) + "'" + vbNewLine + vbNewLine
End If
End If
Next H
If Text1.Text = "" Then
Text1.Text = "No USB Drive Found"
End If
End Sub

butterfly8528
جمعه 29 خرداد 1388, 20:32 عصر
mbf5923 عزیز خیلی ممنون . ولی این چیزی نیست که من میخوام :گریه:

این جور سریال ها که از طریق GetVolumeInformation به دست میاد ، با هر بار فرمت شدن دیسک تعغیر می کنند .

من یک سریال نامبر یا کد ثابت میخوام :متفکر:

دوستان عزیز لطفا کمممممممممممممممممممممممم ممممممممممممممممممممک :تشویق:

Felony
جمعه 29 خرداد 1388, 21:10 عصر
در این مورد تو سایت بحث های زیادی شده ولی به نتیجه ی مطلوبی نرسیده .

butterfly8528
جمعه 29 خرداد 1388, 21:43 عصر
در این مورد تو سایت بحث های زیادی شده ولی به نتیجه ی مطلوبی نرسیده .


SilverSoft عزیز این بار بیا با کمک هم و دوستان دیگه این رو به جایی برسونیم :تشویق:

در کل هیچ راهی برای این کار وجود نداره ؟

اگه نداره بقیه قفل usb ها چه طور عمل می کنند ؟

100 % راهی هست :متفکر:

هر کی چیزی بلده کمک کنه !!!!!!!

دباره می سازمت تاپیک :قهقهه::قهقهه::قهقهه:

a_mohammadi_m
چهارشنبه 10 تیر 1388, 12:47 عصر
با سلام
معمولا قفلهاي USB موجود داراي يك پروسسور داخلي ( PIC or AVR Microcontroller ) هستند كه وظيفه پردازش و ذخيره سازي يك سري از اطلاعات در داخل خودش رو داره . اينها اصطلاحا كامپيوترهاي تك چيپ هستند
برنامه شما بايد با برنامه داخل چيپ تبادل اطلاعات كنه

butterfly8528
چهارشنبه 10 تیر 1388, 13:21 عصر
با سلام
معمولا قفلهاي USB موجود داراي يك پروسسور داخلي ( PIC or AVR Microcontroller ) هستند كه وظيفه پردازش و ذخيره سازي يك سري از اطلاعات در داخل خودش رو داره . اينها اصطلاحا كامپيوترهاي تك چيپ هستند
برنامه شما بايد با برنامه داخل چيپ تبادل اطلاعات كنه

سلام . یعنی با usb های معمولی نمیشه قفل طراحی کرد ؟؟؟؟

kooroush
چهارشنبه 30 تیر 1389, 20:58 عصر
ما همچنان منتظر یک جواب مصوب هستیم !؟

کامروا
دوشنبه 29 آذر 1389, 09:36 صبح
منم جواب می خوام...:متفکر:

vbhamed
دوشنبه 29 آذر 1389, 13:56 عصر
سلام . یعنی با usb های معمولی نمیشه قفل طراحی کرد ؟؟؟؟

سلام
اگر هم بشه به نظر من امنيتش كمه
چون يك فلش مموري براي اين كار طراحي نشده و ضمنا
1 - ممكنه بشه سريال بعضي ها رو تغيير داد به خاطر روش نوشته شدن در آن
2 - ممكنه بعضي ها اصلا سريال نداشته باشن
3 - موقع خواندن و نوشتن سريال، هيچ نوع اقدام امنيتي پيش بيني نشده و بنابراين قابل شبيه سازي هست

بهتره از قفل هاي سخت افزاري استفاده كنيد
قيمتش بعضيهاشون هم از فلش مموري كمتره

butterfly8528
پنج شنبه 02 دی 1389, 00:28 صبح
سلام دوستان عزیز .

به هیچ وجه رو فلش های معمولی برای ساخت قفل سخت افزاری نمیشه حساب کرد !

قفل های سخت افزاری USB ظاهرا دارای چند بایت فضای فقط خواندنی هستند و قابلیت نوشتن مجدد ندارند . در ضمن قیمت قفل های USB بسیار ارزان تر از فلش مموری ها است .

موفق باشید .

m2011kh
پنج شنبه 12 بهمن 1391, 09:24 صبح
حیف که این تاپیک به جواب نرسیده و سوال منم هست.
نمیشه سریال اصلی یه فلش ممور رو بدست آورد؟؟؟
البته من امنیت خیلی زیادی رو توقع ندارم و به هیچ وجه از قفل سخت افزاری نمیتونم استفاده کنم.
MMD

m.4.r.m
پنج شنبه 12 بهمن 1391, 12:57 عصر
اگر هم بشه تو C# و VB.NET حتما میشه اما ویژوال بیسیک به علت محدودیت که داره شاید یکم سخت بشه

m.4.r.m
پنج شنبه 12 بهمن 1391, 12:58 عصر
این کد رو تست کن ببین

Option Explicit

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 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 Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const INVALID_HANDLE_VALUE = -1
Private Const OPEN_EXISTING = 3
Private Const FILE_FLAG_DELETE_ON_CLOSE = 67108864
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER As Long = &H2D0C10

Private Type MEDIA_SERIAL_NUMBER_DATA
SerialNumberLength As Long
Result As Long
Reserved(2) As Long
SerialNumberData(1) As Byte
End Type


Private Sub Command1_Click()
Dim hDrive As Long
Dim DummyReturnedBytes As Long
Dim si As MEDIA_SERIAL_NUMBER_DATA

hDrive = CreateFile("\\.\" & "PhysicalDrive1", GENERIC_READ Or GENERIC_WRITE, 0, ByVal 0, OPEN_EXISTING, 0, 0)
If hDrive <> INVALID_HANDLE_VALUE Then
Call DeviceIoControl(hDrive, IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER, ByVal 0, 0, si, Len(si), DummyReturnedBytes, ByVal 0)
Call CloseHandle(hDrive)
MsgBox si.SerialNumberData
End If
End Sub

m.4.r.m
پنج شنبه 12 بهمن 1391, 13:04 عصر
این کد هم تست کن ببین جواب میگیری :

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colitems = objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive", , 48)
For Each objitem In colitems
If objitem.interfacetype = "USB" Then sernum = objitem.pnpdeviceid
Next
sernum = Mid(sernum, InStrRev(sernum, "\") + 1)
sernum = Left(sernum, InStr(sernum, "&") - 1)
MsgBox sernum

Dr.Bronx
پنج شنبه 12 بهمن 1391, 14:59 عصر
ببینید با این کد به شما یک سریال بر می گردونه .

strComputer = "."
usbdrive = InputBox("Enter the USB Drive Letter")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Dim Str As String
Dim FileSystem As String
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk Where DeviceID ='" & usbdrive & ":'")
For Each objItem In colItems
SerialNumber = objItem.VolumeSerialNumber
DriveType = objItem.Description
FileSystem = objItem.FileSystem
FreeSpace = (objItem.FreeSpace / 1048576)
FreeSpace = Round(FreeSpace, 2)
TotalSize = (objItem.Size / 1048576)
TotalSize = Round(TotalSize, 2)

Next

tmp = InputBox("Drive Type: " & DriveType & vbNewLine & "File System: " & FileSystem & vbNewLine & "Free Space: " & FreeSpace & " MB" & vbNewLine & "Total Size: " & TotalSize & " MB", "USB Drive Serial Number", SerialNumber)

اما خوب به قول شما با هر بار فرمت یک id جدید به دست میاد .

البته . این در مورد همه فلش ها یکسان نیست . بعضی فلش ها ( حرفه ای ها ) بعد از فرمت هم باز هم همون id رو دارن یا به قولی Unique id دارند .

اگر از اون ها استفاده کنید که خوب مشکلی نیست و حل میشه .

اما در غیر این صورت باید راهی پیدا کنید که نشه اون فلش رو فرمت کرد .

موفق باشید ./

m2011kh
پنج شنبه 12 بهمن 1391, 17:41 عصر
این کد هم تست کن ببین جواب میگیری :

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colitems = objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive", , 48)
For Each objitem In colitems
If objitem.interfacetype = "USB" Then sernum = objitem.pnpdeviceid
Next
sernum = Mid(sernum, InStrRev(sernum, "\") + 1)
sernum = Left(sernum, InStr(sernum, "&") - 1)
MsgBox sernum


اگه دوتا فلش یو اس بی متصب باشه این سریال کدومشو میده؟؟؟

m.4.r.m
پنج شنبه 12 بهمن 1391, 22:06 عصر
تست کن خودت ببین کدومه میده بیرون

m2011kh
جمعه 13 بهمن 1391, 08:19 صبح
خب اگه من بخوام از این استفاده کنم،کاربرم باید فقط یک فلش مموری یا امثالش به سیستم متصل باشه.
و تا جاییی که فهمیدم این بر این اساس برمیگردونه که اگه و تا فلش مموری متصل باشه اونی که زودتر متصل شده رو اول برمیگردونه.


بازم ممنون.
MMD

m.4.r.m
جمعه 13 بهمن 1391, 13:01 عصر
خوب عزیزم فلش مموری هیچ وقت جای قفل سخت افزاری رو نمیده . شما برای استفاده بهتر از قفل سخت افزاری استفاده کن که دستور العمل استفاده و کامپوننت قفل رو هم توش برات میزارن راحت .

m2011kh
جمعه 13 بهمن 1391, 15:44 عصر
خب اینو که خودم میدونم.ولی کارم با فلش بود و ربطی به قفل سخت افزاری نداشت.
ولی به هر حال مسئله رو یه جوری حل کردم.

ممنون
MMD

omid22
شنبه 14 بهمن 1391, 12:31 عصر
این کامپوننت اطلاعات سخت افزاری فلاش یو اس بی(سریال) رو میده
امیدوارم به کار بیاد