.net - reparar - unidad flash usb para restablecer contraseña
cómo determinar el fabricante de la unidad flash USB? (8)
Es posible que pueda obtener esta información a través de WMI. A continuación se muestra una secuencia de comandos vbs (copiar al archivo de texto con .vbs para ejecutar) que utiliza WMI para obtener información sobre los objetos Win32_DiskDrive . La información del fabricante podría simplemente decir Unidad de disco estándar, pero el número de modelo puede tener lo que está buscando.
Set Drives = GetObject("winmgmts:{impersonationLevel=impersonate,(Backup)}").ExecQuery("select * from Win32_DiskDrive")
for each drive in drives
Wscript.echo "Drive Information:" & vbnewline & _
"Availability: " & drive.Availability & vbnewline & _
"BytesPerSector: " & drive.BytesPerSector & vbnewline & _
"Caption: " & drive.Caption & vbnewline & _
"CompressionMethod: " & drive.CompressionMethod & vbnewline & _
"ConfigManagerErrorCode: " & drive.ConfigManagerErrorCode & vbnewline & _
"ConfigManagerUserConfig: " & drive.ConfigManagerUserConfig & vbnewline & _
"CreationClassName: " & drive.CreationClassName & vbnewline & _
"DefaultBlockSize: " & drive.DefaultBlockSize & vbnewline & _
"Description: " & drive.Description & vbnewline & _
"DeviceID: " & drive.DeviceID & vbnewline & _
"ErrorCleared: " & drive.ErrorCleared & vbnewline & _
"ErrorDescription: " & drive.ErrorDescription & vbnewline & _
"ErrorMethodology: " & drive.ErrorMethodology & vbnewline & _
"Index: " & drive.Index & vbnewline & _
"InterfaceType: " & drive.InterfaceType & vbnewline & _
"LastErrorCode: " & drive.LastErrorCode & vbnewline & _
"Manufacturer: " & drive.Manufacturer & vbnewline & _
"MaxBlockSize: " & drive.MaxBlockSize & vbnewline & _
"MaxMediaSize: " & drive.MaxMediaSize & vbnewline & _
"MediaLoaded: " & drive.MediaLoaded & vbnewline & _
"MediaType: " & drive.MediaType & vbnewline & _
"MinBlockSize: " & drive.MinBlockSize & vbnewline & _
"Model: " & drive.Model & vbnewline & _
"Name: " & drive.Name & vbnewline & _
"NeedsCleaning: " & drive.NeedsCleaning & vbnewline & _
"NumberOfMediaSupported: " & drive.NumberOfMediaSupported & vbnewline & _
"Partitions: " & drive.Partitions & vbnewline & _
"PNPDeviceID: " & drive.PNPDeviceID & vbnewline & _
"PowerManagementSupported: " & drive.PowerManagementSupported & vbnewline & _
"SCSIBus: " & drive.SCSIBus & vbnewline & _
"SCSILogicalUnit: " & drive.SCSILogicalUnit & vbnewline & _
"SCSIPort: " & drive.SCSIPort & vbnewline & _
"SCSITargetId: " & drive.SCSITargetId & vbnewline & _
"SectorsPerTrack: " & drive.SectorsPerTrack & vbnewline & _
"Signature: " & drive.Signature & vbnewline & _
"Size: " & drive.Size & vbnewline & _
"Status: " & drive.Status & vbnewline & _
"StatusInfo: " & drive.StatusInfo & vbnewline & _
"SystemCreationClassName: " & drive.SystemCreationClassName & vbnewline & _
"SystemName: " & drive.SystemName & vbnewline & _
"TotalCylinders: " & drive.TotalCylinders & vbnewline & _
"TotalHeads: " & drive.TotalHeads & vbnewline & _
"TotalSectors: " & drive.TotalSectors & vbnewline & _
"TotalTracks: " & drive.TotalTracks & vbnewline & _
"TracksPerCylinder: " & drive.TracksPerCylinder & vbnewline
next
Necesito que mi programa funcione solo con ciertas unidades flash USB (de un solo fabricante) e ignoro todas las demás unidades flash USB (de cualquier otro fabricante).
¿Es posible verificar que una tarjeta USB específica esté insertada en Windows usando .NET 2.0? ¿cómo?
si lo encuentro a través de WMI, ¿puedo de alguna manera determinar en qué letra de unidad está la unidad USB?
Hola, intente esto usando WMI
Option Explicit
Dim objWMIService, objItem, colItems, strComputer
'' On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts://" _
& strComputer & "/root/cimv2")
Set colItems = objWMIService.ExecQuery(_
"Select Manufacturer from Win32_DiskDrive")
For Each objItem in colItems
Wscript.Echo "Computer: " & objItem.SystemName & VbCr & _
"Manufacturer: " & objItem.Manufacturer & VbCr & _
"Model: " & objItem.Model
Next
Model podría ser más útil que Manufacturer. Miras FirmwareRevision si quieres bloquear tu aplicación ahora en un solo Fabricante y una (alguna) Revisión de Firmware.
Espero eso ayude.
Pasando por Win32 CM_ (Device Management) o WMI y tomando la ID de PNP. Busque VID (ID del vendedor).
Veo información para el dispositivo que acabo de insertar en Win32_USBControllerDevice
y Win32_DiskDrive
.
Podría usar llamadas API de Win32 no administradas para manejar esto.
http://www.codeproject.com/KB/system/EnumDeviceProperties.aspx
Si los objetos Win32_DiskDrive
no proporcionan la información que está buscando, también puede mirar la clase Win32_PhysicalMedia de los objetos WMI. Tienen propiedades de Fabricante, Modelo, PartNumber y descripción que pueden ser útiles.
Tal vez #usblib:
En caso de que alguien más esté lo suficientemente loco como para hacer esto en C ++ - CLI, aquí hay una respuesta de puerto de smink:
using namespace System;
using namespace System::Management;
void GetUSBDeviceList()
{
try
{
ManagementObjectSearcher^ searcher =
gcnew ManagementObjectSearcher("root//CIMV2",
"SELECT * FROM Win32_DiskDrive");
for each (ManagementObject^ queryObj in searcher->Get())
{
Console::WriteLine("DeviceID: {0}", queryObj["DeviceID"]);
Console::WriteLine("PNPDeviceID: {0}", queryObj["PNPDeviceID"]);
Console::WriteLine("Manufacturer: {0}", queryObj["Manufacturer"]);
Console::WriteLine("Model: {0}", queryObj["Model"]);
for each (ManagementObject^ b in queryObj->GetRelated("Win32_DiskPartition"))
{
Console::WriteLine(" Name: {0}", b["Name"]);
for each (ManagementBaseObject^ c in b->GetRelated("Win32_LogicalDisk"))
{
Console::WriteLine(" Name: {0}", c["Name"]); // here it will print drive letter
}
}
// ...
Console::WriteLine("--------------------------------------------");
}
}
catch (ManagementException^ e)
{
Console::WriteLine(e->StackTrace);
}
Console::ReadLine();
}
Nota: Tuve que agregar manualmente una referencia a la biblioteca System.Management
en mis propiedades de portales.
EDITAR: código agregado para imprimir letra de unidad.
Verifica si este ejemplo funciona para ti. Utiliza WMI.
Console.WriteLine("Manufacturer: {0}", queryObj["Manufacturer"]);
...
Console.WriteLine(" Name: {0}", c["Name"]); // here it will print drive letter
La muestra del código completo:
namespace WMISample
{
using System;
using System.Management;
public class MyWMIQuery
{
public static void Main()
{
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root//CIMV2",
"SELECT * FROM Win32_DiskDrive");
foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("DeviceID: {0}", queryObj["DeviceID"]);
Console.WriteLine("PNPDeviceID: {0}", queryObj["PNPDeviceID"]);
Console.WriteLine("Manufacturer: {0}", queryObj["Manufacturer"]);
Console.WriteLine("Model: {0}", queryObj["Model"]);
foreach (ManagementObject b in queryObj.GetRelated("Win32_DiskPartition"))
{
Console.WriteLine(" Name: {0}", b["Name"]);
foreach (ManagementBaseObject c in b.GetRelated("Win32_LogicalDisk"))
{
Console.WriteLine(" Name: {0}", c["Name"]); // here it will print drive letter
}
}
// ...
Console.WriteLine("--------------------------------------------");
}
}
catch (ManagementException e)
{
Console.WriteLine(e.StackTrace);
}
Console.ReadLine();
}
}
}
Creo que esas propiedades deberían ayudarlo a distinguir las unidades USB genuinas de las demás. Pruebe con varias unidades de lápiz para verificar si los valores son los mismos. Consulte la referencia completa de las propiedades de Win32_DiskDrive aquí:
http://msdn.microsoft.com/en-us/library/aa394132(VS.85).aspx
Comprueba si este artículo también te puede ayudar: