You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
2.1 KiB
61 lines
2.1 KiB
1 year ago
|
using System.Runtime.InteropServices;
|
||
|
|
||
1 year ago
|
namespace StabilityMatrix.Core.ReparsePoints;
|
||
1 year ago
|
|
||
|
/// <summary>
|
||
|
/// Because the tag we're using is IO_REPARSE_TAG_MOUNT_POINT,
|
||
|
/// we use the MountPointReparseBuffer struct in the DUMMYUNIONNAME union.
|
||
|
/// </summary>
|
||
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
||
|
public struct ReparseDataBuffer
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Reparse point tag. Must be a Microsoft reparse point tag.
|
||
|
/// </summary>
|
||
|
public uint ReparseTag;
|
||
|
|
||
|
/// <summary>
|
||
|
/// Size, in bytes, of the reparse data in the buffer that <see cref="PathBuffer"/> points to.
|
||
|
/// This can be calculated by:
|
||
|
/// (4 * sizeof(ushort)) + SubstituteNameLength + PrintNameLength +
|
||
|
/// (namesAreNullTerminated ? 2 * sizeof(char) : 0);
|
||
|
/// </summary>
|
||
|
public ushort ReparseDataLength;
|
||
|
|
||
|
/// <summary>
|
||
|
/// Reserved; do not use.
|
||
|
/// </summary>
|
||
|
#pragma warning disable CS0169 // Field is never used
|
||
|
private ushort Reserved;
|
||
|
#pragma warning restore CS0169 // Field is never used
|
||
|
|
||
|
/// <summary>
|
||
|
/// Offset, in bytes, of the substitute name string in the <see cref="PathBuffer"/> array.
|
||
|
/// </summary>
|
||
|
public ushort SubstituteNameOffset;
|
||
|
|
||
|
/// <summary>
|
||
|
/// Length, in bytes, of the substitute name string. If this string is null-terminated,
|
||
|
/// <see cref="SubstituteNameLength"/> does not include space for the null character.
|
||
|
/// </summary>
|
||
|
public ushort SubstituteNameLength;
|
||
|
|
||
|
/// <summary>
|
||
|
/// Offset, in bytes, of the print name string in the <see cref="PathBuffer"/> array.
|
||
|
/// </summary>
|
||
|
public ushort PrintNameOffset;
|
||
|
|
||
|
/// <summary>
|
||
|
/// Length, in bytes, of the print name string. If this string is null-terminated,
|
||
|
/// <see cref="PrintNameLength"/> does not include space for the null character.
|
||
|
/// </summary>
|
||
|
public ushort PrintNameLength;
|
||
|
|
||
|
/// <summary>
|
||
|
/// A buffer containing the unicode-encoded path string. The path string contains
|
||
|
/// the substitute name string and print name string.
|
||
|
/// </summary>
|
||
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x3FF0)]
|
||
|
public byte[] PathBuffer;
|
||
|
}
|