Процесс буфера обмена windows

Applies ToWindows 11 Windows 10

Использование буфера обмена

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

Ниже приведены ответы на некоторые вопросы, связанные с буфером обмена.

Открытие параметров буфера обмена

Чтобы включить буфер обмена в первый раз, выберите клавиши с логотипом Windows + V, а затем выберите Включить.

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

  1. Выберите Пуск > Параметры > системный > буфер обмена .

  2. Установите переключатель журнал буфера обмена на всех устройствах в значение Вкл

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

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

  1. Выберите Пуск > Параметры > системный > буфер обмена .

  2. В области Очистить данные буфера обмена выберите Очистить.

Вы также можете очистить журнал буфера обмена устройства, выбрав клавиши с логотипом Windows +V, а затем выбрав параметр Очистить все в верхней части экрана.

Вы можете очистить любой конкретный элемент в буфере обмена.

  1. Выберите Клавиша с логотипом Windows + V.

  2. Рядом с рассматриваемым элементом выберите Дополнительные сведения (…), а затем — Удалить .

Устранение неполадок с буфером обмена

Убедитесь, что вы включили журнал буфера обмена. Чтобы включить буфер обмена в первый раз, выберите клавиши с логотипом Windows + V и выберите Включить.

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

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

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

  1. Выберите Пуск > Параметры > системный > буфер обмена .

  2. В разделе Журнал буфера обмена на устройствах установите переключатель в значение Вкл.

  3. Выберите Автоматически синхронизировать текст, который я копируем.

    Примечание: Параметр Вручную синхронизировать текст, который я копируем, означает, что вам нужно открыть журнал буфера обмена (клавиша с логотипом Windows + V) и вручную нажать кнопку синхронизации в элементе буфера обмена. Затем текст будет отправлен в облако и синхронизирован с другими устройствами.

Размеры элементов не должны превышать 4 МБ. Поддерживаются форматы файлов text, HTML и bitmap.

Журнал буфера обмена рассчитан не более чем на 25 скопированных записей. Система автоматически удаляет старые элементы(если они не закреплены), чтобы освободить место для новых.

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

Буфер обмена в RDP сессии удобно использовать для передачи текста и файлом между локальным компьютером и удаленным хостом (это может быть как рабочая станция Windows, так и RDS ферма на Windows Server). Иногда случается, что буфер обмена в терминальной сессии Windows (или приложении RemoteApp) перестает работать, и вы не можете передать (скопировать/вставить) ваши данные между вашим компьютером и RDP сервером.

Возможны несколько сценариев: проверьте, разрешено ли перенаправление буфера обмена на клиенте RDP, проверьте настройки копирования файлов/данных через буфер обмена RDP на сервере, перезапустите сбойный процесса rdpclip.exe в текущей терминальной сессии пользователя.

Содержание:

  • Перезапуск процесса буфера обмена в RDP сессии (rdpclip.exe)
  • Разрешить буфера обмена в RDP клиенте Windows
  • Как запретить/разрешить копирование через буфер обмена RDP в Windows?

Перезапуск процесса буфера обмена в RDP сессии (rdpclip.exe)

Если буфер обмена в конкретной RDP сессии неожиданно перестал работать, а пункт Paste в контекстном меню удаленного компьютера стал неактивным, проще всего корректно завершить текущую RDP сессию (
logoff
) и подключиться заново. Это наверняка исправит проблему с буфером обмена. Но этом неудобно, потому что вам придется заново запускать все приложения в терминальном сеансе. Вы можете попробовать восстановить работу буфера обмена в RDP сессии без выполнения logoff.

ЗЗа работу буфера обмена между вашим компьютером и RDP хостом отвечает приложение rdpclip.exe. Для каждого удаленного пользователя при подключении к Remote Desktop стартует собственный процесс
rdpclip.exe
. С помощью Task Manager вы можете завершить процесс rdpclip.exe (RDP Clipboard Monitor/ Монитор буфера обмена RDP -> Emd task) и запустить его вручную (Task Manager -> File -> Start new task -> rdpclip.exe —> Enter).

завершить процесс rdpclip.exe (RDP Clipboard Monitor)

Это обычно помогает быстро восстановить работу удаленного буфера обмена. Проверьте, работает ли теперь copy/paste (Ctrl+C / Ctrl+V) в RDP окне.

запустить rdpclip вручную

Разрешить буфера обмена в RDP клиенте Windows

Проверьте, что настройки вашего RDP клиента разрешают использовать буфер обмена в окне терминальной сессии.

