--- /dev/null
+/*
+ * win32_vss.h - Declarations for managing VSS snapshots. This header should
+ * only be included by Windows-specific files.
+ */
+
+#ifndef _WIMLIB_WIN32_VSS_H
+#define _WIMLIB_WIN32_VSS_H
+
+#include "wimlib/win32_common.h"
+
+/* A reference counter for a VSS snapshot. This is embedded in another data
+ * structure only visible to win32_vss.c. */
+struct vss_snapshot {
+ size_t refcnt;
+};
+
+extern void
+vss_delete_snapshot(struct vss_snapshot *snapshot);
+
+/* Acquire a reference to the specified VSS snapshot. */
+static inline struct vss_snapshot *
+vss_get_snapshot(struct vss_snapshot *snapshot)
+{
+ if (snapshot)
+ snapshot->refcnt++;
+ return snapshot;
+}
+
+/* Release a reference to the specified VSS snapshot. When the last reference
+ * is released, the snapshot is deleted. */
+static inline void
+vss_put_snapshot(struct vss_snapshot *snapshot)
+{
+ if (snapshot && --snapshot->refcnt == 0)
+ vss_delete_snapshot(snapshot);
+}
+
+extern int
+vss_create_snapshot(const wchar_t *source, UNICODE_STRING *vss_path_ret,
+ struct vss_snapshot **snapshot_ret);
+
+extern void
+vss_global_cleanup(void);
+
+#endif /* _WIMLIB_WIN32_VSS_H */