[NATIVO] NtGetPenDrives, Obtiene la lista de unidades extraibles

Iniciado por Karcrack, 31 Octubre 2009, 18:02 PM

0 Miembros y 1 Visitante están viendo este tema.

Karcrack

Código (vb) [Seleccionar]
'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

Private Const ProcessDeviceMap = 23

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

Ejemplo de uso:
Código (vb) [Seleccionar]
Sub Main()
    Dim v                   As Variant
   
    For Each v In NtGetPenDrives
        Debug.Print v
    Next v
End Sub


Notas:

  • No incluye la unidad A:
  • No filtra las unidades por BusType...

Simplemente he hecho una nueva funcion a partir de estas funciones Nativas que hice algun tiempo:
http://www.advancevb.com.ar/?p=335

el_c0c0

Interesante, pero por las dudas le cambiaria el nombre de getPendrives, es bastante curiso ver una funcion con ese nombre dentro de un .exe 
:P

en fin, interesante

saludos
'-     coco
"Te voy a romper el orto"- Las hemorroides

Karcrack

Cita de: el_c0c0 en 31 Octubre 2009, 18:18 PM
Interesante, pero por las dudas le cambiaria el nombre de getPendrives, es bastante curiso ver una funcion con ese nombre dentro de un .exe 
:P

en fin, interesante

saludos
Si bueno, algo como esto?:
Public Function  () As Collection
    For Each v In  
        Debug.Print v
    Next v

:rolleyes:

No es un espacio, sino un Chr$(160) :D



De todas formas eso da igual , lo que mola es la forma en que saca la informacion ::) :xD

seba123neo

muy bueno, ahora me hiciste acordar de que tengo que hacer un post unico para juntar todo estos codigos, ahora dentro de un rato me pongo a hacerlo y te aviso que lo postees ahi cuando tengas uno.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

MCKSys Argentina

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."



agus0