Обновлено 13.08.2020

Добрый день! Уважаемые читатели и гости одного из крупнейших IT порталов Pyatilistnik.org. В прошлый раз мы с вами успешно устраняли ошибки на сервере и одной из самых распространенных была ID 10016, которая есть практически на любом компьютере. Сегодня я хочу пополнить мою коллекцию решений по ошибкам Windows и мы разберем вот такую «ID 513 CAPI2 -Cryptographic Services failed while processing the OnIdentity() call in the System Writer Object«. Мы рассмотрим на сколько она критичная для системы, посмотрим ее источник зарождения и сделаем логи еще чище и красивее.
Описание и причины ошибки ID 513
Делая ревизию серверов на базе Windows Server 2019, я обнаружил ошибку, ее содержимое было вот таким:
ID 513 CAPI2 — Cryptographic Services failed while processing the OnIdentity() call in the System Writer Object. Details: AddLegacyDriverFiles: Unable to back up image of binary Microsoft Link-Layer Discovery Protocol. System Error: Access is denied.
Найти все это можно в журнале «Приложения (Application)».

Если обратиться по данной ошибке на Microsoft, то там дано вот такое пояснение причины:
Эта проблема возникает во время запуска резервного копирования системы, использующего VSS. Это часто приводит к зависанию процесса резервного копирования на длительный период времени или сбою.
Во время резервного копирования процесс VSS, запущенный под учетной записью NETWORKSERVICE, вызывает cryptcatsvc!CSystemWriter::AddLegacyDriverFiles(), который перечисляет все записи драйверов в базе данных Service Control Manager и пытается открыть каждую из них. Функция не имеет прав на запись драйвера Microsoft Link-Layer Discovery Protocol (Mslldp.dll) и падает с ошибкой «Доступ запрещен». Оказалось, что разрешения безопасности драйвера MSLLDP не позволяют NETWORKSERVICE получить доступ к записи драйвера.
Как устранить ошибку ID 513 CAPI2
Логично предположить, что нам нужно добавить прав, в этом нам с вами помогут две утилиты sc и accesschk64. Для начала давайте проверим. что не хватает прав у учетной записи NT AUTHORITYSERVICE, для этого вам нужно скачать утилиту accesschk64, которая входит в состав пакета Sysinternals. Для начала мы с помощью данной утилиты посмотрим текущие разрешения для двух библиотек и сравним их:
- mslldp
- mup
Для этого нам потребуется запустить командную строку из папки, где у вас лежит утилита accesschk64 и выполнить вот такие команды:
accesschk64 -c mslldp
accesschk64 -c mup
Как можете заметить тут разница состоит в том, что у библиотеки mup , учетная запись NT AUTHORITYSERVICE имеет права на чтение (R), именно их нам и нужно добавить для mslldp.

Следующим шагом нам нужно внести изменения в список доступа на библиотеке mslldp. Для этого нам нужно воспользоваться утилитой SC и посмотреть правильное значение. Находясь в командной строке введите команду:
Я выделил желтым значение (A;;CCLCSWLOCRRC;;;SU) именно оно и дает права чтения для NT AUTHORITYSERVICE. Убедитесь, что в библиотеке mslldp, данное значение отсутствует:

Далее нам нужно добавить значение (A;;CCLCSWLOCRRC;;;SU) в список доступа, для этого скопируйте всю строчку с выводом для библиотеки mslldp и добавьте в самом конце недостающее значение. После чего выполните команду:
sc sdset MSLLDP D:(D;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BG)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;SO)(A;;LCRPWP;;;S-1-5-80-3141615172-2057878085-1754447212-2405740020-3916490453)(A;;CCLCSWLOCRRC;;;SU)

Теперь снова проверим права на доступ к библиотекеmslldp.dll
Как видно на представленном скриншоте ниже, у нас успешно добавилась учетная запись NT AUTHORITYSERVICE. Теперь ваши логи Windows (Журналы событий), не будут забиты ошибкой «ID 513 CAPI2 — Cryptographic Services failed while processing the OnIdentity() call in the System Writer Object. Details: AddLegacyDriverFiles: Unable to back up image of binary Microsoft Link-Layer Discovery Protocol. System Error: Access is denied». Чем меньше красноты тем лучше, кстати легко отслеживать ошибки Windows вы можете через Windows Admin Center, поверьте очень удобно.

