// winioctl.h
// CTL_CODE(0x0009, 0x029, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_SET_REPARSE_POINT 0x000900A4
View the official Win32 API reference// ntifs.h
// CTL_CODE(0x0009, 0x029, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_SET_REPARSE_POINT 0x000900A4
View the official Windows hardware development documentationNo description available.
Sets a reparse point on a file or directory.
To perform this operation, call the DeviceIoControl function with the following parameters.
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to file or directory
FSCTL_SET_REPARSE_POINT, // dwIoControlCode
(LPVOID) lpInBuffer, // input buffer
(DWORD) nInBufferSize, // size of input buffer
NULL, // lpOutBuffer
0, // nOutBufferSize
NULL, // lpBytesReturned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
Irp->IoStatus.Status is set to STATUS_SUCCESS if the request is successful.
Otherwise, Status to the appropriate error condition as a NTSTATUS code.
For more information, see NTSTATUS Values.
For the implications of overlapped I/O on this operation, see the Remarks section of DeviceIoControl.
Note that the time stamps may not be updated correctly for a remote file. To ensure consistent results, use unbuffered I/O.
The calling process must have the SE_CREATE_SYMBOLIC_LINK_NAME privilege. For more information, see Running with Special Privileges.
In Windows 8 and Windows Server 2012, this code is supported by the following technologies.
| Technology | Supported |
|---|---|
| Server Message Block (SMB) 3.0 protocol | Yes |
| SMB 3.0 Transparent Failover (TFO) | Yes |
| SMB 3.0 with Scale-out File Shares (SO) | Yes |
| Cluster Shared Volume File System (CsvFS) | No |
| Resilient File System (ReFS) | Yes |
CsvFs does not support reparse points.
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.
FileHandle [in]: File handle for the file or directory on which to set a reparse point. This parameter is required and cannot be NULL.
FsControlCode [in]: Control code for the operation. Use FSCTL_SET_REPARSE_POINT for this operation.
InputBuffer [in]: 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 [in]: 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 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 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 [out]: Not used with this operation; set to NULL.
OutputBufferLength [out]: Not used with this operation; set to zero.
ZwFsControlFile returns STATUS_SUCCESS or an appropriate NTSTATUS value such as one of the following:
| Code | Meaning |
|---|---|
| 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 if this request is in a transaction. 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. |
| Requirement type | Requirement |
|---|---|
| Header | Ntifs.h (include Ntifs.h or Fltkernel.h) |
FLT_PARAMETERS for IRP_MJ_FILE_SYSTEM_CONTROL