/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

¿Cómo leer el ID de una memoria USB?

 
      Índice del Foro elrincondelc.com -> Windows
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
alfredxx



Registrado: 20 Mar 2009
Mensajes: 1
Ubicación: México DF

MensajePublicado: 20/03/2009 2:43 pm
Título: ¿Cómo leer el ID de una memoria USB?

Hola a todos, estoy recurriendo a su ayuda, soy nuevo en este foro y me gustaría saber como puedo leer el ID de una memoria USB Flash, necesito que el algoritmo esté en lenguaje C. Sí puedo leer el ID después lo voy a enlazar a un software que quiero proteger.

Olvidaba decir que tengo este programa, pero al momento de compilarlo me marca tres errores, mismos que no he podido elimiarselos:


// {B5157D69-75F8-11d3-8CE0-00207815E611}
DEFINE_GUID(USBIODS_GUID,
0xb5157d69, 0x75f8, 0x11d3, 0x8c, 0xe0, 0x0, 0x20, 0x78, 0x15, 0xe6, 0x11);
HDEVINFO hinfo = SetupDiGetClassDevs(&USBIODS_GUID, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);

int i;
Cstring_Devices[10]; // an array of cstrings
for (DWORD i=0; ; ++i)
{
SP_INTERFACE_DEVICE_DATA Interface_Info;
Interface_Info.cbSize = sizeof(Interface_Info);
// Enumerate device
if (!SetupDiEnumInterfaceDevice(hInfo, NULL, (LPGUID)
&USBIODS_GUID,i, &Interface_Info))
{
SetupDiDestroyDeviceInfoList(hInfo);
return(i);
}

DWORD needed; // get the required lenght
SetupDiGetInterfaceDeviceDetail(hInfo, &Interface_Info,
NULL, 0, &needed, NULL);
PSP_INTERFACE_DEVICE_DETAIL_DATA detail =
(PSP_INTERFACE_DEVICE_DETAIL_DATA) malloc(needed);
if (!detail)
{
SetupDiDestroyDeviceInfoList(hInfo);
return(i);
}
// fill the device details
detail->cbSize =
sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
if (!SetupDiGetInterfaceDeviceDetail(hInfo,
&Interface_Info,detail, needed,NULL, NULL))
{
free((PVOID) detail);
SetupDiDestroyDeviceInfoList(hInfo);
return(i);
}

char name[MAX_PATH];
strncpy(name, detail->DevicePath, sizeof(name));
free((PVOID) detail);
Devices = name; // keep a copy of each device name
} // end of for loop








*****Los errores que me arroja el compilador son los siguientes (en el programa aparecen como subrayados):

(2,20): Style of function definition is now obsolete
(3,11): ) expected
(4,15): Declaration syntax error
(8,7): Declaration terminated incorrectly
(5,25): Declaration terminated incorrectly



De antemano agradezco su ayuda...
Volver arriba
untio



Registrado: 17 Sep 2008
Mensajes: 380
Ubicación: MICA S.A.

MensajePublicado: 02/07/2009 9:21 am
Título:

Hola,
Hace un tiempo intenté crear un programa que grabase cds, dvds, etc. No lo pude terminar: las especificaciones de los formatos no son libres y cuesta un ojo de la cara cada documento. Desarrollo software libre y no voy a coser y pagar el hilo.
Te preguntarás qué tiene que ver esto con tu caso. Más de lo que crees. Los comandos que se envían a los dispositivos son un estándar. Sirven para escáneres, regrabadoras, etc. Supongo que funcionarán también para discos duros y memorias usb.
Los comandos de los que te hablo son los Multimedia Commands. Naturalmente forman parte de un varios ISO que cuestan una pasta. Además, los puedes enviar de forma general simulando una interfaz scsi. Otra norma que cuesta una pasta.
No obstante, te permiten descargar los borradores (drafts en inglés) de la próxima versión del documento.
¿Cómo funciona?
Muy fácil. Abres el dispositivo con CreateFile. Si hay más de uno has de seleccionarlo desde tu programa mandando varias veces los comandos. Una vez tengas el manejador usas el comando DeviceIOControl. Tiene muchos códigos de operación, como por ejemplo: IOCTL_SCSI_GET_INQUIRY_DATA. No te alegres, has de seguir todos las reglas de los comandos scsi y éste es sólo uno. Necesitarás más.
Probablemente no veas este código en el sdk normal o en msdn. En ese caso descarga de Microsoft el ddk (driver development kit).
Buena suerte.

Espero que sea útil.
Volver arriba
untio



Registrado: 17 Sep 2008
Mensajes: 380
Ubicación: MICA S.A.

MensajePublicado: 06/08/2009 7:35 am
Título:

Hola otra vez,

Hay un método más corto de leer ids de los dispositivos conectados a un ordenador que usa windows. Sólo te escribo lo que hay en el registro de mi windows 2000 buscando en el lugar adecuado:

HKEY_LOCAL_MACHINE/HARDWARE/DEVICEMAP/Scsi/Scsi port 0/Scsi Bus 0/Target Id 0/Logial Unit Id 0/Identifier = ST9160821A

Curiosamente la cadena que empieza por ST es el id de mi disco duro externo.

Te mandé el otro mensaje por que con esto último o a través de funciones windows te puede salir el resultado siguiente:
generic disk unit.

Espero que te sea útil.
Volver arriba
      Índice del Foro elrincondelc.com -> Windows
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com