Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Sağlayıcı uygulaması bir veya daha fazla sanallaştırma örneği tutar. Her sanallaştırma örneği yaşam döngüsünde dört aşamadan geçer:
- Yaratım
- Başlangıç
- Çalışma zamanı
- Kapatma
Bir sanallaştırma örneğini kapattıktan sonra sağlayıcının yeniden kullanmak için yeniden oluşturması gerekmediğini unutmayın. Yeniden başlatabilir.
Not: Bu bölümde ProjFS API'lerinin örnekleri gösterilmektedir. Her örnek temel API kullanımını göstermeye yöneliktir. Bu örneklerde kullanılmayan seçeneklerin belgeleri için lütfen ProjFS API başvurusubaşvurun.
Sanallaştırma kökü oluşturma
Bir sağlayıcının öğeleri yerel dosya sistemine yansıtacak sanallaştırma örneğini başlatabilmesi için önce sanallaştırma kökünü oluşturması gerekir. Sanallaştırma kökü, sağlayıcının dizin ve dosya ağacını projelediği dizindir.
Sanallaştırma kökü oluşturmak için sağlayıcının aşağıdakileri yapması gerekir:
Sanallaştırma kökü olarak görev yapmak için bir dizin oluşturun.
Sağlayıcı kullanarak sanallaştırma kökü işlevi görecek bir dizin oluşturur, örneğin 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; }Sanallaştırma örneği kimliği oluşturun.
Her sanallaştırma örneğinin sanallaştırma örneği kimliği adlı benzersiz bir kimliği vardır. Sistem, içeriğinin ilişkilendirildiği sanallaştırma örneğini belirlemek için bu değeri kullanır.
GUID instanceId; hr = CoCreateGuid(&instanceId); if (FAILED(hr)) { wprintf(L"Failed to create instance ID (0x%08x)\n", hr); return; }Yeni dizini sanallaştırma kökü olarak işaretleyin.
Sağlayıcı, yeni dizini sanallaştırma kökü olarak işaretlemek ve sanallaştırma örneğine atamak için prjMarkDirectoryAsPlaceholderçağırır.
hr = PrjMarkDirectoryAsPlaceholder(rootName, nullptr, nullptr, &instanceId); if (FAILED(hr)) { wprintf(L"Failed to mark virtualization root (0x%08x)\n", hr); return; }
Sağlayıcının her sanallaştırma örneği için yalnızca bir kez sanallaştırma kökü oluşturması gerekir. Bir kök oluşturulduktan sonra, ilişkili örneği tekrar tekrar başlatılabilir ve kök yeniden oluşturulmadan durdurulabilir.
Sanallaştırma örneği başlatma
Sanallaştırma kökü oluşturulduktan sonra sağlayıcının sanallaştırma örneğini başlatması gerekir. Bu, ProjFS'ye sağlayıcının geri çağırmaları almaya ve veri sağlamaya hazır olduğunu bildirir.
Sanallaştırma örneğini başlatmak için sağlayıcının aşağıdakileri yapması gerekir:
Geri çağırma tablosunu ayarlayın.
ProjFS, sağlayıcı tarafından uygulanan geri çağırma yordamlarını çağırarak sağlayıcıyla iletişim kurar. Sağlayıcı, bir PRJ_CALLBACKS yapısını geri çağırma yordamlarına yönelik işaretçilerle doldurur.
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;Örneği başlatın.
Sağlayıcı, sanallaştırma örneğini başlatmak için PrjStartVirtualizing çağırır.
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; }PrjStartVirtualizing's instanceHandle parametresi sanallaştırma örneğine bir tanıtıcı döndürür. Sağlayıcı, diğer ProjFS API'lerini çağırırken bu tanıtıcıyı kullanır.
Sanallaştırma örneği çalışma zamanı
prjStartVirtualizing çağrısı döndürdüğünde, ProjFS sanallaştırma örneğindeki dosya sistemi işlemlerine yanıt olarak sağlayıcının geri çağırma yordamlarını çağırır. Sağlayıcının çeşitli dosya sistemi işlemlerini nasıl işleyebileceği hakkında bilgi için aşağıdaki bölümlere bakın:
- Dosya ve Dizinleri Numaralandırma
- Dosya Verileri sağlama
- Dosya Sistemi İşlem Bildirimleri
- görünüm değişikliklerini işleme
Sanallaştırma örneğini kapatma
ProjFS'ye sağlayıcının geri çağırmaları almayı ve veri sağlamayı durdurmak istediğini haber vermek için sağlayıcının sanallaştırma örneğini durdurması gerekir. Bunu yapmak için sağlayıcı PrjStopVirtualizingçağrısı yapar ve PrjStartVirtualizingçağrısından aldığı sanallaştırma örneğine tanıtıcıyı iletir.
PrjStopVirtualizing(instanceHandle);
Bu çağrı dönene kadar ProjFS'nin sağlayıcının geri çağırma yordamlarını çağırmaya devam olabileceğini unutmayın.