Partager via


Inscription et distribution de gestionnaires de propriétés

Cette rubrique explique comment créer et inscrire des gestionnaires de propriétés pour utiliser le système de propriétés Windows.

Cette rubrique est organisée comme suit :

Inscription et distribution de gestionnaires de propriétés

Une fois le gestionnaire de propriétés implémenté, il doit être inscrit et son extension de nom de fichier doit être associée au gestionnaire. L’exemple suivant utilisant l’extension .recipe illustre les entrées de Registre requises pour ce faire.

HKEY_CLASSES_ROOT
   CLSID
      {50d9450f-2a80-4f08-93b9-2eb526477d1a}
         (Default) = Recipe Property Handler
         ManualSafeSave [REG_DWORD] = 00000001
         InProcServer32
            (Default) = C:\\SDK\\PropertyHandlerSample\\bin\\RecipeHandlers.dll
            ThreadingModel = Apartment
HKEY_LOCAL_MACHINE
   SOFTWARE
      Microsoft
         Windows
            CurrentVersion
               PropertySystem
                  PropertyHandlers
                     .recipe
                        (Default) = {50d9450f-2a80-4f08-93b9-2eb526477d1a}

Les gestionnaires de propriétés pour un type de fichier particulier sont généralement distribués avec les applications qui créent ou manipulent des fichiers de ce type. Toutefois, vous devez également envisager de rendre vos gestionnaires de propriétés disponibles indépendamment de ces applications pour prendre en charge l’indexation de votre type de fichier dans les scénarios de serveur où les gestionnaires de propriétés sont utilisés par l’indexeur, mais leurs applications associées ne sont pas nécessaires. Si vous créez un package d’installation autonome pour votre gestionnaire de propriétés, assurez-vous qu’il inclut les éléments suivants :

  • Détails d’inscription du gestionnaire de propriétés spécifiés dans la rubrique Inscription et distribution des gestionnaires de propriétés.
  • Inscription pour votre type de fichier et tous les fichiers de schéma qui doivent être installés pour permettre aux clients d’accéder à toutes les fonctionnalités de votre gestionnaire de propriétés.

Considérations relatives aux performances et à la fiabilité pour les gestionnaires de propriétés

Les gestionnaires de propriétés sont appelés pour chaque fichier sur un ordinateur particulier. Ils sont généralement appelés dans les circonstances suivantes :

  • Pendant l’indexation du fichier. Cette opération est effectuée hors processus, dans un processus isolé avec des droits restreints.
  • Lorsque des fichiers sont accessibles dans Windows Explorer à des fins de lecture et d’écriture de valeurs de propriété. Cette opération est effectuée in-process.

Recommandations en matière de performances et de fiabilité

À tout moment, un utilisateur peut avoir des dizaines de milliers de fichiers de n’importe quel type spécifique (y compris le vôtre) sur son ordinateur, et peut accéder ou modifier tout ou partie de ces fichiers à tout moment. Étant donné que les gestionnaires de propriétés sont fréquemment appelés pour prendre en charge ces opérations d’accès et de modification, les caractéristiques de performances et de fiabilité de votre gestionnaire de propriétés dans des environnements occupés et très simultanés sont d’une importance critique.

Gardez à l’esprit les instructions suivantes lorsque vous développez et testez votre gestionnaire de propriétés.

  • Énumération de propriétés

    Les gestionnaires de propriétés doivent avoir un temps de réponse très rapide lors de l’énumération de leurs propriétés. Les calculs gourmands en mémoire des valeurs de propriété, les recherches réseau ou la recherche de ressources autres que le fichier lui-même doivent être évités pour garantir des temps de réponse rapides.

  • Écriture de propriétés sur place

    Si possible, lors du traitement de fichiers de taille moyenne ou volumineuse (plusieurs centaines de Ko ou plus), le format de fichier doit être organisé de sorte que la lecture ou l’écriture des valeurs de propriété ne nécessitent pas la lecture du fichier entier à partir du disque. Même si le fichier doit être recherché, il ne doit pas être lu en mémoire dans son intégralité, car cela surcharge l’ensemble de travail de Windows Explorer ou l’indexeur Recherche Windows lorsqu’ils tentent d’accéder à ces fichiers ou d’indexer. Pour plus d’informations, consultez Initialisation des gestionnaires de propriétés.

    Une technique utile pour ce faire consiste à remplir l’en-tête du fichier avec un espace supplémentaire afin que la prochaine fois qu’une valeur de propriété doit être écrite, la valeur peut être écrite sur place sans avoir à réécrire le fichier entier. Cela nécessite la fonctionnalité ManualSafeSave. Cette approche implique un risque supplémentaire d’interruption de l’opération d’écriture de fichier pendant l’écriture (en raison d’un blocage du système ou d’une perte de courant), mais comme les tailles de propriété sont généralement faibles, la probabilité d’une telle interruption est tout aussi faible et les gains de performances qui peuvent être réalisés par l’écriture de propriétés sur place sont considérés comme suffisamment importants pour justifier ce risque supplémentaire. Malgré cela, vous devez prendre soin de tester votre implémentation de manière approfondie pour vous assurer que vos fichiers ne sont pas endommagés en cas de défaillance au cours d’une opération d’écriture.

    Enfin, lors de l’implémentation de l’écriture de propriétés sur place avec ManualSafeSave, l’opération ne peut parfois pas être effectuée sur place et l’ensemble du flux doit être réécrit de toute façon. Pour faciliter la réécriture, le flux fourni lors de l’initialisation du gestionnaire prend en charge l’interface IDestinationStreamFactory . L’interface IDestinationStreamFactory permet aux implémentations de gestionnaires d’obtenir un flux temporaire pour l’écriture ; Lorsque toutes les écritures sont terminées et que la méthode IDestinationStreamFactory::GetDestinationStream est appelée, ce flux est utilisé pour remplacer entièrement le flux de fichier d’origine. Lorsque le flux de destination est utilisé, le flux de fichier d’origine doit être traité en lecture seule, car il sera remplacé par le flux de destination après l’appel de la méthode IDestinationStreamFactory::GetDestinationStream .

  • Choix de votre modèle de thread COM

    Pour optimiser l’efficacité de votre gestionnaire de propriétés, vous devez spécifier qu’il utilise le modèle Bothde thread COM . Cela permet un accès direct à partir des appartements STA (Windows Explorer, par exemple) et des appartements de l’agent de transfert de messages (MTA) (le processus SearchProtocolHost dans Windows Search, par exemple), ce qui évite la surcharge du marshaling dans ces environnements. Pour bénéficier pleinement du modèle de Both threading, tous les services dont dépend votre gestionnaire doivent également être désignés pour Both éviter tout marshaling dans les appels à ces composants. Consultez la documentation de ces services particuliers pour vérifier s’ils utilisent ce modèle de thread.

  • Accès concurrentiel au gestionnaire de propriétés

    Les gestionnaires de propriétés et l’interface IPropertyStore sont conçus pour un accès en série plutôt qu’un accès simultané. Windows Explorer, l’indexeur Windows Search et tous les autres appels de gestionnaires de propriétés à partir du codebase Windows garantissent cette utilisation. Il ne doit y avoir aucune raison pour que des tiers utilisent un gestionnaire de propriétés simultanément, mais ce comportement ne peut pas être garanti. En outre, même si le modèle d’appel est censé être série, les appels peuvent être effectués sur différents threads (pour instance, lorsque l’objet est appelé à distance via COM RPC, comme cela se produit dans l’indexeur). Par conséquent, les implémentations de gestionnaires de propriétés doivent prendre en charge l’appel sur différents threads et, dans l’idéal, ne doivent pas subir d’effets indésirables lorsqu’elles sont appelées simultanément. Étant donné que le modèle d’appel prévu est en série, une implémentation triviale utilisant une section critique doit être suffisante pour répondre à ces exigences dans la plupart des cas. Il est acceptable d’éviter de bloquer les appels simultanés à l’aide de la fonction TryEnterCriticalSection pour détecter et échouer les appels simultanés.

  • Accès concurrentiel aux fichiers

    Les gestionnaires de propriétés sont souvent utilisés dans les scénarios où plusieurs applications accèdent simultanément à un fichier. Par conséquent, le gestionnaire et les applications doivent gérer l’accès concurrentiel en spécifiant les modes de partage appropriés lors de l’ouverture du fichier. Ils doivent également connaître l’accès spécifié par les autres applications et gérer les cas où l’accès n’est pas autorisé. Il est préférable que tous les consommateurs spécifient des modes de partage libéral pour permettre à d’autres utilisateurs d’accéder simultanément au fichier, mais dans ce cas, les problèmes de cohérence doivent être gérés. Les décisions sur les modes de partage les plus appropriés à utiliser doivent être prises dans le contexte de la communauté d’applications qui accèdent au fichier.

    Les systèmes de fichiers permettent aux applications d’ouvrir des fichiers d’une manière qui leur permet de contrôler si et comment d’autres applications peuvent ouvrir le fichier. Les modes de partage permettent l’accès en lecture, écriture et suppression. Le système de propriétés prend en charge un sous-ensemble de ces modes de partage, décrits dans le tableau suivant.

    Mode d’accès Mode de partage
    Write Refuser d’autres lecteurs et écrivains
    Write (EnableShareDenyWrite) Activer d’autres lecteurs, refuser d’autres rédacteurs
    Lecture seule (par défaut) Activer d’autres lecteurs, refuser d’autres rédacteurs
    Lecture seule (EnableShareDenyNone) Activer d’autres lecteurs et rédacteurs

     

    Les gestionnaires de propriétés ouverts pour l’écriture (GPS_READWRITE) refusent d’autres lecteurs et rédacteurs. Les gestionnaires peuvent choisir un comportement qui active les lecteurs en spécifiant l’indicateur EnableShareDenyWrite (ce qui implique d’activer la lecture) dans son inscription.

    Les gestionnaires de propriétés ouverts pour la lecture (GPS_DEFAULT) activent par défaut d’autres lecteurs, mais refusent d’autres enregistreurs. Les gestionnaires peuvent choisir d’activer d’autres enregistreurs en spécifiant l’indicateur EnableShareDenyNone dans son inscription. Cela signifie qu’un gestionnaire peut gérer correctement une situation dans laquelle le contenu d’un fichier change pendant que le gestionnaire lit le fichier.

    Pour les définitions d’indicateurs, consultez GETPROPERTYSTOREFLAGS.

Présentation des gestionnaires de propriétés

Utilisation de noms de type

Utilisation de listes de propriétés

Initialisation des gestionnaires de propriétés

Meilleures pratiques et QUESTIONS FRÉQUENTES (FAQ) sur les gestionnaires de propriétés