Numero de Seria do HD

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

reunix
Usuário Nível 1
Usuário Nível 1
Mensagens: 1
Registrado em: 24 Jan 2007 12:38

Numero de Seria do HD

Mensagem por reunix »

Olá pessoal sou novato no forum, e ja estou com duvidas, heh

alguem tem uma rotina pra capturar o Nº de serie do HD, mas veja bem...
é o nº de serie do HD nao o Nº de serie do Volume do HD

para capturar o num. serie do volume do HD em tenho, mas na verdade eu queo o nº de serie do HD q vem registrado nele propriamente dito.
Agradeco a colaboração de todos, URGENTE :(
T+
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Mensagem por Augusto »

Se vc está se referindo ao N/S que está na "etiqueta" afixada no lado de fora do HD.... Acho muito difícil que vc consiga um programa prá ler esse número... até prq, salvo engano, aquela etiqueta é colocada na linha de montagem do HD e serve, entre outras coisas, pro fabricante identificar a autenticidade do produto sem que, necessariamente, ele tenha que ser instalado em alguma máquina...

Mais como tem "maluco" com resposta prá tudo nesse nosso Fórum... Vá em frente... Continue perguntando...
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Numero de Seria do HD

Mensagem por Maligno »

reunix escreveu:alguem tem uma rotina pra capturar o Nº de serie do HD
Leia a thread a respeito da LIB WAPI. Ou, melhor ainda, baixe a LIB e leia o README que a acompanha (há algumas restrições de uso da função de leitura dos dados do HD).
Por meio dela você pode obter esse número de série de forma bem simples:

Código: Selecionar todos

? "Serial#: " + GetHDInfo()[2]
?
Download: http://buzinello.com/download/wapi.zip

[]'s
Maligno
http://www.buzinello.com/prg
keler clipper
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 09 Jan 2007 13:49
Localização: Brasil
Contato:

Mensagem por keler clipper »

Ola, td bem, tb sou novato aki.
Ja passei por esse tipo de problema e eh possivel resolver sem usar nenhuma biblioteca adicional. Veja o codigo seguinte:

// Keler Melo 44.9944-1535
// Retorna o numero de serie do hd
// Funcao para ms-dos e windows x.x
function vol_serial( cDisk )
local cScr, cCommand, nLen, cDiskName
local nHand, cBuffer, cPointer, nPointer, cSerial

// Inicializa variaveis
cScr := savescreen( 0,0,24,80 )
cCommand := 'vol > swap.tmp'
nLen := 9
cPointer := 'do volume'
nPointer := 0
cSerial := space( nLen )

// Trica o disco
cDiskName := DiskName()
if !DiskChange( cDisk ) // Clipper 5.3
return 'disk error'
end

// Verifica protecao de arquivo
if file( 'swap.tmp' )
delete file 'swap.tmp'
if file( 'swap.tmp' )
return 'file error: protection activated'
end
end

// Testa abertura do arquivo
run ( cCommand )
if !file( 'swap.tmp' )
return '-1 ( file not found )'
end
nHand := fopen( 'swap.tmp' )
if nHand < 0
return 'file error:' + ltrim( str( ferror() ) )
end
fclose( nHand )

// Testa leitura do arquivo
cBuffer := memoread( 'swap.tmp' )
if (cBuffer=="")
return 'file empty:' + ltrim( str( ferror() ) )
end
nPointer := at( cPointer, cBuffer ) + len( cPointer ) + 3
cSerial := substr( cBuffer, nPointer, 9 )

// Fecha recursos, retorna o disco e devolve o serial
delete file 'swap.tmp'
DiskChange( cDiskName )
restscreen( 0,0,24,80 )

return cSerial
Keler Clipper.Net
Programador/Analista
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Ja passei por esse tipo de problema e eh possivel resolver sem usar nenhuma biblioteca adicional.
Infelizmente você está errado. É impossível resolver esse problema sem o uso de uma biblioteca adicional.
Releia a mensagem e note: nosso colega pediu o número de série de fábrica, não o da formatação, que é o o que seu código retorna. Número que aliás, nem é de serialização, mas de identificação. O DOS/Windows cria este número através de uma simples técnica de "scrambling".
E mesmo este número da formatação, há uma forma mais fácil através de uma simples função. Tenho na minha página, caso queira.

[]'s
Maligno
http://www.buzinello.com/prg
keler clipper
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 09 Jan 2007 13:49
Localização: Brasil
Contato:

Mensagem por keler clipper »

:D Correto. Grato pelo programa. :D
Keler Clipper.Net
Programador/Analista
diogenes_varela
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 04 Nov 2006 19:33
Localização: Brasília - DF

Mensagem por diogenes_varela »

Maligno escreveu:
O DOS/Windows cria este número através de uma simples técnica de "scrambling".
Amigo Maligno (que nome, heim?)

Sabe me dizer se há uma seqüência lógica na numeração, pois o mesmo muda a cada formatação.

Isso seria útil no caso do cliente formatar a máquina e o programa só liberar a reinstalação para o serial previsto.

Qto. a forma mais simples de obter o serial, na minha opinião é redirecionar o comando VOL do DOS para um arquivo de texto e depois extraí-lo, usando o comando MEMOREAD() do clipper.
Os computadores não sabem o que fazem. Nós, na maioria das vezes, também não...

E disse ao Programador: "Todos os teus programas terão erros e irás corrigi-los até ao fim dos teus dias". Gen. 1:9
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

diogenes_varela escreveu:Amigo Maligno (que nome, heim?)
Não é o meu nome. É só um apelido.
Sabe me dizer se há uma seqüência lógica na numeração, pois o mesmo muda a cada formatação.
O algoritmo de "scrambling" utilizado pela Microsoft (logo abaixo) não utiliza qualquer tipo de seqüenciamento que não a data e hora. A lógica do "scrambler" é apenas e tão somente misturar esses dados, obtidos no momento da formatação.

Código: Selecionar todos

Get date (INT 21h, AH=2Bh)
Get time (INT 21h, AH=2Ch)
Serial_ID+0 = DX reg date + DX reg time
Serial_ID+2 = CX reg date + CX reg time
Serial_Num_Low = Serial_ID+2
Serial_Num_High = Serial_ID+0
Isso seria útil no caso do cliente formatar a máquina e o programa só liberar a reinstalação para o serial previsto.
Com base neste algoritmo do cálculo, impossível. Mas há outras formas, bem melhores, de revalidar um licenciamento.
Qto. a forma mais simples de obter o serial, na minha opinião é redirecionar o comando VOL do DOS para um arquivo de texto e depois extraí-lo, usando o comando MEMOREAD() do clipper.
Uma gambiarra pelo comando VOL não pode ser mais simples que GetVolSerN([<drive>]).
Conforme eu comentei, há um objeto na minha página que contém duas funções. A de leitura do serial, que funciona em qualquer Windows e em DOS puro, e a de escrita (SetVolSErN([<drive>],<serial>)), que só não funciona em kernel NT, claro.

[]'s
Maligno
http://www.buzinello.com/prg
diogenes_varela
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 04 Nov 2006 19:33
Localização: Brasília - DF

Mensagem por diogenes_varela »

Caro amigo Maligno

Claro que sei que não é o seu nome, excuse-me...

Obrigado pelos esclarecimentos.

É que sempre quis bolar uma forma de vender um programa, o cliente instalar e, como sempre há o problema da formatação, controlar através de alguma informação originária da máquina, liberando a reinstalação somente na mesma.

Baixei o obj a que você se referiu. Só não entendo porque você acha mais simples do que um uma "gambira" com apenas duas linhas.
Os computadores não sabem o que fazem. Nós, na maioria das vezes, também não...

E disse ao Programador: "Todos os teus programas terão erros e irás corrigi-los até ao fim dos teus dias". Gen. 1:9
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Claro que sei que não é o seu nome, excuse-me...
Esclareci porque já houve quem me perguntasse se era meu nome. 8-)
É que sempre quis bolar uma forma de vender um programa
O assunto de proteção de programa é praticamente inesgotável. Se procurar, deve encontrar várias threads em que trataram desse assunto. Mas se quiser, abra um novo tópico para colher as opiniões dos colegas.
Baixei o obj a que você se referiu. Só não entendo porque você acha mais simples do que um uma "gambira" com apenas duas linhas.
Apenas duas linhas de código mas um razoável overhead para o programa, já que será necessário, primeiro fazer um swap do programa para a memória em disco ou RAM (dependendo do linker), e depois ainda invocar uma cópia do interpretador para que o VOL seja interpretado e executado. Ao final, restaurar a memória. Nada contra, até porque isso não é o fim do mundo. O próprio WAPI exige isso, se bem que para operações que realmente não podem ser feitas pelo Clipper.
Mas se você tem a oportunidade de economizar recursos com uma simples função, me parece claro que o uso do comando RUN (ou SwpRunCmd(), conforme o caso) não só desperdiça recursos como também acrescenta uma complexidade desnecessária. Sem falar que o retorno da função ainda pode ser utilizada dentro de uma expressão complexa ou mesmo ser atribuída diretamente a um campo/variável.

[]'s
Maligno
http://www.buzinello.com/prg
diogenes_varela
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 04 Nov 2006 19:33
Localização: Brasília - DF

Mensagem por diogenes_varela »

Uma discussão em tão alto nível é realmente enriquecedora! Obrigado. Sugestão do tópico aceita. Já foi criado.

Você me fez lembrar que no caso da reinstalação não há tanto que se preocupar com o tamanho da carga, isso seria mais durante o uso do programa.

abraços.
Os computadores não sabem o que fazem. Nós, na maioria das vezes, também não...

E disse ao Programador: "Todos os teus programas terão erros e irás corrigi-los até ao fim dos teus dias". Gen. 1:9
Responder