Leitura do Serial de Fabrica do HD x[H]arbour

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Leitura do Serial de Fabrica do HD x[H]arbour

Mensagem por sygecom »

O exemplo
Exemplo de uso:

Código: Selecionar todos

Function Main()
alert(SERIAL_HD())
Return
Função de leitura do serial:

Código: Selecionar todos

******************
FUNCTION SERIAL_HD
******************
Local TDLL:=LoadLibrary("DiskSerial.dll"), RETPORTA1, lpBuffer:=SPACE(512)
IF TDLL=0
   RETURN("Erro na DLL")
   FreeLibrary( TDLL )
ENDIF
RETPORTA1:=DLLCALL(TDLL,32,"GetSerialNumber",0,@lpBuffer )
FreeLibrary( TDLL )
RETURN(lpBuffer)
Anexos
diskserial.zip
(26.46 KiB) Baixado 707 vezes
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
TerraSoftware
Usuário Nível 3
Usuário Nível 3
Mensagens: 353
Registrado em: 28 Jul 2004 13:14
Localização: Cianorte-PR
Contato:

Re: Leitura do Serial de Fabrica do HD x[H]arbour

Mensagem por TerraSoftware »

Funciona em todos windows? Ou somente kernel NT?
www.sisterra.com.br
xHarbour 1.0.0 - Bcc 6.3 - Gtwvw/Hwgui
DbfCdx/MySql
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Leitura do Serial de Fabrica do HD x[H]arbour

Mensagem por sygecom »

Desculpa a demora, não tinha visto essa mensagem acima, mas apenas para deixar registrado que até então venho usando apenas de Windows 2000 para cima, então não sei se funciona com Windows como 98 e 95, se alguem poder testar e postar o resultado aqui...
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Leitura do Serial de Fabrica do HD x[H]arbour

Mensagem por Pablo César »

Compilado em Harbour e testado em WINXP e WIN98. Funciona normalmente.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Leitura do Serial de Fabrica do HD x[H]arbour

Mensagem por lugab »

Testado no disco C com Harbour e xharbour e tudo ok.

Falta ver que serial q vai retornar num ambiente de rede, se o do disco C ou do servidor.

Ah, o nome correto da DLL é DISKSERI.DLL.

Obrigado Sygecom...

Gabriel
lugab
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Leitura do Serial de Fabrica do HD x[H]arbour

Mensagem por ANDRIL »

Pessoal, pelo visto o função acima postada pelo colega Sygecon funciona pelos posts dos colegas. Só lembrando que tudo que depender de leitura através de DLL, EXE e outros, são "manipulados" facilmente. Pode-se facilmente criar uma DLL com o mesmo nome e com uma unica funcao que le por exemplo um arquivo de texto e neste arquivo, basta definir o serial desejado e pronto acabou a segurança. E outra forma tambem seria alterar este registro que é lido, como se ve, está em uma base de dados que tambem pode ser manipulado.

Nossa vida de programador não é facil, alem de tudo que nós temos que cuidar, temos tambem a segurança anti-pirataria para nos preocuparmos.
Até+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
TerraSoftware
Usuário Nível 3
Usuário Nível 3
Mensagens: 353
Registrado em: 28 Jul 2004 13:14
Localização: Cianorte-PR
Contato:

Leitura do Serial de Fabrica do HD x[H]arbour

Mensagem por TerraSoftware »

Ola colegas.
Já faz bastante tempo que testei esta rotina. Ela realmente funciona muito bem, desde que o usuario do windows tenha privilégios de administrador, caso contrário, o retorno é vazio.
Com relação a segurança contra cópias piratas de nossos aplicativos, depois de anos trabalhando com isso, cheguei a conclusão de que nao existe um método totalmente seguro. O melhor então, é usar várias travas diferentes. E principalmente, induzir o fraudador por um caminho errado, deixando pistas falsas. Com um pouco de tempo e bastante criatividade (coisa que nao falta pra um bom programador, rs.) dá pra fazer umas coisas bem eficientes.
E é claro, tem que ficar sempre de olho, quando tiver evidencia de que alguma trava foi quebrada, tem que providenciar outra.
www.sisterra.com.br
xHarbour 1.0.0 - Bcc 6.3 - Gtwvw/Hwgui
DbfCdx/MySql
Avatar do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Leitura do Serial de Fabrica do HD x[H]arbour

Mensagem por Cavalo Marinho »

Sei que o post já é antigo, mas estou tentando testar o programinha do colega SYGECOMe não tem jeito de resolver a pendencia DLLCALL()
alguém poderia me dizer em qual biblioteca(lib) está esta rotina? estou usando minigui+harbour.
sygecom escreveu:O exemplo
Exemplo de uso:

Código: Selecionar todos

Function Main()
alert(SERIAL_HD())
Return
Função de leitura do serial:

Código: Selecionar todos

******************
FUNCTION SERIAL_HD
******************
Local TDLL:=LoadLibrary("DiskSerial.dll"), RETPORTA1, lpBuffer:=SPACE(512)
IF TDLL=0
   RETURN("Erro na DLL")
   FreeLibrary( TDLL )
ENDIF
RETPORTA1:=DLLCALL(TDLL,32,"GetSerialNumber",0,@lpBuffer )
FreeLibrary( TDLL )
RETURN(lpBuffer)
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Leitura do Serial de Fabrica do HD x[H]arbour

Mensagem por fladimir »

Código: Selecionar todos

