DeviceIoControl и получения серийника флешки

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

DeviceIoControl и получения серийника флешки

Сообщение Lunatic » 01.02.2009 (Вс) 21:10

Код: Выделить всё
Option Explicit
Const IOCTL_USB_GET_ROOT_HUB_NAME = &H220408
Const IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX = &H220448
Const IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME = &H220420
Const IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION = &H220410
Const IOCTL_USB_GET_NODE_CONNECTION_NAME = &H220414

Private Const OPEN_EXISTING = 3
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000

Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2

Private Const IDENTIFY_BUFFER_SIZE = 512
Private Const OUTPUT_DATA_SIZE = IDENTIFY_BUFFER_SIZE + 16


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 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 Function Get_USB_Serial() As String
Dim hDrive As Long
Dim bArrOut(OUTPUT_DATA_SIZE - 1) As Byte
Dim lpcbBytesReturned As Long
Dim I As Integer
Dim TEMP As String

hDrive = CreateFile("\\?\HCD0", GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0, OPEN_EXISTING, 0, 0)
DeviceIoControl hDrive, IOCTL_USB_GET_ROOT_HUB_NAME, 0, 0, bArrOut(0), OUTPUT_DATA_SIZE, lpcbBytesReturned, ByVal 0&
For I = LBound(bArrOut) To UBound(bArrOut)
    If bArrOut(I) <> 0 Then
    TEMP = TEMP & Chr(bArrOut(I))
    End If
Next I
Get_USB_Serial = TEMP

End Function

Private Sub Command1_Click()
MsgBox Get_USB_Serial
End Sub


Всё что смог сделать. Так это вывести инфу про USB_HUB, как же продолжить и получить информацию о определённом девайсе. Знаю что нужно отсылать IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, а вот какие параметры передавать устройству в lpInBuffer незнаю. Помогите люди добрые

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: DeviceIoControl и получения серийника флешки

Сообщение trash » 03.02.2009 (Вт) 16:56

А через WMI не проще? И кстати серийник есть только у флешек с контроллером. Собственно, серийник флешки = серийник контроллера.

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: DeviceIoControl и получения серийника флешки

Сообщение Lunatic » 03.02.2009 (Вт) 18:00

Спасибки! Задача решена. Но всё же хотелось и с DeviceIo разобратся


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 57

    TopList