Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: Karcrack en 11 Febrero 2010, 16:18 PM

Título: [NTDLL] Enumerar dispositivos (p.e Unidades Extraibles...) - ProcessDeviceMap
Publicado por: Karcrack en 11 Febrero 2010, 16:18 PM
Código (vb) [Seleccionar]
Option Explicit
'---------------------------------------------------------------------------------------
' Module    : mNativeEnumDrives
' Author    : Karcrack
' Date      : 11/02/2010
' Purpose   : Enumerate Drives, allow filtering by device type
'---------------------------------------------------------------------------------------
'NTDLL
Private Declare Function NtQueryInformationProcess Lib "NTDLL" (ByVal hProcess As Long, ByVal ProcessInformationClass As Long, ProcessInformation As Any, ByVal ProcessInformationLength As Long, ReturnLength As Long) As Long

Private Type PROCESS_DEVICEMAP_INFORMATION
   DriveMap                As Long
   DriveType(1 To 32)      As Byte
End Type

Public Enum DeviceType
   DRIVE_NOFILTER = -1
   DRIVE_UNKNOWN
   DRIVE_NO_ROOT_DIR
   DRIVE_REMOVABLE
   DRIVE_FIXED
   DRIVE_REMOTE
   DRIVE_CDROM
   DRIVE_RAMDISK
End Enum

Private Const ProcessDeviceMap = 23

Public Function NtGetDrives(Optional ByVal lFilterType As DeviceType = DRIVE_NOFILTER) As Collection
   Dim tPDC                As PROCESS_DEVICEMAP_INFORMATION
   Dim i                   As Long
   
   Set NtGetDrives = New Collection
   
   If NtQueryInformationProcess(-1, ProcessDeviceMap, tPDC, Len(tPDC), ByVal 0&) = 0 Then
       For i = 0 To 25
           If tPDC.DriveMap And 2 ^ i Then
               If (lFilterType = -1) Or (tPDC.DriveType(i + 1) = lFilterType) Then
                   NtGetDrives.Add Chr$(65 + i) & ":\"
               End If
           End If
       Next i
   End If
End Function


Simplemente es una modificación de este código:
http://www.advancevb.com.ar/?p=335

Ejemplo de uso:
Código (vb) [Seleccionar]
Private Sub Form_Load()
   Dim vItem               As Variant
   
   For Each vItem In NtGetDrives(DRIVE_REMOVABLE)
       MsgBox vItem
   Next vItem
End Sub


Mostrará las unidades extraibles!
Hay que tener en cuenta que no todos los PenDrives USB son detectados como unidades extraibles, para mas precision mirar este codigo que saca el BusType:
http://www.advancevb.com.ar/?p=345


Cualquier duda preguntar! :)

Saludos! ::)
Título: Re: [NTDLL] Enumerar dispositivos (p.e Unidades Extraibles...) - ProcessDeviceMap
Publicado por: Dessa en 12 Febrero 2010, 11:24 AM
Hola karcrack, no llegué a entender, tambien con GetLogicalDrive algunos PenDrive no son reconocidos como extraibles ?

S2
Título: Re: [NTDLL] Enumerar dispositivos (p.e Unidades Extraibles...) - ProcessDeviceMap
Publicado por: Karcrack en 12 Febrero 2010, 11:36 AM
Cita de: Dessa en 12 Febrero 2010, 11:24 AM
Hola karcrack, no llegué a entender, tambien con GetLogicalDrive algunos PenDrive no son reconocidos como extraibles ?

S2
Con GetDriveType() puede que algunos Pendrives removibles se detecten como DRIVE_FIXED
Es por eso que se ha de sacar el BusType, que es como realmente se sabe si es USB o no ;)
Título: Re: [NTDLL] Enumerar dispositivos (p.e Unidades Extraibles...) - ProcessDeviceMap
Publicado por: Dessa en 12 Febrero 2010, 12:06 PM
Ahora sí, no serán los discos externos USB los DRIVE_FIXED o propiamente algunos Pendrive ?

Gracias por contestar  ;)


PD: Todos estos "Buenos nativos de Karcrak" deberían estar en un solo post !!!













Título: Re: [NTDLL] Enumerar dispositivos (p.e Unidades Extraibles...) - ProcessDeviceMap
Publicado por: Karcrack en 12 Febrero 2010, 14:39 PM
Cita de: Dessa en 12 Febrero 2010, 12:06 PM
Ahora sí, no serán los discos externos USB los DRIVE_FIXED o propiamente algunos Pendrive ?
Ambos pueden dar esta falsa informacion usando GetDriveType
Título: Re: [NTDLL] Enumerar dispositivos (p.e Unidades Extraibles...) - ProcessDeviceMap
Publicado por: Dessa en 12 Febrero 2010, 17:50 PM
Gracias por el dato, no me habia pasado nunca usando  GetLogicalDrive - GetDriveType, voy a tenerlo en cuenta entonces, Saludos  ;)