FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Proteger memoria en la cual se cargó una DLL!
Hola a todos los miembros de este foro, mi pregunta es la siguiente:
Al cargar una librería con LoadLibrary y todo lo demás, como le puedo hacer para proteger esa parte de la memoria en la cual está cargada la librería "X", quisiera saber como podría proteger esa parte para que algún programa externo y ajeno a mi applicación no la pueda sobreescribir. Uso Delphi 7.0 sobre WindowsXP. Gracias de antemano. Saludos. |
#2
|
||||
|
||||
Windows ya hace esto por vos.
Si otro proceso intenta sobreescribir la memoria, obtendrá un Access Violation. Otra cosa es que el otro proceso cargue la dll, pues compartirá el acceso a esta (y su memoria), de manera que si no está bien programada, podría incurrir en un desbordamiento de memoria. Pero ya esto es cosa de quien ha programado la biblioteca. Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#3
|
|||
|
|||
Hola jachguate, antes que nada gracias por responder a mi pregunta, es correcto lo que dices, cuando por ejemplo otra aplicación trata de sobreescribir esa parte de la memoria donde esta cargada la DLL, manda un mensaje de Access Violation.....!, pero el problema es ese quisiera saber como puedo evitar que eso pase, es decir impedir que salga ese mensaje o impedir que la otra aplicación haga eso.
Porque se puede dar el caso de que otra aplicación trate de sobreescribir dicha parte de la memoria y salga el tal mensajito pero no creo que al usuario le vaya a gustar. Otra cosa en el caso de que fuera mi propia aplicación aunque lo dudo, por algunas razones que tengo, pero puedo equivocarme, cuales pueden ser las posibles causas que hagan que esto suceda(por ejemplo puede ser los hilos?), quisiera saber un poco mas de eso. Saludos. |
#4
|
||||
|
||||
Tal como lo dijo el amigo jachguate... eso lo hace el SO, otras aplicaciones puden "cargar la DLL" pero realmente esa carga la hace el SO y es descargada de memoria cuando ya ninguna aplicación la use despues de su respectiva descarga, asi se evitan las dúplicas. por otro lado...al ser cargada por una aplicación, esta ya pasa a ser abierta en modo compartido pero con denegación de escritura, es decir, no puede ser modificada, solo leida, creo q solo deberías preocuparte por lo q tu aplicación hace con la librería y/o lo q hace la librería cuando tu aplicación la llama
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad." Simón Bolívar (Carta al Coronel Inglés Patricio Cambell 05/08/1829). |
#5
|
||||
|
||||
Cita:
Es evidente, para mi, que eso es imposible, sobre todo si se trata de una aplicación como Word o Excel. Cita:
Cita:
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#6
|
|||
|
|||
Gracias a todos ustedes por la respuesta.
Saludos. |
#7
|
||||
|
||||
Estoy *casi* seguro que SI se puede.
1- .NET lo hace usando el CAS (code acces security) 2- Puedes usar archivos mapeados en memoria, los que se les pueden asignar permisos de seguridad 3- Si programas la DLL como un componente COM+, lo instalas en el COM+ Manager y SE LE PUEDE DECLARAR LA SEGURIDAD. Por ejemplo, puedes especificar como es el acceso de los metodos, el usuario que puede cargar la DLL, etc... Es completo, y de las tres, la mas facil de hacer.
__________________
El malabarista. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|