Нужна ли служба CloseProtocol после службы LocateProtocol?

#uefi #edk2

#uefi #edk2

Вопрос:

Привет, я новичок в изучении UEFI и пытаюсь выяснить логику использования протоколов.

Я прочитал исходный код CoreOpenProtocol , CoreCloseProtocol и CoreLocateProtocol .

Я обнаружил, что, хотя CoreOpenProtocol будет создана OPEN_PROTOCOL_DATA структура и с ней связаны PROTOCOL_INTERFACE->OpenList , CoreLocateProtocol такая структура не создается.

CoreCloseProtocol фактически удалит OPEN_PROTOCOL_DATA из PROTOCOL_INTERFACE->OpenList и освободит память, которую он занял.

Итак, поскольку CoreLocateProtocol не создается OPEN_PROTOCOL_DATA , процедура закрытия кажется бессмысленной.

Это правда?

Большое спасибо!

Комментарии:

1. Лучше основывать такой вывод на спецификации UEFI, а не на чтении кода. Насколько я понимаю, нет необходимости закрывать дескрипторы, возвращаемые LocateProtocol, и я не закрываю их в своем коде. Я думал, что это понимание основано на утверждении в спецификации UEFI, что это не требуется, но я не могу найти ни одного такого заявления. Однако в описании CloseProtocol говорится, что он закрывает дескриптор, «который ранее был открыт с помощью OpenProtocol», что подразумевает, что его не следует использовать для дескриптора, который был получен иным способом.

2. @prl большое спасибо. Я просмотрел спецификацию и нашел то, что вы указали. вы хотели бы опубликовать это как ответ, и я приму его. Еще раз спасибо