*-- Para Harbour
#include 'hbdyn.ch' //Necessario para trabalhar com a hb_dyncall
#include 'hbcompat.ch'

function SerialHD()

   local tDLL, RETPORTA1, lpBuffer:=SPACE(512)

   tDLL:=hb_LibLoad("DiskSerial.dll")
   if TDLL == NIL  // Nao carregou a Dll
       hb_LibFree( TDLL ) //Libera a DLL
       return 'Erro na DLL'
   endif

   RETPORTA1 := hb_dynCall( { "GetSerialNumber",    tDLL, HB_DYN_CALLCONV_STDCALL}, 0, @lpBuffer)
	
   lpBuffer := Left(TiraEspacos(lpBuffer), 14)
	
   hb_LibFree( TDLL ) //Libera a DLL

return lpBuffer

***********************************************
function TiraEspacos(Arg1)
   Arg1 := Alltrim(Arg1)
   Arg1 := StrTran(Arg1, CHR(0),"")
return Arg1

Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Leitura do Serial de Fabrica do HD x[H]arbour

Mensagem por Cavalo Marinho »

Há algo de errado com esta rotina, pois a cada leitura que ser faz vem um serial diferente, fiz um pequeno teste e a cada click do botão retorna um serial diferente, alguém poderia ver o que esta havendo, não tenho conhecimento desta DLL. anexei os fontes
Anexos
serial.prg
(881 Bytes) Baixado 153 vezes
serial.prg
(881 Bytes) Baixado 134 vezes
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Leitura do Serial de Fabrica do HD x[H]arbour

Mensagem por fladimir »

Eu olhei seu PRG e com relação a rotina q pega o Serial do HD via Dll esta correta, da mesma forma q eu uso aki e não tenho problemas.

Agora o q eu pensei é o seguinte, será q no teu caso qdo vc carrega no objeto do MINIGUI pra exibir ele não esta mostrando somente os Nrs?

Pq na verdade o serial é Caracter ele pode conter Números e Letras.

Fora isto não sei o q pode ser, pq em modo console q uso a rotina e tb no visual (uso outra lib gráfica) não tive problemas.

[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Leitura do Serial de Fabrica do HD x[H]arbour

Mensagem por bencz »

Boa tarde.

Hoje temos a possibilidade de pegar as informações do volume, usando O.L.E...

"SELECT * FROM Win32_PhysicalMedia", não sei como utilizar em harbour, mas utilizo bastante em C++
Encontrei esse tutorial em C# que apresenta como utilzar também...
http://www.codeproject.com/Articles/607 ... axed&fr=26


Andril, utlizando esse método... não tem como a pessoa "criar uma dll que retorne um serial invalido"....
Imagem
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Leitura do Serial de Fabrica do HD x[H]arbour

Mensagem por fladimir »

Seguinte agora não entendi mais nada... abaixo segue sua dica retornando em Harbour o Nr Serial do HD sem precisar de Dll

Código: Selecionar todos

//------------------------------------------------------------------------------
procedure TesteHD()
	local oWmiService, oListaProcess, oDisk

   oWmiService := Service_WMI()
	oListaProcess := oWmiService:ExecQuery('Select * from Win32_PhysicalMedia')
	FOR Each oDik in oListaProcess
 	   alert(oDisk:SerialNumber)
	NEXT

RETURN 
Porém....

Se uso a Dll retorna assim: 2SQR9JCA019417

Se uso digamos "nativo" sem Dll retorna: S2RQJ9AC104971

Observe q se compararmos 1 com o outro a cada par de caracteres esta INVERTIDO...

Agora como eu sei qual é o correto?

[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Leitura do Serial de Fabrica do HD x[H]arbour

Mensagem por bencz »

Fladimir, boa tarde, existe um problema, e a Microsoft tem conhecimento disso.

https://connect.microsoft.com/VisualStu ... ndard-user

Bom, mas a solução para isso é simples, você precisa fazer um "SwapChars"
Veja este código, postado pelo Sr. CorySmith, para fazer esse inversão...

Código: Selecionar todos

Private Shared Function SwapChars(ByVal chars() As Char) As String
  For i As Integer = 0 To chars.Length - 2 Step 2
    chars.Reverse(chars, i, 2)
  Next
  Return New String(chars).Trim
End Function
Imagem
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Leitura do Serial de Fabrica do HD x[H]arbour

Mensagem por fladimir »

Ok Benz fiz a o Swap e apareceu correto, porém meu aplicativo qdo fecha da um erro, ou seja, se utilizo esta função na hora q fecha o sistema dá um erro APPCRASH

Código: Selecionar todos

Function TesteHD()
	LOCAL oWmiService, oListaProcess, oProcessos,;
	cSerial := '', cSerialNew := ''

	oWmiService := Service_WMI()
	oListaProcess := oWmiService:ExecQuery('Select * from Win32_PhysicalMedia')
	FOR Each oProcessos in oListaProcess
 	   cSerial := oProcessos:SerialNumber
 	   exit
	NEXT
	
	*-- Faz Swap Char para SO Vista ou Higher	(colocar função para identificar o SO, tipo if Vista or Higher faz o Swap)
	For i := 1 To len(cSerial) 
		if i%2 !=0 // impar
			cSerialNew += substr(cSerial, i+1, 1)
	      cSerialNew += substr(cSerial, i, 1)
      endif
	 Next

RETURN cSerialNew
[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Responder