Então a gente pode experimentar com essa funcao da API do windows.
BOOL GetVolumeInformation(
LPCTSTR lpRootPathName, // address of root directory of the file system
LPTSTR lpVolumeNameBuffer, // address of name of the volume
DWORD nVolumeNameSize, // length of lpVolumeNameBuffer
LPDWORD lpVolumeSerialNumber, // address of volume serial number
LPDWORD lpMaximumComponentLength, // address of system's maximum filename length
LPDWORD lpFileSystemFlags, // address of file system flags
LPTSTR lpFileSystemNameBuffer, // address of name of file system
DWORD nFileSystemNameSize // length of lpFileSystemNameBuffer
);
A chamada para ela é algo assim:
char label[11];
tipo_numerico_de_32bits serial, dirlen, flags;
GetVolumeInformation(“C:”, label, 12, serial, dirlen, flags, null, 0);
Está funcao vai retornar o serial do hd em hexadecimal.
Bem isso foi uma traduçao do que eu fazia em Delphi para java. Esse tipo_numerio_de_32bits tem que ser uma doubleword só que em java não sei que tipo de variavel tem 32 bits. Vcs que sacam mais testem ai chamar esse funcao atraves do JNI.
Esta funcao se encontra na KERNEL32.DLL