#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 большое спасибо. Я просмотрел спецификацию и нашел то, что вы указали. вы хотели бы опубликовать это как ответ, и я приму его. Еще раз спасибо