Если вы используете встроенный RDP клиент Windows (Remote Desktop Connection, mstsc.exe) для подключения к удаленному терминальному серверу, проверьте что в его настройках разрешено копирования через RDP буфер обмена

Перейдите на вкладку Local Resources, проверьте что в секции “Choose the devices and resources that you want to use in your remote session” включена опция Clipboard (Буфер обмена).

Если вы хотите разрешить копировать файлы через буфер обмена RDP, нужно нажать кнопку More и включить опцию Drives. Это разрешит использовать локальные диски в RDP сессии для копирования файлов.

включить перенаправление локальных дисков в rdp сессию

Если вы используете другой RDP клиент, например Remote Desktop Connection Manager или mRemoteNG, имейте в виду что опция удаленного буфера обмена может называться по-другому.

Если вы используете готовый *.RDP файл с настройками для подключения к удаленному компьютеру (например для подключения к RemoteApp), проверьте что в нем включены следующие опции:

redirectclipboard:i:1
redirectdrives:i:1
drivestoredirect:s:*
  • redirectclipboard — разрешает использовать локальный буфер обмена в удаленной сессии;
  • Drivestoredirect и redirectdrives – включают перенаправление в RDP сеанс для всех локальных дисков (нужна, если вы копируете файлы через RDP).

Как запретить/разрешить копирование через буфер обмена RDP в Windows?

С помощью параметров групповых политик или реестра вы можете разрешить или запретить использование RDP буфера обмена на хосте Windows для операций копировать/вставить.

  1. Запустите локальный редактор групповых политик–
    gpedit.msc
    ;
  2. Перейдите в секцию GPO Computer Configuration -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Device and Resource Redirection;
  3. Чтобы запретить копировать данные с/на удаленный сервер через буфер обмена RDP сессии установите Enabled для следующих политик:
    Do not allow Clipboard redirection - Clipboard redirection используется для копирования текста и файлов через буфер обмена в RDP).
    Do not allow drive redirection - Drive mapping/redirection –позволяет пользователю получать доступ к своим локальным дискам в RDP сессии. Используется в том числе при копировании файлов.

    Do not allow Clipboard redirection групповая политика

    При включении этих политик в ветке реестра HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services будут созданы следующие DWORD параметры:
    fDisableCdm = 1
    (запретить подключение локальных дисков на RDP хосте)
    fDisableClip = 1
    (запретить передачу данных через буфер обмена между RDP сервером и клиентом)

    Аналогичные политики есть в пользовательском разделе GPO. Это значит, что вы можете отключить буфер обмен и подключаемые диски только для определенных пользователей RDP хоста. На отдельно-стоящем компьютере для отключения буфера обмена RDP для не-администраторов, можно использовать MLGPO.

  4. Если вы хотите принудительно разрешить использование RDP буфера обмена, измените значения параметров на Disabled (по умолчанию использование RDPClip для обмена данными между локальным компьютером и удаленным RDP хостов разрешено);
  5. Обновите настройки политик командой
    gpupdate /force
    . Для применения новых настроек к пользователям, они должны завершить свои RDP сессии (через logoff, а не disconnect).

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

Для этого создайте REG_DWORD параметры в ветке реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server:

  • DisableClipboardRedirection = 1
  • DisableDriveRedirection = 1

И два параметра рассмотренных выше в ветке HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services:

  • fDisableCdm =1
  • fDisableClip = 1

Чтобы быстро запретить копирование данных между компьютером и удаленным RDP хостом, выполните команды:

reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server” /v “DisableClipboardRedirection" /t REG_DWORD /d 1 /f
reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server” /v “DisableDriveRedirection" / t REG_DWORD /d 1 /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v fDisableCdm /t REG_DWORD /d 1 /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v fDisableClip /t REG_DWORD /d 1 /f

Если вы хотите, наоборот разрешить использовать буфер обмена RDP, эти параметры реестра должны отсутствовать (по умолчанию) или их значения должны быть равны 0.

Можно проверить значение параметром реестра с помощью PowerShell:

Get-ItemProperty -Path 'HKLM:SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services' | Select fDisableClip,fDisableCdm

ращзрешить rdp буфер через реестр

Если у вас используются RDS сервера на Windows Server 2022,2019,2016, можно включить/отключить буфер обмена и локальные диски в настройках RDS коллекции. Откройте Server Manager -> Remote Desktop Services -> Collections -> Tasks -> Edit Properties -> Client Settings. Снимите галки у опций “Clipboard” и “Drive” в секции Enable redirecting for the following.

