PDA

Ver la Versión Completa : GetVolumeInformation


ogorut
09-12-2003, 12:17:24
Buenas a todos.
Estoy intentando poder sacar el número de serie de un disco duro de una unidad de red. Con la función GetVolumeInformation consigo obtenerla, pero no me funciona con W95, 98, Me.
Alguien sabe de alguna función o manera de poder sacarlo??

delphi.com.ar
09-12-2003, 15:58:07
Según la documentación, esta función tendría que funcionar en todos los Win9x.... ¿Cómo la estas utilizando?

ogorut
11-12-2003, 08:37:46
Para hacer una prueba creo la siguiente funcion:

function TForm1.GetVolumeSerialNumber(const drive: TFilename): DWord;
var
VolumeName, FileSystemName: array[0..MAX_PATH-1] of char;
VolumeSerialNumber, MaxFilenameLength, FileSystemFlags: DWord;
begin
GetVolumeInformation(PChar(drive),
VolumeName, MAX_PATH, @VolumeSerialNumber, MaxFilenameLength,
FileSystemFlags, FileSystemName, MAX_PATH);
Result := VolumeSerialNumber;
end;

En la documentación que he encontrado dice que funciona en plataforma win9x pero yo no lo consigo. Esta misma función en plataforma NT si funciona. Me refiero a obtener el número de serie de un disco duro de un equipo en red.

GetVolumeSerialNumber('c:\') si funciona pero no funciona si mapeo una unidad de red. En la documentación dice que hay que poner lo siguiente:

GetVolumeSerialNumber('\\servidor\carpeta\') o
GetVolumeSerialNumber('W') donde W es la unidad de red mapeada. Pero...a mi desde luego no me funciona, siempre me devuelve un 0(cero).

A ver si con esta explicación alguien me puede ayudar.

delphi.com.ar
11-12-2003, 15:37:40
Esto me ha funcionado en un Win98:
function GetVolumeSerialNumber(const ADrive: TFilename): DWord;
var
MaxCompLen,
FileSysFlags : Cardinal;
begin
Result := 0;
GetVolumeInformation(PChar(ADrive), nil, 0, @Result, MaxCompLen, FileSysFlags, nil, 0);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
// La unidad mapeada es F
Caption := IntToStr(GetVolumeSerialNumber('F'));
end;


Saludos!

ogorut
12-12-2003, 10:24:54
Bueno, he probado en Delphi 3 y 5, pero no funciona correctamente.
Una prueba que he hecho es en el equipo 1 hago un GetVolumeSerialNumber('C:\').
En el equipo 2 mapeo la unidad C:\ del equipo 1 (F por ejemplo) y hago en el equipo 2 GetVolumeSerialNumber('F') y no me dan valores iguales. Con lo cual no funciona.
Creo que se entiende bien. Esto me esta volviendo un poco loco.


Gracias Delphi.com.ar.

delphi.com.ar
12-12-2003, 15:03:46
Evidentemente no funciona, te recomendaría que busques en el MSDN si es posible hacer esto desde un Win9x... fíjate que he modificado la funcion, y de este modo retorna siempre 0.

Saludos!

Néstor
18-06-2004, 09:12:31
Hola
Por lo que he podido leer en este foro y por lo que he probado en mi programa,
GetVolumeInofrmacion no funciona cuando se trata de una unidad de red.
¿Alguién puede indicarme como podría obtener esta información? Si no existe posiblilidad, ¿Se puede optener el número de serie de la placa base de un equipo en red?

Gracias por vuestra ayuda.