Qu'est-ce qu'un objet OLE ? — Incorporation, liaison et les pièges des documents métier

· Mis à jour le: · · Windows, OLE, COM, Office, Access, Développement Windows, Actifs hérités

Historique des révisions (première version, publiée le 28 Aug 2026)
Première publication

« J’ai double-cliqué un tableau dans une spécification Word, et le menu s’est transformé en celui d’Excel. » C’est ce qui se produit lorsque le tableau est placé dans le document non pas comme une simple image, mais comme un objet OLE.

OLE signifie Object Linking and Embedding (liaison et incorporation d’objets). Il intègre dans un document hôte des données de document créées par une autre application, soit par incorporation, soit par liaison. Techniquement, l’entité est un objet COM qui peut être incorporé dans un document ou lié à celui-ci.12

Le point de départ pour le comprendre est la question « où se trouvent les données elles-mêmes ? ». Une fois cela clair, on peut ranger pourquoi les documents grossissent, pourquoi les liaisons se rompent lorsqu’on déplace un serveur, et pourquoi un tableau peut être visible sans être éditable.

Cet article s’adresse aux responsables informatiques des petites et moyennes entreprises et aux développeurs d’applications métier. Il commence par comparer l’incorporation et la liaison, puis passe aux opérations quotidiennes, aux corrections selon les symptômes, et aux précautions pour Access et la sécurité. Les mécanismes internes tels que COM et le stockage structuré sont rassemblés à la section 7, et les décisions sur l’exploitation et la conception futures à la section 8.

1. D’abord la conclusion : l’incorporation est une « copie dans le document », la liaison une « référence vers un autre emplacement »

La différence entre incorporation et liaison est l’endroit où les données elles-mêmes sont stockées. La portabilité, la taille du fichier et la façon dont les mises à jour se produisent découlent toutes de cette différence.3

Point de comparaison Incorporation (Embedding) Liaison (Linking)
Où se trouvent les données elles-mêmes Dans le document hôte À la source de la liaison, en général un fichier distinct
Ce que le document stocke Les données elles-mêmes et des informations de gestion, et habituellement un cache de présentation Des informations de gestion telles que le nom et l’emplacement de la source et le paramètre de mise à jour, et habituellement un cache de présentation
Lorsque les données d’origine changent La copie incorporée n’est pas mise à jour Peut se refléter selon le paramètre de mise à jour de la liaison
Lorsque vous éditez l’objet Vous éditez la copie à l’intérieur du document ; les données d’origine ne sont pas affectées Vous éditez les données à la source de la liaison
Taille du document En général plus grande que pour une liaison du même contenu, parce qu’elle détient un duplicata des données Plus facile à garder petite, parce que les données ne sont pas détenues dans le document
Remise du document à un autre PC Indépendant du fichier d’origine, mais l’édition exige l’application d’origine La source de la liaison doit aussi être joignable depuis le PC destinataire
Principales précautions Gonflement, dépendance vis-à-vis de l’application d’origine Liaisons rompues, paramètres de mise à jour, dépendance vis-à-vis de l’application d’origine

L’incorporation convient lorsque vous voulez que le document soit indépendant du fichier d’origine. La liaison convient lorsque plusieurs documents partagent les mêmes données et que vous voulez que les modifications de l’original se reflètent. Les mises à jour de liaison ne sont toutefois pas nécessairement automatiques. Le fait qu’elles soient automatiques ou manuelles est décidé par un paramètre du côté du document.456

La différence entre incorporation et liaisonL'incorporation stocke intégralement les données elles-mêmes dans le document hôte, ce qui rend le document autonome mais plus volumineux, tandis que la liaison ne place dans le document qu'une référence, le paramètre de mise à jour et habituellement des informations de présentation, les données elles-mêmes restant dans le fichier source, de sorte que le document reste petit et que les modifications de la source peuvent se refléter selon le paramètre de mise à jour de la liaison (automatique ou manuel)Document hôte (document Word, etc.)Incorporation : stocke les données elles-mêmesLiaison : référence, paramètres et (souvent) infos de présentationAutonome mais plus volumineuxFichier source de la liaison (les données sont ici)Les modifications de la source peuvent se refléter (selon le paramètre)

Figure 1 : le document détient-il les données elles-mêmes, ou référence-t-il des données à un autre emplacement. Cette différence détermine les propriétés de taille, de mise à jour et de remise.

« Les données sont dans le document » et « on peut l’éditer sur n’importe quel PC » sont deux choses distinctes. De plus, si un cache de présentation subsiste, seul le dernier aspect peut s’afficher même lorsque l’application d’origine ou la source de la liaison est indisponible. Séparer « c’est visible », « on peut l’éditer » et « c’est à jour » est la base du triage.78

Dans le diagramme, un trait continu marque une relation qui vaut toujours et un trait pointillé une relation conditionnelle (les conditions figurent dans l’explication de chaque relation sur la page de détail). La liste complète des relations (25 au total, avec preuve et niveau de certitude) et les définitions des concepts principaux sont rassemblées sur la page de détail de la carte des connaissances (en japonais). Données : JSON-LD / Turtle

2. Où les objets OLE sont utilisés et comment ils entrent dans un document

2.1 On les rencontre dans Word, Excel, Access et les anciens documents métier

OLE soutient la culture documentaire de Windows depuis les années 1990. Le mécanisme est encore en service aujourd’hui, mais pour la pratique il vaut mieux le voir non pas comme une technologie à adopter activement dans les conceptions nouvelles, mais comme une que l’on rencontre à l’intérieur de documents et de bases de données existants.

Point d’entrée pour créer un objet OLE Exemples de contenu
Word / Excel / PowerPoint Insertion > Objet, Collage spécial Feuilles Excel, documents Word, dessins, équations
Access Champs Objet OLE Images, feuilles Excel, fichiers de diverses sortes
Documents texte enrichi (RTF) Collages faits autrefois dans WordPad et analogues Dessins, objets d’autres applications
Anciens formulaires et spécifications Incorporations faites par d’anciens collaborateurs Données destinées à être « ouvertes par double-clic »

