Какова роль буфера промежуточного хранения кратко

Обновлено: 05.07.2024

Бу́фер обме́на (англ. clipboard ) — промежуточное хранилище данных, предоставляемое программным обеспечением и предназначенное для переноса или копирования информации между приложениями или частями одного приложения через операции вырезать, копировать, вставить.

Как правило, приложения используют буфер обмена, предоставляемый операционной системой или другой средой через определённый интерфейс. Некоторые приложения могут использовать свой собственный буфер обмена, доступный только в них. Физически, данные буфера обмена хранятся в оперативной памяти компьютера (RAM).

Приложение может записывать в буфер обмена одну и ту же информацию одновременно в нескольких различных форматах. Наиболее информативный формат помещается первым, за ним остальные по убыванию информативности. При вставке информации из буфера обмена обычно используется первый распознанный приложением формат, который будет наиболее информативен для данного приложения. Например, если текстовый процессор копирует в буфер обмена текст: в формате RTF, в виде рисунка WMF и в виде текста без форматирования, этот текст может быть вставлен в другой текстовый процессор с сохранением разметки, в графический редактор — рисунком и в простой текстовый редактор — неформатированным текстом. Операционная система может производить некоторые преобразования форматов информации, если запрошенный формат отсутствует в буфере обмена, но может быть получен из имеющегося, например, изменять кодировку текста [1] .

Вставить объект из буфера обмена можно неограниченное число раз. При копировании информации в буфер его предыдущее содержимое, как правило, пропадает. Однако существуют реализации буфера обмена (например, в пакете Microsoft Office), позволяющие хранить в буфере одновременно несколько объектов и выбирать при вставке, который из объектов вставить.

Заполняем пробелы — расширяем горизонты!

В операционных системах Windows, Mac OS или Андроид пользователям компьютера и Интернета была предоставлена возможность работать одновременно в нескольких окнах с несколькими программами.

У пользователей сразу же возник соблазн передачи данных из одних программ (из одних окон) в другие программы (в другие окна).

Действительно, имеешь, например, подходящий текст в формате Блокнота (скажем, с расширением .txt), и это текст вполне пригоден, чтобы его вставить в подготавливаемую презентацию (скажем, в формате PowerPoint). Не перепечатывать же его заново?! Текст уже есть, но в другом формате и в другом окне, в другой программе. Так и хочется его каким-то образом автоматически перенести в другое окно, в другую программу.

Как сделать так, чтобы можно было из одной программы в другую переносить совершенно любые данные: тексты, картинки, графику, чертежи, схемы и даже видео или аудио и пр.?

Что такое Буфер обмена

Разработчики операционных систем придумали довольно оригинальный способ, который может считаться универсальным, пригодным для передачи практически любых данных.

Достаточно в одной программе выделить данные, подлежащие переносу в другую программу, и скопировать их в некую специальную область. Затем в другой программе, куда должны быть перенесены данные, нужно установить курсор в то место, куда данные должны быть помещены, и после этого выполнить процедуру вставки данных из этой специальной области, которые ранее были туда скопированы.

Кстати, процедура копи-паст работает также в пределах одного окна, одной программы, если данные нужно копировать из одного места и вставить в другое место текста, презентации и т.п.

Здорово придумано: пользователю даже не надо задумываться, что такое буфер обмена, каким образом выделенные данные туда попадают, и потом каким образом эти данные восстанавливаются из буфера обмена в окне другой программы или в другом месте той же программы.

что такое буфер обмена

Схема работы буфера обмена в Windows, Mac, Android

Как правило, в буфер обмена информация попадает, когда пользователь использует одну из двух операций:

Таким образом, буфер обмена является промежуточным хранилищем информации, которое занимает некоторую часть оперативной памяти компьютера. Оперативная память предназначена для временного хранения информации.

Стандартный буфер обмена как часть оперативной памяти способен сам себя очищать, например, при выключении компьютера или при помещении туда новой информации.

Кнопки Вставить и Копировать в Word

контекстное меню Копировать и Параметры вставки в Word

Все ли так просто?

Чаще всего пользователь применяет копирование и вставку для переноса данных из одного места программы в другое место или из одной программы в другую, даже не задумываясь, как это делается. И почти в 100% случаев получается адекватный результат: данные из одной программы переносятся без искажений в другую программу или из одного места они переходят в другое в пределах одной программы.

Буфер обмена или буфер обмана на примере Excel

Excel Вставить значение в новую ячейку или использование Специальной вставки

Excel Специальная вставка

Как видим на рис. 4 в новую ячейку можно вставить не только значения или формулы, но и форматы данных, формулы и значения вместе с форматами и пр., а также примечания к ячейкам, условия на значения, и в том числе добавить дополнительные операции для обработки данных.

О буфере обмена Microsoft Office, в том числе, 2010, 2013, 2016

С помощью буфера обмена в MS Office можно осуществлять копирование и вставку не один раз и не раз за разом, а многократно.

В буфере обмена может храниться до 24 копий текстовых и графических элементов, которые в свою очередь затем можно вставлять все сразу, либо по одному, либо иным способом.

Обращение к возможностям буфера обмена, которое осуществляется из любой программы пакета MS Office, показано ниже на рис. 5 на примере Excel.

Excel буфер обмена

Рис. 5. Буфер обмена в Excel

Подробнее про буфер обмена для офиса 2010, в частности, про его включение и отключение, про настройку его видимости, информация с официального сайта на русском языке:

Официальный сайт Microsoft на русском языке о буфере обмена для Office 2013 и 2016:

Возвращаясь к стандартным возможностям обычного буфера обмена, который есть в Windows, Mac OS или Андроид, отметим, что в нем сохраняются последние данные, которые туда были скопированы.

Если копировать в буфер обмена несколько раз подряд, то вставить можно будет только данные, которые туда были скопированы последний раз, а все предыдущие копии автоматически стираются из стандартного буфера обмена.

Буфер обмена в Word

Меню Вставить в Word

Специальная вставка из буфера обмена в Word

Рис. 6.2. Специальная вставка из буфера обмена в программе Microsoft Word

Вставить данные можно напрямую, без буфера обмена

Вставка в Word НЕ из буфера обмена

  • страницы,
  • таблицы,
  • рисунок,
  • клип,
  • диаграммы,
  • колонтитулы,
  • надписи,
  • символы
  • и т.д.

Таким образом, пользуясь буфером обмена, пользователь ПК может вставлять данные, ранее скопированные туда из другого места той же программы или из другой программы. И это никак не связано с другими возможностями вставки других данных, которых, как видим, тоже немало.

После завершения работы с программами в буфере обмена остаются последние скопированные данные. Даже после закрытия программы, из которой данные были скопированы, эти данные останутся в буфере обмена, и их можно использовать для вставки в другие программы (в другие окна).

Если эти данные в буфере обмена занимают много места (например, скопирован большой текст, объемная картинка и др.), то при выходе из программы может быть выдано предупреждение о том, что в буфере обмена остался большой объем информации (рис. 8).

буфер обмена переполнен

Рис. 8. Предупреждение, что в буфере обмена остался большой объем информации.

Решение, какую из трех кнопок выбрать, остается за пользователем.

Если данные из буфера обмена удалить, то их уже нельзя будет вставить в другие программы. А если оставить, то вставить их будет возможно, но при этом на хранение большого объема данных в буфере обмена потребуется много ресурсов ПК. Тут уж пользователь должен определиться, что он хочет: сохранить данные в буфере обмена или сохранить ресурсы оперативной памяти на своем устройстве для дальнейшей работы.

Не забывайте! Копировать тексты, картинки и прочую информацию из Интернета без указания ссылки на источник можно только для личного использования. Если же скопированная информация повторно выкладывается в Интернет БЕЗ указания ссылки на источник информации, то это является нарушением авторских прав и может повлечь неприятные последствия.

Как же данные появляются в буфере обмена? Очень просто, приложение сначала объявляет о праве собственности на буфер обмена через функцию OpenClipboard. После этого программа может очистить буфер обмена командой EmptyClipboard и, наконец, поместить туда свои данные командой SetClipboardData. SetClipboardData принимает два параметра. Первый — это идентификатор одного из форматов буфера обмена, которые мы упоминали выше. Второй — дескриптор сегмента в памяти, который содержит данные в этом формате. Приложение может неоднократно вызывать команду SetClipboardData для каждого из форматов, какие она хочет поместить в буфер, от лучшего к худшему (поскольку то приложение, куда будут вставляться данные, выберет первый подходящий формат из списка). Чтобы облегчить жизнь разработчику, Windows автоматически обеспечивает конвертацию некоторых типов форматов для буфера обмена. По окончании процесса программа вызывает CloseClipboard.

Теперь взглянем, как с помощью отладчика определить, какие данные записаны в буфер обмена. (Заметьте, что все мои записи сделаны в системе Win7/2008 R2 — так что на других версиях ОС они могут выглядеть несколько иначе). Поскольку буфер является частью Win32k.sys, вам понадобится отладчик ядра. Я люблю использовать в качестве контрольной точки win32k!InternalSetClipboardData+0xe4 . В таком смещении хорошо то, что оно находится за регистром RDI, заполненным данными из SetClipboardData в структуре, известной как tagCLIP.


Итак, теперь мы можем просмотреть содержимое RDI как tagCLIP и увидеть, что записано в буфер:


Fmt — это формат для буфера обмена. 0Xd — это число 13, что соответствует тексту в формате Юникода. Однако мы не можем просто запустить du по значению hData , потому что это дескриптор, а не прямой указатель на данные. Так что нужно поискать его в глобальной структуре win32k — gSharedInfo:


aheList в gSharedInfo содержит массив с дескрипторами, и последние два байта hData, умноженные на размер записи дескриптора, показывают адрес записи нашего дескриптора:


Если посмотреть phead со смещением 14, то мы получим наши данные (это смещение может отличаться на разных платформах):


Представим другой сценарий. Я скопировал какой-то текст из Wordpad, и команда SetClipboardData отработала определённое количество раз, чтобы разместить данные в разных форматах. Запись в формате Юникода выглядит так::

Теперь посмотрим, как приложение может отслеживать буфер обмена на предмет изменений. Это важно знать, потому что в этом месте Windows позволяет сторонним приложениям подключаться к системе. Если у вас наблюдаются непонятные глюки с копированием и вставкой, причиной может быть некорректное поведение какой-то из таких программ. Начнём с того, что рассмотрим механизмы подключения к буферу обмена. Затем рассмотрим, можно ли с помощью отладчика идентифицировать приложения, которые используют такие хуки.

Есть три способа отслеживать буфер обмена на предмет изменений: просмотр буфера, прослушивание форматов буфера и запрос порядкового номера буфера. Мы сосредоточимся на первых двух способах, потому что они предусматривают получение уведомлений, когда содержимое буфера обновилось. В третьем методе приложение должно само проверять каждый раз, изменился ли буфер, и этот метод нельзя использовать в цикле опросов.

Очевидная проблема подобной архитектуры состоит в следующем: она рассчитывает, что каждое приложение, следящее за буфером, будет вести себя корректно, не завершать неожиданно работу и в целом будет хорошим гражданином в системе. Если какое-то из приложений начнёт вести себя недружественно, то оно не отправит уведомление об изменении буфера обмена следующему приложению в цепочке, в результате чего вся цепочка останется без уведомлений.


Далее посмотрим адрес Win32Process как win32k!tagPROCESSINFO и узнаем значение rpwinsta:


Это наша Window Station. Сливаем содержимое через dt:

Ели мы знаем окно, то осталось несколько шагов, чтобы узнать, к какому процессу оно относится. Нас интересуют forspwndClipViewer, spwndClipboardListener и spwndClipOwner. Сначала запускаем dt, чтобы узнать значение tagWND. Для этой демонстрации мы используем spwndClipViewer:


Нас интересует только значение head — так что если смещение 0, делаем dt для того же адреса на _THRDESKHEAD:


Теперь запускаем dt для адреса, указанного в поле pti как tagTHREADINFO:


Теперь нам интересно только значение поля pEThread, которое мы можем передать в !thread:


Как видим, просмотр буфера обмена зарегистрировн от имени процесса viewer02.exe. Поскольку просмотр идёт по цепочке, определить следующий процесс в цепочке будет непросто. Но мы можем сделать это для тех, кто прослушивает буфер. Снова взглянем на нашу Window Station:


Если запустить dt на spwndClipboardListener, то увидим поле spwndClipboardListenerNext с указанием следующего прослушивающего процесса:


При достижении последнего процесса в списке прослушивающих буфер tagWND, значение его поля spwndClipboardListenerNext будет нулевым:


Используя адрес окна, мы можем тем же методом добраться до названия процесса. Как упоминалось ранее, поскольку tagWND — это структура ядра, ОС сама хранит указатели spwndClipboardListener/spwndClipboardListenerNext, так что они не могут привести к таким проблемам с отслеживанием буфера, как цепочки просмотра.

На этом заканчивается наш обзор буфера обмена Windows. Надеюсь, для вас он стал информативным. Хотите узнать больше о мониторинге буфера обмена? Вот хорошая статья MSDN об этом.

Буфер обмена персонального компьютера: что это и где он находится?

Каждый пользователь в процессе работы за компьютером выполнял операции по копированию и перемещению текста из одного документа в другой. Однако лишь единицы задумывались о том, как это работает. Многие пользователи, ежедневно работающие с большим объемом документов, ни разу даже не слышали о буфере обмена и тем более не знают где он находится, и на чем основан принцип его работы.

Стоит отметить, что если бы эта функция не была реализована в персональных компьютерах, у нас не было бы возможности переносить текст и электронные таблицы между различными документами и в случае необходимости создания копии приходилось бы просто перепечатывать весь документ с нуля. Поэтому очень важно иметь представление о том, как пользоваться буфером обмена и где он находится в ПК.

Какие функции выполняет буфер обмена?

Для начинающих пользователей, владеющих компьютером на начальном уровне, буфер обмена можно описать так: буфер — это отведенный операционной системой участок физической памяти, выполняющий функцию временного хранилища, в которое помещается информация при ее вырезании, перемещении или копировании. Таким образом, буфер является чем-то наподобие посредника.

Стоит отметить, что при перемещении информация удаляется из буфера сразу же после вставки в новый документ, а при копировании — хранится там на протяжении определенного промежутка времени.

Где находится буфер обмена в персональном компьютер?

О том, что из себя представляет буфер мы выяснили немного выше. Теперь пришло время разобраться с тем, где же он все-таки находится. Однозначного ответа на этот вопрос не существует, однако, можно быть полностью уверенным, что место для временного хранения текстовой информации или файлов выделяется на жестком диске компьютера. К помещенной в буфер обмена информации можно без проблем получить доступ в любое время, если работа компьютера не прерывалась. При отключении питания от жесткого диска буфер обмена полностью отчищается.

Буфер обмена в мобильных устройствах

Временное хранилище файлов присутствует и в современных смартфонах и планшетных компьютерах. Принцип работы буфера обмена в мобильных устройствах идентичен с таковым в персональных компьютерах, однако, существует небольшое различие: в телефонах и планшетах нельзя просмотреть содержимое буфера.
Изначально буфер в портативных устройствах предусматривался для расширения их функциональности. И это технологическое решения оправдало себя: современные смартфоны и планшетные ПК позволяют выполнять те же задачи, что и персональный компьютер, при этом мобильные устройства находятся у вас всегда под рукой.

Очистка буфера обмена

Исходя из того, что буфер — это часть физической памяти HDD, то это значит, что его можно очистить. Однако как это сделать, если в современных версиях операционных систем невозможно получить к нему доступ? Ответ очень прост: каждая новая информация, помещаемая в буфер обмена, заменяет собой уже хранящиеся в нем документы.

Однако это может вызывать некоторые неудобства, особенно в том случае, когда вы работаете с несколькими документами одновременно и вам необходимо сохранить большое количество их отдельных частей. Намного практичнее в работе были бы буферы обмена, поддерживающие многопотоковую обработку информации. Это позволило бы выполнять несколько копирований и вставок без потери информации, помещенной во временное хранилище. Однако к нашему большому сожалению, таких буферов на сегодняшний день не существует.

Как упоминалось выше, после выключения или перезагрузки компьютера, вся информация в нем навсегда исчезает и восстановить ее будет невозможно. Поэтому перед завершением работы убедитесь, что все важные документы были сохранены на жестком диске компьютера.

В поле поиска вписываем комбинацию символов %SystemRoot%\system32\imageres.dll и выбираем ярлыку одну из картинок, понравившейся вам. Вот собственно и все: средство для очистки буфера обмена готов, все что необходимо — это запустить ярлык и операционная система удалить из него все содержимое.

Буферы обмена — есть ли альтернатива?

На сегодняшний день существует несколько утилит, выполняющих функцию буфера, а также поддерживающих многопотоковую обработку информации. Одной из наиболее распространенных программ этого типа является утилита Save.me. С ее помощью можно одновременно копировать или перемещать несколько фрагментов разных частей документа. Многие пользователи, работающие с большим объемом информации, устанавливают эту программу на свои компьютеры. Таким образом, можно расширить функциональность временного хранилища файлов.

Запись опубликована 12.07.2015 автором katrinas11 в рубрике Моя жизнь. Отблагодари меня, поделись ссылкой с друзьями в социальных сетях:

Читайте также: