Registro y distribución de controladores de propiedades
En este tema se explica cómo crear y registrar controladores de propiedades para trabajar con el sistema de propiedades de Windows.
Este tema se organiza de la siguiente manera:
- Registro y distribución de controladores de propiedades
- Consideraciones de rendimiento y confiabilidad para los controladores de propiedades
- Temas relacionados
Registro y distribución de controladores de propiedades
Una vez implementado el controlador de propiedades, debe registrarse y su extensión de nombre de archivo debe estar asociada al controlador. En el ejemplo siguiente, con la extensión .recipe se muestran las entradas del Registro necesarias para hacerlo.
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}
Los controladores de propiedades de un tipo de archivo determinado se distribuyen normalmente con las aplicaciones que crean o manipulan archivos de ese tipo. Sin embargo, también debe considerar la posibilidad de que los controladores de propiedades estén disponibles independientemente de estas aplicaciones para admitir la indexación del tipo de archivo en escenarios de servidor en los que el indexador usa controladores de propiedades, pero sus aplicaciones complementarias no son necesarias. Si crea un paquete de instalación independiente para el controlador de propiedades, asegúrese de que incluye lo siguiente:
- Los detalles de registro del controlador de propiedades especificados en el tema Registrar y distribuir controladores de propiedades.
- Registro para el tipo de archivo y los archivos de esquema que se deben instalar, para permitir que los clientes accedan a todas las características del controlador de propiedades.
Consideraciones de rendimiento y confiabilidad para los controladores de propiedades
Los controladores de propiedades se invocan para cada archivo de un equipo determinado. Normalmente se les llama en las siguientes circunstancias:
- Durante la indexación del archivo. Esto se realiza fuera de proceso, en un proceso aislado con derechos restringidos.
- Cuando se accede a los archivos en el Explorador de Windows con el fin de leer y escribir valores de propiedad. Esto se realiza en proceso.
Directrices para el rendimiento y la confiabilidad
En cualquier momento, un usuario podría tener decenas de miles de archivos de cualquier tipo específico (incluidos los suyos) en sus equipos, y podría acceder o modificar cualquiera o todos estos archivos en cualquier momento. Dado que los controladores de propiedades se invocan con frecuencia para admitir estas operaciones de acceso y modificación, las características de rendimiento y confiabilidad del controlador de propiedades en entornos muy ocupados y muy simultáneos es de importancia crítica.
Tenga en cuenta las siguientes directrices a medida que desarrolla y prueba el controlador de propiedades.
Enumeración de propiedades
Los controladores de propiedades deben tener un tiempo de respuesta muy rápido para enumerar sus propiedades. Los cálculos intensivos de memoria de los valores de propiedad, las búsquedas de red o la búsqueda de recursos que no sean el propio archivo deben evitarse para garantizar tiempos de respuesta rápidos.
Escritura de propiedades en contexto
Si es posible, cuando se trabaja con archivos de tamaño mediano o grande (varios cientos de KB o más), el formato de archivo debe organizarse para que los valores de propiedad de lectura o escritura no requieran leer todo el archivo del disco. Incluso si es necesario buscar el archivo, no debe leerse en la memoria en su totalidad porque eso sobredimensiona el conjunto de trabajo del Explorador de Windows o el indexador de Windows Search a medida que intentan acceder a estos archivos o indexarlos. Para obtener más información, vea Inicializar controladores de propiedades.
Una técnica útil para lograr esto es rellenar el encabezado del archivo con espacio adicional para que la próxima vez que se deba escribir un valor de propiedad, el valor se puede escribir en su lugar sin necesidad de volver a escribir todo el archivo. Esto requiere la funcionalidad ManualSafeSave. Este enfoque implica un riesgo adicional de que la operación de escritura de archivos se interrumpa mientras la escritura está en curso (debido a un bloqueo del sistema o pérdida de energía), pero dado que los tamaños de propiedad suelen ser pequeños, la probabilidad de que esta interrupción sea similar a pequeña, y las ganancias de rendimiento que se pueden realizar mediante escritura de propiedades en contexto se consideran lo suficientemente significativas como para justificar este riesgo adicional. Incluso así, debe tener cuidado de probar la implementación ampliamente para asegurarse de que los archivos no están dañados en caso de que se produzca un error en el transcurso de una operación de escritura.
Por último, al implementar la escritura de propiedades en contexto con ManualSafeSave, a veces no se puede realizar la operación en contexto y todo el flujo debe volver a escribirse de todos modos. Para facilitar la reescritura, la secuencia proporcionada durante la inicialización del controlador admite la interfaz IDestinationStreamFactory . La interfaz IDestinationStreamFactory permite que las implementaciones del controlador obtengan una secuencia temporal para escribir; cuando se completan todas las escrituras y se llama al método IDestinationStreamFactory::GetDestinationStream , esta secuencia se usa para reemplazar completamente la secuencia de archivos original. Cuando se usa la secuencia de destino, la secuencia de archivo original debe tratarse como de solo lectura, ya que se reemplazará por la secuencia de destino después de llamar al método IDestinationStreamFactory::GetDestinationStream .
Elección del modelo de subprocesos COM
Para maximizar la eficacia del controlador de propiedades, debe especificar que usa el modelo
Both
de subprocesos COM . Esto permite el acceso directo desde apartamentos STA (Explorador de Windows, por ejemplo) y apartamentos del agente de transferencia de mensajes (MTA) (el proceso SearchProtocolHost en Windows Search, por ejemplo), evitando la sobrecarga de serialización en esos entornos. Para lograr la ventaja completa delBoth
modelo de subprocesos, los servicios en los que depende el controlador también se deben designar comoBoth
para evitar cualquier serialización en las llamadas a esos componentes. Compruebe la documentación de estos servicios concretos para comprobar si usan este modelo de subprocesos.Simultaneidad del controlador de propiedades
Los controladores de propiedades y la interfaz IPropertyStore están diseñados para el acceso serie en lugar de simultáneo. El Explorador de Windows, el indexador de Windows Search y todas las demás invocaciones del controlador de propiedades del código base de Windows garantizan este uso. No debe haber ninguna razón para que terceros usen un controlador de propiedades simultáneamente, pero no se puede garantizar este comportamiento. Además, aunque se espera que el patrón de llamada sea serie, las llamadas pueden aparecer en subprocesos diferentes (por ejemplo, cuando se llama al objeto de forma remota a través de RPC COM, como ocurre en el indexador). Por lo tanto, las implementaciones del controlador de propiedades deben admitir la llamada en subprocesos diferentes y, idealmente, no deben sufrir ningún efecto grave cuando se llama simultáneamente. Dado que el patrón de llamada previsto es serial, una implementación trivial mediante una sección crítica debe ser suficiente para cumplir estos requisitos en la mayoría de los casos. Es aceptable evitar el bloqueo en las llamadas simultáneas mediante la función TryEnterCriticalSection para detectar y producir errores en las llamadas simultáneas.
Simultaneidad de archivos
Los controladores de propiedades se suelen usar en escenarios en los que varias aplicaciones acceden a un archivo simultáneamente. Por lo tanto, el controlador y las aplicaciones deben administrar la simultaneidad especificando los modos de uso compartido adecuados al abrir el archivo. También deben tener en cuenta el acceso que las demás aplicaciones especifican y para administrar los casos en los que no se permite el acceso. Es mejor si todos los consumidores especifican modos de uso compartido liberales para permitir que otros usuarios accedan al archivo simultáneamente, pero al hacerlo, es necesario administrar los problemas de coherencia. Es necesario tomar decisiones sobre los modos de uso compartido más adecuados en el contexto de la comunidad de aplicaciones que acceden al archivo.
Los sistemas de archivos permiten a las aplicaciones abrir archivos de forma que les proporcione control sobre si otras aplicaciones pueden abrir el archivo y cómo pueden abrirlo. Los modos de uso compartido permiten el acceso de lectura, escritura y eliminación. El sistema de propiedades admite un subconjunto de estos modos de uso compartido, descritos en la tabla siguiente.
Modo de acceso Modo de uso compartido Escritura Denegar otros lectores y escritores Escritura (EnableShareDenyWrite) Habilitar otros lectores, denegar otros escritores Solo lectura (valor predeterminado) Habilitar otros lectores, denegar otros escritores Solo lectura (EnableShareDenyNone) Habilitar otros lectores y escritores Los controladores de propiedades abiertos para escritura (GPS_READWRITE) denegarán a otros lectores y escritores. Los controladores pueden optar por el comportamiento que permite a los lectores especificar la
EnableShareDenyWrite
marca (lo que implica habilitar La lectura) en su registro.Los controladores de propiedades se abren para lectura (GPS_DEFAULT), de forma predeterminada habilitan otros lectores, pero deniegan otros escritores. Los controladores pueden optar por habilitar otros escritores especificando la
EnableShareDenyNone
marca en su registro. Esto significa que un controlador puede controlar correctamente una situación en la que el contenido de un archivo cambia mientras el controlador lee el archivo.Para obtener definiciones de marcas, vea GETPROPERTYSTOREFLAGS.
Temas relacionados