Problemas con GetDriveType

Iniciado por Sancho.Mazorka, 3 Agosto 2007, 05:40 AM

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

Sancho.Mazorka

Hola gente tengo un problema, necesito distinguir entre una Disketera y un Pen Drive o Data Traveler, pero la unica forma de hacerlo es con esta API que devuelve a las 2 como removible pero quisiera poder diferenciarlos:

Código (vb) [Seleccionar]
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Sub Form_Load()
    'KPD-Team 1998
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    'Set the graphic mode to persistent
    Me.AutoRedraw = True
    'Get information about the C:\
    Select Case GetDriveType("C:\")
        Case 2
            Me.Print "Removable"
        Case 3
            Me.Print "Drive Fixed"
        Case Is = 4
            Me.Print "Remote"
        Case Is = 5
            Me.Print "Cd-Rom"
        Case Is = 6
            Me.Print "Ram disk"
        Case Else
            Me.Print "Unrecognized"
    End Select
End Sub


Alguien sabe como diferenciar Disketera de Pen Drive ? Lo necesito por favor!


Sancho.Mazorka    :¬¬
Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html



LeandroA

hola puedes compara el tamaño por lo general un pendrive es mayor a 1457664 bytes y es "FAT" esto mas que nada para ver si esta el disco puesto (la disquetera)



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
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpRootPathName As String, lpFreeBytesAvailableToCaller As Long, lpTotalNumberOfBytes As Long, lpTotalNumberOfFreeBytes As Long) As Long


Private Sub RecuperarDiscoExtraible()
Dim strSave As String
Dim Drive As String
Dim Removible As String
Dim totalbytes As Long
Dim FSName As String

strSave = String(255, Chr$(0))

ret& = GetLogicalDriveStrings(255, strSave)

For keer = 1 To 100
    If Left$(strSave, InStr(1, strSave, Chr$(0))) = Chr$(0) Then Exit For
    Drive = Left$(strSave, InStr(1, strSave, Chr$(0)) - 1)

    If GetDriveType(Drive) = 2 Then
        Removible = Drive
        FSName = String$(255, Chr$(0))
   
        GetVolumeInformation Removible, 255, 255, 255, 0, 0, FSName, 255
     
        FSName = Left$(FSName, InStr(1, FSName, Chr$(0)) - 1)
   
        Call GetDiskFreeSpaceEx(Removible, 255, totalbytes, 255)
        If totalbytes <> 1457664 And FSName = "FAT" Then Me.Print Drive
    End If

    strSave = Right$(strSave, Len(strSave) - InStr(1, strSave, Chr$(0)))
Next keer

End Sub




Private Sub Form_Load()
Me.AutoRedraw = True
Call RecuperarDiscoExtraible
End Sub



Saludos

yo no lo prove con un pendrive sino con un celular pero supongo que es lo mismo

Sancho.Mazorka

#2
Funciona perfectamente, pero te equivocaste en la asignacion mira:
Código (vb) [Seleccionar]
If totalbytes <> 1457664 And FSName = "FAT" Then Me.Print Drive
A mi me funciono cuando le coloque FAT32
Código (vb) [Seleccionar]
If totalbytes <> 1457664 And FSName = "FAT32" Then Me.Print Drive
Muchas gracias y aprendi algo nuevo, todos los pen drive son FAT32  ;D


Sancho.Mazorka    :¬¬
Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html



Red Mx

Cita de: Sancho.Mazorka en  4 Agosto 2007, 05:08 AM
Muchas gracias y aprendi algo nuevo, todos los pen drive son FAT32  ;D

No de echo cuando los compras nuevos bienen en FAT ( bueno los que yo eh visto kingston y otras marcas) fat y fat32 las tienes como opciones en el windows cuando formateas el dispositivo de almacenamiento USB, aunque tengo entendido que tambien le puedes poner NTFS

Desarrollar Malware Es Causa De Cancer...

Sancho.Mazorka

Pero no es conveniente ponerlo como NTFS, ya que trae conflictos y no se puede extrar segun lo que lei. Por lo menos hasta ahora funciona ese code  :P


Sancho.Mazorka    :¬¬
Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html



LeandroA

hola lo de FAT era por si la disquetera estaba basia entonces iva a ser <> 1457664 osea
= 0 pero o podes poner FSName = "FAT" or FSName = "FAT32" or FSName = "NTFS"

o bien si es > 1457664