• Miércoles 6 de Noviembre de 2024, 16:32

Autor Tema:  Compartir memoria en C++, ¿alguna libreria?  (Leído 2174 veces)

hfe.ib

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Compartir memoria en C++, ¿alguna libreria?
« en: Martes 6 de Enero de 2009, 22:19 »
0
Buenos dias a todos, queria saber si alguno podria ayudarme con este inconveniente:
Tengo una DLL con una variable tipo char llamemosla A. mi problema es que quisiera "atacar" esa variable, desde todas las instancias de la DLL (La DLL utiliza funciones Hook) y para ello creo que deberia compartir un pedacito de memoria... pero no se como hacerlo. Si alguno conoce una libreria documentada se lo agradezco muchisimo.
Muchas gracias de antemano.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Compartir memoria en C++, ¿alguna libreria?
« Respuesta #1 en: Martes 6 de Enero de 2009, 23:33 »
0
La verdad no se entiende que es lo que queres hacer pero no suena muy bien ...

Sharing Files and Memory.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

hfe.ib

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Compartir memoria en C++, ¿alguna libreria?
« Respuesta #2 en: Miércoles 7 de Enero de 2009, 00:18 »
0
Perdon es cierto que es confuso porque es algo que he preguntado varias veces y nadie me supo responder. Voy a detallar la teoria que sé acerca del tema, para ver si llegamos a la solucion:
Yo creo un ejecutable que hace uso de una DLL. Esta DLL es un Hook de teclado que guarda en una variable cada tecla que se presiona, para cualquier proceso (Es decir... si saco del foco a la aplicacion las teclas que se presionen sobre otras aplicaciones tambien son guardadas. El mejor ejemplo es el Keylogger). Mi problema radica en que para cada proceso, tengo una instancia distinta de la DLL... de manera que si guardo las teclas en la variable char *teclas (p.e) voy a tener un char *teclas solo con las teclas presionadas en la respectiva aplicacion en foco.
Me gustaria saber como "Compartir" una variable entre todas las instancias de la DLL hook. osea que *teclas almacene las teclas de todos los procesos.

Bueno ojala haya aclarado un poco mi propia duda! jajaja.

Muchisimas gracias por tu atencion.

Karman

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
    • http://www.inexinferis.com.ar
Re: Compartir memoria en C++, ¿alguna libreria?
« Respuesta #3 en: Miércoles 7 de Enero de 2009, 06:57 »
0
hace mucho que no posteo acá... pero esto es lo que buscas:

en el H:
Código: Text
  1.  
  2. // ------------------------------------------------------
  3. // SharedMemoryLib.h
  4. // Shared memory functions HEADERS
  5. // by Ni Idea, modificated by Karman
  6. // ------------------------------------------------------
  7. #ifndef _SHAREDMEM_H_
  8. #define _SHAREDMEM_H_
  9.  
  10. #include <windows.h>
  11. #include <stdio.h>
  12.  
  13. typedef struct _SharedMemory_{
  14.   HANDLE hFile;
  15.   LPDWORD hView;
  16. }SharedMemory,*PSharedMemory;
  17.  
  18. #ifdef _cplusplus
  19. extern "C"
  20. {
  21. #endif
  22.   BOOL CreateSharedMemoryArea(PSharedMemory psm,LPSTR SMName,DWORD size);
  23.   BOOL OpenSharedMemory(PSharedMemory psm,LPSTR SMName);
  24.   BOOL DestroySharedMemoryArea(PSharedMemory psm);
  25.   VOID WriteOnSharedMemory(PSharedMemory psm,DWORD data, DWORD position);
  26.   VOID ReadFromSharedMemory(PSharedMemory psm,LPDWORD data, DWORD position);
  27. #ifdef _cplusplus
  28. }
  29. #endif
  30.  
  31. #endif /* _SHAREDMEM_H_ */
  32.  
  33.  