На этом у меня все, если у вас остались вопросы или пожелания, то я ожидаю их в комментариях. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.
Seems we finally have a solution thanks to user szz743 in
the other forum
Here goes:
«Microsoft Link-Layer Discovery Protocol» binary is Windowssystem32DRIVERSmslldp.sys
Its config registry key is HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesMsLldp
During backup a VSS process running under NETWORK_SERVICE account calls cryptcatsvc!CSystemWriter::AddLegacyDriverFiles(), which enumerates all the drivers and tries opening each one of them. , The function fails on MSLLDP driver with «Access Denied»
error.
Turned out it fails because MSLLDP driver’s security permissions do not allow NETWORK_SERVICE to access the driver.
The binary security descriptor for the driver is located here:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesMsLldpSecurity
It should be modified, I used SC.EXE and Sysinternals’ ACCESSCHK.EXE to fix it.
The original security descriptor looked like below:
>accesschk.exe -c mslldp
mslldp
RW NT AUTHORITYSYSTEM
RW BUILTINAdministrators
RW S-1-5-32-549 <- these are server operators
R NT SERVICENlaSvc
No service account is allowed to access MSLLDP driver
The security descriptor for the drivers that were processed successfully looked this way:
>accesschk.exe -c mup
mup
RW NT AUTHORITYSYSTEM
RW BUILTINAdministrators
R NT AUTHORITYINTERACTIVE
R NT AUTHORITYSERVICE <- this gives access to services
How to add access rights for NT AUTHORITYSERVICE to MSLLDP service:
1. Run: SC sdshow MSLLDP
You’ll get something like below (SDDL language is documented on MSDN):
D:(D;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BG)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPDTLOCRSDRCWDWO;;;BA)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SO)(A;;LCRPWP;;;S-1-5-80-3141615172-2057878085-1754447212-2405740020-3916490453)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
2. Run: SC sdshow MUP
You’ll get:
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
********* IMPORTANT *********************************************************
Make sure all Command Parameters are in one line without Carriage Returns and Line Feeds as opposed to the way you see them in these instructions! (i.e. switch off word wrapping etc. when you copy and paste through your editor)
****************************************************************************
3. Take NT AUTHORITY SERVICE entry, which is (A;;CCLCSWLOCRRC;;;SU) and add it to the original MSLLDP security descriptor properly, right before the last S:(AU… group.
4. Apply the new security descriptor to MSLLDP service (make sure command is in one line!!!):
sc sdset MSLLDP D:(D;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BG)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPDTLOCRSDRCWDWO;;;BA)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SO)(A;;LCRPWP;;;S-1-5-80-3141615172-2057878085-1754447212-2405740020-3916490453)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
5. Check the result:
>accesschk.exe -c mslldp
mslldp
RW NT AUTHORITYSYSTEM
RW BUILTINAdministrators
RW S-1-5-32-549
R NT SERVICENlaSvc
R NT AUTHORITYSERVICE
6. Run you backup app, the error is gone for my Home Server backup.
!!! Do not forget to use your security descriptor for MSLLDP driver since I guess there can be some rare cases when its different for your machine. Do not copy my SDDL descriptions, just in case. And backup the old descriptor just in case !!!
Seems we finally have a solution thanks to user szz743 in
the other forum
Here goes:
«Microsoft Link-Layer Discovery Protocol» binary is Windowssystem32DRIVERSmslldp.sys
Its config registry key is HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesMsLldp
During backup a VSS process running under NETWORK_SERVICE account calls cryptcatsvc!CSystemWriter::AddLegacyDriverFiles(), which enumerates all the drivers and tries opening each one of them. , The function fails on MSLLDP driver with «Access Denied»
error.
Turned out it fails because MSLLDP driver’s security permissions do not allow NETWORK_SERVICE to access the driver.
The binary security descriptor for the driver is located here:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesMsLldpSecurity
It should be modified, I used SC.EXE and Sysinternals’ ACCESSCHK.EXE to fix it.
The original security descriptor looked like below:
>accesschk.exe -c mslldp
mslldp
RW NT AUTHORITYSYSTEM
RW BUILTINAdministrators
RW S-1-5-32-549 <- these are server operators
R NT SERVICENlaSvc
No service account is allowed to access MSLLDP driver
The security descriptor for the drivers that were processed successfully looked this way:
>accesschk.exe -c mup
mup
RW NT AUTHORITYSYSTEM
RW BUILTINAdministrators
R NT AUTHORITYINTERACTIVE
R NT AUTHORITYSERVICE <- this gives access to services
How to add access rights for NT AUTHORITYSERVICE to MSLLDP service:
1. Run: SC sdshow MSLLDP
You’ll get something like below (SDDL language is documented on MSDN):
D:(D;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BG)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPDTLOCRSDRCWDWO;;;BA)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SO)(A;;LCRPWP;;;S-1-5-80-3141615172-2057878085-1754447212-2405740020-3916490453)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
2. Run: SC sdshow MUP
You’ll get:
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
********* IMPORTANT *********************************************************
Make sure all Command Parameters are in one line without Carriage Returns and Line Feeds as opposed to the way you see them in these instructions! (i.e. switch off word wrapping etc. when you copy and paste through your editor)
****************************************************************************
3. Take NT AUTHORITY SERVICE entry, which is (A;;CCLCSWLOCRRC;;;SU) and add it to the original MSLLDP security descriptor properly, right before the last S:(AU… group.
4. Apply the new security descriptor to MSLLDP service (make sure command is in one line!!!):
sc sdset MSLLDP D:(D;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BG)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPDTLOCRSDRCWDWO;;;BA)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SO)(A;;LCRPWP;;;S-1-5-80-3141615172-2057878085-1754447212-2405740020-3916490453)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
5. Check the result:
>accesschk.exe -c mslldp
mslldp
RW NT AUTHORITYSYSTEM
RW BUILTINAdministrators
RW S-1-5-32-549
R NT SERVICENlaSvc
R NT AUTHORITYSERVICE
6. Run you backup app, the error is gone for my Home Server backup.
!!! Do not forget to use your security descriptor for MSLLDP driver since I guess there can be some rare cases when its different for your machine. Do not copy my SDDL descriptions, just in case. And backup the old descriptor just in case !!!
При просмотре серверов на базе Windows Server 2019 я обнаружил ошибку, ее содержание было таким:
ID 513 CAPI2 – Сбой криптографических служб при обработке вызова OnIdentity () для объекта System Writer. Подробности: AddLegacyDriverFiles: не удалось создать резервную копию двоичного образа протокола обнаружения канального уровня Microsoft. Системная ошибка: доступ запрещен.
Все это можно найти в журнале приложения)”.

Если вы обратитесь в Microsoft по поводу этой ошибки, вам будет предоставлено следующее объяснение причин:
Эта проблема возникает при выполнении резервного копирования системы, использующего VSS. Это часто приводит к зависанию или остановке процесса резервного копирования на длительный период времени.
Во время резервного копирования процесс VSS, запущенный под учетной записью NETWORK SERVICE, вызывает cryptcatsvc! CSystemWriter :: AddLegacyDriverFiles (), который перечисляет все записи драйверов в базе данных Service Control Manager и пытается открыть их все. У функции нет разрешения на запись драйвера протокола обнаружения канального уровня Microsoft (Mslldp.dll), и она завершается с ошибкой «Доступ запрещен». Обнаружены разрешения безопасности драйвера MSLLDP для предотвращения доступа NETWORK SERVICE к записи драйвера.
Как устранить ошибку ID 513 CAPI2
логично предположить, что нам нужно добавить права, в этом вам помогут две утилиты нс а также accesschk64. Сначала проверяем, что учетная запись NT AUTHORITY SERVICE не имеет прав, для этого необходимо скачать утилиту accesschk64, входящую в пакет Sysinternals. Для начала воспользуемся этой утилитой, чтобы увидеть текущие разрешения для двух библиотек и сравнить их:
- mslldp
- мужик
Для этого нам нужно запустить командную строку из папки, в которой находится утилита accesschk64 и выполните следующие команды:
accesschk64 -c mslldp
accesschk64 -c mup
Как вы можете видеть здесь, разница в том, что в библиотеке mup учетная запись NT AUTHORITY SERVICE имеет разрешения на чтение (R), и это то, что нам нужно добавить для mslldp.

Следующим шагом является внесение изменений в список доступа в библиотеке mslldp. Для этого нам нужно воспользоваться утилитой SC и увидеть правильное значение. В командной строке введите команду:
SC sdshow MUP
Я выделил значение желтым цветом (A ;; CCLCSWLOCRRC ;;; SU) это то, что предоставляет права чтения для NT AUTHORITY SERVICE. Убедитесь, что в библиотеке mslldp нет этого значения:
SC sdshow MSLLDP

Затем нам нужно добавить значение (A ;; CCLCSWLOCRRC ;;; SU) в список доступа, для этого скопируйте всю строку с выводом для библиотеки mslldp и добавьте недостающее значение в конце. Затем запустите команду:
sc sdset MSLLDP D: (D ;; CCDCLCSWRPWPDTLOCRSDRCWDWO ;;; BG) (A ;; CCDCLCSWRPWPDTLOCRSDRCWDWO ;;; SY) (A ;; CCDCLCSWRPDTLOCRSDRCWDWO; 80-572-801-701 ;;) (A ;; CCLCSWLOCRRC ;;; SU)

