DeviceIoControl FSCTL_SET_COMPRESSION

FSCTL_SET_COMPRESSION

FSCTL_SET_COMPRESSION DeviceIoControl operation设置文件系统支持每个文件和每个目录压缩的卷上的文件或目录的压缩状态。 您可以使用此操作压缩或解压缩此卷上的文件或目录。

dwIoControlCode = FSCTL_SET_COMPRESSION; //操作代码

lpInBuffer; //指向输入缓冲区的指针

nInBufferSize; //输入缓冲区的大小

lpOutBuffer = NULL; //指向输出缓冲区的指针; 不曾用过; 必须为NULL

nOutBufferSize = 0; //输出缓冲区的大小; 不曾用过; 必须为零

lpBytesReturned; //指向DeviceIoControl函数使用的DWORD的指针

参数

lpInBuffer

指向包含USHORT的缓冲区,该USHORT指定文件或目录的新压缩状态。

扫描二维码关注公众号,回复: 2909623 查看本文章

定义了以下值:

  含义 
COMPRESSION_FORMAT_NONE  解压缩文件或目录。 
COMPRESSION_FORMAT_DEFAULT  使用默认压缩格式压缩文件或目录。 
COMPRESSION_FORMAT_LZNT1  使用LZNT1压缩格式压缩文件或目录。 
所有其他价值观  保留供将来使用。 

nInBufferSize

指定lpInBuffer指向的缓冲区的大小(以字节为单位)。 缓冲区必须足够大才能包含一个USHORT值。

lpOutBuffer

指向输出缓冲区。 不用于此操作。 设置为NULL。

nOutBufferSize

指定lpOutBuffer指向的缓冲区的大小(以字节为单位 。 不用于此操作。 设为零。

lpBytesReturned

指向DWORD的指针。 该值不能为NULL。 尽管FSCTL_SET_COMPRESSION操作不产生输出数据且lpOutBuffer应为NULL,但DeviceIoControlfunction使用lpBytesReturned指向的变量。 在操作之后,该变量的值没有意义

返回值

如果操作成功, 则为DeviceIoControl 返回TRUE。

如果操作失败,则DeviceIoControl返回FALSE。 要获取扩展错误信息,请调用GetLastError 。

备注

在此版本中,LZNT1是唯一实现的压缩算法。 因此,LZNT1将用作DEFAULT压缩方法。 未来版本可能有其他压缩方法,可用作DEFAULT。

如果包含指定文件或目录的卷的文件系统不支持每个文件或每个目录压缩,则FSCTL_SET_COMPRESSION操作将失败。

Windows NT版本3.51支持在使用NTFS格式化的卷上进行文件压缩。

文件或目录的压缩状态更改与对DeviceIoControl的调用同步发生。

您可以使用FSCTL_GET_COMPRESSION DeviceIoControl操作获取文件或目录的压缩状态。

您可以通过调用GetFileAttributes函数来获取文件或目录的compression属性。 compression属性指示文件或目录是否已压缩。 压缩状态指示文件或目录是否被压缩,如果是,则指示压缩数据的格式。

猜你喜欢

转载自blog.csdn.net/qq_41786318/article/details/82110459