Obtendo o modelo e número de série de um HD… No LINUX…

Um amigo está tentando obter informações sobre como obter dados de hardware na tentativa de elaborar um esquema de “proteção contra cópia”. Eu acho isso uma grande besteira, mas aqui vai uma dica para obter o número de série e o modelo de um HD, no Linux:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/hdreg.h>

int main(int argc, char *argv[])
{
  struct hd_driveid hd;
  int fd;

  /* Apenas root pode fazer isso! */
  if (geteuid() != 0) 
  {
    fprintf(stderrr, 
      "ERRO: Privilégio de root necessário!\n");
    return 1;
  }

  /* OBS: Se o parâmetro não for passado ele 
          será NULL, causando erro de open(). */

  if ((fd = open(argv[1], O_RDONLY|O_NONBLOCK)) == -1) 
  {
    fprintf(stderr, 
      "ERRO: Não posso abrir disposivivo %s\n", argv[1]);
    return 1;
  }

  if (!ioctl(fd, HDIO_GET_IDENTITY, &hd))
  { 
    printf("Modelo do HD    : %s\n"
           " Número de Série: %s\n", 
           hd.model, hd.serial_no);

    close(fd);
    return 0;
  }

  close(fd);

  perror("ERRO: HDIO_GET_IDENTITY");
  return 1;
}
Anúncios

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s