Share via


CompactVirtualDisk-Funktion (virtdisk.h)

Reduziert die Größe einer VHD-Sicherungsspeicherdatei (Virtual Hard Disk).

Syntax

DWORD CompactVirtualDisk(
  [in]           HANDLE                           VirtualDiskHandle,
  [in]           COMPACT_VIRTUAL_DISK_FLAG        Flags,
  [in, optional] PCOMPACT_VIRTUAL_DISK_PARAMETERS Parameters,
  [in, optional] LPOVERLAPPED                     Overlapped
);

Parameter

[in] VirtualDiskHandle

Ein Handle für den geöffneten virtuellen Datenträger, der mit dem VIRTUAL_DISK_ACCESS_METAOPS-Flag im VirtualDiskAccessMask-Parameter geöffnet worden sein muss, der an OpenVirtualDisk übergeben wurde. Informationen zum Öffnen eines virtuellen Datenträgers finden Sie in der OpenVirtualDisk-Funktion .

[in] Flags

Muss der COMPACT_VIRTUAL_DISK_FLAG_NONE Wert (0) der COMPACT_VIRTUAL_DISK_FLAG-Enumeration sein.

[in, optional] Parameters

Ein optionaler Zeiger auf eine gültige COMPACT_VIRTUAL_DISK_PARAMETERS-Struktur , die Komprimierungsparameterdaten enthält.

[in, optional] Overlapped

Ein optionaler Zeiger auf eine gültige OVERLAPPED-Struktur , wenn ein asynchroner Vorgang gewünscht wird.

Rückgabewert

Status der Anforderung.

Wenn die Funktion erfolgreich ist, wird der Rückgabewert ERROR_SUCCESS.

Wenn die Funktion fehlschlägt, ist der Rückgabewert ein Fehlercode. Weitere Informationen finden Sie unter Systemfehlercodes.

Hinweise

Die Komprimierung kann nur auf einem virtuellen Datenträger ausgeführt werden, der dynamisch erweiterbar oder differenziert ist.

Es gibt zwei verschiedene Arten der Komprimierung.

  • Der erste Typ, die dateisystemfähige Komprimierung, verwendet das NTFS-Dateisystem, um freien Speicherplatz zu bestimmen. Dazu wird die VHD als schreibgeschütztes Gerät angefügt, indem die VIRTUAL_DISK_ACCESS_METAOPS- und VIRTUAL_DISK_ACCESS_ATTACH_RO-Flags in den an OpenVirtualDisk übergebenen VirtualDiskAccessMask-Parameter eingeschlossen werden, die VHD durch Aufrufen von AttachVirtualDisk angefügt wird, und während die VHD angefügt ist, indem CompactVirtualDisk aufgerufen wird. Das Trennen der VHD vor der Komprimierung kann dazu führen, dass die Komprimierung einen Fehler zurückgibt, bevor sie durchgeführt wird (ähnlich wie beim Abbruch der Komprimierung).
  • Der zweite Typ, dateisystemunabhängige Komprimierung, umfasst nicht das Dateisystem, sondern sucht nur nach VHD-Blöcken, die vollständig mit Nullen (0) gefüllt sind. Dazu fügen Sie das flag VIRTUAL_DISK_ACCESS_METAOPS in den An OpenVirtualDisk übergebenen VirtualDiskAccessMask-Parameter ein und rufen CompactVirtualDisk auf.
Die Dateisystemkomprimierung ist der effizienteste Komprimierungstyp, aber die Verwendung der dateisystemfähigen Komprimierung gefolgt von der dateisystemunabhängigen Komprimierung erzeugt die kleinste VHD.

Ein Komprimierungsvorgang auf einem virtuellen Datenträger kann sicher unterbrochen und später erneut ausgeführt werden. Das erneute Öffnen einer datei eines virtuellen Datenträgers, die unterbrochen wurde, kann zum Zeitpunkt des Öffnens zu einer Verringerung der Größe einer virtuellen Datenträgerdatei führen.

Die Komprimierung kann CPU-intensiv und/oder E/A-intensiv sein, je nachdem, wie groß der virtuelle Datenträger ist und wie viele Blöcke Verschiebungen erfordern.

Die CompactVirtualDisk-Funktion wird auf dem virtuellen Datenträger im gleichen Sicherheitskontext wie der Aufrufer ausgeführt.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 7
Unterstützte Mindestversion (Server) Windows Server 2008 R2
Zielplattform Windows
Kopfzeile virtdisk.h
Bibliothek VirtDisk.lib
DLL VirtDisk.dll

Weitere Informationen

Informationen zu VHD

VHD-Referenz