EFI_INVALID_PARAMETER là gì?
Quicknote EFI_INVALID_PARAMETER là gì?
EFI_INVALID_PARAMETER báo rằng caller truyền tham số không hợp lệ. Đây là status rất thực dụng: nó thường không nói firmware thiếu gì, mà nói người gọi API đang gọi sai hợp đồng.
Trong debug firmware, status này nên khiến bạn nhìn ngay vào input: pointer có NULL không, size có đúng không, GUID có đúng không, attribute có hợp lệ không, buffer có alignment đúng không.
Ví dụ dễ gặp
Status = gBS->OpenProtocol (
ControllerHandle,
&gEfiPciIoProtocolGuid,
(VOID **)&PciIo,
ImageHandle,
NULL,
EFI_OPEN_PROTOCOL_BY_DRIVER
);
Nếu ControllerHandle sai, PciIo là NULL pointer không hợp lệ, hoặc agent/controller handle không đúng ngữ cảnh Driver Binding, API có thể trả EFI_INVALID_PARAMETER.
| Mục | Giá trị | Ghi chú |
|---|---|---|
| NULL pointer | Output/Input pointer sai | Hay gặp khi quên allocate hoặc truyền nhầm địa chỉ. |
| Size = 0 | Kích thước không hợp lệ | Đặc biệt với buffer hoặc structure có header. |
| GUID sai | Sai namespace | Ví dụ variable name đúng nhưng GUID khác. |
| Attribute sai | SetVariable fail | Runtime/BootService/NonVolatile không khớp policy. |
| Handle sai | Sai owner/context | Hay gặp trong Driver Binding/OpenProtocol. |
Debug Diary: lỗi do GUID đúng tên nhưng sai namespace
Một case khá khó chịu:
GetVariable(MySetting) = EFI_INVALID_PARAMETER hoặc EFI_NOT_FOUND
Bạn nhìn tên variable thấy đúng, nhưng GUID lại khác. Trong UEFI, variable không chỉ được định danh bằng name. Nó là cặp:
VariableName + VendorGuid
Vì vậy log tốt nên luôn in cả name và GUID.
Xác định API
GetVariable, SetVariable, OpenProtocol, InstallProtocolInterface...
Kiểm tra input
Pointer, size, GUID, handle, attribute.
Đọc lại hợp đồng API
API yêu cầu điều kiện gì trước khi gọi?
Log context
In đủ name/GUID/size/handle để tránh đoán mò.
Firmware Engineer Notes
EFI_INVALID_PARAMETER thường là lỗi gần caller nhất. Đừng vội nghi ngờ firmware core hay hardware. Hãy kiểm tra code mình vừa thêm, đặc biệt là wrapper function, cast pointer, structure packing và macro truyền GUID.
Checklist khi gặp EFI_INVALID_PARAMETER
Bài liên quan
Nguồn tham khảo public
Thấy nội dung này hữu ích?
Lưu lại hoặc chia sẻ cho người cũng đang học firmware, BIOS/UEFI và embedded systems.
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.