IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

File Mapping c'est quoi?


Sujet :

Windows

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 119
    Points : 106
    Points
    106
    Par défaut File Mapping c'est quoi?
    Bonsoir / Bonjour à tous,

    Voila j'ai trouvé une exelente source concernant les instance unique de programme. Plutot que de recopier bêtement la fonction, je cherche à la comprendre, j'ai compris en gros le comment, mais pas ds les détails et cela ... je n'aime pas. Donc voice mes questions lol.

    - Opens a named file mapping object. "file mapping object " késako ?

    - Qu'est ce que le FileMapping ? j'ai vaguement compris sur la msdn, que ces fonction permettent de renvoyer un pointeur sur une zonne mémoire, mais que contient la zone mémoire, ça je ne l'ai pas très bien compris, les instructions ? , le contenut de l'exe ?

    - hwnd = (HWND) *((DWORD*) pmem); , j'ai compris que hwnd pointe maintenant sur la zone mémoire crée par le mapping, mais cela sert à quoi ?

    Voice la fonction entière pour celui qui aurait le courage de bien me l'expliquer (en gras, les ligne que je ne comprend pas bien)

    int __stdcall IsMappedSysApp(char *szname)
    {
    HANDLE hmap;
    LPVOID pmem;
    HWND hwnd;
    hmap = OpenFileMapping(FILE_MAP_READ, 0, szname);
    if(!hmap) return 0;
    pmem = MapViewOfFile(hmap, FILE_MAP_READ, 0, 0, 0);
    if(!pmem) goto closeMap;
    hwnd = (HWND) *((DWORD*) pmem);
    UnmapViewOfFile(pmem);
    if(IsWindow(hwnd)) {
    hwnd = GetLastActivePopup(hwnd);
    if(IsIconic(hwnd)) ShowWindow(hwnd, SW_RESTORE);
    SetForegroundWindow(hwnd);
    }
    closeMap: CloseHandle(hmap);
    return 1;
    }

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    OK.
    Un FileMapping, çe peut être deux choses:
    1. Sur un fichier, c'est un "mapping du fichier en mémoire", c'est-à-dire, tu modifies la mémoire et ça modifie tout seul le fichier.
    2. Sur du vide, c'est un segment de mémoire partagée.

    Dans le cas présent, c'est la seconde solution. Toutefois, je pense que cette fonction n'est pas complète, car elle ne fait que lire le File Mapping : Sa création est ailleurs.

    D'ailleurs, voici le code un tant soit peu corrigé et commenté:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    //La fonction retourne TRUE si le FileMapping existe.
    BOOL __stdcall IsMappedSysApp(LPCTSTR sczName)
    {
    HANDLE hMap;
    LPVOID pMem;
    HWND hWnd;
    //Ouvre le segment de mémoire partagée
    hMap = OpenFileMapping(FILE_MAP_READ, FALSE, sczName);
    if(hMap == NULL)
    	return FALSE;
    //Obtient un pointeur sur la zone mémoire
    pMem = MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);
    if(pMem != NULL)
    	{
    	//La zone mémore partagée contient un DWORD
    	//représentant les 32bits inférieurs du HWND
    	//(sur une machine 32bits, le HWND rentre entièrement)
    	//(note: en C++, un static_cast<> est nécessaire)
    	DWORD * pDw = pMem;
    	hWnd = (HWND) *pDw;
    	UnmapViewOfFile(pMem);
     
    	//Maintenant, on a récupéré un HWND depuis la mémoire partagée.
    	//Si ce HWND est toujours valide, on met au premier plan
    	//cette fenêtre ou la dernière fenêtre fille affichée.
    	if(IsWindow(hWnd)) 
    		{
    		HWND hWndLast = GetLastActivePopup(hWnd);
    		//Si la fenêtre est "Réduite" ("Minimisée"),
    		// on la réaffiche d'abord
    		if(IsIconic(hWndLast))
    			ShowWindow(hWndLast, SW_RESTORE);
    		SetForegroundWindow(hWndLast);
    		}
    	}
    CloseHandle(hMap);
    return TRUE;
    }

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 119
    Points : 106
    Points
    106
    Par défaut
    Merci pour cette exelente réponse. Oui ce code est incomplet, la fonction de création du mapping , je ne l'ai pas mise, mais bon si je comprend celle-ci, je comprend l'autre. encore merci.

Discussions similaires

  1. [Débutant] C'est quoi les MEX-Files
    Par 3aychoucha dans le forum MATLAB
    Réponses: 6
    Dernier message: 06/04/2011, 20h24
  2. map.path(asp) dans vb.net c'est quoi ?
    Par charaf dans le forum Windows Forms
    Réponses: 1
    Dernier message: 09/03/2007, 10h04
  3. C'est quoi XMLRAD ?
    Par laffreuxthomas dans le forum XMLRAD
    Réponses: 10
    Dernier message: 09/08/2003, 02h42
  4. C'est quoi "Profile" dans le assign du XMLGram ?
    Par Lux interior dans le forum XMLRAD
    Réponses: 2
    Dernier message: 28/02/2003, 11h37
  5. C'est quoi exactement un générateur d'états
    Par Henry Cesbron Lavau dans le forum Outils de restitution et d'analyse
    Réponses: 0
    Dernier message: 02/04/2002, 19h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo