Membangun Mesin Sinkronisasi Cloud yang Mendukung File Penunjuk

Mesin sinkronisasi adalah layanan yang menyinkronkan file, biasanya antara host jarak jauh dan klien lokal. Mesin sinkronisasi pada Windows sering menyajikan file tersebut kepada pengguna melalui sistem file Windows dan File Explorer. Sebelum Windows 10, versi 1709, dukungan untuk mesin sinkronisasi di Windows terbatas pada area ad-hoc yang tidak bergantung pada skenario tertentu, seperti panel navigasi File Explorer, baki sistem Windows, serta (untuk aplikasi yang lebih teknis) pada driver filter sistem file.

Windows 10 versi 1709 (juga disebut Fall Creators Update) memperkenalkan API file cloud. API ini adalah platform baru yang memformalkan dukungan untuk mesin sinkronisasi. API file cloud menyediakan dukungan untuk mesin sinkronisasi dengan cara yang menawarkan banyak manfaat baru bagi pengembang dan pengguna akhir.

API file cloud berisi API Win32 asli dan API Windows Runtime (WinRT) berikut:

  • API Filter Cloud: API Win32 asli ini menyediakan fungsionalitas di batas antara mode pengguna dan sistem file. API ini menangani pembuatan dan pengelolaan file dan direktori tempat penampung.
  • namespace Windows.Storage.Provider: API WinRT ini memungkinkan aplikasi untuk mengonfigurasi penyedia penyimpanan cloud dan mendaftarkan poin sinkronisasi dengan sistem operasi.

Nota

API file cloud saat ini tidak mendukung penerapan mesin sinkronisasi cloud di aplikasi UWP. Mesin sinkronisasi cloud harus diimplementasikan di aplikasi desktop.

Fitur yang didukung

API file cloud menyediakan fitur berikut untuk membangun mesin sinkronisasi cloud.

File tempat penampung

  • Mesin sinkronisasi dapat membuat berkas placeholder yang hanya menggunakan penyimpanan 1 KB untuk header sistem file, dan yang secara otomatis berubah menjadi berkas penuh dalam kondisi penggunaan normal. Berkas penampung ditampilkan sebagai berkas biasa kepada aplikasi dan pengguna akhir di Windows Shell.
  • File tempat penampung terintegrasi secara vertikal dari kernel Windows hingga Windows Shell, dan kompatibilitas aplikasi dengan file tempat penampung umumnya bukan masalah. Apakah Anda menggunakan API sistem file, Command Prompt, desktop, atau aplikasi UWP untuk mengakses file placeholder, file dapat diakses tanpa perubahan kode tambahan dan aplikasi tersebut dapat menggunakan file secara normal.
  • File dapat ada dalam tiga status:
    • File tempat penampung: Representasi file kosong dan hanya tersedia jika layanan sinkronisasi tersedia.
    • File lengkap: File telah diisi ulang secara implisit dan dapat dikosongkan oleh sistem jika diperlukan ruang.
    • File lengkap yang disematkan: File telah dihidrasi secara eksplisit oleh pengguna melalui File Explorer dan dijamin tersedia secara offline.

Gambar berikut menunjukkan bagaimana status file lengkap tempat penampung, penuh, dan disematkan ditampilkan di File Explorer.

Contoh tiga status file di File Explorer

Pencatatan akar sinkronisasi yang distandarisasi

  • Pendaftaran root sinkronisasi itu mudah dan sudah terstandarisasi. Ini termasuk pembuatan simpul bermerk di panel navigasi File Explorer, seperti yang ditunjukkan pada cuplikan layar berikut. Akar dapat dibuat baik sebagai entri tingkat atas individual, atau sebagai turunan dari pengelompokan induk.

    Contoh entri sinkronisasi root di *File Explorer*

