elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  ¿Como monitorizar unidades de dispositivos PENDRIVE?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Como monitorizar unidades de dispositivos PENDRIVE?  (Leído 4,332 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
¿Como monitorizar unidades de dispositivos PENDRIVE?
« en: 1 Febrero 2013, 23:44 pm »

Bueno, llevo tiempo intentando hacer una aplicación para monitorizar pendrives (en modo oculto) y copiar todos los datos A OTRO PENDRIVE

Sólo tengo hecha un poco la interfaz y cuatro tonterías más.

PD: Es un WPF, por si tiene importancia.



Para avanzar en la aplicación, necesito información sobre:

  • como monitorizar las unidades que se conectan al PC (Tando su inserción como su extracción)
  • saber si el mismo método de monitorización serviría para Win XP / VISTA / 7 (si se tuviera que monitorizar con APIs...)
  • como saber si la unidad conectada se trata de un pendrive
  • como obtener la letra del pendrive conectado, la etiqueta (nombre/label), entre otros datos útiles que se puedan obtener sobre el dispositivo conectado.


PD: Imagino que para lo penúltimo y último podría usar WMI, ¿NO?, no sé si quizás habrá algo más sencillo/rápido/eficaz...

Y por último, para este proyecto necesito una ayudita en este post:  Como aplicar cambios al registro y refrescar el sistema sin tener que reiniciar?


Gracias por leer.


« Última modificación: 1 Febrero 2013, 23:56 pm por EleKtro H@cker » En línea

Keyen Night


Desconectado Desconectado

Mensajes: 496


Nothing


Ver Perfil
Re: ¿Como monitorizar unidades de dispositivos PENDRIVE?
« Respuesta #1 en: 5 Febrero 2013, 01:06 am »

Para la detección de medios extraibles, puedes interceptar los mensajes de Windows, que indican cambio de hardware, tengo código hecho pero no te lo voy a dar, para ver si te empezamos a acostumbrar a investigar.

Te dejo algunas pistas:

Código
  1.       Protected Overrides Sub WndProc(ByRef [Message] As Message)
  2.       End Sub
  3.  
  4.       Public Enum ConstWindowsDrivers As Integer
  5.           Change = &H219
  6.           Arrival = &H8000
  7.           QueryRemove = &H8001
  8.           QueryRemoveFailed = &H8002
  9.           RemovePending = &H8003
  10.           RemoveComplete = &H8004
  11.           TypeVolume = &H2
  12.       End Enum
     

Es aun más fácil de lo que piensas :silbar: ;)


« Última modificación: 5 Febrero 2013, 01:19 am por Keyen Night » En línea

La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
Re: ¿Como monitorizar unidades de dispositivos PENDRIVE?
« Respuesta #2 en: 5 Febrero 2013, 01:14 am »

Keyen, muchas gracias por la info, a pesar de que ahora pienses que soy un vago quizás por culpa de lo que siempre anda comentando spiritdead... a mi cualquier información que me den me sirve para empezar, y no te preocupes que buscaré.

Me dejas bastante perdido porque yo siempre he usado la API de windows para realizar funciones y cambios, sin necesidad de hacer gran cosa, pero no para recibir/interceptar/monitorizar datos, y no sé si será tán fácil como almacenarlo en una variable cada cierto tiempo para comprobar el valor del resultado y ya está, pero bueno, ya lo busco.

Saludos
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
Re: ¿Como monitorizar unidades de dispositivos PENDRIVE?
« Respuesta #3 en: 6 Febrero 2013, 03:35 am »

Muchas gracias al moderador invisible por reabrir el post :)



Ya he encontrado como monitorizar la inserción-extracción de los dispositivos con los WindowsMessages usando la API, pero primero me he puesto a hacer otra función que necesito,
he sacado la idea de aquí: [APORTE] Interceptar Archivos/Directorios USB
(Gracias Kubox)

En la función necesito hacer demasiadas comprobaciones, muchos "IF", ¿Tienen alguna idea para reducir/mejorar este código?:

PD: El problema que tengo es que tengo que hacer las mismas comprobaciones para "ALL", y las mismas comprobaciones para el resto de la enumeración, no sé como hacerlo más simple.

Código
  1.  Private Enum DriveType
  2.        ALL
  3.        CDRom = IO.DriveType.CDRom
  4.        Fixed = IO.DriveType.Fixed
  5.        Network = IO.DriveType.Network
  6.        Ram = IO.DriveType.Ram
  7.        Removable = IO.DriveType.Removable
  8.        Unknown = IO.DriveType.Unknown
  9.    End Enum
  10.  
  11.    Private Function Get_Drives_Info( _
  12.       ByVal DriveType As DriveType, _
  13.       ByVal Name As Boolean, _
  14.       Optional ByVal Label As Boolean = False, _
  15.       Optional ByVal Type As Boolean = False, _
  16.       Optional ByVal Format As Boolean = False, _
  17.       Optional ByVal Size As Boolean = False, _
  18.       Optional ByVal FreeSpace As Boolean = False) As List(Of String)
  19.  
  20.        Dim Drive_Info_List As New List(Of String)
  21.        Dim Drive_Info As String = Nothing
  22.  
  23.        For Each Drive In Microsoft.VisualBasic.FileIO.FileSystem.Drives
  24.            If DriveType = DriveType.ALL Then
  25.                If Drive.IsReady = True Then
  26.                    If Name Then Drive_Info += Drive.Name & ";"
  27.                    If Label Then Drive_Info += Drive.VolumeLabel & ";"
  28.                    If Type Then Drive_Info += Drive.DriveType.ToString & ";"
  29.                    If Format Then Drive_Info += Drive.DriveFormat & ";"
  30.                    If Size Then Drive_Info += Drive.TotalSize.ToString & ";"
  31.                    If FreeSpace Then Drive_Info += Drive.TotalFreeSpace & ";"
  32.                End If
  33.            Else
  34.                If Drive.IsReady = True And Drive.DriveType = DriveType Then
  35.                    If Drive.IsReady = True Then
  36.                        If Name Then Drive_Info += Drive.Name & ";"
  37.                        If Label Then Drive_Info += Drive.VolumeLabel & ";"
  38.                        If Type Then Drive_Info += Drive.DriveType.ToString & ";"
  39.                        If Format Then Drive_Info += Drive.DriveFormat & ";"
  40.                        If Size Then Drive_Info += Drive.TotalSize.ToString & ";"
  41.                        If FreeSpace Then Drive_Info += Drive.TotalFreeSpace & ";"
  42.                    End If
  43.                End If
  44.            End If
  45.            If Drive_Info IsNot Nothing Then Drive_Info_List.Add(Drive_Info) : Drive_Info = Nothing
  46.        Next
  47.  
  48.        Return Drive_Info_List
  49.    End Function

