Capturar número de série do HD

Olá pessoal! Por favor, há alguma maneira, ou uma classe, que retorne o número de série do “HD”, placa mãe e/ou outros componentes de hardware? Ou poderia ser uma classe que faça a captura no número do volume da partição desejada.

Valeu!

Deixa eu advinhar: vc esta querendo fazer um sistema de protecao contra copia.

Nao faca.

Sim. Mas por quê? O que há de errado? É muito complicado?

Valeu.

Isso é uma idéia que seu chefe teve ou que você mesmo teve?

Resumindo, não importa o que vc faça, sempre vai ser possível burlar. Ainda mais em Java que vc descompila e vê todo o código limpinho, ofuscador ajuda mas não elimina o problema. A sua proteção é um bom contrato e um bom advogado.

Senão tivesse acontecido o problema com o banco de dados do GUJ eu listaria alguns tópicos sobre isso.

[]'s

Rodrigo C. A.

Em um projeto que pedia para olhar o número do HD e outras particularidades, o cara não queria exatamente uma “proteção contra cópias”, mas uma forma de não transferir os dados para uma outra máquina não-autorizada.

Quer dizer então, segurança zero?

Existem coisas em que é necessário bloquear.

Sou iniciante em java e agora mesmo estava procurando uma maneira de ocultar do usuário como é feita minha conexão com o mysql (p/ ele ñ conhecer o nome da minha base, user, nem senha) e ao mesmo tempo ñ gostaria de passar isso diretamente no código.

Mas mesmo que passasse direto no fonte quer dizer então que o cara pode conseguir esses dados??

Como vocês fazem quando precisam distribuir uma aplicação para algum cliente (coloque ai, alguns clientes, que vc ñ vai ter tempo de ficar fiscalizando se estão usando corretamente teu software) e não quer obrigar ele a mudar uma possível estrutura de base de dados talvez já existente só pra instalar teu sistema, mas ao mesmo tempo conseguindo garantir a segurança das informações com que teu sistema trabalha.

Desculpe encher o tópico com um monte de coisa, mas é uma dúvida que está me tirando o sono e já procurei bastante coisa á respeito.

Obrigado !

Acho que é por isso que uma boa parte das aplicações Java roda só no servidor, não no cliente. Se quer algo que rode no cliente, use Delphi :stuck_out_tongue:

Ou faça um sistema distribuído. Distribua só a UI em Swing e acesse o servidor por WebServices ou RMI.

[]'s

Rodrigo C. A.

Como disse sou iniciante. Poderia me indicar algum tutorial a respeito?

Então, pessoal. Há uma maneira de capturar o número de série dos Hardwares (HD por exemplo)? Uma vez me sugeriram que eu usasse a JNI (Java Native Interface). O que vocês acham?

Para obter o número de série do HD (aquele que aparece usando-se o dir: exemplo:

C>dir /p
 Volume in drive C is BELERIAND
 Volume Serial Number is CAFE-BABE

...

é fácil via JNI, basta chamar a API GetVolumeInformation. Só que você precisa saber um pouco de C (dá um bocado de trabalho, na verdade). Acho melhor você procurar isso na Internet e ver se alguém já tem isso pronto.

GetVolumeInformation

The GetVolumeInformation function retrieves information about a file system and volume that have a specified root directory.

BOOL GetVolumeInformation(
LPCTSTR lpRootPathName,
LPTSTR lpVolumeNameBuffer,
DWORD nVolumeNameSize,
LPDWORD lpVolumeSerialNumber,
LPDWORD lpMaximumComponentLength,
LPDWORD lpFileSystemFlags,
LPTSTR lpFileSystemNameBuffer,
DWORD nFileSystemNameSize
);

Parameters
lpRootPathName
[in] A pointer to a string that contains the root directory of the volume to be described.
If this parameter is NULL, the root of the current directory is used. A trailing backslash is required. For example, you would specify \MyServer\MyShare as \MyServer\MyShare, or the C drive as “C:”.

lpVolumeNameBuffer
[out] A pointer to a buffer that receives the name of a specified volume.
nVolumeNameSize
[in] The length of a volume name buffer, in TCHARs.
This parameter is ignored if the volume name buffer is not supplied.

lpVolumeSerialNumber
[out] A pointer to a variable that receives the volume serial number.
This parameter can be NULL if the serial number is not required.

Windows Me/98/95: If the queried volume is a network drive, the serial number is not returned.
lpMaximumComponentLength
[out] A pointer to a variable that receives the maximum length, in TCHARs, of a file name component supported by a specified file system.
A file name component is the portion of a file name between backslashes.

The value that is stored in variable pointed to by *lpMaximumComponentLength is used to indicate that long names are supported by a specified file system. For example, for a FAT file system that supports long names, the function stores the value 255, rather than the previous 8.3 indicator. Long names can also be supported on systems that use the NTFS file system.

Valeu Thingol!

Acho q nesse link vc encontra a solução pro seu problema:

http://www.guj.com.br/posts/list/91221.java

flw!