Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Obtener el ID hardware (No. de serie) de la memoria USB (https://www.clubdelphi.com/foros/showthread.php?t=64774)

jagjag 18-04-2009 01:51:09

Obtener el ID hardware (No. de serie) de la memoria USB
 
Hola a todos y gracias por la ayuda que me puedan proporcionar.

Les quiero preguntar si alguien de ustedes sabe como obtener el ID hardware de las memorias USB.

Se que es con alguna api de Windows, pero no se cual ni como se haria esto.

En los sistemas oprativos como Windows XP o Vista, si uno ve en el administrador de dispositivos, en Controladoras de Bus Serie Universal, nos aparece Dispositivo de Almacenamiento USB (o sea la memoria USB), al darle chick derecho en propiedades, e irnos a DETALLES, en Propiedad si seleccionamos el ID de Hardware nos aparece el ID de fabrica de la memoria USB, quiero saber la manera de poderlo obtener mediante una forma en delphi 6.
Ya me di muchas vueltas en los foros pero no aparece nada de esto que requiero.

Espero sus respuestas y gracias por su amabilidad y atencion

Mav 18-04-2009 19:35:21

Id de hardware
 
Puede que te sirva esto:
Código Delphi [-]
var
query:array[0..11] of byte = (00, 00, 00, 00, 00, 00, 00, 00, 00, 08, 00, 00);
type
 Storage_Bus_Type = ( BusTypeUnknown, BusTypeScsi, BusTypeAtapi, BusTypeAta,
                     BusType1394, BusTypeSsa, BusTypeFibre, BusTypeUsb, BusTypeRAID );

type
PSTORAGE_DEVICE_DESCRIPTOR=record
Version:dword;
Size:dword;
DeviceType:UCHAR;
DeviceTypeModifier:UCHAR;
RemovableMedia:BOOLEAN;
CommandQueueing:BOOLEAN;
VendorIdOffset:dword;
ProductIdOffset:dword;
ProductRevisionOffset:dword;
SerialNumberOffset:dword;
BusType:STORAGE_BUS_TYPE;
RawPropertiesLength:dword;
RawDeviceProperties:array[1..500]of CHAR;
end;

function getValue(buf:PSTORAGE_DEVICE_DESCRIPTOR;offs:dword  ):string;
var
mas:array[0..255] of char;
begin
if offs=0 then exit;
asm
push eax
push ebx
push edx
push esi
push edi
xor edi,edi
xor esi,esi
mov esi,offs
lea edx,buf
lea ebx,mas
@m1:
mov al,[edx+esi]
mov [ebx+edi],al
inc edi
inc esi
cmp al,0
jne @m1
pop edi
pop esi
pop edx
pop ebx
pop eax
end;
result:=string(mas);
end;

function NUM(s:string):boolean;
begin
result:=true;
case s[1] of
'0'..'9','A'..'F','a'..'f':;
else result:=false;
end;
case s[2] of
'0'..'9','A'..'F','a'..'f':;
else result:=false;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
hDevice:THANDLE;
status:BOOLean;
returnedLength:ULONG;
devDesc:pSTORAGE_DEVICE_DESCRIPTOR;
s,ss:string;
c:char;
x,y:integer;
begin
stringgrid1.Rows[stringgrid1.RowCount].Clear;
stringgrid1.Cells[0,0]:='Disk';
stringgrid1.Cells[1,0]:='VendorId';
stringgrid1.Cells[2,0]:='ProductId';
stringgrid1.Cells[3,0]:='ProductRev';
stringgrid1.Cells[4,0]:='Accommodation';
stringgrid1.Cells[5,0]:='SerialNumber';
x:=1;
for c:='A' to 'Z' do begin
hDevice:=CreateFile(pansichar('\\.\'+c+':'), GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ + FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
status:=DeviceIoControl( hDevice, $002d1400, @query, sizeof(query), @devDesc, 512, cardinal(returnedLength), nil );
if status then
 begin
   stringgrid1.Cells[0,x]:=c;
//   if (devDesc.RemovableMedia) then memo1.Lines.Add('Removable Media');
   stringgrid1.Cells[1,x]:=getValue(devDesc,devDesc.VendorIdOffset);
   stringgrid1.Cells[2,x]:=getValue(devDesc,devDesc.ProductIdOffset);
   stringgrid1.Cells[3,x]:=getValue(devDesc,devDesc.ProductRevisionOffset);  
   case devDesc.BusType of
     BusTypeUnknown:s:='Unknown';
     BusTypeScsi:s:='SCSI';
     BusTypeAtapi:s:='ATAPI';
     BusTypeAta:s:='ATA';
     BusType1394:s:='IEEE 1394';
     BusTypeSsa:s:='SSA';
     BusTypeFibre:s:='FIBRE';
     BusTypeUsb:s:='USB';
     BusTypeRAID:s:='RAID';
    end;
   stringgrid1.Cells[4,x]:=s;
   ss:=getValue(devDesc,devDesc.SerialNumberOffset);
   s:='';
   for y:=1 to length(ss) div 2 do
    begin
    if not NUM(copy(ss,y*2-1,2)) then break;
    s:=s+chr(strtoint('$'+copy(ss,y*2-1,2)));
    end;
   stringgrid1.Cells[5,x]:=s;
   inc(x);
  end;
end;
end;

end.
Saludos..:)

Khronos 20-04-2009 13:09:45

Creo que la API GetVolumeInformation te servira.

Saludos.

Chogo 20-04-2009 18:39:14

¿no se pierde el id al formatear la usB?.

jagjag 20-04-2009 21:55:22

Gracias Mav
 
Muchas gracias por tu respuesta, pero no me da la informacion que requiero, sigue sin darme el ID Hardware de la memoria USB.

Sigo investigando y espero que me puedan hechar la mano.
Gracias a Todos

jagjag 20-04-2009 22:51:26

Ya tambien vi lo del volumen
 
Ya revise tambien otro que es el api para obtener el volumen de la usb, pero no me sirve por que si se formatea la memoria se pierde el volumen.

Necesito el numero de hardware que aunque se formatee la unidad este numero no se pierda

jagjag 20-04-2009 23:27:58

Pues ya investigando
 
Ya revisando, al parecer las memorias no tienen un id de identificacion de hardware, ya que vi que el id que aparece es el que te pone el sostema operativo, mas no es el que tienen las USB.

Asi que al parecer no se puede sacar por que no existe como tal. BBBuuuuuuu
Gracias

cHackAll 21-04-2009 16:37:10

:rolleyes:

charlyalize 04-11-2014 00:46:58

Hola amigos¡¡¡
Se que este tema es viejo pero me gustaría implementarlo como demonio para licenciar el acceso a una pagina web¡¡¡

si todavía lo tienen se lo agradezco¡¡¡

Saludos...
Charly¡¡¡

Casimiro Notevi 04-11-2014 01:03:16

Cita:

Empezado por charlyalize (Mensaje 484182)
Hola amigos¡¡¡

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)

Por favor, crea un hilo nuevo, no tiene mucho que ver lo que has preguntado con esto, gracias.


La franja horaria es GMT +2. Ahora son las 23:14:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi