Página 1 de 2
Leitura do Serial de Fabrica do HD x[H]arbour
Enviado: 28 Abr 2009 18:30
por sygecom
O exemplo
Exemplo de uso:
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)
Re: Leitura do Serial de Fabrica do HD x[H]arbour
Enviado: 03 Ago 2009 08:17
por TerraSoftware
Funciona em todos windows? Ou somente kernel NT?
Re: Leitura do Serial de Fabrica do HD x[H]arbour
Enviado: 24 Jan 2010 12:15
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...
Leitura do Serial de Fabrica do HD x[H]arbour
Enviado: 10 Nov 2010 15:23
por Pablo César
Compilado em Harbour e testado em WINXP e WIN98. Funciona normalmente.
Re: Leitura do Serial de Fabrica do HD x[H]arbour
Enviado: 26 Jan 2011 00:36
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
Leitura do Serial de Fabrica do HD x[H]arbour
Enviado: 10 Jul 2012 07:06
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é+
Leitura do Serial de Fabrica do HD x[H]arbour
Enviado: 10 Jul 2012 09:27
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.
Leitura do Serial de Fabrica do HD x[H]arbour
Enviado: 02 Fev 2015 19:02
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:
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)
Leitura do Serial de Fabrica do HD x[H]arbour
Enviado: 02 Fev 2015 22:37
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
Leitura do Serial de Fabrica do HD x[H]arbour
Enviado: 04 Fev 2015 12:12
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
Leitura do Serial de Fabrica do HD x[H]arbour
Enviado: 05 Fev 2015 12:44
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
Leitura do Serial de Fabrica do HD x[H]arbour
Enviado: 16 Fev 2015 18:53
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"....
Leitura do Serial de Fabrica do HD x[H]arbour
Enviado: 17 Fev 2015 00:48
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
Leitura do Serial de Fabrica do HD x[H]arbour
Enviado: 17 Fev 2015 15:46
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
Leitura do Serial de Fabrica do HD x[H]arbour
Enviado: 17 Fev 2015 18:10
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