Integrasi shell

  • Ikon status:
    • API file cloud menyediakan ikon status hidrasi otomatis standar yang ditampilkan di File Explorer dan di desktop Windows.
    • Selain ikon status Windows standar yang digunakan untuk status hidrasi, Anda dapat menyediakan ikon status kustom untuk properti khusus layanan tambahan.
    • Menggantikan ekstensi Shell overlay ikon lama.
  • Indikasi kemajuan:
    • Membuka file tempat penampung yang membutuhkan waktu lebih dari beberapa detik untuk dihidrasi akan menunjukkan kemajuan hidrasi. Kemajuan ditampilkan di beberapa lokasi tergantung pada konteks:
      • Di jendela dialog mesin salin.
      • Kemajuan sebaris diperlihatkan di samping file di File Explorer.
      • Jika file tidak dibuka pada instruksi spesifik pengguna, pemberitahuan toast ditampilkan untuk memberi tahu pengguna dan menyediakan cara untuk mengontrol aktivitas hidrasi yang tidak diinginkan.
  • Gambar mini dan metadata:
    • File placeholder dapat memiliki gambar mini kaya yang disediakan oleh layanan, serta metadata file yang ditingkatkan untuk memberikan pengguna pengalaman File Explorer yang mulus.
  • Panel navigasi File Explorer:
    • Mendaftarkan akar sinkronisasi dengan API file cloud menyebabkan akar sinkronisasi (dengan ikon dan nama kustom) muncul di panel navigasi File Explorer.
  • Menu konteks File Explorer:
    • Mendaftarkan akar sinkronisasi dengan API file cloud secara otomatis menyediakan beberapa kata kerja (entri menu) di menu konteks File Explorer yang memungkinkan pengguna mengontrol status hidrasi file mereka.
    • Kata kerja tambahan dapat ditambahkan ke bagian menu konteks ini menggunakan API yang kompatibel dengan Desktop Bridge.
  • Kontrol pengguna terhadap hidrasi file:
    • Pengguna selalu mengontrol hidrasi file, bahkan ketika file tidak dihidrasi secara eksplisit oleh pengguna. Roti panggang interaktif ditampilkan untuk hidrasi latar belakang untuk memperingatkan pengguna dan menyediakan opsi. Gambar berikut menunjukkan pemberitahuan toast untuk file hidrasi. Contoh roti panggang interaktif yang ditampilkan untuk hidrasi file latar belakang
    • Jika pengguna memblokir aplikasi agar tidak mengunduh file melalui notifikasi interaktif, mereka dapat membuka blokir aplikasi di halaman Unduhan File Otomatis di Pengaturan. Cuplikan layar pengaturan pengunduhan file otomatis
  • Operasi penyadapan mesin salin (didukung di Windows 10 Insider Preview Build 19624 dan versi yang lebih baru):
    • Penyedia penyimpanan cloud dapat mendaftarkan hook salinan shell untuk memantau operasi file dalam akar sinkronisasi mereka.
    • Penyedia mendaftarkan hook salinan mereka dengan mengatur nilai registri CopyHook di bawah kunci registri akar sinkronisasi mereka ke CLSID objek server lokal COM mereka. Objek server lokal ini mengimplementasikan antarmuka IStorageProviderCopyHook .
  • Berbagi file (didukung di Windows 11 versi 21H2 dan versi yang lebih baru):
    • Penyedia penyimpanan cloud dapat mendaftarkan handler berbagi yang akan dipanggil saat pengguna memilih perintah "Bagikan" pada file cloud di bawah akar sinkronisasi mereka.
    • Penyedia mendaftarkan handler berbagi mereka dengan mengatur nilai registri ShareHandler di bawah kunci registri akar sinkronisasi mereka ke CLSID objek server lokal COM mereka. Objek server lokal ini mengimplementasikan antarmuka IExplorerCommand .

Jembatan Desktop

  • Mesin sinkronisasi menggunakan API file cloud dirancang untuk menggunakan Desktop Bridge sebagai persyaratan implementasi.

Sampel Contoh Cloud Mirror

Sampel Cloud Mirror mengilustrasikan cara membangun solusi yang menggunakan API file cloud. Ini tidak dimaksudkan untuk digunakan sebagai kode produksi. Ini tidak memiliki penanganan kesalahan yang kuat dan ditulis agar semudah mungkin dipahami. Ini disebut Cloud Mirror karena hanya mencerminkan folder lokal di disk lokal Anda. Anda menentukan folder server yang dimaksudkan untuk mewakili server file cloud Anda dan folder klien yang dimaksudkan untuk menentukan jalur akar sinkronisasi. Simpul tingkat atas muncul di panel navigasi di File Explorer yang disebut TestStorageProviderDisplayName, dan simpul ini memetakan ke folder klien yang ditentukan.

Dalam hal sinkronisasi, ini adalah hal-hal yang harus diterapkan oleh penyedia sinkronisasi file cloud yang dikembangkan sepenuhnya:

  • Ketika file akar sinkronisasi hanyalah tempat penampung, layanan bertanggung jawab untuk menyalin konten file untuk hidrasi. Ini diimplementasikan dalam sampel.
  • Ketika file akar sinkronisasi adalah file lengkap dan konten file dalam layanan cloud berubah, layanan harus memberi tahu klien sinkronisasi lokal tentang perubahan tersebut dan klien sinkronisasi lokal harus menangani penggabungan menurut spesifikasi mereka sendiri. Ini tidak diimplementasikan dalam sampel.
  • Ketika file akar sinkronisasi adalah file lengkap dan konten file di jalur akar sinkronisasi (klien lokal) berubah, klien sinkronisasi lokal harus memberi tahu layanan cloud dan menangani penggabungan sesuai dengan spesifikasinya sendiri. Pemberitahuan perubahan file lokal diimplementasikan dalam sampel, tetapi tidak melakukan apa pun.

Menggunakan sampel

  1. Buat dua folder di hard drive lokal Anda. Salah satunya akan bertindak sebagai server dan yang lain sebagai klien.
  2. Tambahkan beberapa file ke folder server. Pastikan folder klien kosong.
  3. Buka sampel Cloud Mirror di Visual Studio. Atur proyek CloudMirrorPackage sebagai proyek startup Anda lalu buat dan jalankan sampel. Ketika diminta oleh contoh, masukkan dua path ke folder server dan klien Anda. Setelah ini, Anda akan melihat jendela konsol dengan informasi diagnostik.
  4. Buka File Explorer dan konfirmasikan bahwa Anda melihat node TestStorageProviderDisplayName dan tempat penampung untuk semua file yang Anda salin ke folder server. Untuk mensimulasikan aplikasi yang mencoba membuka file tanpa menggunakan pemilih, salin beberapa gambar ke folder server. Klik dua kali salah satunya di folder akar sinkronisasi Anda dan konfirmasikan bahwa folder tersebut berhidrasi. Kemudian, buka aplikasi Foto. Aplikasi ini akan memuat file-file di sekitarnya di latar belakang agar lebih besar kemungkinan pengguna tidak mengalami penundaan saat melihat gambar lain. Anda dapat mengamati dehidrasi latar belakang yang terjadi melalui roti panggang atau di File Explorer.
  5. Klik kanan file di File Explorer untuk memunculkan menu konteks, dan konfirmasikan bahwa Anda melihat item menu TestCommand . Mengklik item menu ini akan menampilkan kotak pesan.
  6. Untuk menghentikan sampel, atur fokus ke output konsol dan tekan Ctrl-C. Ini akan membersihkan pendaftaran akar sinkronisasi sehingga instalasi penyedia dapat dihapus. Jika sampel crash, ada kemungkinan bahwa akar sinkronisasi akan tetap terdaftar. Ini akan menyebabkan File Explorer diluncurkan kembali setiap kali Anda mengklik apa pun, dan Anda akan dimintai klien dan lokasi server palsu. Jika ini terjadi, hapus instalan aplikasi sampel CloudMirrorPackage dari komputer Anda.

Contoh arsitektur

Sampel sengaja sederhana. Ini menggunakan kelas statis sehingga menjadi tidak perlu meneruskan pointer instans. Berikut adalah kelas utama dalam sampel:

  • FakeCloudProvider: Kelas tingkat atas ini mengontrol kelas pekerja berikut:
    • CloudProviderRegistrar: Mendaftarkan informasi root sinkronisasi dengan Windows Shell.
    • Tempat pengganti: Menghasilkan file tempat pengganti di direktori akar sinkronisasi.
    • ShellServices: Membangun penyedia Windows Shell untuk menu konteks, gambar mini, dan layanan lainnya.
    • CloudProviderSyncRootWatcher: Membuat instans DirectoryWatcher untuk memantau perubahan pada jalur akar sinkronisasi dan bertindak berdasarkan perubahan.
    • FileCopierWithProgress: Menyalin file dari folder server ke folder klien secara perlahan dalam gugus untuk mensimulasikan mengunduhnya dari server cloud nyata. Memberikan indikasi kemajuan sehingga UI File Explorer dan notifikasi menunjukkan kepada pengguna informasi yang berguna.

Selain kelas di atas, sampel juga menyediakan beberapa kelas pembantu untuk meminta pengguna memilih folder dan beberapa utilitas lain. TestExplorerCommandHandler, CustomStateProvider, ThumbnailProvider, dan UriSource adalah semua contoh penyedia layanan Shell.

Arsitektur API Cloud File

Pada inti tumpukan penyimpanan di API file cloud adalah driver minifilter sistem file yang disebut cldflt.sys. Driver ini bertindak sebagai proksi antara aplikasi pengguna dan mesin sinkronisasi Anda. Mesin sinkronisasi Anda tahu cara mengunduh dan mengunggah data sesuai permintaan saat cldflt.sys bertanggung jawab untuk bekerja dengan Shell untuk menyajikan file seolah-olah data cloud tersedia secara lokal.

