/// <summary> /// Method to create an object from a set of object attributes. /// </summary> /// <param name="obj_attributes">The object attributes to create/open from.</param> /// <returns>The newly created object.</returns> protected override object CreateObject(ObjectAttributes obj_attributes) { NtToken.EnableEffectivePrivilege(TokenPrivilegeValue.SeCreateSymbolicLinkPrivilege); Options |= FileOpenOptions.OpenReparsePoint; if (ParameterSetName != "ReparseBuffer") { string target_path = Relative ? TargetPath : ResolvePath(SessionState, TargetPath, Win32Path); switch (ParameterSetName) { case "MountPoint": Directory = true; ReparseBuffer = new MountPointReparseBuffer(target_path, PrintName); break; case "Symlink": ReparseBuffer = new SymlinkReparseBuffer(target_path, string.IsNullOrEmpty(PrintName) ? target_path : PrintName, Relative ? SymlinkReparseBufferFlags.Relative : SymlinkReparseBufferFlags.None); break; case "RawBytes": ReparseBuffer = ReparseBuffer.FromByteArray(Bytes); break; } } using (NtFile file = (NtFile)base.CreateObject(obj_attributes)) { if (Flags != ReparseBufferExFlags.None || ExistingTag != 0 || ExistingGuid != Guid.Empty) { file.SetReparsePointEx(ReparseBuffer, Flags, ExistingTag, ExistingGuid); } else { file.SetReparsePoint(ReparseBuffer); } } return(null); }