Page 1 of 1

Nº de Serie de una Storage Card

Posted: Wed Jul 19, 2006 6:51 pm
by jmartial
Antonio,

¿ Existe alguna manera de saber el numero interno de serie que el fabricante de una tarjeta de memoria SD, CF, etc. Le ha puesto al fabricarla?

Suelen servir para las garantías, por lo que son únicos (en teoría)



Un Saludo,
Joaquín

Posted: Wed Jul 19, 2006 7:21 pm
by Antonio Linares
Joaquín,

Es la primera noticia que tenemos de que las tarjetas SD tienen número de serie :)

Has probado a buscar en Google ?

Posted: Wed Jul 19, 2006 7:41 pm
by jmartial
Antonio,

Puedes probar esto?

h:=Fopen(curdir()+"\UnFileCualquieraenLaTarjeta")
msginfo( str(NumserieTarjeta(h)) )
Fclose(h)


-------------------------------------
HB_FUNC( NUMSERIETARJETA )
{
BY_HANDLE_FILE_INFORMATION bHinfo;

memset( &bHinfo, 0 , sizeof(bHinfo) );

GetFileInformationByHandle( (HANDLE) hb_parnl(1), &bHinfo );
hb_retnl( bHinfo.dwVolumeSerialNumber );

}


Un Saludo,
Joaquín

Posted: Wed Jul 19, 2006 8:43 pm
by Antonio Linares
Joaquín,

En la Pocket PC real aparece esto: 1068166675

Joaquín, por favor, acostúmbrate a proporcionar ejemplos completos, con lo que se agiliza mucho el soporte técnico, Gracias. Así:

Code: Select all

function Main()

   local h:=Fopen(curdir()+"\test.txt") 
   msginfo( str(NumserieTarjeta(h)) ) 
   Fclose(h) 

return nil

#pragma BEGINDUMP

#include <hbapi.h>
#include <windows.h>

HB_FUNC( NUMSERIETARJETA ) 
{ 
BY_HANDLE_FILE_INFORMATION bHinfo; 

memset( &bHinfo, 0 , sizeof(bHinfo) ); 

GetFileInformationByHandle( (HANDLE) hb_parnl(1), &bHinfo ); 
hb_retnl( bHinfo.dwVolumeSerialNumber ); 

}

#pragma ENDDUMP

Posted: Wed Jul 19, 2006 9:28 pm
by jmartial
Antonio,

Perdona por ejemplo incompleto, es que llevo toda la tarde amargado con este tema, intentaré hacerlo bien la próxima vez.

Resulta que probando ese mismo ejemplo en el PC el nº debería ser el mismo (introduciendo la tarjeta en un lector de tarjetas para PC) , pero me ocurre lo siguiente.

Si me devuelve un nº positivo, en el pc y en la pocket son el mismo, pero si es una tarjeta con un nº más largo, en el PC sale positivo bien, y en la pocket siempre me devuelve el -63947351. Usando diferentes tarjetas, con lo que deduzco que el valor de la pocket lo da incorrecto porque no quepa el valor en la estructura o algo parecido.


Se te ocurre que pude pasar? O como puedo hacer que en el miembro dwVolumeSerialNumber de la estructura quepa un valor mayor ?


El problema es que en pc siempre sale bien y en la pocket a veces devuelve ese nº porque no cabe o hay que convertirlo.

Por favor te pido, si pudieras echarme una mano en este aspecto.

Gracias por tu tiempo,
Joaquín

Posted: Thu Jul 20, 2006 9:43 am
by jmartial
Antonio,

Olvidaté del problema, al final toda la historia estaba en que existe un buffer de todos los medios extraibles, tanto en PC como en pocket.

Y Si estás insertando en el PC, copias algo, sacas, lo insertas en la pocket y así un montón de veces, incluso llegan a corromperse los datos de la tarjeta, aparte a que no das tiempo al sistema de hacer un volvado de los buffers al medio extraíble.


Un Saludo y Gracias,
Joaquín