IopCopyOverNewPath
VOID __stdcall IopCopyOverNewPath(
PWCHAR OutBuffer,
PWCHAR PathBuffer,
UINT16 PathLength,
FILE_OBJECT *FileObject,
UINT16 RemainingName){
unsigned int v5;
PWCHAR v8;
__int16 v9;
UINT8 *v10;
unsigned __int16 v11;
wchar_t *Buffer;
v5 = PathLength;
v8 = OutBuffer;
v9 = 2;
if( PathLength )
{
memmove((UINT8 *)OutBuffer, (UINT8 *)PathBuffer, PathLength);
v8 = &OutBuffer[(unsigned __int64)v5 >> 1];
}
if( RemainingName )
{
v10 = (UINT8 *)FileObject->FileName.Buffer + FileObject->FileName.Length - RemainingName;
if( v8 > OutBuffer && *(v8 - 1) == 92 && *(_WORD *)v10 == 92 )
{
--v8;
v9 = 0;
}
memmove((UINT8 *)v8, v10, RemainingName);
v8 += (unsigned __int64)RemainingName >> 1;
}
v11 = RemainingName + v5 + v9;
FileObject->FileName.MaximumLength = v11;
FileObject->FileName.Length = v11 - 2;
*v8 = 0;
Buffer = FileObject->FileName.Buffer;
if( OutBuffer != Buffer )
{
if( Buffer )
ExFreePoolWithTag(Buffer, 0);
FileObject->FileName.Buffer = OutBuffer;
}
}Referenced by:
IopGraftName