saludos
« Última modificación: 6 Febrero 2013, 03:42 am por EleKtro H@cker » En línea

_katze_

Desconectado Desconectado

Mensajes: 140



Ver Perfil WWW
Re: ¿Como monitorizar unidades de dispositivos PENDRIVE?
« Respuesta #4 en: 6 Febrero 2013, 07:26 am »

select case
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
Re: ¿Como monitorizar unidades de dispositivos PENDRIVE?
« Respuesta #5 en: 6 Febrero 2013, 08:57 am »

select case

Gracias, pero no creo que un select case me vaya a solucionar el problema:

Código:
select case blablabla
case DriveType.ALL
    if name then...
    if label then...
    if size then...
    if type then...
    if freespace then...
    if format then...
case else
    if name then...
    if label then...
    if size then...
    if type then...
    if freespace then...
    if format then...
end case

Lo que quiero es NO tener que repetir las comprobaciones para los dos casos, me gustaría simplificarlo de alguna manera, y para eso necesito ejemplos please!.

saludos
« Última modificación: 6 Febrero 2013, 09:37 am por EleKtro H@cker » En línea

HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: ¿Como monitorizar unidades de dispositivos PENDRIVE?
« Respuesta #6 en: 6 Febrero 2013, 12:58 pm »

Hola.

Igual estoy interpretando mal lo que quieres hacer, pero creo que podrías simplificarlo así:

Código
  1. If (DriveType = DriveType.ALL Or Drive.DriveType = DriveType) And (Drive.IsReady) Then
  2.  
  3.  If Name Then Drive_Info += Drive.Name & ";"
  4.  If Label Then Drive_Info += Drive.VolumeLabel & ";"
  5.  If Type Then Drive_Info += Drive.DriveType.ToString & ";"
  6.  If Format Then Drive_Info += Drive.DriveFormat & ";"
  7.  If Size Then Drive_Info += Drive.TotalSize.ToString & ";"
  8.  If FreeSpace Then Drive_Info += Drive.TotalFreeSpace & ";"
  9.  
  10. End If

Saludos.
En línea

- Nice to see you again -
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
Re: ¿Como monitorizar unidades de dispositivos PENDRIVE?
« Respuesta #7 en: 9 Febrero 2013, 02:05 am »

@hdm

Muchas gracias, ese IF era lo que necesitaba!
En línea

HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: ¿Como monitorizar unidades de dispositivos PENDRIVE?
« Respuesta #8 en: 9 Febrero 2013, 20:26 pm »

Ferpecto Elektro  ;D

También podrías sustituir:

Código
  1. If Name Then Drive_Info += Drive.Name & ";"
  2. If Label Then Drive_Info += Drive.VolumeLabel & ";"
  3. If Type Then Drive_Info += Drive.DriveType.ToString & ";"
  4. If Format Then Drive_Info += Drive.DriveFormat & ";"
  5. If Size Then Drive_Info += Drive.TotalSize.ToString & ";"
  6. If FreeSpace Then Drive_Info += Drive.TotalFreeSpace & ";"

Por una única línea:

Código
  1. Drive_Info = IIf(Name, Drive.Name & ";", "") + IIf(Label, Drive.VolumeLabel & ";", "") + IIf(Type, Drive.DriveType.ToString & ";", "") + IIf(Format, Drive.DriveFormat & ";", "") + IIf(Size, Drive.TotalSize.ToString & ";", "") + IIf(FreeSpace, Drive.TotalFreeSpace & ";", "")

Teniendo en cuenta que:

Si Option Strict tiene el valor On, debe utilizar la palabra clave CStr para convertir explícitamente el resultado de Object en String.


Saludos.
En línea

- Nice to see you again -
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Source] Infectar unidades extraibles (pendrive), unidades de red, etc... « 1 2 »
Programación Visual Basic
Mad Antrax 11 8,845 Último mensaje 7 Mayo 2007, 04:04 am
por ‭‭‭‭jackl007
Detector unidades Pendrive 5.0c « 1 2 ... 5 6 »
Scripting
carlitos.dll 50 27,980 Último mensaje 3 Diciembre 2009, 04:36 am
por leogtz
Detectar Unidades USB (Pendrive) (SRC)
Programación Visual Basic
Hasseds 4 4,337 Último mensaje 21 Abril 2009, 20:40 pm
por Hasseds
¿Como consigo la ip publica de dispositivos?
Dudas Generales
Crixus 6 2,568 Último mensaje 27 Abril 2015, 00:17 am
por Crixus
Registrar / Monitorizar webs de dispositivos conectador por wifi
Redes
A.C.E. 5 2,855 Último mensaje 9 Febrero 2017, 21:31 pm
por dato000
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines