Fórum FireBird ID interno instalacao #60891
25/09/2009
0
Mjcramos
Curtir tópico
+ 0Posts
25/09/2009
Afarias
|instalação do servidor,
Não
|estou criando uma rotina de validação de dados para um sistema de
|automação comercial que possuo em delphi/firebird 2.1 no caso esta
|rotina teria que pegar esta informação dentro da base de dados tipo com
|um select e o cliente me passaria este codigo, dai eu geraria uma
|contrasenha utilizando esta informação, o sistema teria que a cada
|acesso comparar o que esta gravado com o código que foi passado, caso
|ambos nao sejam iguais no momento do logon ele já abortaria o acesso,
|(isso quer dizer que a base de dados foi copiada pra outra maquina e eu
|nao estou sabendo) no caso a minha licensa é por servidor e nao por
|maquina caso contrario poderia optar por alguma solucao tipo rdacesso
Vc pode implementar um sistema de licenciamento central
|tambem serviria uma rotina onde o firebird pegue o serial do HD mas dai
|teria que ser o próprio banco de dados extrair essa informaçao.
Isto é possível com uma UDF
T+
Gostei + 0
25/09/2009
Mjcramos
library VolUDF;
{ Important note about DLL memory management: ShareMem must be the
first unit in your library´s USES clause AND your project´s (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
uses
ShareMem,
Windows,
SysUtils,
Classes;
//Implementação
Function VOLINFO : Integer; stdcall;
var
Serial: PDWORD;
Volume: PChar;
FSSysFlags,ComponentLen:DWord;
FSBuf:PChar;
begin
Result := 3;
try
GetMem(Volume, MAX_PATH);
GetMem(FSBuf, MAX_PATH);
GetMem(Serial, MAX_PATH);
GetVolumeInformation(nil, Volume, MAX_PATH, Serial,
ComponentLen, FSSysFlags, FSBuf, MAX_PATH);
Result := Serial^;
except
Result := 2;
end;
end;
{$R *.res}
// funcoes exportadas
exports
VOLINFO;
begin
end.
Gostei + 0
26/09/2009
Afarias
Outra coisa, se vc programar uma UDF em Delphi, é bom q faça compatível com algum compilador Pascal para Linux (ex: FPC) ou sua solução vai funcionar apenas para servidores Windows. Sem contar q o Delphi não possui compilador 64 bits, de forma que sua solução só vai funcionar para FB 32bit.
Outra coisa q existem direrenças entre UDFs para FB antigo (pré-V2) e atual quanto a como lidar com valores NULL.
|uses
|ShareMem,
ShareMem não serve de nada aqui.
Se for alocar memória compartilhada com o Firebird (resultados varchar declarado com free it por exemplo) vc tem q alocar a memória usando o mesmo gerenciador de memória que o FB foi compilado.
Vc pode usar [b:c04c58ffe2]ib_util_malloc()[/b:c04c58ffe2] para isso OU (msvcrt) [b:c04c58ffe2]malloc[/b:c04c58ffe2] -- (apenas para Windows)
|Function VOLINFO : Integer; stdcall;
Hummm... acredito que o correto aqui é [b:c04c58ffe2]cdecl[/b:c04c58ffe2] e não stdcall
|GetMem(Serial, MAX_PATH);
|{...}
|Result := Serial^;
Como disse, aqui vc *tem* q usar ib_util_malloc ou malloc para alocar memória compartilhada com o FB
Se for realmente partir para esta solução, sugiro que dê uma lida em material sobre como programar UDFs para Firebird ou simplesmente menos estude um código fonte exemplo em Delphi/FPC
T+
Gostei + 0
26/09/2009
Afarias
...Em lugar de usar o ´id´ do HDD vc pode usar o ´id´ da placa de rede do servidor??
Pq ai neste caso, vc pude usar 2 funções da FreeAdhocUDF para obter esta informação:
F_UUID1MAC -- retorna um UUID baseado na NIC e data/hora
F_UUID1MACMAC -- permite vc extrair apenas o ´id´ da NIC a partir do resultado da função anterior
ou seja, vc poderia ter algo assim:
select F_UUID1MACMAC(F_UUID1MAC()) from rdb$database;
q retornaria um ´id único´ relacionado a NIC do servidor
T+
Gostei + 0
27/09/2009
Mjcramos
Gostei + 0
01/10/2009
Maxymus
Obrigado!!
meu email : mcor.mesquita@gmail.com
Gostei + 0
01/10/2009
Mjcramos
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)