FSCTL_SET_COMPRESSION IOCTL (winioctl.h)
Hiermit wird der Komprimierungsstatus einer Datei oder eines Verzeichnisses auf einem Volume festgelegt, deren bzw. dessen Dateisystem die Komprimierung pro Datei und pro Verzeichnis unterstützt. Sie können FSCTL_SET_COMPRESSION verwenden, um eine Datei oder ein Verzeichnis auf einem solchen Volume zu komprimieren oder zu dekomprimieren.
Um diesen Vorgang auszuführen, rufen Sie die Funktion DeviceIoControl mit den folgenden Parametern auf.
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to file or directory
FSCTL_SET_COMPRESSION, // dwIoControlCode
(LPVOID) lpInBuffer, // input buffer
(DWORD) nInBufferSize, // size of input buffer
NULL, // lpOutBuffer
0, // nOutBufferSize
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
Hinweise
Der Komprimierungsalgorithmus LZNT1 ist der einzige Komprimierungsalgorithmus, der implementiert wurde. Daher wird der Komprimierungsalgorithmus LZNT1 als DEFAULT-Komprimierungsmethode verwendet.
Wenn das Dateisystem des Volumes, das die angegebene Datei oder das angegebene Verzeichnis enthält, keine Datei- oder Verzeichniskomprimierung unterstützt, schlägt der Vorgang fehl.
Die Änderung des Komprimierungsstatus der Datei oder des Verzeichnisses erfolgt synchron mit dem Aufruf von DeviceIoControl.
Um den Komprimierungsstatus einer Datei oder eines Verzeichnisses abzurufen, verwenden Sie den FSCTL_GET_COMPRESSION-Steuerelementcode.
Verwenden Sie die GetFileAttributes-Funktion , um das Komprimierungsattribut einer Datei oder eines Verzeichnisses abzurufen. Das Komprimierungsattribut gibt an, ob eine Datei oder ein Verzeichnis komprimiert ist. Der Komprimierungszustand gibt an, ob eine Datei oder ein Verzeichnis komprimiert ist, und, wenn es sich um das Format der komprimierten Daten handelt.
Verzeichnisse werden durch diesen Vorgang nicht tatsächlich komprimiert. Stattdessen legt der Vorgang den Standardstatus für dateien fest, die im Verzeichnis erstellt wurden, um komprimiert zu werden.
Beachten Sie, dass die Zeitstempel für eine Remotedatei möglicherweise nicht ordnungsgemäß aktualisiert werden. Um konsistente Ergebnisse zu gewährleisten, verwenden Sie ungepufferte E/A-Vorgänge.
Die Dateikomprimierung wird für Dateien mit einer maximalen unkomprimierten Größe von 30 Gigabyte unterstützt.
In Windows 8 und Windows Server 2012 wird dieser Code von den folgenden Technologien unterstützt.
Technologie | Unterstützt |
---|---|
SMB 3.0-Protokoll (Server Message Block) | Ja |
SMB 3.0 Transparent Failover (TFO) | No |
SMB 3.0 mit Dateifreigaben mit horizontaler Skalierung (SO) | No |
Dateisystem mit freigegebenen Clustervolumes (CsvFS) | Siehe Kommentar |
Robustes Dateisystem (Resilient File System, ReFS) | No |
CsvFs unterstützt das Komprimieren eines Verzeichnisses nicht. CsvFs ermöglicht das Komprimieren einer Datei nur, wenn die Datei ausschließlich von einem Knoten geöffnet wird. SMB 3.0 Transparent Failover and Scale-Out unterstützt keine komprimierten NTFS-Dateien. Der FSCTL-Aufruf wird nicht blockiert, aber nicht unterstützt."
Transaktionierte Vorgänge
Sie können den Komprimierungsstatus einer Datei, die mit CreateFileTransacted geöffnet wurde, nicht ändern.Weitere Informationen zu Transaktionen finden Sie unter Transaktions-NTFS.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [nur Desktop-Apps] |
Kopfzeile | winioctl.h (windows.h einschließen) |