Autor
|
Tema: Serial y Unidad de Pen Drive (Leído 14,621 veces)
|
Dessa
Desconectado
Mensajes: 624
|
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
|
|
« Última modificación: 2 Mayo 2009, 12:27 pm por Dessa »
|
En línea
|
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.. ...probe primero uno despues el otro y al reves y siempre me lo mostro igual... saludos.
|
|
|
En línea
|
|
|
|
Dessa
Desconectado
Mensajes: 624
|
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.. ...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
|
|
|
En línea
|
Adrian Desanti
|
|
|
Fabricio
Desconectado
Mensajes: 115
|
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 la verdad no entiendo que ocurre y por que algunas veces funciona y otras no saludos
|
|
|
En línea
|
|
|
|
Dessa
Desconectado
Mensajes: 624
|
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
|
|
« Última modificación: 2 Mayo 2009, 12:06 pm por Dessa »
|
En línea
|
Adrian Desanti
|
|
|
Hasseds
Desconectado
Mensajes: 145
|
Fabricio, te mando el code por MP.
Saludos, espero que te sirva.
|
|
« Última modificación: 26 Mayo 2009, 12:04 pm por Hassed »
|
En línea
|
Sergio Desanti
|
|
|
Fabricio
Desconectado
Mensajes: 115
|
Muchisimas gracias un gran saludo
|
|
|
En línea
|
|
|
|
Dessa
Desconectado
Mensajes: 624
|
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
|
|
« Última modificación: 8 Julio 2009, 14:29 pm por Dessa »
|
En línea
|
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.
|
|
|
En línea
|
|
|
|
Dessa
Desconectado
Mensajes: 624
|
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 ???
|
|
« Última modificación: 9 Julio 2009, 21:57 pm por Dessa »
|
En línea
|
Adrian Desanti
|
|
|
|
|