| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
alfredxx
Registrado: 20 Mar 2009 Mensajes: 1 Ubicación: México DF
| Publicado: 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.
| Publicado: 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.
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |