IopSymlinkInitializeSymlinkInfo
VOID __stdcall IopSymlinkInitializeSymlinkInfo(
_RELATIVE_SYMLINK_INFO *ToInitialize,
UINT64 ToInitializeLength,
WCHAR *FileName,
UINT16 FileNameLength,
UINT16 ExposedNamespaceLength,
WCHAR *RelatedFileName,
UINT16 RelatedFileNameLength,
UINT16 DeviceNameLength,
UINT16 Flags,
_RELATIVE_SYMLINK_INFO *InteriorMountPoint){
size_t v11;
UINT16 Length;
_RELATIVE_SYMLINK_INFO *Buffer;
unsigned __int64 v15;
v11 = FileNameLength;
Length = 0;
ToInitialize->DeviceNameLength = DeviceNameLength;
Buffer = ToInitialize + 1;
ToInitialize->ExposedNamespaceLength = ExposedNamespaceLength;
ToInitialize->OpenedName.MaximumLength = ToInitializeLength - 32;
ToInitialize->Flags = Flags;
ToInitialize->InteriorMountPoint = InteriorMountPoint;
ToInitialize->Reserved = 0;
ToInitialize->OpenedName.Length = 0;
ToInitialize->OpenedName.Buffer = &ToInitialize[1].ExposedNamespaceLength;
if( RelatedFileName )
{
memmove(&ToInitialize[1], RelatedFileName, RelatedFileNameLength);
Buffer = (_RELATIVE_SYMLINK_INFO *)ToInitialize->OpenedName.Buffer;
v15 = (unsigned __int64)RelatedFileNameLength >> 1;
Length = RelatedFileNameLength;
ToInitialize->OpenedName.Length = RelatedFileNameLength;
if( *((_WORD *)Buffer + v15 - 1) != 92 )
{
*(&Buffer->ExposedNamespaceLength + v15) = 92;
ToInitialize->OpenedName.Length += 2;
Length = ToInitialize->OpenedName.Length;
Buffer = (_RELATIVE_SYMLINK_INFO *)ToInitialize->OpenedName.Buffer;
}
}
memmove((char *)Buffer + Length, FileName, v11);
ToInitialize->OpenedName.Length += v11;
}Referenced by:
IopGraftName
IopSymlinkCreateECP
IopSymlinkPropagateToExtensionIfNeeded
IopSymlinkRememberJunction
IopSymlinkUpdateECP