Serial y Unidad de Pen Drive

Iniciado por Dessa, 9 Abril 2009, 12:59 PM

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

Dessa

No encuentro una propiedad comun entre Win32_LogicalDisk y Win32_DiskDrive para relacionar directamente la letra de un pen con su serial


Gracias y saludos

Adrian Desanti

seba123neo

Hola, yo probe con 2...uno es F y el otro H...el de unidad lo tira con order como dijiste...y el otro tambien.. :P...probe primero uno despues el otro y al reves y siempre me lo mostro igual...

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

Dessa

Cita de: seba123neo en 10 Abril 2009, 00:00 AM
Hola, yo probe con 2...uno es F y el otro H...el de unidad lo tira con order como dijiste...y el otro tambien.. :P...probe primero uno despues el otro y al reves y siempre me lo mostro igual...

saludos.

Sí, Seba, en algunos casos el orden de las unidades (Win32_LogicalDisk) y el orden de los seriales (Win32_DiskDrive) coinciden, yo probé en tres cpu distintas y solo en una coincidía (no llego a entender como windows maneja este tema).

Por eso la pregunta sería hay alguna manera de conocer las letras de las unidades con Win32_DiskDrive ???

Gracias y saludos

Adrian Desanti

Fabricio

Hola a todos por lo que probe este error ocurre en algunos casos y en otros no yo probe con dos pen iguales y me doy lo s datos cambiados luego probe con otros dos pen y me dio los datos en forma correcta todo en la misma pc  :huh:
la verdad no entiendo que ocurre y por que algunas veces funciona y otras no

saludos  :D

Dessa

#4
Hola fabricio, no es un error, son dos funciones distintas que no se rigen por el mismo orden, el code wmi al que me refiero en la pregunta original es simple, pero lamentablemente no siempre retorna el serial de fábrica y las letras de sus unidades en el orden que corresponde.

Saludos



 
Adrian Desanti

Hasseds

#5
Fabricio, te mando el code por MP.


Saludos, espero que te sirva.

Sergio Desanti

Fabricio

Muchisimas gracias  ;-)
un gran saludo

Dessa

#7
Cita de: Dessa en  9 Abril 2009, 12:59 PM
No encuentro una propiedad comun entre Win32_LogicalDisk y Win32_DiskDrive para relacionar directamente la letra de un pen con su serial

Retomé el tema hace unos dias y por fin pude encontrar la forma de relacionar directamente la unidad lógica de un Pendrive con con su serial (Win32_DiskDrive-PNPDeviceID), no es por intermedio de Win32_LogicalDisk sino por intermedio de Win32_LogicalDiskToPartition, esta clase me devuelve la letra Lógica (dependent) y el numero de index del disco al que corresponde (Antecedent), lo que queda es solo relacionar este numero de index con el tambien numero de index que devuelve Win32_DiskDrive (Win32_DiskDrive-index ) Y (Win32_DiskDrive-PNPDeviceID).

Paso el code para el que le pueda servir



Private Function UsbSerial() As String

Dim disco1 As Object: Dim Objeto1 As Object ' Detecta seriales de Pendrive, MP3, Etc
Dim disco2 As Object: Dim Objeto2 As Object ' Autor = Dessa
Dim sDisco As String: Dim sLetra As String  ' http://foro.elhacker.net/programacion_vb-b50.0/

Set Objeto1 = GetObject("winmgmts:").ExecQuery("Select * from Win32_LogicalDiskToPartition")
Set Objeto2 = GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf("Win32_DiskDrive")

For Each disco1 In Objeto1
     sLetra = Mid(disco1.dependent, InStr(1, disco1.dependent, "=") + 2, 2)
     sDisco = Mid(disco1.Antecedent, InStr(1, disco1.Antecedent, "#") + 1, InStrRev(disco1.Antecedent, ",") - InStr(1, disco1.Antecedent, "#"))
   For Each disco2 In Objeto2
     If disco2.InterfaceType = "USB" Then
       If disco2.Index = Val(Mid(sDisco, 1, Len(sDisco) - 1)) Then
         UsbSerial = UsbSerial + sLetra + " " & Mid(disco2.PNPDeviceID, InStrRev(disco2.PNPDeviceID, "\") + 1, InStrRev(disco2.PNPDeviceID, "&") - InStrRev(disco2.PNPDeviceID, "\") - 1) + vbNewLine
       End If
     End If
   Next
Next

End Function




PD: Funcinó en XP-SP3 y W7

S2







Adrian Desanti

cobein

Vuelvo a decir esto, creo que ya lo comente varias veces, WMI no es recomendable, no siempre esta disponible, lo que hace el code muy susceptible a fallos.
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

Dessa

#9
Ok, cobein, gracias por el aporte, pero cual seria la mejor solución para relacionar los seriales de los Pendrive con sos respectivas unidades ?

Por ejemplo usando APIs en XP se puede enumerar los seriales que se encuentran en HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR y a travez del dato del valor ParentIdPrefix de cada serial se puede  relacionar con la unidad de cada pendrive conectado que se encuentran en HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices (en el interior del dato Binario de cada unidad montada con Pendrive se encuentra tambien el valor ParentIdPrefix de cada serial, esto permitiria relacionar directamente los seriales con sus respectivas unidades). Pero no hay una manera mas directa ???


Adrian Desanti