Les bases de données qui ont stocké des photos d’employés ou des images de produits dans des champs Objet OLE d’Access sont un autre actif existant typique. Cet usage a un problème de gonflement, et la section 5 traite la décision de migration.9

2.2 « Insérer un objet » et « Collage spécial »

Insérer un objet permet de choisir entre créer un nouvel objet et en créer un à partir d’un fichier existant. Il existe aussi une option d’affichage « Afficher sous forme d’icône ».

Le Collage spécial permet de choisir le format des données et, en plus, d’incorporer ou de lier. Les entrées listées comme « … Objet » sont les options qui collent en OLE. Les données stockées et la façon dont on les édite ensuite diffèrent toutes deux d’un collage en simple image.1011

Ces deux dialogues correspondent aux dialogues standard d’OLE, Insert Object et Paste Special, et MFC fournit des classes pour les afficher. La différence entre le chemin qui crée des objets à partir du copier-coller ou du glisser-déposer et le chemin qui les crée directement à partir d’une classe enregistrée ou d’un fichier est expliquée à la section 7.1.1012

3. Ce qui se passe lorsque vous double-cliquez

3.1 L’hôte est le « conteneur », l’application qui édite est le « serveur »

Lorsqu’un document Word contient un tableau Excel, Word est le conteneur OLE qui l’héberge, et Excel, qui se charge d’éditer le tableau, est le serveur OLE. Un document qui traite des données de plusieurs applications à l’intérieur d’un seul document s’appelle un document composé OLE.12

Word n’implémente pas toutes les fonctions d’édition d’Excel. Le mécanisme utilise les fonctions de l’application d’origine lorsque vous opérez sur l’objet. C’est pourquoi l’édition exige l’application d’origine même lorsque les données elles-mêmes sont stockées dans le document.

3.2 Un double-clic exécute le « verbe principal » choisi par l’objet

Un objet OLE définit les opérations que l’on peut effectuer sur lui comme des verbes (verbs) : Modifier pour un tableau, Lire pour l’audio, et ainsi de suite.

L’application hôte réagit à un double-clic ou à une action similaire en appelant IOleObject::DoVerb. Ce que fait l’opération par défaut, le verbe principal (OLEIVERB_PRIMARY), est décidé par l’objet, non par l’hôte. DoVerb démarre automatiquement l’application serveur OLE et exécute l’opération appropriée à cet objet. Un double-clic ne signifie pas toujours Modifier.13

3.3 Quand l’édition a lieu dans Word et quand une fenêtre distincte s’ouvre

Si l’objet incorporé et l’hôte prennent tous deux en charge l’activation sur place (In-Place Activation), l’objet peut être édité dans la fenêtre de l’hôte. La barre de menus est remplacée par une barre de menus composite qui fusionne les menus du conteneur et du serveur. C’est le mécanisme par lequel les menus d’édition d’Excel apparaissent à l’intérieur de Word. Un clic à l’extérieur de l’objet le désactive et rétablit les menus d’origine.14

