Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La aplicación de proveedor mantiene una o varias instancias de virtualización. Cada instancia de virtualización pasa por cuatro fases en su ciclo de vida:
- Creación
- Arranque
- Ejecución
- Apagado
Tenga en cuenta que después de apagar una instancia de virtualización, el proveedor no necesita volver a crearla para reutilizarla. Simplemente puede iniciarlo de nuevo.
Nota: en esta sección se muestran ejemplos de API de ProjFS. Cada ejemplo está diseñado para ilustrar el uso básico de la API. Para obtener documentación sobre las opciones que no se usan en estos ejemplos, consulte la referencia de api de ProjFS.
Creación de una raíz de virtualización
Para que un proveedor pueda iniciar la instancia de virtualización que proyectará elementos en el sistema de archivos local, debe crear la raíz de virtualización. La raíz de virtualización es el directorio en el que el proveedor proyecta un árbol de directorios y archivos.
Para crear una raíz de virtualización, el proveedor debe:
Cree un directorio para que actúe como raíz de virtualización.
El proveedor crea un directorio para que actúe como raíz de virtualización mediante, por ejemplo, CreateDirectory:
HRESULT hr; const wchar_t* rootName = LR"(C:\virtRoot)"; if (!CreateDirectoryW(rootName, nullptr)) { hr = HRESULT_FROM_WIN32(GetLastError()); wprintf(L"Failed to create virtualization root (0x%08x)\n", hr); return; }Cree un identificador de instancia de virtualización.
Cada instancia de virtualización tiene un identificador único denominado id. de instancia de virtualización de . El sistema usa este valor para identificar a qué instancia de virtualización está asociada su contenido.
GUID instanceId; hr = CoCreateGuid(&instanceId); if (FAILED(hr)) { wprintf(L"Failed to create instance ID (0x%08x)\n", hr); return; }Marque el nuevo directorio como raíz de virtualización.
El proveedor llama a PrjMarkDirectoryAsPlaceholder para marcar el nuevo directorio como raíz de virtualización y asignarlo a la instancia de virtualización.
hr = PrjMarkDirectoryAsPlaceholder(rootName, nullptr, nullptr, &instanceId); if (FAILED(hr)) { wprintf(L"Failed to mark virtualization root (0x%08x)\n", hr); return; }
El proveedor solo necesita crear la raíz de virtualización una vez para cada instancia de virtualización. Una vez creada una raíz, su instancia asociada se puede iniciar y detener repetidamente sin volver a crear la raíz.
Inicio de una instancia de virtualización
Una vez creada la raíz de virtualización, el proveedor debe iniciar la instancia de virtualización. Esto indica a ProjFS que el proveedor está listo para recibir devoluciones de llamada y proporcionar datos.
Para iniciar la instancia de virtualización, el proveedor debe:
Configure la tabla de devolución de llamada.
ProjFS se comunica con el proveedor invocando rutinas de devolución de llamada implementadas por el proveedor. El proveedor rellena una estructura de PRJ_CALLBACKS con punteros a sus rutinas de devolución de llamada.
PRJ_CALLBACKS callbackTable; // Supply required callbacks. callbackTable.StartDirectoryEnumerationCallback = MyStartEnumCallback; callbackTable.EndDirectoryEnumerationCallback = MyEndEnumCallback; callbackTable.GetDirectoryEnumerationCallback = MyGetEnumCallback; callbackTable.GetPlaceholderInfoCallback = MyGetPlaceholderInfoCallback; callbackTable.GetFileDataCallback = MyGetFileDataCallback; // The rest of the callbacks are optional. callbackTable.QueryFileNameCallback = nullptr; callbackTable.NotificationCallback = nullptr; callbackTable.CancelCommandCallback = nullptr;Inicie la instancia.
El proveedor llama a PrjStartVirtualizing para iniciar la instancia de virtualización.
PRJ_NAMESPACE_VIRTUALIZATION_CONTEXT instanceHandle; hr = PrjStartVirtualizing(rootName, &callbackTable, nullptr, nullptr, &instanceHandle); if (FAILED(hr)) { wprintf(L"Failed to start the virtualization instance (0x%08x)\n", hr); return; }parámetro PrjStartVirtualizinginstanceHandle devuelve un identificador a la instancia de virtualización. El proveedor usa este identificador al llamar a otras API de ProjFS.
Tiempo de ejecución de la instancia de virtualización
Una vez que la llamada a PrjStartVirtualizing devuelve, ProjFS invocará las rutinas de devolución de llamada del proveedor en respuesta a las operaciones del sistema de archivos en la instancia de virtualización. Para obtener información sobre cómo el proveedor puede controlar varias operaciones del sistema de archivos, consulte las secciones siguientes:
- enumerar archivos y directorios
- proporcionar de datos de archivos
- Notificaciones de operación del sistema de archivos de
- control de cambios de vista
Apagar una instancia de virtualización
Para indicar a ProjFS que el proveedor quiere dejar de recibir devoluciones de llamada y proporcionar datos, el proveedor debe detener la instancia de virtualización. Para ello, el proveedor llama a PrjStopVirtualizing, pasando el identificador a la instancia de virtualización que recibió de la llamada a PrjStartVirtualizing.
PrjStopVirtualizing(instanceHandle);
Tenga en cuenta que hasta que se devuelva esta llamada, ProjFS puede seguir invocando las rutinas de devolución de llamada del proveedor.