FSCTL_SET_REPARSE_POINT control code

The FSCTL_SET_REPARSE_POINT control code sets a reparse point on a file or directory.

To perform this operation, call ZwFsControlFile with the following parameters.

Minifilters should use FltTagFile instead of FSCTL_SET_REPARSE_POINT to set a reparse point.

For more information about reparse points and the FSCTL_SET_REPARSE_POINT control code, see the Microsoft Windows SDK documentation.

Parameters

FileHandle
File handle for the file or directory on which to set a reparse point. This parameter is required and cannot be NULL.

FsControlCode
Control code for the operation. Use FSCTL_SET_REPARSE_POINT for this operation.

InputBuffer
Pointer to a caller-allocated REPARSE_GUID_DATA_BUFFER or REPARSE_DATA_BUFFER structure that contains the reparse point data. If an existing reparse point is being modified, the tag specified in the ReparseTag member of this structure must match the tag of the reparse point to be modified. In addition, if the reparse point is a third-party (non-Microsoft) reparse point, the GUID specified in the ReparseGuid member of the structure is a REPARSE_GUID_DATA_BUFFER structure must match the GUID of the reparse point to be modified.

InputBufferLength
Size, in bytes, of the buffer pointed to by the InputBuffer parameter. For a REPARSE_GUID_DATA_BUFFER structure, this value must be at least sizeof(REPARSE_GUID_DATA_BUFFER_HEADER_SIZE), plus the size of the user-defined data, and it must be less than or equal to MAXIMUM_REPARSE_DATA_BUFFER_SIZE. For a REPARSE_DATA_BUFFER structure, this value must be at least sizeof(REPARSE_DATA_BUFFER_HEADER_SIZE), plus the size of the user-defined data, and it must be less than or equal to MAXIMUM_REPARSE_DATA_BUFFER_SIZE.

OutputBuffer
Not used with this operation; set to NULL.

OutputBufferLength
Not used with this operation; set to zero.

Status block

ZwFsControlFile returns STATUS_SUCCESS or an appropriate NTSTATUS value such as one of the following:

Term Description

STATUS_DIRECTORY_NOT_EMPTY

A reparse point cannot be set on a nonempty directory. This is an error code.

STATUS_EAS_NOT_SUPPORTED

A reparse point cannot be set on a file that contains extended attributes. This is an error code.

STATUS_IO_REPARSE_DATA_INVALID

One of the specified parameter values was invalid. This is an error code.

STATUS_IO_REPARSE_TAG_MISMATCH

The reparse tag specified by the caller did not match the tag of the reparse point to be modified. This is an error code.

STATUS_NOT_A_REPARSE_POINT

The file or directory is not a reparse point. This is an error code.

STATUS_REPARSE_ATTRIBUTE_CONFLICT

The reparse point is a third-party reparse point, and the reparse GUID specified by the caller did not match the GUID of the reparse point to be modified. This is an error code.

Requirements

Header

Ntifs.h (include Ntifs.h or Fltkernel.h)

See also

FLT_PARAMETERS for IRP_MJ_FILE_SYSTEM_CONTROL

FltTagFile

FltUntagFile

FSCTL_DELETE_REPARSE_POINT

FSCTL_GET_REPARSE_POINT

IRP_MJ_FILE_SYSTEM_CONTROL

IsReparseTagMicrosoft

IsReparseTagNameSurrogate

REPARSE_DATA_BUFFER

REPARSE_GUID_DATA_BUFFER

ZwFsControlFile