업데이트 처리

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

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

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

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

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

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

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

ESRT 테이블 정의

플러그 앤 플레이 디바이스

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

UEFI 환경의 디바이스 I/O

원활한 위기 방지 및 복구

펌웨어 업데이트 상태