y en el C:
Código: Text
  1.  
  2. // ------------------------------------------------------
  3. // Shared memory func. by Ni Idea, modificated by Karman
  4. // ------------------------------------------------------
  5.  
  6. #include <SharedMemLib.h>
  7.  
  8. //--------------------------------------------------------
  9. //
  10. //--------------------------------------------------------
  11. BOOL CreateSharedMemoryArea(PSharedMemory psm,LPSTR SMName,DWORD size){
  12.   psm->hFile = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,sizeof(DWORD)*size,SMName);
  13.   if(!psm->hFile)return FALSE;
  14.    
  15.     psm->hView = MapViewOfFile(psm->hFile,FILE_MAP_ALL_ACCESS,0,0,0);
  16.     if(!psm->hView){
  17.     CloseHandle(psm->hFile);
  18.         return FALSE;
  19.     }
  20.   return TRUE;
  21. }    
  22. //--------------------------------------------------------
  23. //
  24. //--------------------------------------------------------
  25. BOOL OpenSharedMemory(PSharedMemory psm,LPSTR SMName){  
  26.     psm->hFile = OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SMName);
  27.   if(!psm->hFile)return FALSE;
  28.    
  29.   psm->hView= MapViewOfFile(psm->hFile,FILE_MAP_ALL_ACCESS,0,0,0);  
  30.     if(!psm->hView){
  31.     CloseHandle(psm->hFile);
  32.         return FALSE;
  33.     }
  34.   return TRUE;
  35. }
  36. //--------------------------------------------------------
  37. //
  38. //--------------------------------------------------------
  39. BOOL DestroySharedMemoryArea(PSharedMemory psm){
  40.     if(UnmapViewOfFile(psm->hView)&&CloseHandle(psm->hFile))return TRUE;
  41.     return FALSE;
  42. }
  43. //--------------------------------------------------------
  44. //
  45. //--------------------------------------------------------
  46. VOID WriteOnSharedMemory(PSharedMemory psm,DWORD data, DWORD position){    
  47.     psm->hView[position] = data;
  48. }
  49. //--------------------------------------------------------
  50. //
  51. //--------------------------------------------------------
  52. VOID ReadFromSharedMemory(PSharedMemory psm,LPDWORD data, DWORD position){
  53.     *data = psm->hView[position];
  54. }
  55.  
  56.  

uso:
Código: Text
  1.  
  2. #define shmemname "un nombre!!! xD"
  3. ...
  4. SharedMemory MyShMem;
  5. //Creamos un bloque de memoria compartida...
  6. if(!CreateSharedMemoryArea(&MyShMem,shmemname,2)){
  7.   MessageBox(NULL,"Fallo al alocar memoria...",0,0);
  8.   return FALSE;
  9. }
  10.  
  11. //Inicializamos...
  12. WriteOnSharedMemory(&MyShMem,variable,0);
  13. ****
  14. if(!OpenSharedMemory(&MyShMem,shmemname))
  15.     return FALSE;
  16. ReadFromSharedMemory(&MyShMem,(LPDWORD)&variable,0);
  17.  
  18.  

S2

hfe.ib

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Compartir memoria en C++, ¿alguna libreria?
« Respuesta #4 en: Miércoles 7 de Enero de 2009, 07:21 »
0
Jajajajaj Espectacular!!!!! lo mejor de todo es que yo me habia re estudiado al detalle los articulos que hiciste del API de Windows!!! EXCELENTES!!! lo nunico que no pude entender era eso, y como hacia tiempo que no actualizabas la pagina, no te escribi.
Mil gracias Karman!!!.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Compartir memoria en C++, ¿alguna libreria?
« Respuesta #5 en: Miércoles 7 de Enero de 2009, 09:19 »
0
No le veo mucho sentido a que el Explorer tenga en memoria lo tecleado en el Notepad pero bueno ... lo que necesitabas esta en el enlace que deje ahi arriba.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Karman

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
    • http://www.inexinferis.com.ar
Re: Compartir memoria en C++, ¿alguna libreria?
« Respuesta #6 en: Miércoles 7 de Enero de 2009, 09:24 »
0
Cita de: "hfe.ib"
y como hacia tiempo que no actualizabas la pagina, no te escribi.
Mil gracias Karman!!!.

es que ando con poco tiempo... entre el laburo y la facu... no me quedan ganas... je

S2