настройки RDS коллекции - запретить буфер обмена и копирование файлов

Параметр Drives позволяет использовать копирование файлов через буфер обмена (используются локальные диски в RDS сеансе).

Можно изменить настройки RDS коллекции с помощью PowerShell:

Set-RDSessionCollectionConfiguration -CollectionName myCol1 -ClientDeviceRedirectionOptions “Clipboard,Drive”

Обратите внимание, что через буфер обмена RDP нельзя копировать файлы более 2 Гб. Если вам нужно скопировать большой файл между RDS хостом и локальным компьютером, воспользуйтесь командой xcopy:

xcopy \\tsclient\c\distr\my.iso c:\serverfolder

Если у вас используется хост RDGateway для подключения к RDS, нужно учитывать что вы можете запретить или разрешить использовать буфер обмена в настройках вашей политики CAP (Connection Authorization Policy). По умолчанию в разделе Device Redirection включена опция Enable device redirection for all client devices. Здесь вы можете запретить перенаправление локального буфера обмена и дисков.

rd gateway разрешить буфер обмена в RDP

Если вы хотите запретить копировать из терминальной RDP сессии только для пользователей, но не для администраторов, можно изменить NTFS разрешения на файл
c:\windows\system32\rdpclip.exe
. Необходимо в свойствах файл убрать разрешение Read/Execute для встроенной группы Users (придется сначала изменить владельца файла с TrustedInstaller).

запрети на использование rdpclip.exe для не-администраторов

Время на прочтение12 мин

Количество просмотров50K

Недавно у меня появилась возможность выполнить отладку буфера обмена в Windows, и я решил, что хорошо бы поделиться информацией, которую удалось узнать. Буфер обмена — это тот компонент Windows, который многие из нас используют десятки (сотни?) раз в день, особо не размышляя об этом. Прежде чем взяться за это дело, я даже никогда не задумывался, как всё устроено. Как выяснилось, там столько интересного, что вы даже не можете себе представить. Сначала опишу, как приложения хранят разные типы данных в буфере обмена и как извлекают их оттуда, а затем — как приложения могут «прицепиться» к буферу и отслеживать изменения в нём. В обоих случае вы увидите отладочные записи, которые показывают, как получить доступ к данным из отладчика.

Начнём с обсуждения форматов буфера обмена. Такие форматы используются для описания, какие типы данные можно поместить в буфер. Там есть некоторое количество предопределённых стандартных форматов, которые может использовать приложение, вроде битового массива, текста ANSI, текста в Юникоде и TIFF. Windows также позволяет приложению установить собственный формат. Например, текстовый процессор может зарегистрировать формат, включающий в себя текст, форматирование и картинки. Конечно, это ведёт к определённой проблеме: что произойдёт, если вы скопируете данные из текстового редактора и вставите их в «Блокнот», который не понимает всего этого форматирования и не отображает картинки?

Выход — разрешить одновременное хранение данных в буфере обмена в нескольких форматах. Когда я раньше думал о буфере обмена, то представлял, что там хранится единственный объект («мой текст» или «моя картинка»), но на самом деле мои данные хранятся в буфере в разных формах. Программа, которая берёт информацию из буфера, получает её в том формате, который она может использовать.

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

Когда пользователь нажимает кнопку «Вставить», целевое приложение вызывает OpenClipboard и одну из следующих функций для определения доступных форматов данных: IsClipboardFormatAvailable, GetPriorityClipboardFormat или EnumClipboardFormats. Если оно находит подходящий формат, то тогда вызывает GetClipboardData с идентификатором нужного формата в качестве параметра, чтобы получить данные. В конце приложение использует команду CloseClipboard для закрытия буфера.

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

kd> u win32k!InternalSetClipboardData+0xe4-c L5
win32k!InternalSetClipboardData+0xd8:
fffff960`0011e278 894360          mov     dword ptr [rbx+60h],eax
fffff960`0011e27b 8937            mov     dword ptr [rdi],esi
fffff960`0011e27d 4c896708        mov     qword ptr [rdi+8],r12
fffff960`0011e281 896f10          mov     dword ptr [rdi+10h],ebp
fffff960`0011e284 ff15667e1900    call    qword ptr[win32k!_imp_PsGetCurrentProcessWin32Process (fffff960`002b60f0)]

kd> dt win32k!tagCLIP
   +0x000 fmt              : Uint4B
   +0x008 hData            : Ptr64 Void
   +0x010fGlobalHandle     : Int4B

Вот как выглядит вызов к SetClipboardData от «Блокнота»:

kd> k
Child-SP          RetAddr           Call Site
fffff880`0513a940 fffff960`0011e14f win32k!InternalSetClipboardData+0xe4
fffff880`0513ab90 fffff960`000e9312 win32k!SetClipboardData+0x57
fffff880`0513abd0 fffff800`01482ed3 win32k!NtUserSetClipboardData+0x9e
fffff880`0513ac20 00000000`7792e30ant!KiSystemServiceCopyEnd+0x13
00000000`001dfad8 00000000`7792e494 USER32!ZwUserSetClipboardData+0xa
00000000`001dfae0 000007fe`fc5b892b USER32!SetClipboardData+0xdf
00000000`001dfb20 000007fe`fc5ba625 COMCTL32!Edit_Copy+0xdf
00000000`001dfb60 00000000`77929bd1 COMCTL32!Edit_WndProc+0xec9
00000000`001dfc00 00000000`779298da USER32!UserCallWinProcCheckWow+0x1ad
00000000`001dfcc0 00000000`ff5110bc USER32!DispatchMessageWorker+0x3b5
00000000`001dfd40 00000000`ff51133c notepad!WinMain+0x16f
00000000`001dfdc0 00000000`77a2652d notepad!DisplayNonGenuineDlgWorker+0x2da
00000000`001dfe80 00000000`77b5c521 kernel32!BaseThreadInitThunk+0xd
00000000`001dfeb0 00000000`00000000ntdll!RtlUserThreadStart+0x1d

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

kd> dt win32k!tagCLIP @rdi
   +0x000 fmt              : 0xd
   +0x008 hData            : 0x00000000`00270235 Void
   +0x010fGlobalHandle     : 0n1

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

kd> ?win32k!gSharedInfo
Evaluate expression: -7284261440224 = fffff960`002f3520
kd> dt win32k!tagSHAREDINFO fffff960`002f3520
   +0x000 psi              : 0xfffff900`c0980a70 tagSERVERINFO
   +0x008 aheList          : 0xfffff900`c0800000 _HANDLEENTRY
   +0x010 HeEntrySize      : 0x18
   +0x018 pDispInfo        : 0xfffff900`c0981e50 tagDISPLAYINFO
   +0x020ulSharedDelta     : 0
   +0x028 awmControl       : [31] _WNDMSG
   +0x218DefWindowMsgs     : _WNDMSG
   +0x228DefWindowSpecMsgs : _WNDMSG

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

kd> ?0x00000000`00270235 & FFFF
Evaluate expression: 565 = 00000000`00000235
kd> ??sizeof(win32k!_HANDLEENTRY)
unsigned int64 0x18
kd> ? 0xfffff900`c0800000 + (0x235*0x18)
Evaluate expression: -7693351766792 = fffff900`c08034f8
kd> dt win32k!_HANDLEENTRY fffff900`c08034f8
   +0x000 phead            : 0xfffff900`c0de0fb0 _HEAD
   +0x008 pOwner           : (null)
   +0x010 bType            : 0x6 ''
   +0x011 bFlags           : 0 ''
   +0x012 wUniq            : 0x27

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

kd> du fffff900`c0de0fb0 + 0x14
fffff900`c0de0fc4 "Hi NTDebugging readers!"

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

Breakpoint 0 hit
win32k!InternalSetClipboardData+0xe4:
fffff960`0011e284 ff15667e1900   call    qword ptr[win32k!_imp_PsGetCurrentProcessWin32Process (fffff960`002b60f0)]
kd> dt win32k!tagCLIP @rdi
   +0x000 fmt              : 0xd
   +0x008 hData            : (null)
   +0x010fGlobalHandle    : 0n0

hData равен нулю! Почему так? Оказывается, буфер обмена позволяет приложению передавать нуль в качестве параметра SetClipboardData для определённого формата. Это означает, что приложение способно предоставить данные в данном формате, но сделает это позже, в случае необходимости. Если я захочу вставить текст в «Блокнот», для чего в буфере должен быть текст в Юникоде, Windows отправит сообщение WM_RENDERFORMAT в окно WordPad, и тогда WordPad предоставит данные в новом формате. Конечно, если приложение закрывается до того, как предоставило данные во всех форматах, Windows понадобятся все форматы. В этом случае Windows отправит сообщение WM_RENDERALLFORMATS, чтобы другие приложения могли использовать данные из буфера обмена после закрытия материнского приложения.

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

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

Функциональность Clipboard Viewer появилась ещё в версии Windows 2000, если не раньше. Принцип работы довольно простой: приложение, которое заинтересовано в получении уведомлений об изменении в буфере, вызывает SetClipboardViewer и передаёт дескриптор своего окна. Windows хранит этот дескриптор в структуре win32k, и каждый раз при изменении буфера обмена Windows отправляет сообщение WM_DRAWCLIPBOARD в зарегистрированное окно.

Конечно, зарегистрироваться для просмотра буфера могут несколько окон — как Windows справится с этим? Ну, если приложение вызывает SetClipboardViewer, а другое окно раньше уже зарегистрировалось для просмотра буфера обмена, то Windows возвращает новому окну значение дескриптора предыдущего окна. И теперь новое окно, следящее за буфером, обязано вызвать SendMessage каждый раз, когда получает WM_DRAWCLIPBOARD, и уведомить об изменении буфера следующее окно в цепочке тех, кто следит за буфером. Каждое из окон, следящих за буфером, также должно обрабатывать сообщения WM_CHANGECBCHAIN. Такие сообщения уведомляют все остальные окна об удалении одного звена в цепочке и сообщают, какое звено становится следующим в очереди. Это позволяет сохранить цепочку.

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

Чтобы справиться с такими проблемами, в Windows Vista добавили механизм прослушивания формата буфера обмена — Clipboard Format Listener. Он работает во многом так же, как просмотр буфера обмена, за исключением того, что Windows сама ведёт список приложений, которые прослушивают буфер, а не полагается на добропорядочность приложений, которые должны сохранять цепочку.

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

Мы рассмотрели, как зарегистрировать просмотр/прослушивание буфера обмена. Теперь посмотрим, как с помощью отладчика определить, какие программы участвуют в этих процессах. Сначала нужно идентифицировать процесс в сессии, где мы хотим проверить мониторинг буфера обмена. Это может быть любой процесс win32 в этой сессии — он нужен нам просто для того, чтобы найти указатель на Window Station. В этом случае я бы использовал окно «Блокнота», как и раньше:

kd> !process 0 0 notepad.exe
PROCESS fffff980366ecb30
    SessionId: 1  Cid: 0374   Peb: 7fffffd8000  ParentCid: 0814
    DirBase: 1867e000  ObjectTable: fffff9803d28ef90  HandleCount: 52.
    Image: notepad.exe

Если вы делаете это в процессе отладки ядра, то понадобится интерактивно сменить контекст (используя .process /I<address>, затем нажать g и подождать, пока отладчик прорвётся назад). Теперь запускаем DT на адрес процесса как _EPROCESS, и смотрим на поле Win32Process:

kd> dt _EPROCESS fffff980366ecb30 Win32Process
nt!_EPROCESS
   +0x258 Win32Process : 0xfffff900`c18c0ce0 Void

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

kd> dt win32k!tagPROCESSINFO 0xfffff900`c18c0ce0 rpwinsta
   +0x258 rpwinsta : 0xfffff980`0be2af60 tagWINDOWSTATION

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

kd> dt 0xfffff980`0be2af60 tagWINDOWSTATION
win32k!tagWINDOWSTATION
   +0x000 dwSessionId      : 1
   +0x008 rpwinstaNext     : (null)
   +0x010 rpdeskList       : 0xfffff980`0c5e2f20 tagDESKTOP
   +0x018 pTerm            : 0xfffff960`002f5560 tagTERMINAL
   +0x020 dwWSF_Flags      : 0
   +0x028 spklList         : 0xfffff900`c192cf80 tagKL
   +0x030 ptiClipLock      : (null)
   +0x038 ptiDrawingClipboard: (null)
   +0x040 spwndClipOpen    : (null)
   +0x048 spwndClipViewer  : 0xfffff900`c1a4ca70 tagWND
   +0x050 spwndClipOwner   : 0xfffff900`c1a3ef70 tagWND
   +0x058 pClipBase        : 0xfffff900`c5512fa0 tagCLIP
   +0x060 cNumClipFormats  : 4
   +0x064 iClipSerialNumber : 0x16
   +0x068 iClipSequenceNumber : 0xc1
   +0x070 spwndClipboardListener : 0xfffff900`c1a53440 tagWND
   +0x078 pGlobalAtomTable: 0xfffff980`0bd56c70 Void
   +0x080 luidEndSession   : _LUID
   +0x088 luidUser         : _LUID
   +0x090 psidUser         : 0xfffff900`c402afe0 Void

Обратите внимание на поля spwndClipViewer, spwndClipboardListener и spwndClipOwnerfields. Здесь spwndClipViewer — это последнее зарегистрированное окно в цепочке тех, кто просматривает буфер обмена. Также spwndClipboardListener — последнее зарегистрированное окно прослушивания буфера в списке Clipboard Format Listener. Окно spwndClipOwner — это то окно, которое разместило данные в буфере обмена.

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

kd> dt 0xfffff900`c1a4ca70 tagWND
win32k!tagWND
   +0x000 head             : _THRDESKHEAD
   +0x028 state            : 0x40020008
   +0x028 bHasMeun         : 0y0
   +0x028 bHasVerticalScrollbar : 0y0
…

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

kd> dt 0xfffff900`c1a4ca70 _THRDESKHEAD
win32k!_THRDESKHEAD
   +0x000 h                : 0x00000000`000102ae Void
   +0x008 cLockObj         : 6
   +0x010 pti              : 0xfffff900`c4f26c20tagTHREADINFO
   +0x018 rpdesk           : 0xfffff980`0c5e2f20 tagDESKTOP
   +0x020 pSelf            : 0xfffff900`c1a4ca70  "???"

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

kd> dt 0xfffff900`c4f26c20 tagTHREADINFO
win32k!tagTHREADINFO
   +0x000 pEThread         : 0xfffff980`0ef6cb10 _ETHREAD
   +0x008 RefCount         : 1
   +0x010 ptlW32           : (null)
   +0x018 pgdiDcattr       : 0x00000000`000f0d00 Void

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

kd> !thread 0xfffff980`0ef6cb10 e
THREAD fffff9800ef6cb10 Cid 087c.07ec  Teb: 000007fffffde000 Win32Thread: fffff900c4f26c20 WAIT: (WrUserRequest) UserModeNon-Alertable
    fffff9801c01efe0  SynchronizationEvent
Not impersonating
DeviceMap                 fffff980278a0fc0
Owning Process            fffff98032e18b30       Image:         viewer02.exe
Attached Process          N/A            Image:         N/A
Wait Start TickCount     5435847        Ticks: 33 (0:00:00:00.515)
Context Switch Count     809            IdealProcessor: 0                 LargeStack
UserTime                  00:00:00.000
KernelTime                00:00:00.062
Win32 Start Address 0x000000013f203044
Stack Init fffff880050acdb0 Current fffff880050ac6f0
Base fffff880050ad000 Limit fffff880050a3000 Call 0
Priority 11 BasePriority 8 UnusualBoost 0 ForegroundBoost 2IoPriority 2 PagePriority 5
Child-SP          RetAddr           Call Site
fffff880`050ac730 fffff800`01488f32 nt!KiSwapContext+0x7a
fffff880`050ac870 fffff800`0148b74f nt!KiCommitThreadWait+0x1d2
fffff880`050ac900 fffff960`000dc8e7 nt!KeWaitForSingleObject+0x19f
fffff880`050ac9a0 fffff960`000dc989 win32k!xxxRealSleepThread+0x257
fffff880`050aca40 fffff960`000dafc0 win32k!xxxSleepThread+0x59
fffff880`050aca70 fffff960`000db0c5 win32k!xxxRealInternalGetMessage+0x7dc
fffff880`050acb50 fffff960`000dcab5 win32k!xxxInternalGetMessage+0x35
fffff880`050acb90 fffff800`01482ed3 win32k!NtUserGetMessage+0x75
fffff880`050acc20 00000000`77929e6a nt!KiSystemServiceCopyEnd+0x13 (TrapFrame @ fffff880`050acc20)
00000000`002ffb18 00000000`00000000 0x77929e6a

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

kd> dt 0xfffff980`0be2af60 tagWINDOWSTATION
win32k!tagWINDOWSTATION
   +0x000 dwSessionId      : 1
   +0x008 rpwinstaNext     : (null)
   +0x010 rpdeskList       : 0xfffff980`0c5e2f20 tagDESKTOP
   +0x018 pTerm            : 0xfffff960`002f5560 tagTERMINAL
   +0x020 dwWSF_Flags      : 0
   +0x028 spklList         : 0xfffff900`c192cf80 tagKL
   +0x030 ptiClipLock      : (null)
   +0x038 ptiDrawingClipboard : (null)
   +0x040 spwndClipOpen    : (null)
   +0x048 spwndClipViewer  : 0xfffff900`c1a4ca70tagWND
   +0x050 spwndClipOwner   : 0xfffff900`c1a3ef70tagWND
   +0x058 pClipBase        : 0xfffff900`c5512fa0 tagCLIP
   +0x060 cNumClipFormats  : 4
   +0x064 iClipSerialNumber : 0x16
   +0x068 iClipSequenceNumber : 0xc1
   +0x070 spwndClipboardListener: 0xfffff900`c1a53440 tagWND
   +0x078 pGlobalAtomTable: 0xfffff980`0bd56c70 Void
   +0x080 luidEndSession   : _LUID
   +0x088 luidUser         : _LUID
   +0x090 psidUser         : 0xfffff900`c402afe0 Void

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

kd> dt 0xfffff900`c1a53440 tagWND spwndClipboardListenerNext
win32k!tagWND
   +0x118 spwndClipboardListenerNext : 0xfffff900`c1a50080 tagWND

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

kd> dt 0xfffff900`c1a50080 tagWND spwndClipboardListenerNext
win32k!tagWND
   +0x118 spwndClipboardListenerNext : (null)

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

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

Все способы:

  • Способ 1: Сброс процесса rdpclip.exe
  • Способ 2: Перезапуск «Проводника»
  • Способ 3: Очистка истории буфера обмена
  • Способ 4: Средство устранения неполадок
  • Способ 5: Редактирование реестра
  • Способ 6: Отключение приложений для оптимизации ОЗУ
  • Способ 7: Удаление вирусов
  • Вопросы и ответы: 3

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

Подробнее: Копирование защищенного текста на сайтах

Способ 1: Сброс процесса rdpclip.exe

Для начала попробуйте сбросить процесс rdpclip.exe, отвечающий за буфер обмена удаленного рабочего стола, который позволяет удаленному ПК и локальному хосту использовать инструмент совместно.

  1. Откройте «Диспетчер задач», используя сочетание клавиш «Ctrl + Shift + Esc». Перейдите на вкладку «Подробности» и в списке процессов найдите «rdpclip.exe». При необходимости можно упорядочить названия по алфавиту, нажав на строку «Имя». Щелкните правой кнопкой мыши по названию процесса и выберите пункт «Завершить дерево процессов»
  2. не работает буфер обмена в windows 10-01

  3. После чего потребуется вновь запустить средство. Нажмите на вкладку «Файл» и выберите опцию «Запустить новую задачу».
  4. не работает буфер обмена в windows 10-02

  5. В новом окне пропишите «rdpclip.exe», поставьте галочку у опции создания задачи с правами администратора и кликните по кнопке «ОК».
  6. не работает буфер обмена в windows 10-03

Способ 2: Перезапуск «Проводника»

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

Чтобы перезагрузить «Проводник», можно воспользоваться функциями «Диспетчера задач». На вкладке «Процессы» найдите его и щелкните правой кнопкой мыши по названию. Из контекстного меню выберите пункт «Перезапустить».

не работает буфер обмена в windows 10-04

Способ 3: Очистка истории буфера обмена

Исправить ошибку, из-за которой не работает функция копирования и вставки в Windows 10, может помочь очистка истории файлов кеша и буфера обмена:

  1. Вызовите системный инструмент «Командная строка» с расширенными правами. Для этого через поиск в «Пуске» введите нужный запрос, затем выберите пункт «Запуск от имени администратора».
  2. не работает буфер обмена в windows 10-05

  3. В открывшемся окне пропишите команду echo off | clip и нажмите на клавишу «Enter», чтобы начать процедуру очистки.
  4. не работает буфер обмена в windows 10-006

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

Способ 4: Средство устранения неполадок

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

  1. Запустите приложение «Параметры», щелкнув по иконке Windows на нижней рабочей панели и выбрав нужный пункт в виде шестеренки.
  2. Перейдите в раздел «Обновление и безопасность» в новом окне.
  3. не работает буфер обмена в windows 10-08

  4. На панели слева сначала щелкните по пункту «Устранение неполадок», затем по строке «Дополнительные средства устранения неполадок».
  5. не работает буфер обмена в windows 10-09

  6. В отобразившемся списке кликните ЛКМ по строке «Клавиатура» и нажмите на появившуюся кнопку для запуска инструмента.
  7. не работает буфер обмена в windows 10-10

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

Способ 5: Редактирование реестра

Исправление работы буфера обмена доступно через встроенный инструмент Windows – «Редактор реестра»:

  1. Вызовите «Редактор реестра» от имени администратора, введя соответствующий запрос в строке поиска.
  2. не работает буфер обмена в windows 10-11

  3. Через каталоги на панели слева пройдите по пути: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Clipboard. В главном окне дважды щелкните по параметру «IsCloudAndHistoryFeatureAvailable», чтобы открыть его свойства.
  4. не работает буфер обмена в windows 10-12

  5. В разделе «Система исчисления» должен быть отмечен пункт «Шестнадцатеричная», а в строке «Значение» впишите цифру «1». Сохраните настройки, нажав на кнопку «ОК».

После внесения правок через «Редактор реестра» лучше перезагрузить компьютер, затем проверить, заработал ли буфер обмена.

Способ 6: Отключение приложений для оптимизации ОЗУ

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

Метод деактивации зависит от установленного софта. Некоторые из них отключаются с помощью нажатия правой кнопкой мыши по иконке в трее и выбора соответствующего пункта. Также можно использовать «Диспетчер задач»: запустить его и на вкладке «Процессы» отыскать приложение, оптимизирующее ОЗУ, затем выделить его название левой кнопкой мыши и выбрать кнопку «Снять задачу».

не работает буфер обмена в windows 10-14

Способ 7: Удаление вирусов

Сканирование системы на наличие вирусного ПО и удаление вредоносных утилит могут помочь убрать некоторые ошибки в работе ОС. Вирусы действуют по-разному, поэтому они могут коснуться и встроенных средств, включая буфер обмена Windows 10.

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

Подробнее: Удаление вируса с компьютера под управлением Windows 10

не работает буфер обмена в windows 10-15

Наша группа в TelegramПолезные советы и помощь

Всё, что нужно знать о полезной функции для более продуктивной работы.

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

Стандартный буфер, который все привыкли использовать через контекстное меню «Скопировать» и «Вставить» или через сочетания Ctrl + C, Ctrl + V, имеет лишь одну «ячейку памяти». Чего бывает очень мало. Начиная с Windows 10 Microsoft внедрила журнал буфера обмена, который умеет запоминать до 25 элементов. Копировать и вставлять при этом можно текст, ссылки, изображения и другой контент.

Как включить журнал буфера обмена Windows 10 и Windows 11

По умолчанию функция неактивна. Её можно активировать следующим образом.

Как включить буфер обмена Windows 10: удерживая клавишу Win, нажмите V на клавиатуре

Удерживая клавишу Win (с символом «окошка»), нажмите V на клавиатуре. Вы увидите предложение включить журнал буфера обмена с помощью соответствующей кнопки.

Как включить буфер обмена Windows 10: включите тумблер

Если при нажатии Win + V ничего не происходит, то активировать функцию можно в настройках. Для этого сделайте правый клик по меню «Пуск» и выберите «Параметры». Далее в разделе «Система» → «Буфер обмена» включите тумблер как на скриншоте выше.

Как просмотреть буферы обмена Windows 10 и Windows 11

После включения система начнёт хранить всё, что вы копируете или вырезаете, в буфере обмена.

Как посмотреть буфер обмена Windows 10: нажмите Win + V

Для просмотра журнала нажмите Win + V. На экране отобразится плавающее окошко со списком сохранённых элементов, которое можно переместить в удобное место. Запомнить сочетание легко — как обычная вставка, только вместо Ctrl используется клавиша Win.

Как вставить куда-то скопированный элемент

Как посмотреть буфер обмена Windows 10 и вставить скопированный элемент: кликните по нему

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

Как закрепить нужный элемент

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

Кликните по значку иголки

Для этого просто кликните по значку иголки напротив нужного элемента.

Как очистить журнал буфера обмена

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

Как посмотреть буфер обмена Windows 10: элементы можно удалить по отдельности и разом

Каждую из них можно удалить по отдельности, кликнув на троеточие в списке и выбрав значок корзины. Для освобождения места во всём буфере используется кнопка «Очистить всё».

При этом буфер автоматически очищается после перезагрузки и выключения компьютера. Из памяти исчезают все элементы, кроме закреплённых.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Как сделать скриншот части экрана на компьютере на windows 10 на ноутбуке
  • Все элементы windows form
  • Удаленное управление windows через powershell
  • Windows powershell как перейти в папку
  • Amd athlon 64 x2 6000 windows 10