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)
-   -   Numero de Serie de un Disco Duro por la red (https://www.clubdelphi.com/foros/showthread.php?t=82378)

juank1971 01-03-2013 16:58:19

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;

Neftali [Germán.Estévez] 01-03-2013 18:58:07

Otras veces en los foros hemos hablado de WMI. Si buscas en los foros encontrarás bastante información.
Utilizando WMI puedes obtener toda la información que desees del ordenador.

Lo bueno de WMI, es que no sólo funciona sobre el ordenador local, sino que también puedes consultar parámetros de otras máquinas, siempre y cuando tengas las credenciales adecuadas.
Revisa este artículo "Conector to WMI on a remote compurter".

Yo creo que con esto ya puedes empezar a buscar.

en mi web tienes una librería de componentes que te pueden ayudar en este tema (GLibWMI)

juank1971 01-03-2013 21:11:14

gracias
 
Ok, gracias amigo si recuerdo que tu has estado activo en esos temas , lo que el primer vistazo que eche en mi maquina los glib que encontré eran para delphi 2009, hace unos años estuve probandolos , no pensé que se siguieras actualizando, y tampoco pensé que me funcionaran remoto.

Gracias.

Salud y pesetas para todos

Neftali [Germán.Estévez] 03-03-2013 20:50:20

Hola. No se trata de la librería GLib , que sí es un poco más antigua, sino de la GlibWMI (pacere que no soy muy original con los nombres ;) ), que está dedicada exclusivamente al trabajo con WMI.
Tal vez tengas que hacerles algún retoque, pero diría que no te darán problemas en las versiones nuevas de Delphi.
Para el tema de remoto échale un vistazo al código, y tal vez sólo tengas que cambiar un par de parámetros.
Si tienes problemas, ya dirás...


La franja horaria es GMT +2. Ahora son las 07:41:29.

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