업데이트 처리

펌웨어 업데이트 패키지가 적용되고 시스템이 나중에 다시 부팅된 후 Windows OS 로더는 모든 펌웨어 페이로드 파일(이 예에서는 firmware.bin)을 실제 메모리에 로드합니다. Windows OS 로더는 UEFI UpdateCapsule을 호출할 때 사용할 GUID 및 플래그를 설명하는 각 업데이트의 해당 ESRT 항목의 정보를 사용하여 캡슐 헤더를 만듭니다. 각 캡슐 헤더의 플래그 필드를 설정할 때 Windows OS 로더는 항상 CAPSULE_FLAGS_PERSIST_ACROSS_RESET 설정하고 CAPSULE_FLAGS_INITIATE_RESET. 드라이버 패키지의 INF에 캡슐 플래그를 지정한 경우 Windows OS 로더는 DEVICE_FIRMWARE 펌웨어 유형에 대한 CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 추가로 설정할 수 있습니다. 독점 캡슐 플래그는 INF에도 지정될 수 있으며, 지정된 경우 UEFI UpdateCapsule을 호출할 때 추가로 포함됩니다.

ESRT 테이블 정의의 ESRT 예제와 업데이트 드라이버 패키지 작성의 펌웨어 리소스 업데이트 드라이버 패키지 INF 예제를 참조하면 Windows OS 로더가 UpdateCapsule에 전달하기 위해 만든 캡슐 헤더는 다음과 같습니다.

필드 의견
캡슐 가이드 {SYSTEM_FIRMWARE} 해당 ESRT 리소스 항목의 FirmwareClass에서
HeaderSize ... 페이지 맞춤 firmware.bin 시작에 패딩되었습니다.
플래그 0x50000 지속하고 초기화합니다.
CapsuleImageSize ... 캡슐 헤더 크기 + firmware.bin의 크기입니다.

이 예제에서는 ESRT 테이블에 정의된 두 디바이스 중 하나만 새 펌웨어 리소스 업데이트 드라이버 패키지를 설치했습니다. 표 2의 두 번째 디바이스에 대해 펌웨어 리소스 업데이트 드라이버 패키지를 작성한 다음 해당 펌웨어 리소스 디바이스에 설치한 경우 두 번째 캡슐 헤더는 다음과 같이 만들어집니다.

필드 의견
캡슐 가이드 {DEVICE_FIRMWARE} 해당 ESRT 리소스 항목의 FirmwareClass에서
HeaderSize ... 페이지 맞춤 디바이스에 패딩됩니다. BIN 시작.
플래그 0x50000 시스템 테이블을 유지 및 시작, 다시 설정 및 채웁니다. 또는 해당 ESRT 리소스 항목의 CapsuleFlags에서 0x8010 사용합니다.
CapsuleImageSize ... 캡슐 헤더 크기 + 디바이스 크기입니다. 빈.

Windows OS 로더가 보류 중인 모든 펌웨어 업데이트를 로드하고 이를 설명하는 데 필요한 데이터 구조를 만든 후 ExitBootServices를 호출하기 전에 UpdateCapsule 런타임 서비스를 호출합니다.

UpdateCapsule은 플랫폼 펌웨어가 스토리지 디바이스를 포함한 모든 디바이스를 단독으로 제어할 수 있는 경우 ExitBootServices 이전에 호출됩니다. UpdateCapsule의 플랫폼 펌웨어 구현은 업데이트를 스테이징하거나 복구 롤백을 지원하기 위해 영구 스토리지에 펌웨어 업데이트 페이로드를 저장할 수 있습니다.

ESRT 테이블 정의

플러그 앤 플레이 디바이스

업데이트 드라이버 패키지 작성

UEFI 환경의 디바이스 I/O

원활한 위기 방지 및 복구

펌웨어 업데이트 상태