А теперь еще раз проверим права доступа к библиотеке mslldp.dll
accesschk64 -c mslldp
Как вы можете видеть на скриншоте ниже, мы успешно добавили учетную запись NT СЕРВИСНЫЙ ОРГАН. Теперь ваши журналы Windows (журналы событий) не будут забиты ошибкой «ID 513 CAPI2 – Сбой криптографических служб при обработке вызова OnIdentity () в объекте System Writer». Подробности: AddLegacyDriverFiles: Не удалось выполнить резервное копирование протокола обнаружения изображений двоичного уровня Microsoft Binary Link Layer. Системная ошибка: доступ запрещен ». Чем меньше покраснений, тем лучше, кстати, вы можете легко отслеживать ошибки Windows через Windows Admin Center, поверьте мне, это очень удобно.

![]()

На сервере с операционной системой Windows Server 2016 словил ошибку event id 513. Ошибка древняя и лечится просто.
CAPI2 -Cryptographic Services failed while processing the OnIdentity() call in the System Writer Object

Я сразу заметил что баг появился сразу после настройки и запуска резервного копирования.

Во время резервного копирования процесс VSS выполняется от имени пользователя NETWORK_SERVICE. Он вызывает функцию cryptcatsvc!CSystemWriter::AddLegacyDriverFiles(), которая бегает по дискам и открывает их. Функция падает на драйвере MSLLDP (Microsoft Link-Layer Discovery Protocol) с ошибкой «Access Denied». Настройки безопасности MSLLDP не позволяют пользователю NETWORK_SERVICE получить доступ к дискам. Нужно немного изменить их.
Выполняем:
SC sdshow MUP
Результат:
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
Копируем отсюда кусок, который даёт доступ пользователю NETWORK_SERVICE:
(A;;CCLCSWLOCRRC;;;SU)
Выполняем:
SC sdshow MSLLDP
Результат:
D:(D;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BG)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;SO)(A;;LCRPWP;;;S-1-5-80-3141615172-2057878085-1754447212-2405740020-3916490453)
Берём эту строку и вставляем перед «S:(» скопированный кусок. У меня S:(» отсутствует, добавляю просто в конец. Выполняю:
sc sdset MSLLDP D:(D;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BG)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;SO)(A;;LCRPWP;;;S-1-5-80-3141615172-2057878085-1754447212-2405740020-3916490453)(A;;CCLCSWLOCRRC;;;SU)
У вас свои настройки, не копируйте мой текст!

После повторного запуска резервного копирования ошибка не повторилась.
Update: March 2016.
Commenters have noted this same fix appears to work correctly on Windows 10 as well
A semi-common error seen on various Windows 8.1 and 2012/R2 systems is the following during the start of system backups that use VSS (i.e. most backups). This often causes the backup process to hang for a long period of time, or fail.
Application Event Log: Cryptographic Services failed while processing the OnIdentity() call in the System Writer Object. Details: AddLegacyDriverFiles: Unable to back up image of binary Microsoft Link-Layer Discovery Protocol. System Error: Access is denied.
Much digging through forums has found what appears to be the cause.
During backup a VSS process running under NETWORK_SERVICE account calls cryptcatsvc!CSystemWriter::AddLegacyDriverFiles(), which enumerates all the drivers records in Service Control Manager database and tries opening each one of them. , The function fails on MSLLDP record with «Access Denied» error.
Turned out it fails because MSLLDP driver’s security permissions do not allow NETWORK_SERVICE to access the driver record.
What causes this to have incorrect permissions in the first place is unclear, but a fairly simple fix exists. We’ve tested this on several systems without issue, but your mileage may vary.
It can be fixed by correcting the Security Description on the MSLLDP service, using the built-in command line utility SC.exe
Open an Administrative Command Prompt (NOT PowerShell) and execute the following. This must all be one long command without carriage returns
sc sdset MSLLDP D:(D;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BG)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPDTLOCRSDRCWDWO;;;BA)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SO)(A;;LCRPWP;;;S-1-5-80-3141615172-2057878085-1754447212-2405740020-3916490453)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
You should receive a successful result of
[SC] SetServiceObjectSecurity SUCCESS
If so, the problem is resolved, and there’s no reboot required. The next backup should complete successfully.