IoReplaceFileObjectName

NTSTATUS __stdcall IoReplaceFileObjectName(_FILE_OBJECT *FileObject, WCHAR *NewFileName, UINT16 FileNameLength){
  UINT16 MaximumLength; 
  size_t v5; 
  wchar_t *Buffer; 
  UINT16 v9; 
  VOID **PoolWithTag; 
  wchar_t *v11; 

  MaximumLength = FileObject->FileName.MaximumLength;
  v5 = FileNameLength;
  if( FileNameLength <= MaximumLength )
  {
LABEL_2:
    Buffer = FileObject->FileName.Buffer;
    FileObject->FileName.Length = v5;
    memset(Buffer, 0i64, MaximumLength);
    memmove(FileObject->FileName.Buffer, NewFileName, v5);
    return 0;
  }
  MaximumLength = 56;
  if( FileNameLength >= 0x38u )
  {
    MaximumLength = 120;
    if( FileNameLength >= 0x78u )
    {
      v9 = 248;
      if( FileNameLength >= 0xF8u )
        v9 = FileNameLength;
      MaximumLength = v9;
    }
  }
  PoolWithTag = ExAllocatePoolWithTag(1ui64, MaximumLength, 1833856841i64);
  if( PoolWithTag )
  {
    v11 = FileObject->FileName.Buffer;
    if( v11 )
      ExFreePoolWithTag(v11, 0);
    FileObject->FileName.Buffer = (wchar_t *)PoolWithTag;
    FileObject->FileName.MaximumLength = MaximumLength;
    goto LABEL_2;
  }
  return -1073741670;
}

Referenced by:

No references.