Pois é MALIGNO, acho que essa função do WAPI irá ser útil para fazer autenticação de softwares na sua instalação. Mas, ainda não tenho idéia de como começar. Sei que pedir que postem exemplos, seri pedir muito. Pois ninguém quer oferecer a receita do seu bolo. Mas o que gostaria de saber, masi ou menos o quê deveria declarar ?.
O ideal, pra gente discutir isso, é pensar na coisa desde o princípio. Vamos filosofar a respeito:
Na minha opinião, proteger software demanda, primeiramente, pensar em três pontos importantes:
1) Definir como serão os dados de controle, o que conterão, como serão gerados e como serão protegidos (encriptação).
2) Definir onde serão armazenados esses dados, para evitar que o cliente chegue até eles, ou uma forma de tornar impossível que eles sejam alterados, mesmo que estejam visíveis.
3) Definir como a licença do programa será renovada, no caso de aluguel, ou reimplantada, no caso de venda (uma reformatação do HD pode fazer com que ela se perca).
Em resposta:
1) Acho que o primeiro pensamento que nos vem à cabeça é gerar os dados de controle a partir das características da máquina hospedeira. O número de série de fábrica do HD (o WAPI informa, apesar desse número não estar disponível em algumas situações), o número de série de formatação (é um dado a mais, afinal), CheckSum do BIOS (incluindo talvez o BIOS da placa de vídeo), o número de qualificação da motherboard (há quem pense que é número de série, mas não é), etc. Todos esses dados podem ser combinados para formar um grande número. Este número, por sua vez, poderá ser misturado com um bloco de lixo, por um algoritmo de scrambling qualquer.
2) Esconder ou não, eis a questão. A primeira coisa que se pensa é em esconder, mas na verdade, isso nem é tão importante. Há muitos anos eu montei um esquema de proteção que era um coisa bem simples. Algo assim:
O cliente vê isso e vai seco em cima pra alterar a data de bloqueio. Mas há um problema. O CRC32 de assinatura, gerado por um algoritmo modificado. Se essa data fosse alterada, o bloqueio seria instantâneo, pela invalidação do arquivo. É uma ótima forma de saber qual cliente é picareta.

))
Isso é pra você ter uma idéia de que nem sempre é necessário esconder. Mas esconder o bloco de controle da licença é também uma boa alternativa. E pode ser feita tanto por meio do Registry quanto por meio de um simples arquivo escondido dentro do diretório do Windows, por exemplo. O Registry, como eu disse antes, é perfeito para esconder dados. Mas o problema está nos sistemas multiusuários. Por rede não dá pra acessar o Registry de uma máquina remota. Há uma solução para esse problema. Mas isso demandaria um programa extra rodando em background na máquina hospedeira. Eu faria em C um programa bem pequeno, mas você pode também fazer um programa um pouco maior, em XHarbour, por exemplo. Acho que ele deve acessar o Registry também. O bloco de controle em arquivo já não tem esse problema. É tudo uma questão de conveniência e disponibilidade da sua parte. Você deve analisar e decidir o que é melhor para o seu caso.
3) Mais complicada é a renovação da licença. Em caso de aluguel de software, periodicamente você terá de renová-la. Como o seu programa já acessa o bloco de dados de controle, nele próprio pode existir uma opção de menu para atender essa finalidade. O problema mesmo está em como informar essa renovação. Se pessoalmente, resolvido o problema. Você estará lá e resolverá tudo. Mas isso gera um custo que muitas vezes é proibitivo. E seu lucro vai embora. O ideal é utilizar uma forma de comunicação barata: telefone, eMail, sinal de fumaça, etc. Eu próprio, agora programando em C++ no Builder, vou não só fazer atualização automática dos softwares, como também renovação de licença por meio de WebService. O cliente pagou, eu envio pro meu site os dados da renovação e o programa, no momento em que achar mais apropriado, automaticamente acessa a área onde armazenarei esses dados e pega o bloco do cliente, conforme a identificação dele. Em Clipper até dá pra fazer isso perfeitamente, também por meio de um programa à parte. O problema pra mim é que isso demanda um certo tempo pra codificar (nunca mexi com sockets). Se o XHarbour tiver funções pra isso, fica a idéia pra você: um programa à parte, apenas para renovação de licença e/ou atualização.
Agora, no tocante à reimplantação (remota) de licença, no caso de uma reformatação de HD ou mesmo substituição, você também precisa dispor de uma chave especial, que preferencialmente não contenha dados de HD. O cliente liga, passa esse número, e você envia pra ele uma contra-senha. O cliente, por algum meio, informa seu programa que contra-senha é essa. O programa valida e entende que deve ser reimplantada a licença. Simples. Acho que é uma boa alternativa.
Talvez existam mais alguns detalhes que não me vieram à cabeça no momento em que escrevo esta mensagem. Mas os colegas podem ajudar, criticando e dando sugestões.
De todas formas seria muito legal, enriquecer esta idéias e se puessem compartilhar algumas indicações, como pelo menos para começar. Eu inicialmente, não me sinto muito confortável mexer no REGISTRO do WINDOWS.
É sempre bom tomar cuidado com tudo o que se faz em programação. Mas usar o Registry não é tão perigoso quanto parece. Vai mais do bom senso. Você não vai, por exemplo, querer testar o WAPI apagando algumas chaves do Windows, vai?

)
[]'s
Maligno
http://www.buzinello.com/prg