IopCopyOverNewPath
VOID __stdcall IopCopyOverNewPath(
WCHAR *OutBuffer,
WCHAR *PathBuffer,
UINT16 PathLength,
_FILE_OBJECT *FileObject,
UINT16 RemainingName){
unsigned int v5;
WCHAR *v8;
__int16 v9;
_WORD *v10;
unsigned __int16 v11;
wchar_t *Buffer;
v5 = PathLength;
v8 = OutBuffer;
v9 = 2;
if( PathLength )
{
memmove(OutBuffer, PathBuffer, PathLength);
v8 = &OutBuffer[(unsigned __int64)v5 >> 1];
}
if( RemainingName )
{
v10 = (wchar_t *)((char *)FileObject->FileName.Buffer + FileObject->FileName.Length - RemainingName);
if( v8 > OutBuffer && *(v8 - 1) == 92 && *v10 == 92 )
{
--v8;
v9 = 0;
}
memmove(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