Cldflt.sys saat ini hanya mendukung volume NTFS karena bergantung pada beberapa fitur yang unik untuk NTFS.

Ada banyak driver minifilter sistem file dalam sistem dan dapat aktif pada volume tertentu secara bersamaan. Driver yang paling menarik bagi API file cloud adalah filter sistem file anti-virus.

Driver minifilter sistem file dikelola dan didukung oleh komponen mode kernel khusus yang disebut manajer filter. Di antara banyak tugas lain, manajer filter memfasilitasi komunikasi yang tidak difilter antara filter dan komponen mode pengguna melalui konstruksi yang dikenal sebagai port pesan filter.

Kebijakan Hidrasi

Windows mendukung berbagai kebijakan hidrasi utama dan pengubah kebijakan hidrasi sekunder . Kebijakan hidrasi utama memiliki urutan ini:

Selalu penuh >> Progresif > Penuh Parsial

Aplikasi dan mesin sinkronisasi dapat menentukan kebijakan hidrasi utama pilihan mereka. Jika tidak ditentukan, kebijakan hidrasi default bersifat progresif untuk aplikasi dan mesin sinkronisasi.

Kebijakan hidrasi file cloud ditentukan pada waktu buka file dengan rumus ini:

File hydration policy = max(app hydration policy, provider hydration policy)

Misalnya, pengguna mencoba membuka file PDF yang disimpan di Fabrikam Cloud Drive menggunakan Contoso PDF Viewer, yang tidak menentukan kebijakan hidrasi pilihan. Oleh karena itu, kebijakan hidrasi aplikasi adalah hidrasi progresif, dalam hal ini secara default. Namun, karena Fabrikam Cloud Drive adalah mesin sinkronisasi hidrasi penuh, kebijakan hidrasi akhir pada file menjadi hidrasi penuh, yang akan mengakibatkan file sepenuhnya terhidrasi pada akses pertama. Hasil yang sama terjadi dalam kasus di mana mesin sinkronisasi mendukung hidrasi progresif, tetapi preferensi aplikasi adalah hidrasi penuh.

Perhatikan bahwa kebijakan hidrasi file tidak dapat diubah setelah file dibuka.

Kompatibilitas dengan aplikasi yang menggunakan titik pemroses ulang

API file awan mengimplementasikan sistem tempat penampung menggunakan reparse points. Kesalahpahaman umum tentang titik pemisahan ulang adalah bahwa mereka sama dengan tautan simbolis. Kesalahpahaman ini kadang-kadang tercermin dalam implementasi aplikasi, dan sebagai akibatnya, banyak aplikasi yang ada menghadapi kesalahan ketika menghadapi titik reparse.

Untuk mengurangi masalah kompatibilitas ini, API file cloud selalu menyembunyikan titik pemisahan ulangnya dari semua aplikasi kecuali untuk mesin sinkronisasi dan proses yang gambar utamanya berada di bawah %systemroot%. Aplikasi yang memahami titik reparse dengan benar dapat memaksa platform untuk mengekspos titik reparse API berkas cloud menggunakan RtlSetProcessPlaceholderCompatibilityMode atau RtlSetThreadProcessPlaceholderCompatibilityMode.

Pencarian file cloud didukung di Windows 11, versi 24H2 dan yang lebih baru pada PC Copilot+ atau PC Cloud yang mendukung AI. Fitur berikut ini tersedia bagi penyedia penyimpanan cloud untuk diintegrasikan dengan pengalaman Windows Search:

  • Penyedia penyimpanan cloud dapat mendaftarkan penangan pencarian file untuk akar sinkronisasi mereka, memungkinkan mereka untuk menyumbangkan hasil pencarian ke File Explorer dan Windows Search.
  • Penyedia penyimpanan cloud mendaftarkan penangan pencarian dengan mengatur nilai registri SearchHandlerFactory di bawah kunci registri root sinkronisasi mereka ke CLSID objek server lokal COM mereka. Objek server lokal ini mengimplementasikan antarmuka IStorageProviderSearchHandlerFactory .
  • IStorageProviderSearchHandlerFactory menciptakan implementasi IStorageProviderSearchHandler. Implementasi IStorageProviderSearchHandler ini memanggil layanan pencarian penyedia cloud untuk mencari file yang mungkin tidak tersedia secara lokal di perangkat.
  • Pengalaman Windows Search memanggil metode Temukan selama pencarian, menggabungkan hasilnya dengan yang dari pengindeks pencarian lokal.

Integrasi penyedia file cloud dengan Windows Search

IStorageProviderSearchHandlerFactory

Namespace Windows.Storage.Provider