Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 26-10-2016
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Por si fuera de interés, he estado experimentando otras vía más directa para obtener el número de serie que también trabaja con HD pero que no me convence porque no encuentra los números de serie USB en WinXP en las memorias que he probado y en Win10, al menos en una de ellas, cambia el último dígito del mismo al compararlo con el dato encontrado en el registro de Windows. Se basa en el uso de IOCTL. Otra posibilidad puede ser con WMI.

Código Delphi [-]
const
IOCTL_STORAGE_QUERY_PROPERTY = $2D1400;
     
type
PSTORAGE_DEVICE_DESCRIPTOR = ^STORAGE_DEVICE_DESCRIPTOR;
STORAGE_DEVICE_DESCRIPTOR = packed record
  Version: ULONG;
  Size: ULONG;
  DeviceType: UCHAR;
  DeviceTypeModifier: UCHAR;
  RemovableMedia: Boolean;
  CommandQueueing: Boolean;
  VendorIdOffset: ULONG;
  ProductIdOffset: ULONG;
  ProductRevisionOffset: ULONG;
  SerialNumberOffset: ULONG;
  BusType: ULONG;
  RawPropertiesLength: ULONG;
  RawDeviceProperties: array[0..0] of UCHAR;
end;
     
PSTORAGE_PROPERTY_QUERY = ^STORAGE_PROPERTY_QUERY;
STORAGE_PROPERTY_QUERY = record
  PropertyId: DWORD;     // StorageDeviceProperty = 0
  QueryType: DWORD;      // PropertyStandardQuery = 0
  AdditionalParameters: array[0..0] of UCHAR;
end;
     
function GetSerialNumber(Volume: Char; var SerialNumber: string): BOOL;
var
  hFile: THANDLE;
  SPQ: STORAGE_PROPERTY_QUERY;
  SDD: STORAGE_DEVICE_DESCRIPTOR;
  PSDD: PSTORAGE_DEVICE_DESCRIPTOR;
  Size: DWORD;
begin
  Result:= FALSE;
  SerialNumber:= '';
  hFile:= CreateFile(PAnsiChar('\\.\' + Volume + ':'),0,0,nil, OPEN_EXISTING, 0, 0);
  if hFile <> INVALID_HANDLE_VALUE then
  begin
    ZeroMemory(@SPQ, sizeof(SPQ));
    if DeviceIoControl(hFile, IOCTL_STORAGE_QUERY_PROPERTY, @SPQ, sizeof(SPQ), @SDD, sizeof(SDD), Size, nil) then
    begin
      PSDD:= VirtualAlloc(nil, SDD.Size, MEM_COMMIT, PAGE_READWRITE);
      ZeroMemory(PSDD, SDD.Size);
      if DeviceIoControl(hFile, IOCTL_STORAGE_QUERY_PROPERTY, @SPQ, sizeof(SPQ), PSDD, SDD.Size, Size, nil) then
      begin
        if PSDD.SerialNumberOffset <> 0 then
          SerialNumber:= String(PCHAR(PSDD) + PSDD.SerialNumberOffset);
      end;
      VirtualFree(PSDD, 0, MEM_RELEASE);    
    end;
    CloseHandle(hFile);
  end;
  Result:= Length(SerialNumber) <> 0;
end;


Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Obtener el Número Serie de Fabrica USB MAXIUM Varios 10 04-11-2014 01:29:00
Obtener el numero de serie del disco giulichajari C++ Builder 6 30-07-2013 18:58:25
obtener el número de serie de un disco duro serial ATA mgc API de Windows 4 27-03-2009 15:54:18
Número de serie de un PenDrive Rudi Varios 2 05-09-2007 13:59:17
Como obtener el número de serie de la mother board saul_fg API de Windows 1 11-03-2007 07:49:51


La franja horaria es GMT +2. Ahora son las 03:22:34.


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
Copyright 1996-2007 Club Delphi