Du double-clic à l'activation sur placeL'application hôte réagit à un double-clic en exécutant le verbe principal via DoVerb de IOleObject, OLE démarre l'application serveur, et si l'hôte et le serveur prennent tous deux en charge l'activation sur place, l'objet incorporé est édité dans la fenêtre de l'hôte avec des menus fusionnés, et un clic à l'extérieur le désactive et rétablit les menus d'origine (si l'un des deux ne la prend pas en charge, l'édition a lieu dans une fenêtre distincte)OLE / application serveurApplication hôte (Word, etc.)UtilisateurOLE / application serveurApplication hôte (Word, etc.)Utilisateuralt[Les deux prennent en charge l'activationsur place][L'un des deux ne la prend pas en charge]Double-cliquer l'objet incorporéExécuter le verbe principal via DoVerbDémarrer le serveur, fusionner les menusÉditer sur placeCliquer à l'extérieur de l'objetDésactiver, rétablir les menus d'origineÉditer dans une fenêtre distincte

Figure 2 : éditer un objet incorporé sur place exige le support du conteneur et du serveur. Sans cela, l’édition a lieu dans une fenêtre distincte.

La façon dont un objet s’ouvre dépend du type d’objet, du verbe exécuté et de ce que les applications prennent en charge.

Condition Comment il s’ouvre
Incorporé, les deux côtés prennent en charge l’activation sur place, et l’édition sur place est effectuée Édité dans la fenêtre de l’hôte
Incorporé, mais l’un des côtés ne prend pas en charge l’activation sur place Édité dans une fenêtre distincte
Incorporé, avec OLEIVERB_OPEN spécifié Ouvert dans une fenêtre distincte
Un objet lié Toujours ouvert dans une fenêtre distincte

L’activation sur place est un mécanisme qui présuppose l’incorporation ; elle n’est pas utilisée pour les liaisons. L’implémenter est aussi facultatif pour le conteneur comme pour le serveur. Le seul fait que « le même document s’ouvre différemment » n’est pas un motif pour parler de dysfonctionnement.11413

4. Triage par symptôme : ne se met pas à jour, trop volumineux, ne s’ouvre pas

4.1 Le tableau est visible, mais les modifications de la source de la liaison ne se reflètent pas

Vérifiez l’emplacement de la source de la liaison et la méthode de mise à jour de la liaison. Ce qu’une liaison détient du côté du document n’est pas les données elles-mêmes, mais des informations de gestion telles que le nom et l’emplacement de la source et le paramètre de mise à jour, plus, habituellement, un cache de présentation.155

La tâche de retrouver la source de la liaison appartient à un composant COM appelé moniker. Lorsqu’un déménagement de serveur de fichiers, un renommage de dossier, une modification du chemin de partage, la suppression du fichier d’origine ou un cas similaire rend le nouvel emplacement impossible à retracer, la résolution de la liaison échoue. C’est une liaison rompue.

Si un cache de présentation a été enregistré, l’ancien tableau reste dans le document. Le fait qu’un tableau s’affiche n’est pas une preuve que la liaison est saine. Si l’objet a été créé avec un paramètre qui ne conserve pas de cache, même ce dernier aspect disparaît.78

La correction consiste à rediriger le chemin de la source vers le nouvel emplacement depuis la boîte de dialogue Liaisons du document. Si le chemin est correct mais que l’objet ne se met pas à jour, il peut simplement être réglé sur une mise à jour manuelle ; vérifiez donc aussi la méthode de mise à jour. Le moment où les modifications de la source se reflètent dépend du paramètre de mise à jour automatique ou manuelle.6

S’il y a beaucoup de documents qui s’appuient fortement sur des liaisons, incluez un inventaire avant le déménagement et les mises à jour de liaisons après le déménagement dans le plan de migration du serveur de fichiers. Prévoyez aussi une mise à jour groupée lorsque c’est possible. Si vous ne vous en apercevez qu’après le déménagement, vous finissez par chercher, document par document, les sources que d’anciens collaborateurs utilisaient.

4.2 Un document Word ou Excel est anormalement volumineux

Vérifiez si une réédition est nécessaire, et reconsidérez si le document doit détenir les données elles-mêmes. L’incorporation duplique les données et les stocke dans le document, de sorte que le document est en général plus volumineux que lorsque le même contenu est lié. Un cache de présentation est habituellement stocké aussi, le document ne contient donc pas nécessairement seulement les données utilisées pour l’édition.47

Lorsqu’un rapport avec de nombreux tableaux incorporés grossit et met longtemps à s’ouvrir, suspectez cette structure. Choisissez le remède selon la façon dont les données sont utilisées.

Comment les données sont utilisées Comment le retravailler
Aucune réédition n’est nécessaire dans le document Le coller sous forme d’image
Les données d’origine sont partagées et les modifications doivent se refléter Partager le fichier d’origine à part et mettre une liaison dans le document
Les données d’origine sont gérées ailleurs et le document n’a besoin que de l’apparence Partager le fichier d’origine et ne mettre qu’une image dans le document

Gardez toutefois à l’esprit que passer aux liaisons pour réduire la taille ajoute la responsabilité de gérer les sources. Dans les documents destinés à être diffusés, la référence se rompt facilement, de sorte qu’un « transformer chaque incorporation en liaison » généralisé n’est pas le bon remède.

4.3 Le double-clic n’ouvre pas et n’édite pas l’objet

Vérifiez d’abord si l’application d’origine de cet objet est aussi présente sur le PC actuel. Le caractère autonome de l’incorporation concerne l’endroit où les données sont stockées ; les fonctions d’édition ne sont pas à l’intérieur du document.

Si l’application d’origine est absente, seul l’affichage peut être utilisé, pourvu qu’un cache de présentation ait été enregistré. Les données de présentation mises en cache sont conçues pour rester disponibles depuis le conteneur même lorsque l’application serveur n’est pas en cours d’exécution ou est indisponible.7

Si l’objet a été collé avec « Afficher sous forme d’icône », toutefois, vous voyez l’icône mais pas le contenu. Pour un objet qui ne détient aucun cache, même le dernier aspect disparaît. L’existence d’un cache dépend de la valeur OLERENDER spécifiée au moment de la création.8

Si l’application d’origine est présente et que l’objet ne s’ouvre toujours pas, triez dans cet ordre.

  1. Vérifiez la compatibilité de version de l’application. Convertir le type peut être nécessaire, et OLE a une boîte de dialogue standard pour la conversion.
  2. Vérifiez un enregistrement de classe COM (CLSID) manquant ou endommagé. Réparer l’enregistrement peut exiger de réinstaller l’application ou une opération similaire.
  3. Vérifiez un blocage par les paramètres de sécurité, et une corruption du côté du document.10

Pour les documents d’origine inconnue, ne donnez pas la priorité à les faire s’ouvrir ; adoptez la pratique de ne pas activer l’objet. Le traitement de sécurité est expliqué à la section 6.

5. Dans Access, séparer « seulement stocker » de « besoin du comportement OLE »

5.1 Les images dans un champ Objet OLE tendent à faire gonfler la base

Le type de données Objet OLE d’Access est un type de champ pour incorporer ou lier dans une table des objets tels que des feuilles de calcul Excel, des documents Word, des dessins et des sons. Sa limite supérieure est d’environ 1 GB.9

Utiliser ce type uniquement pour stocker des photos d’employés ou des images de produits rend l’efficacité du stockage un problème. Microsoft explique que le type de données Pièce jointe est plus souple que le type de données Objet OLE et utilise le stockage plus efficacement parce qu’il ne crée pas d’image bitmap du fichier d’origine.9

Passer au type Pièce jointe ne supprime toutefois pas les limites de taille.

Élément Contrainte ou propriété
Formats qui prennent en charge le type Pièce jointe .accdb
Taille maximale de la base entière 2 GB
Taille maximale de chaque fichier joint 256 MB
Affichage des images BMP, PNG, JPEG et analogues s’affichent sans logiciel supplémentaire

Ce sont des contraintes du type Pièce jointe d’Access. Elles portent sur un sujet différent de la limite d’environ 1 GB du type Objet OLE.16

5.2 Pour le stockage seul, utiliser le type Pièce jointe ou un dossier avec gestion des chemins

Dans une conception nouvelle qui n’a besoin que de stocker des images ou des fichiers, il n’y a pas lieu de choisir le type Objet OLE. Envisagez le type Pièce jointe, ou une conception qui place les fichiers dans un dossier et ne conserve que les chemins dans la base. Pour les bases existantes aussi, ces deux-là sont les cibles de migration.

C’est une autre affaire si vous avez besoin d’un comportement propre à OLE, tel que la liaison ou l’activation. Dans ce cas, prenez la décision en gardant le statu quo parmi les options. Plutôt que « le remplacer tout de suite parce que c’est le type Objet OLE », séparez d’abord s’il s’agit d’un simple stockage ou s’il doit fonctionner comme un objet.916

6. Sécurité : traiter différemment l’incorporation ordinaire et les packages OLE

6.1 Un document devient un point d’entrée pour exécuter une autre application

Avec OLE, un objet d’une autre application est introduit dans un document et exécuté sur le PC de quiconque l’ouvre. Cette structure est aussi un véhicule de livraison pour les attaquants.

De fait, CVE-2014-4114, une vulnérabilité qui exécute du code arbitraire via des fichiers PowerPoint et analogues contenant un objet OLE falsifié, a été utilisée dans des attaques ciblées. Parce que les formats Office et d’autres qui peuvent détenir des objets OLE peuvent devenir des vecteurs d’attaque, « je ne voulais que lire le document » se transforme en point d’entrée pour l’exécution.17

6.2 Bloquer l’activation des packages OLE à l’échelle de l’organisation

Les packages OLE (Object Packager) méritent une attention particulière. C’est un ancien mécanisme qui enveloppe un fichier quelconque dans un document comme objet OLE, et il peut aussi détenir des fichiers exécutables. Une vulnérabilité d’exécution de code à distance concernant Object Packager a également été publiée.18

Pour cette raison, interdire l’activation des packages OLE dans Word, Excel et PowerPoint par un paramètre de Registre est une mesure de durcissement. Le guide de Microsoft aligné sur l’Essential Eight du gouvernement australien montre la procédure pour distribuer à l’organisation, via Intune, un script PowerShell pour ces paramètres.19

Répartissez la pratique d’exploitation en trois points.

  • N’ouvrez pas, et ne laissez pas ouvrir, les objets dans les documents d’origine inconnue. Traitez l’activation comme une opération du même poids que l’ouverture d’un autre fichier.
  • Bloquez l’activation des packages OLE à l’échelle de l’organisation. Elle n’est presque jamais nécessaire dans le travail normal, ne vous fiez donc pas à la seule prudence individuelle.
  • N’imposez pas une interdiction générale qui s’étendrait à l’incorporation et à la liaison ordinaires dans les documents internes. Jugez le risque des packages et des documents falsifiés séparément de l’usage métier existant.

La conclusion de cet article n’est pas « interdire OLE tout entier ». Plutôt que d’arrêter le travail en interdisant uniformément même les tableaux Excel incorporés ordinaires, l’enjeu est de se concentrer sur les objets d’origine inconnue et sur les packages OLE.

7. Mécanismes internes : les rôles de COM, du stockage structuré et des monikers

À partir d’ici, l’explication se rapproche de l’implémentation, autant que nécessaire pour maintenir des applications métier et investiguer des actifs documentaires. Elle relie les symptômes vus jusqu’ici à « quel mécanisme en est responsable ».

7.1 Les trois fondations des documents composés OLE

Les documents composés OLE reposent sur COM, le stockage structuré (Structured Storage) et le transfert de données unifié (Uniform Data Transfer). En plus de IUnknown de COM, un objet expose des interfaces propres aux documents composés telles que IOleObject et IViewObject2. Un objet lié implémente en outre IOleLink.2

Fondation Responsabilité Principales interfaces
COM L’objet lui-même et le contrat pour opérer dessus IUnknown, IOleObject, IViewObject2, et IOleLink pour les liaisons
Stockage structuré Stockage hiérarchique à l’intérieur du document IStorage, IStream
Transfert de données unifié Le point d’entrée pour créer des incorporations et des liaisons à partir du copier-coller ou du glisser-déposer IDataObject

Sur le chemin du transfert de données, le serveur OLE offre ses données via IDataObject et indique au conteneur, par des formats de presse-papiers dédiés, si elles peuvent être collées comme incorporation ou comme liaison. C’est ce qui mène aux options du Collage spécial.12

Toutefois, toutes les opérations de création ne passent pas par IDataObject. Créer un nouvel objet depuis Insérer un objet, ou en créer un à partir d’un fichier existant, est un chemin distinct qui crée l’objet directement à partir d’une classe enregistrée ou d’un fichier. Les mécanismes du presse-papiers et du glisser-déposer eux-mêmes sont traités dans « Comment fonctionnent le presse-papiers et le glisser-déposer ».

7.2 Le stockage structuré est « un système de fichiers à l’intérieur d’un seul fichier »

Le stockage structuré crée, à l’intérieur d’un seul fichier, une hiérarchie de stockages (IStorage), qui correspondent à des répertoires, et de flux (IStream), qui correspondent à des fichiers. Des sous-stockages et des flux peuvent être imbriqués sous le stockage racine.20

L’implémentation standard fournie par COM est celle des fichiers composés (Compound Files). C’est un format à fichier unique que l’on peut traiter indépendamment des systèmes de fichiers tels que FAT et NTFS, et le format lui-même est publié sous le nom MS-CFB (Compound File Binary File Format).2122

Le conteneur fournit l’endroit où l’objet est enregistré. Un objet qui persiste via IPersistStorage écrit ses données dans le IStorage qu’on lui remet. Une implémentation qui utilise IPersistStream enregistre plutôt dans un IStream.2

Structure interne d'un fichier composéUn fichier composé a, sous son stockage racine, une hiérarchie de stockages qui correspondent à des répertoires et de flux qui correspondent à des fichiers ; les objets incorporés qui persistent via IPersistStorage sont enregistrés dans des sous-stockages et les objets qui persistent via IPersistStream dans des flux ; le stockage d'un objet incorporé peut porter un CLSID qui identifie l'application d'origine (il peut aussi être vide) ; le flux du cache de présentation est habituellement enregistré mais peut être absent selon le paramètre au moment de la création ; l'ensemble fonctionne comme un système de fichiers à l'intérieur d'un seul fichierStockage racine (corps du document)Flux : données du corpsStockage : incorporation (IPersistStorage)Flux : données de l'objetFlux : cache de présentation (habituel)Le CLSID peut identifier l'origine (facultatif)Flux : persistance IPersistStream

Figure 3 : une hiérarchie est construite à l’intérieur du document, et l’objet enregistre ses propres données. Distinguez la persistance via un stockage de la persistance via un flux.

Une entrée de répertoire peut porter un CLSID qui identifie l’application d’origine de l’objet. Si le stockage de l’incorporation contient un CLSID, on peut déterminer quelle application doit ouvrir l’objet. Le CLSID peut toutefois être vide, et le cache de présentation peut aussi être absent selon le paramètre au moment de la création.228

7.3 Le passage à .docx n’a pas fait disparaître le format de stockage OLE

Dans les anciens formats Office .doc / .xls, le fichier lui-même est un fichier composé. Le corps du document est stocké comme des flux, et les objets incorporés comme des sous-stockages.

Les .docx / .xlsx actuels sont des formats Open XML basés sur ZIP, mais les binaires des incorporations OLE héritées, oleObject*.bin, sont encore stockés au format fichier composé. En revanche, lorsque de nouveaux documents Office sont incorporés les uns dans les autres, un fichier tel qu’un .xlsx peut se trouver tel quel à l’intérieur du ZIP.22

Ce qui est stocké Récipient de stockage
Anciens formats Office .doc / .xls Le fichier entier est un fichier composé
Incorporations OLE héritées à l’intérieur des formats actuels Un binaire à l’intérieur du ZIP est un fichier composé
Nouveaux documents Office incorporés les uns dans les autres Peuvent être stockés à l’intérieur du ZIP comme un fichier

Autrement dit, le fichier composé n’est pas seulement « un ancien format de document » ; il survit à l’intérieur des documents actuels comme format de stockage imbriqué.

7.4 Les monikers suivent l’emplacement de la liaison ; les paramètres de la liaison régissent les mises à jour

Un moniker est un composant COM qui exprime l’emplacement d’un objet comme un nom et le résout lorsque c’est nécessaire. Cette résolution s’appelle binding. Un objet lié utilise des monikers pour gérer le nommage, le suivi et l’activation de la source de la liaison.15

IOleLink est l’interface qui fournit au conteneur la gestion de la source de la liaison. Sa présence ou son absence permet au conteneur de distinguer une incorporation d’une liaison. Même lorsqu’un document contenant une liaison est enregistré, les données de la liaison elles-mêmes sont enregistrées à la source. Ce qui reste dans le document, ce sont les informations de gestion propres à la liaison, telles que son nom et son emplacement et le paramètre de mise à jour, et habituellement un cache de présentation.15

Cette répartition du travail est ce qui mène au « le tableau est visible mais ne se met pas à jour » de la section 4.1. Si la résolution de la source échoue, les données ne peuvent pas être atteintes, et même si elles peuvent l’être, une liaison réglée sur une mise à jour manuelle n’est pas mise à jour automatiquement. Investiguer séparément la résolution d’emplacement, le paramètre de mise à jour et l’affichage mis en cache permet de ranger la cause.67

8. Comment vivre avec OLE aujourd’hui : n’ajouter aucune dépendance nouvelle, connaître celles qui existent

La politique de base est d’éviter de s’appuyer sur l’incorporation OLE dans les conceptions nouvelles, et de traiter les actifs existants en « maintenant un environnement qui peut les ouvrir » et en « dressant un inventaire ». La décision de continuer à l’utiliser se prend au cas par cas.

Situation Réponse recommandée Raison
Nouveaux flux documentaires Ne pas s’appuyer sur l’incorporation : coller sous forme d’image, partager le fichier d’origine, et ainsi de suite. Garder aussi les liaisons au minimum Évite le gonflement et une nouvelle dépendance vis-à-vis de l’environnement d’édition
Une nouvelle application métier qui doit mettre des données d’une autre application dans un document Concevoir autour d’images, de PDF ou de pièces jointes plutôt que d’implémenter un conteneur OLE Il n’y a plus aujourd’hui presque aucun cas où cela rentabilise le coût d’implémentation et de maintenance
Documents incorporés existants Maintenir un environnement qui peut les ouvrir, et conserver une version PDF à côté des documents importants Même avec les données à l’intérieur du document, on ne peut plus l’éditer une fois l’application d’origine perdue
Documents qui s’appuient fortement sur des liaisons, et une migration de serveur de fichiers Inclure un inventaire des liaisons et leurs mises à jour dans le plan de migration Les liaisons se rompent si l’emplacement après le déménagement ne peut pas être retracé
Images ou fichiers stockés dans Access Migrer vers le type Pièce jointe ou vers la gestion par chemins. Décider à part lorsque le comportement propre à OLE est nécessaire Pour un simple stockage, le type Pièce jointe est plus souple et plus efficace
Durcir l’environnement Office Bloquer l’activation des packages OLE à l’échelle de l’organisation Présenté comme une mesure de durcissement alignée sur des guides publics

Les décisions Access et sécurité correspondent chacune aussi au matériel de Microsoft lui-même.919

Pour la conservation à long terme, l’environnement qui peut ouvrir les données fait partie de l’actif, pas seulement les données. Les changements de génération des applications et les évolutions du système d’exploitation érodent l’hypothèse que l’application d’origine est disponible. Au-delà de conserver des versions PDF des documents importants, des mesures telles que maintenir un environnement qui peut les ouvrir dans une machine virtuelle sont nécessaires.

Le mécanisme OLE continue de fonctionner tant que Windows continue de préserver la compatibilité ascendante. Le fait qu’un objet individuel s’ouvre dépend toutefois de l’existence encore de l’application d’origine. Si cette hypothèse est assurée, il n’y a pas lieu de tout éliminer dans la précipitation.

L’inventaire devrait identifier trois choses : les serveurs qui détiennent les sources de liaison, les documents qui contiennent des incorporations, et les bases de données qui utilisent le type Objet OLE. Une fois ces dépendances connues, les migrations, le durcissement et les conversions peuvent entrer dans un plan.

9. Résumé

Un objet OLE est un objet COM pour traiter les données de document d’une autre application comme une incorporation ou une liaison. L’incorporation stocke les données dans le document ; la liaison référence des données à un autre emplacement. Commencez par bien tenir cette différence.245

Ensuite, pensez l’affichage, l’édition et la mise à jour séparément. Même si un cache de présentation subsiste, l’objet ne peut pas être édité sans l’application d’origine, et il ne peut pas être mis à jour si la source de la liaison ne peut pas être retracée. La façon dont il s’ouvre au double-clic varie aussi selon le type d’objet, le verbe et le support de l’activation sur place.

N’ajoutez aucune dépendance nouvelle dans les nouveaux flux, et maintenez les documents existants en connaissant l’environnement qui peut les ouvrir et vers où pointent leurs références. Pour le simple stockage d’images et de fichiers dans Access, utilisez le type Pièce jointe ou la gestion par chemins, et bloquez l’activation des packages OLE à l’échelle de l’organisation.

COM, le presse-papiers et le glisser-déposer, et les documents composés de cet article sont des facettes différentes du mot OLE. Séparer les rôles d’infrastructure de composants, de transfert de données et d’intégration dans les documents rend plus facile de suivre ce qui se passe à l’intérieur des anciens actifs métier.

Articles connexes

Domaines de conseil associés

KomuraSoft LLC prend en charge l’investigation et la migration d’actifs documentaires et de bases de données hérités impliquant OLE et COM (sortie du type Objet OLE d’Access, inventaire des documents incorporés et conversion en PDF, traitement groupé des liaisons rompues), la maintenance et la modification d’applications métier qui incluent des composants COM, et la conception d’applications intégrées à Office. Vous pouvez nous consulter dès le stade où l’on ne sait pas encore ce qui se passe lorsqu’on double-clique ce document.

Références

  1. Microsoft Learn, OLE Background. Sur le fait qu’OLE vient de l’acronyme Object Linking and Embedding, sur le fait que les documents OLE (documents composés) intègrent des données de plusieurs applications, sur la répartition des rôles entre conteneurs et serveurs, sur un aperçu de l’activation sur place (édition visuelle), et sur le fait que les éléments liés ne sont pas activés sur place.  2 3

  2. Microsoft Learn, Compound Documents. Sur le fait que les documents composés OLE reposent sur COM, le stockage structuré et le transfert de données unifié ; sur le fait que les objets de document composé sont des objets COM qui peuvent être incorporés dans un document ou liés à celui-ci et exposent des interfaces spécifiques telles que IOleObject, IOleLink et IViewObject2 ; et sur le fait que les objets gèrent leur propre persistance via IPersistStorage/IPersistStream tandis que le conteneur fournit le IStorage.  2 3 4 5

  3. Microsoft Learn, Linking and Embedding. Sur le fait qu’il existe deux sortes d’objets de document composé, liés et incorporés, et sur le fait que la différence d’emplacement des données source influe sur la portabilité, l’activation, la mise à jour et la taille. 

  4. Microsoft Learn, Embedded Objects (COM). Sur le fait que les objets incorporés sont physiquement stockés à l’intérieur du document composé avec leurs informations de gestion, sur le fait que le document est plus volumineux que lorsque l’objet est détenu comme une liaison, sur le fait que les modifications de la source ne se reflètent pas dans la copie incorporée, et sur les avantages de la portabilité (les liaisons ne se rompent pas lorsque le document est remis à un autre PC) et de l’activation sur place.  2 3

  5. Microsoft Learn, Linked Objects. Sur le fait que les données source d’un objet lié restent à la source de la liaison, seuls une référence et des informations de présentation étant stockés dans le document, sur le fait que la taille du document reste petite, sur le fait que les modifications de la source se reflètent dans chaque document qui contient la liaison, et sur le fait qu’activer une liaison démarre l’application serveur.  2 3

  6. Microsoft Learn, OLEUPDATE enumeration (oleidl.h). Sur le fait que la mise à jour du cache d’un objet lié est soit automatique (OLEUPDATE_ALWAYS), soit manuelle (OLEUPDATE_ONCALL), correspondant aux options de mise à jour automatique et manuelle de la boîte de dialogue Liaisons, et sur le fait que les mises à jour manuelles n’ont lieu que lorsque IOleObject::Update ou IOleLink::Update est appelé.  2 3

  7. Microsoft Learn, IOleCache interface (oleidl.h). Sur l’interface qui fournit le contrôle des données de présentation mises en cache à l’intérieur d’un objet, et sur le fait que les données de présentation mises en cache restent disponibles depuis le conteneur de l’objet même lorsque l’application serveur n’est pas en cours d’exécution ou est indisponible.  2 3 4 5

  8. Microsoft Learn, OLERENDER enumeration (oleidl.h). Sur l’énumération qui indique le type de cache local demandé lors de la création d’une incorporation ou d’une liaison, et sur le fait que spécifier OLERENDER_NONE ne demande aucune capacité de dessin ou d’obtention de données mise en cache localement (c’est-à-dire aucun cache de présentation).  2 3 4

  9. Microsoft Learn, DataType property (Access). Sur le fait que le type Objet OLE d’Access est un type pour incorporer ou lier dans une table des objets tels que des feuilles de calcul Excel, des documents Word, des graphiques et des sons, avec une limite d’environ 1 GB, et sur le fait que le type Pièce jointe est plus souple que le type Objet OLE et utilise le stockage plus efficacement parce qu’il ne crée pas d’image bitmap du fichier d’origine.  2 3 4 5

  10. Microsoft Learn, Dialog boxes in OLE. Sur les rôles des dialogues standard d’OLE : Insert Object (insérer un nouvel objet ou un objet issu d’un fichier existant, et l’afficher sous forme d’icône), Paste Special (choisir le format et choisir l’incorporation, la liaison ou l’affichage en icône), Change Icon, et Convert (convertir le type d’un élément incorporé ou lié).  2 3

  11. Microsoft Learn, Selection.PasteSpecial method (Word). Sur la méthode VBA équivalente au Collage spécial de Word, qui, en plus de spécifier le format de collage, contrôle le collage lié via l’argument Link et l’affichage en icône via l’argument DisplayAsIcon. 

  12. Microsoft Learn, Creating Linked and Embedded Objects from Existing Data. Sur le fait que la création d’objets incorporés et liés part d’un transfert de données IDataObject via le presse-papiers ou le glisser-déposer, sur le fait que les serveurs OLE offrent des formats de presse-papiers dédiés pour créer des incorporations et des liaisons par ordre de fidélité, et sur le fait de choisir entre incorporation et liaison avec une commande équivalente au Collage spécial.  2

  13. Microsoft Learn, IOleObject::DoVerb method (oleidl.h). Sur le fait que les verbes sont des actions définies par l’objet, sur le fait que OLEIVERB_PRIMARY, qui détermine le comportement du double-clic, est décidé par l’objet plutôt que par le conteneur, sur le fait que DoVerb démarre automatiquement l’application serveur OLE, et sur le fait que OLEIVERB_OPEN ouvre un objet incorporé dans une fenêtre distincte.  2

  14. Microsoft Learn, Implementing In-Place Activation. Sur le fait que l’activation sur place permet d’opérer sur un objet incorporé sans quitter le document conteneur, sur le fait que la barre de menus est remplacée à l’activation par une barre de menus composite qui fusionne les menus du conteneur et du serveur et est rétablie à la désactivation, sur le fait que l’implémentation est facultative pour le conteneur comme pour le serveur, et sur le fait que les objets liés s’ouvrent toujours dans une fenêtre distincte.  2

  15. Microsoft Learn, Linked Objects and Monikers. Sur le fait que les objets liés nomment la source via des monikers et gèrent le binding, qui trouve et active la source, sur le fait que IOleLink identifie un objet comme une liaison et fournit la gestion de la source, et sur le fait que les données sont enregistrées à la source lorsqu’un document contenant une liaison est enregistré tandis que le document ne stocke que le nom et l’emplacement.  2 3

  16. Microsoft Learn, Attachment object (Access). Sur le fait que le type Pièce jointe est disponible dans les bases .accdb, sur le fait que la limite des données jointes est la taille maximale de base de 2 GB avec des fichiers individuels jusqu’à 256 MB, et sur le fait que des formats d’image tels que BMP, PNG et JPEG peuvent s’afficher sans logiciel supplémentaire.  2

  17. Microsoft Learn, Microsoft Security Bulletin MS14-060 (CVE-2014-4114). Sur le fait qu’OLE est une technologie qui permet de créer et d’éditer des données composées, sur la vulnérabilité qui permet l’exécution de code arbitraire avec les droits de l’utilisateur actuel en faisant ouvrir un fichier contenant un objet OLE falsifié, sur le fait que les formats Office et de nombreux autres formats de fichier qui peuvent détenir des objets OLE peuvent contenir des objets OLE malveillants, et sur le fait que des attaques ciblées limitées exploitant cette vulnérabilité ont été observées. 

  18. Microsoft Learn, Microsoft Security Bulletin MS12-002. Sur le fait que Windows Object Packager est un outil qui crée des packages pouvant être insérés dans des fichiers, et sur la vulnérabilité d’exécution de code à distance (CVE-2012-0009) causée par son enregistrement et son implémentation incorrects, ainsi que les contournements. 

  19. Microsoft Learn, Essential Eight user application hardening. Sur le fait que le guide de durcissement aligné sur l’Essential Eight du gouvernement australien montre la procédure pour distribuer via Intune un script PowerShell qui applique les clés de Registre qui bloquent l’activation des packages OLE dans Excel, PowerPoint et Word.  2

  20. Microsoft Learn, IStorage interface (objidl.h). Sur le fait que le stockage structuré permet le stockage hiérarchique d’informations à l’intérieur d’un seul fichier et est appelé « un système de fichiers à l’intérieur d’un fichier », sur le fait que les stockages correspondent à des répertoires et les flux à des fichiers, et sur le fait que des sous-stockages et des flux peuvent être imbriqués sous le stockage racine. 

  21. Microsoft Learn, Compound Files. Sur le fait que les fichiers composés sont l’implémentation standard du stockage structuré fournie par COM, sur le fait qu’ils fonctionnent au-dessus des systèmes de fichiers plats existants comme format indépendant du système de fichiers dont les fichiers peuvent s’ouvrir de façon interchangeable entre FAT, NTFS et les systèmes de fichiers Macintosh, et sur le fait que les interfaces standard permettent d’énumérer et de parcourir les objets à l’intérieur. 

  22. Microsoft Learn, [MS-CFB]: Compound File Binary File Format. La spécification publiée du format binaire de fichier composé : la définition d’une structure de type système de fichiers qui stocke des flux de données spécifiques à l’application à l’intérieur d’un seul fichier, et les entrées de répertoire qui énumèrent stockages et flux avec leur champ CLSID.  2 3

Articles récents partageant les mêmes étiquettes, pour approfondir des sujets proches.

Ces pages replacent le sujet dans un contexte plus large de services et de décisions.

Cet article est directement lié aux services suivants.

Questions fréquentes

Questions souvent posées lors d’une consultation sur le sujet de cet article.

Quelle est la différence entre l'incorporation et la liaison ?
La différence porte sur l'endroit où se trouvent les données elles-mêmes. L'incorporation (Embedding) stocke intégralement les données de l'objet dans le document hôte. Le document devient indépendant du fichier d'origine, de sorte que le transmettre à un autre PC ne casse jamais une référence (l'édition exige toutefois que l'application d'origine soit aussi présente sur le PC destinataire ; sans elle, on ne peut consulter que le cache de présentation s'il a été enregistré, et un objet affiché sous forme d'icône ne peut pas du tout être inspecté). En contrepartie, le fichier grossit, et les modifications des données d'origine ne se reflètent pas dans le document. La liaison (Linking) ne place dans le document qu'une référence (le nom et l'emplacement de la source de la liaison), le paramètre de mise à jour et des informations de présentation, tandis que les données elles-mêmes restent dans le fichier source. Le document reste petit et les modifications de la source peuvent s'y refléter (automatiquement ou manuellement, selon le paramètre de mise à jour de la liaison), mais si la source est déplacée ou renommée de sorte qu'on ne puisse plus la retrouver, la liaison se rompt. On choisit le mode de collage dans la boîte de dialogue Collage spécial ou Insérer un objet.
Pourquoi un objet incorporé dans un document ne s'ouvre-t-il pas et ne s'édite-t-il pas par double-clic ?
La cause la plus fréquente est que l'application d'origine de cet objet n'est pas installée sur le PC actuel. Éditer un objet incorporé démarre l'application d'origine (le serveur OLE) ; sans elle, on ne peut consulter que le cache de présentation, s'il a été enregistré, et si l'objet est affiché sous forme d'icône on ne peut même pas voir son contenu. Si l'application d'origine est présente mais que l'objet ne s'ouvre toujours pas, suspectez dans cet ordre : un cas où une différence de version exige une conversion, un enregistrement de classe COM (CLSID) manquant ou endommagé qu'une réinstallation ou une opération similaire peut réparer, une corruption du côté du document, et un cas où les paramètres de sécurité bloquent l'activation.
Pourquoi les fichiers Word et Excel deviennent-ils anormalement volumineux avec des objets incorporés ?
Parce que l'incorporation est une méthode qui stocke un duplicata des données elles-mêmes à l'intérieur du document. Un document qui détient un objet sous forme d'incorporation est en général plus volumineux qu'un document qui détient le même objet sous forme de liaison. De plus, le document stocke habituellement un cache de présentation à côté des données utilisées pour l'édition (la présence d'un cache est décidée par le paramètre au moment de la création). Pour réduire le fichier, les options sont de lier plutôt que d'incorporer, de coller sous forme d'image (en acceptant qu'une réédition ne soit pas nécessaire), ou de partager le fichier d'origine à part et de ne mettre dans le document qu'une liaison ou une image. Les liaisons exigent toutefois de gérer la source, elles ne conviennent donc pas aux documents destinés à être diffusés.
Après le déménagement de notre serveur de fichiers, les objets liés dans nos documents ont cessé de se mettre à jour. Pourquoi ?
Parce que ce qu'un objet lié détient dans le document n'est pas les données elles-mêmes, mais seulement le nom et l'emplacement de la source de la liaison (un moniker), le paramètre de mise à jour et un cache de présentation. Lorsque l'emplacement de la source change par un déménagement de serveur de fichiers, un renommage de dossier, une modification du chemin de partage ou un cas similaire, et que le nouvel emplacement ne peut plus être retracé, la résolution de la liaison échoue et seul l'ancien cache de présentation reste dans le document (pour un objet créé avec un paramètre qui n'enregistre pas de cache, même cet affichage disparaît). Pour réparer, redirigez le chemin de la source vers le nouvel emplacement depuis Liaisons dans chaque document. Notez que si le chemin est correct mais que l'objet ne se met toujours pas à jour, la liaison peut simplement être réglée sur une mise à jour manuelle plutôt que rompue ; vérifiez aussi le paramètre de méthode de mise à jour. S'il y a beaucoup de documents, dressez un inventaire des documents qui contiennent des liaisons avant le déménagement et, si possible, intégrez une mise à jour groupée des liaisons au plan.
On m'a dit que les objets OLE étaient un risque de sécurité. Peut-on continuer à les utiliser ?
La structure d'OLE, qui introduit l'objet d'une autre application dans un document et l'exécute du côté qui l'ouvre, est aussi un véhicule de livraison commode pour les attaquants, et des vulnérabilités d'exécution de code arbitraire via des objets OLE falsifiés ont été utilisées dans de vraies attaques ciblées. Les packages OLE, qui peuvent envelopper un fichier quelconque, sont particulièrement dangereux, et des guides publics tels que l'Essential Eight du gouvernement australien recommandent d'interdire l'activation des packages OLE dans Word, Excel et PowerPoint par un paramètre de Registre. Il n'est pas nécessaire d'imposer une interdiction générale qui s'étendrait à l'incorporation et à la liaison ordinaires dans les documents internes ; le juste milieu réaliste est de ne pas ouvrir les objets dans les documents d'origine inconnue et de bloquer l'activation des packages OLE à l'échelle de l'organisation.

Profil de l’auteur

Page de présentation de l’auteur de l’article.

Go Komura

Représentant de KomuraSoft LLC

Spécialisé dans le développement de logiciels Windows, le conseil technique et l’analyse de pannes, notamment pour les systèmes existants et les incidents difficiles à reproduire.

Retour au blog