Ver Mensaje Individual
  #1  
Antiguo 01-03-2013
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Reputación: 17
juank1971 Va por buen camino
Numero de Serie de un Disco Duro por la red

Hola amigos hace tiempo no andaba por el foro, me complace ver que delphi siempre va ganando terreno, a pesar que hay tanto mundo informático tratando de absorber todas las formas de programación. Pero me quedo con delphi creo que lo AMO.

Disculpe la muela salida de tema, estoy nostálgico hoy.

Estoy haciendo una aplicación que controla todas las computadoras de mi red 73, Red local, dentro de muchas cosas que hago muy particulares de mis servidores y mis Software montados, ahora necesito incorporar algunos temas de HardWere , entonces necesito aplicar algunos de los componentes y funciones que se tratan en los foros para números de serie por ejemplo del disco duro etc, pero en la red.? me dan alguna idea?.

tengo delphi XE, por ejmplo esta función sacada de los trucos con algunos cambios como cambiar pchar por pansichar , funciona perfecta en la maquina local, y me da el numero de serie físico del disco ,hay que poner PHYSICALDRIVE0 para que devuelva el serie físico sino devuelve el serial lógico que se pierde con el formateo, necesito esta función para la red, teniendo en cuenta que soy el administrador y tengo las claves de administrador del dominio y las IP de todas las Maquinas.

Discúlpenme si me falta algo por decir para un mejor entendimiento de mi pregunta o si no estoy preguntando en el foro correcto, me dicen y rectifico al instante.

Gracias a todos


Código Delphi [-]

function GetSerialNumber(Letra: Char; var VendorId: string; var ProductId: string;
  var SerialNumber: string; var Extraible: Boolean): string;
var
  Disk: THandle;
  Size: Cardinal;
  Buffer: Pointer;
  DeviceDescriptor: PSTORAGE_DEVICE_DESCRIPTOR;
begin
  Result:= EmptyStr;
  Disk:= CreateFile(PChar('\\.\PHYSICALDRIVE0'),GENERIC_READ,FILE_SHARE_READ
 // Disk:= CreateFile(PChar('\\.\' + Letra + ':'),GENERIC_READ,FILE_SHARE_READ
    or FILE_SHARE_WRITE,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  if Disk <> INVALID_HANDLE_VALUE then
  begin
    GetMem(Buffer,12);
    try
      FillChar(Buffer^,12,0);
      if DeviceIOControl(Disk, IOCTL_STORAGE_QUERY_PROPERTY,
        Buffer,12,Buffer,12,Size, nil) then
      begin
        FreeMem(Buffer);
        Size:= PSTORAGE_DESCRIPTOR_HEADER(Buffer).Size;
        GetMem(Buffer, Size);
        FillChar(Buffer^,Size,0);
        if DeviceIOControl(Disk, IOCTL_STORAGE_QUERY_PROPERTY,
          Buffer,12,Buffer,Size,Size, nil) then
          begin
            DeviceDescriptor:= Buffer;
            Extraible:= DeviceDescriptor.RemovableMedia;
            if DeviceDescriptor.VendorIdOffset > 0 then
              VendorId:= String(PChar(Buffer) + DeviceDescriptor.VendorIdOffset)
            else
              VendorId:= EmptyStr;
            if DeviceDescriptor.ProductIdOffset > 0 then
              ProductId:= String(PansiChar(Buffer) + DeviceDescriptor.ProductIdOffset)
            else
              ProductId:= EmptyStr;
            if (DeviceDescriptor.SerialNumberOffset > 0) and
               (DeviceDescriptor.SerialNumberOffset < Size) then
              SerialNumber:= String(PansiChar(Buffer) + DeviceDescriptor.SerialNumberOffset)
            else
              SerialNumber:= EmptyStr;
          end else Result:= SysErrormessage(GetLastError);
      end else Result:= SysErrormessage(GetLastError);
    finally
      FreeMem(Buffer);
    end;
    CloseHandle(Disk);
  end else Result:= SysErrormessage(GetLastError);
end;
Responder Con Cita