WMI acceder pendrive

14/10/2005 - 15:11 por Silviall | Informe spam
Hola a todos,

Estoy leyendo la documentación de windows de WMI, y no me aclaro mucho.
Estoy trabajando con VB 2003 .NET y me gustaria poder acceder a un pendrive.
Alguien tiene un ejemplo, para acceder a un pendrive? Es una aplicación
estandard que puede correr sobre bastantes sistemas operativos,
NT,2000,XP,?

Muchas Grácias,

Saludos,

Silvia.

Preguntas similare

Leer las respuestas

#1 José Ramón
14/10/2005 - 16:35 | Informe spam
Mira estas dos funciones:


Private Function HayDiscosUSB() As Boolean

Dim Buscar As New Management.ManagementObjectSearcher("Select * from
Win32_DiskDrive where InterfaceType='USB'")

Dim res As Boolean = False

Dim col As Management.ManagementObject

For Each col In Buscar.Get

res = True

Next

Return (res)

End Function

Private Function BuscarNumeroSerie(NumeroSerie as String) As Boolean

Dim Buscar As New Management.ManagementObjectSearcher("Select * from
Win32_LogicalDisk")

Dim NS As String

Dim col As Management.ManagementObject

For Each col In Buscar.Get

NS = Convert.ToString(col("VolumeSerialNumber"))

If String.Compare(NS, NumeroSerie, True) = 0 Then

Me._Unidad = col("Caption").ToString

Return (True)

End If

Next

Return (False)

End Function
Respuesta Responder a este mensaje
#2 Juan Pedro Gonzalez
17/10/2005 - 01:02 | Informe spam
Hola Silviall,

Con el WMI puedes comprobar si hay un disco duro pinchado en tu equipo.
Cuando detectas un disco pinchado en tu equipo sabras la unidad que se le ha
asignado y puedes acceder a dichos ficheros como si fuese un disco duro
normal.

Otra opcion es acceder a el directamente, para ello tendrias que saber cual
es el nombre del sistema para el dispositivo y empleando el P/Invoke podrias
acceder al mismo llamando a diversas funciones del API como CreateFile...
Pero seguramente es rizar mas el rizo, lo mas sencillo es que emplees el WMI
para detectar el dispositivo externo y determines su unidad.

Te comento un poco mejor la idea que tuve del sistema de licencias a traves
de un PenDrive (La mas basica de todas):

Al iniciar la aplicacion detectas si hay un pendrive (Si no lo hay la
aplicacion se sale). Para este paso puedes emplear funciones como la que ha
publicado Jose Ramon o alguna variente Por ejemplo, la funcion que
detecta el Pendrive puede llamarse "Initialize" en tu clase... En el caso de
que se produzca alguna excepcion o un error lanzas una excepcion, si no se
encuentran dispositivos lanzas una excepcion. De esta forma al iniciar el
programa si se produce alguna excepcion la aplicacion se sale.

Una vez hecho esto se retoca la funcion "Initialize", lo que nos interesa es
saber si existe un fichero en una ruta concreta por ejemplo
"\Licencias\miprograma.lic". Si hemos encontrado el dispositivo USB tan solo
debemos añadir el nombre de la unidad:

If System.IO.Filse.Exists(sUnidad & "\Licencias\miprogama.lic") then

Si el fichero no existe descartamos ese dispositivo USB y comprobaremos
haber si hay otro dispositivo USB válido. En el caso de que dicho fichero
exista podemos hacer mil cosas para comprobar su autenticidad... Por ejemplo
puedes sacar el MD5 del fichero, el MD5 del numero de serie del dispositivo
USB, haces un XOR entre ambos resultados y lo cotejas contra un MD5 que has
guardado en el registro... De esta forma tienes una pequeña "llave" generada
por el contenido del fichero y el numero de serie del dispositivo de tal
forma que si la persona desconoce el codigo complicas un poco que pueda
pasar esa "licencia" a otro pendrive... Pero igual no te interesa hacer
eso...

El contenido del fichero siempre deberia ir cifrado, ya que de lo contrario
podria ser muy facil vulnerar la seguridad... Para cifrar el contenido
puedes emplear diversas claves... Por ejemplo si no te interesa que cambien
la licencia de PenDrive puedes emplear cosas como el numero de serie del
pendrive, o el fabricante, etc... Si no te interesa que lo puedan emplear en
otra maquina puedes emplear cosas como el numero de serie del disco duro
fijo, la direccion MAC de la tarjeta de red, datos de la BIOS, datos de la
placa base, etc... Todos esos datos los puedes lograr a traves del WMI.

Para emplear varios datos puedes crear una funcion que se encargue de rotar
bits en funcion de los datos que obtenga, que realice un XOR, que saque
hashes de algunos de los datos,... vamos lo que quieras para liarlo un poco
mas... e incluso puedes usar varios cifrados en cadena, por ejemplo un DES
con una vector y una contraseña que has generado a partir de la mitad de los
datos y luego el Rijndale que sacas de otra serie de datos y asi
sucesivamente... No es bueno pasarse o la aplicacion tardara muchisimo en
arrancar...

Una vez que tienes los datos descifrados puedes cotejarlos con lo que
quieras, incluso con variables del registro... incluso puedes emplear
variables que hayas guardado en el registro para generar el vectro de
inicializacion y la contraseña de tu cifrado.

Es mas, hasta se me ocurre que puedes emplear este cifrado para obtener unos
datos que deseas cotejar, y luego realizar otro descifrado con una clave
interna para el programa que descifre otro campo que tangas guardado en ese
fichero que sería parte de tu codigo fuente. Si pasas por
http://www.codeproject.com/ te encontraras con fragmentos de codigo para
compilar codigo al vuelo, de esta forma puedes contener en dicho fichero el
codigo necesario para lanzar el formulario principal de la aplicacion (Ojo!
que si haces esto ultimo tienes que instalar el SDk del framework para que
funcione). O podrias meter un codigo que se compile al vuelo y consulte un
servicio web para validar su contraseña...

Las opciones son muy pero que muy variadas... Como ya dije en su dia, una de
las ventajas que veia a este sistema es su flexibilidad.


"Silviall" escribió en el mensaje
news:
Hola a todos,

Estoy leyendo la documentación de windows de WMI, y no me aclaro mucho.
Estoy trabajando con VB 2003 .NET y me gustaria poder acceder a un
pendrive. Alguien tiene un ejemplo, para acceder a un pendrive? Es una
aplicación estandard que puede correr sobre bastantes sistemas operativos,
NT,2000,XP,?

Muchas Grácias,

Saludos,

Silvia.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida