Foro de elhacker.net

Programación => 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
  1. Option Explicit
  2. '---------------------------------------------------------------------------------------
  3. ' Module    : mNativeEnumDrives
  4. ' Author    : Karcrack
  5. ' Date      : 11/02/2010
  6. ' Purpose   : Enumerate Drives, allow filtering by device type
  7. '---------------------------------------------------------------------------------------
  8. 'NTDLL
  9. 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
  10.  
  11. Private Type PROCESS_DEVICEMAP_INFORMATION
  12.    DriveMap                As Long
  13.    DriveType(1 To 32)      As Byte
  14. End Type
  15.  
  16. Public Enum DeviceType
  17.    DRIVE_NOFILTER = -1
  18.    DRIVE_UNKNOWN
  19.    DRIVE_NO_ROOT_DIR
  20.    DRIVE_REMOVABLE
  21.    DRIVE_FIXED
  22.    DRIVE_REMOTE
  23.    DRIVE_CDROM
  24.    DRIVE_RAMDISK
  25. End Enum
  26.  
  27. Private Const ProcessDeviceMap = 23
  28.  
  29. Public Function NtGetDrives(Optional ByVal lFilterType As DeviceType = DRIVE_NOFILTER) As Collection
  30.    Dim tPDC                As PROCESS_DEVICEMAP_INFORMATION
  31.    Dim i                   As Long
  32.  
  33.    Set NtGetDrives = New Collection
  34.  
  35.    If NtQueryInformationProcess(-1, ProcessDeviceMap, tPDC, Len(tPDC), ByVal 0&) = 0 Then
  36.        For i = 0 To 25
  37.            If tPDC.DriveMap And 2 ^ i Then
  38.                If (lFilterType = -1) Or (tPDC.DriveType(i + 1) = lFilterType) Then
  39.                    NtGetDrives.Add Chr$(65 + i) & ":\"
  40.                End If
  41.            End If
  42.        Next i
  43.    End If
  44. End Function

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

Ejemplo de uso:
Código
  1. Private Sub Form_Load()
  2.    Dim vItem               As Variant
  3.  
  4.    For Each vItem In NtGetDrives(DRIVE_REMOVABLE)
  5.        MsgBox vItem
  6.    Next vItem
  7. 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
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
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  ;)