Ao acessar o executável do módulo (Delphi), o sistema é apresentada  seguinte inconsistência:

"An error occurred while attempting to initialize the Borland Datanase Engine (error $210D)"


Ambiente
Aplicações Delphi


Causa 
Os erros $210D e $2501 são decorrentes de conflitos na alocação de recursos de memória pelo Windows. Nas versões XP e Vista o endereçamento padrão para o BDE era bastante e não havia necessidade de realizar maiores ajustes no BDE para utilizar várias instâncias do BDE simultaneamente sem que houvesse conflitos nos recursos alocados.

mceclip0.png

Solução

Verifique se o BDE está fechado, antes de acessar a aplicação Delphi.

Caso a inconsistência persista, as configurações devem ser realizadas conforme orientações abaixo:

Recomendo que mantenha o valor 7500 para o campo SHAREDMEMLOCATE e SHAREDMEMSIZE 205. Caso a inconsistência persista, desative o recurso de ASLR, incluindo o RM.EXE

 

Vemos porém que nas últimas versões do Windows o comportamento foi alterado, havendo necessidade de realizar modificações dos parâmetros SHAREDMEMLOCATE e SHAREDMEMSIZE, definindo endereçamento de memória que não esteja sendo utilizado pelo OS. Em muitos casos, no entanto, é possível ajustar as configurações do BDE para contornar o problema com conflitos de memória. Algumas soluções prováveis são:

 

Altere no BDE o parâmetro memsize para 205.

 

Solução 1: Nas configurações do BDE, acessar o parâmetro SYSTEM > INIT > SHAREDMEMLOCATE e modificá-lo para 5BDE.Salve a alteração e faça o teste de uso de aplicações simultaneamente abertas.

 

Solução 2: Nas configurações do BDE, acessar o parâmetro SYSTEM > INIT > SHAREDMEMSIZE e modificá-lo 4096. Salve a alteração e faça o teste de uso de aplicações simultaneamente abertas.

 

Solução 3: Nas configurações do BDE, acessar o parâmetro SYSTEM > INIT > SHAREDMEMLOCATE e modificá-lo para 0×5BDE. Acesse o parâmetro SYSTEM > INIT > SHAREDMEMSIZE e modifique-o 4096. Salve as alterações e faça o teste de uso de aplicações simultaneamente abertas.

 

Solução 4: Nas configurações do BDE, acessar o parâmetro SYSTEM > INIT > SHAREDMEMLOCATE e modificá-lo para 0×6BDE. Acesse o parâmetro SYSTEM > INIT > SHAREDMEMSIZE e modifique-o 8192. Salve as alterações e faça o teste de uso de aplicações simultaneamente abertas.

 

Para esta solução também são válidos os seguintes valores de SHAREDMEMLOCATE: 1000, 7000, 7F00, 2000, 3000, 4000, 5000, 6000,0x%BDE

 

É possível ainda que seja necessário remover ou desabilitar alguns drivers (de som por exemplo) no Windows 7 e 2008 para resolver o problema, mas normalmente somente “realocando” o pool de memória usado pelo BDE através HAREDMEMLOCATION já será suficiente. Reinicie a máquina após as alterações.

 

Solução 5: Desabilitar o recurso ASLR.

 

Estudando o assunto e pesquisando na Internet descobrimos que e o que ocasiona os erros de shared memory do BDE, desde o Windows Vista, é o recurso ASLR (Address Space Layout Randomization) http://en.wikipedia.org/wiki/Address_space_layout_randomization). Esse mecanismo tem como objetivo gerar uma aleatoriedade para os endereços de carga de EXEs e DLLs especialmente marcados (com o bit ASLR). Com isso aumenta-se assim a segurança do SO, pois diminui a probabilidade de um atacante adivinhar onde as áreas importantes de memória estão carregadas. O BDE (lembrando que a versão atual foi liberada lá em 2001) é configurado para alocar uma a área de memória compartilhada no endereço 6BDE (0x6BDE0000, para Windows NT e superiores). Essa área coincide com a região utilizada pelo mecanismo de ASLR (acima de 0x50000000). Por isso os erros de conflito de memória compartilhada. Para solucionar o problema você poderá desabilitar o ASLR da máquina através da criação da chave MoveImages no caminho abaixo no registro:

 

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management

 "MoveImages"= dword:00000000

 

Outra alternativa para desabilitar o ASLR no Windows 7 é a utilização do Enhanced Mitigation Experience Toolkit da Microsoft. A criação da entrada de registro pode não desabilitar o recurso para este SO em alguns casos.

 

O software facilitará este procedimento: https://www.microsoft.com/en-us/download/details.aspx?id=54264

  

A Microsoft não recomenda desabilitar o ASLR por conta do maior risco de contaminação por malwares, realçando que foi esse recurso que possibilitou maior segurança nos Windows a partir do Vista em diante e que o Hyper-V funciona bem com o mesmo.

http://blogs.technet.com/b/virtualization/archive/2011/02/09/windows-7-and-windows-server-2008-r2-sp1-add-new-virtualization-innovations.aspx).

mceclip1.png

Caso a inconsistência persista, favor incluir o aplicativo BDEADMIN.EXE e desmarcar as opções MandatoryASLR e BottomUpASLR

mceclip2.png

Em seguida realize o mesmo procedimento para todos os executáveis da linha CorporeRM instalados no diretório CorporeRM

mceclip3.png