IStorage::Metode penerapan (objidl.h)

Metode Penerapan memastikan bahwa setiap perubahan yang dilakukan pada objek penyimpanan terbuka dalam mode yang ditransaksikan tercermin dalam penyimpanan induk. Untuk objek penyimpanan nonroot dalam mode langsung, metode ini tidak berpengaruh. Untuk penyimpanan akar, ini mencerminkan perubahan pada perangkat aktual; misalnya, file pada disk. Untuk objek penyimpanan akar yang dibuka dalam mode langsung, selalu panggil metode IStorage::Commit sebelum Rilis. IStorage::Commit memerah semua buffer memori ke disk untuk penyimpanan akar dalam mode langsung dan akan mengembalikan kode kesalahan setelah kegagalan. Meskipun Rilis juga membersihkan buffer memori ke disk, Rilis tidak memiliki kapasitas untuk mengembalikan kode kesalahan apa pun setelah kegagalan. Oleh karena itu, memanggil Rilis tanpa terlebih dahulu memanggil Commit menyebabkan hasil yang tidak ditentukan.

Sintaks

HRESULT Commit(
  [in] DWORD grfCommitFlags
);

Parameter

[in] grfCommitFlags

Mengontrol bagaimana perubahan diterapkan pada objek penyimpanan. Lihat enumerasi STGC untuk definisi nilai-nilai ini.

Nilai kembali

Metode ini dapat mengembalikan salah satu nilai ini.

Menampilkan kode Deskripsi
S_OK Perubahan pada objek penyimpanan berhasil diterapkan ke tingkat induk. Jika STGC_CONSOLIDATE ditentukan, penyimpanan berhasil dikonsolidasikan, atau penyimpanan sudah terlalu ringkas untuk dikonsolidasikan lebih lanjut.
STG_S_MULTIPLEOPENS Operasi penerapan berhasil, tetapi penyimpanan tidak dapat dikonsolidasikan karena telah dibuka beberapa kali menggunakan bendera STGM_NOSNAPSHOT.
STG_S_CANNOTCONSOLIDATE Operasi penerapan berhasil, tetapi penyimpanan tidak dapat dikonsolidasikan karena mode penyimpanan yang salah. Untuk file majemuk, penyimpanan mungkin telah dibuka menggunakan bendera STGM_NOSCRATCH, atau penyimpanan mungkin bukan tingkat terluar yang ditransaksikan.
STG_S_CONSOLIDATIONFAILED Operasi penerapan berhasil, tetapi penyimpanan tidak dapat dikonsolidasikan karena kesalahan internal (misalnya, kegagalan alokasi memori).
E_PENDING Hanya penyimpanan asinkron: Sebagian atau semua data yang akan diterapkan saat ini tidak tersedia.
STG_E_INVALIDFLAG Nilai untuk parameter grfCommitFlags tidak valid.
STG_E_INVALIDPARAMETER Salah satu parameter tidak valid.
STG_E_NOTCURRENT Instans terbuka lain dari objek penyimpanan telah melakukan perubahan. Akibatnya, operasi penerapan saat ini dapat menimpa perubahan sebelumnya.
STG_E_MEDIUMFULL Tidak ada ruang tersisa pada perangkat untuk dikomit.
STG_E_TOOMANYOPENFILES Operasi penerapan tidak dapat diselesaikan karena terlalu banyak file terbuka.
STG_E_REVERTED Objek penyimpanan telah dibatalkan oleh operasi kembali di atasnya di pohon transaksi.

Keterangan

IStorage::Commit membuat perubahan permanen pada objek penyimpanan yang berada dalam mode bertransaksi, di mana perubahan terakumulasi dalam buffer, dan tidak tercermin dalam objek penyimpanan sampai ada panggilan ke metode ini. Alternatifnya adalah membuka objek dalam mode langsung, di mana perubahan segera tercermin dalam objek penyimpanan. Objek yang dibuka dalam mode langsung tidak memerlukan panggilan IStorage::Commit untuk membuat perubahan permanen pada objek penyimpanan. Memanggil metode IStorage::Commit pada penyimpanan nonroot yang dibuka dalam mode langsung tidak berpengaruh. Membuka objek penyimpanan akar dalam mode langsung memastikan bahwa perubahan buffer memori ditulis ke perangkat penyimpanan yang mendasar.

Operasi penerapan menerbitkan perubahan saat ini dalam objek penyimpanan ini dan turunannya ke tingkat berikutnya dalam hierarki penyimpanan. Untuk membatalkan perubahan saat ini sebelum menerapkannya, panggil IStorage::Kembalikan untuk mengembalikan ke versi yang terakhir diterapkan.

Memanggil IStorage::Commit tidak berpengaruh pada elemen berlapis yang saat ini dibuka dari objek penyimpanan ini. Mereka tetap valid dan dapat digunakan. Namun, metode IStorage::Commit tidak secara otomatis menerapkan perubahan pada elemen berlapis ini. Operasi penerapan hanya menerbitkan perubahan yang diketahui ke tingkat yang lebih tinggi berikutnya dalam hierarki penyimpanan. Dengan demikian, transaksi ke tingkat berlapis harus diterapkan pada objek penyimpanan ini sebelum dapat diterapkan ke tingkat yang lebih tinggi.

Dalam operasi penerapan, Anda perlu mengambil langkah-langkah untuk memastikan bahwa data dilindungi selama proses penerapan:

  • Saat melakukan perubahan pada objek penyimpanan akar, pemanggil harus memeriksa nilai pengembalian untuk menentukan apakah operasi telah berhasil diselesaikan, dan jika tidak, bahwa konten lama yang diterapkan dari IStorage masih utuh dan dapat dipulihkan.
  • Jika objek penyimpanan ini dibuka dengan beberapa itemnya dikecualikan, pemanggil bertanggung jawab untuk menulis ulang sebelum memanggil penerapan. Mode tulis diperlukan pada pembukaan penyimpanan agar penerapan berhasil.
  • Kecuali melarang beberapa penulis simultan pada objek penyimpanan yang sama, aplikasi yang memanggil metode ini harus menentukan setidaknya STGC_ONLYIFCURRENT dalam parameter grfCommitFlags untuk mencegah perubahan yang dilakukan oleh satu penulis secara tidak sengaja menimpa perubahan yang dibuat oleh penulis lain.
Jika bendera STGC_CONSOLIDATE tidak didukung oleh implementasi penyimpanan, memanggil IStorage::Commit dengan STGC_CONSOLIDATE yang ditentukan dalam parameter grfCommitFlags mengembalikan nilai STG_E_INVALIDFLAG.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows 2000 Server [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header objidl.h
Pustaka Uuid.lib
DLL Ole32.dll

Lihat juga

IStorage - Implementasi File Gabungan

IStorage::Revert

STGC