{"id":398103,"date":"2024-06-29T13:52:19","date_gmt":"2024-06-29T13:52:19","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=398103"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=398103","title":{"rendered":"<span>\u0411\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e UEFI \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><a href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/575702\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ut\/tt\/sv\/utttsvcrkoy7i0mlogq1ov3_qlk.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ut\/tt\/sv\/utttsvcrkoy7i0mlogq1ov3_qlk.png\"\/><\/div>\n<p><\/a><br \/>  \u0412 <a href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/571624\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u00ab\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e UEFI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 Visual Studio 2019\u00bb VS \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0441\u044f \u043b\u0438\u0448\u044c \u0432 \u0434\u0432\u0443\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u0430\u0445: \u043a\u0430\u043a \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043a\u043e\u0434\u0430 \u2014 \u00ab\u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 \u0411\u043b\u043e\u043a\u043d\u043e\u0442\u00bb \u2014 \u0438 \u043a\u0430\u043a \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0434\u043b\u044f \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u0442.\u0434. \u2014 \u0431\u044b\u043b\u043e \u043e\u0442\u0434\u0430\u043d\u043e \u043d\u0430 \u043e\u0442\u043a\u0443\u043f \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0443 edk2. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0449\u044c VS \u043a\u0430\u043a IDE \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u043e: \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0437\u0430\u0438\u043c\u0435\u0442\u044c \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u043a\u043e\u0434\u0430 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. <\/p>\n<p>  \u0411\u043e\u043d\u0443\u0441\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u0443\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u043f\u0440\u043e\u0435\u043a\u0442\u0430: edk2 \u0438\u0449\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0444\u0430\u0439\u043b\u044b \u0432\u043e \u0432\u0441\u0451\u043c \u0441\u0432\u043e\u0451\u043c \u043f\u043e\u043b\u0443\u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u043d\u043e\u043c \u0434\u0435\u0440\u0435\u0432\u0435, \u0447\u0442\u043e, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0438\u0437\u043b\u0438\u0448\u043d\u0435.<a name=\"habracut\"><\/a><\/p>\n<p>  \u041f\u043e \u0441\u0443\u0442\u0438, UEFI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 PE, \u0442\u0430\u043a\u043e\u0433\u043e \u0436\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0430, \u043a\u0430\u043a \u043b\u044e\u0431\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f Windows. \u0415\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0443 \u043d\u0435\u0433\u043e \u043d\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u2014 \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 UEFI \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438; \u0438 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, MSVCRT \u0438\u043b\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0439. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f UEFI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f Windows \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u044e\u0447\u043e\u043c \u043b\u0438\u043d\u043a\u0435\u0440\u0430 <code>\/NODEFAULTLIB<\/code> (\u043e\u043f\u0446\u0438\u044f \u201cIgnore All Default Libraries\u201d \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430); \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439; \u0438 \u0445\u0438\u0442\u0440\u043e\u0443\u043c\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b UEFI \u0432 \u043d\u0443\u0436\u043d\u044b\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435. \u0412\u0441\u0451 \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 <a href=\"https:\/\/github.com\/ionescu007\/VisualUefi\">VisualUefi<\/a> \u043e\u0442 \u0410\u043b\u0435\u043a\u0441\u0430 \u0418\u043e\u043d\u0435\u0441\u043a\u0443, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u043a\u0430\u043a \u0441\u043e\u0430\u0432\u0442\u043e\u0440 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A0%D1%83%D1%81%D1%81%D0%B8%D0%BD%D0%BE%D0%B2%D0%B8%D1%87,_%D0%9C%D0%B0%D1%80%D0%BA\">\u041c\u0430\u0440\u043a\u0430 \u0420\u0443\u0441\u0441\u0438\u043d\u043e\u0432\u0438\u0447\u0430<\/a> \u043f\u043e \u043a\u043d\u0438\u0433\u0435 \u201cWindows Internals\u201d, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043f\u044f\u0442\u043e\u0433\u043e \u0438\u0437\u0434\u0430\u043d\u0438\u044f (2009). \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e VisualUefi \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e edk2 \u0434\u0432\u0443\u0445\u0441\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043e\u0439\u043b\u0435\u0442\u043d\u0435\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438 \u2014 \u0434\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b edk2 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 VS2019 \u2014 \u0438, \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 VS2019, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u043c\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438 edk2 \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0418\u043e\u043d\u0435\u0441\u043a\u0443 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f VisualUefi \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0443\u0436\u0435 \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d NASM \u0438 \u0437\u0430\u0434\u0430\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f <code>NASM_PREFIX<\/code>. \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u044f <a href=\"https:\/\/github.com\/tyomitch\/VisualUefi\/commit\/8249bc7a7c4de9d76afbcec9dc0bd44a8a73ad04\">\u0434\u043e\u0431\u0430\u0432\u0438\u043b<\/a> \u0432 \u043c\u043e\u0439 \u0444\u043e\u0440\u043a VisualUefi \u2014 \u044d\u0442\u043e \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 NASM \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 <code>NASM_PREFIX<\/code> \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f VisualUefi \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e, \u043a\u0440\u043e\u043c\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">git clone --depth 1 --recursive --shallow-submodules https:\/\/github.com\/tyomitch\/VisualUefi<\/code><\/pre>\n<p>  80 \u041c\u0411 \u0442\u0440\u0430\u0444\u0438\u043a\u0430, 350 \u041c\u0411 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u2014 \u0432\u0434\u0432\u043e\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0435\u0435, \u0447\u0435\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438!<\/p>\n<p>  \u0427\u0442\u043e \u0436\u0435 \u0442\u0430\u043a\u043e\u0435 \u0434\u0435\u043b\u0430\u044e\u0442 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b edk2, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 VisualUefi \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c? \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 UEFI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u043c\u044b \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b HII, \u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0435\u0435, BMP-\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. \u0420\u0435\u0441\u0443\u0440\u0441\u044b HII \u0438\u043c\u0435\u044e\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u0443\u044e \u0432 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 UEFI \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 (<code>EFI_HII_PACKAGE_LIST_HEADER<\/code> \u0438 \u0442.\u043f.), \u0438 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u043a\u0440\u043e\u043c\u0435 \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0438\u0437 \u0432\u0441\u0435\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0434\u0438\u043d \u0431\u043b\u043e\u0431, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043b\u0430\u0434\u0451\u0442\u0441\u044f \u0432 PE-\u0444\u0430\u0439\u043b \u043a\u0430\u043a \u0440\u0435\u0441\u0443\u0440\u0441 \u0442\u0438\u043f\u0430 \u201cHII\u201d \u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c 1. \u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a UEFI \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0442\u0430\u043a\u043e\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 \u0432 PE-\u0444\u0430\u0439\u043b\u0435, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0435\u0433\u043e, \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u043a\u0430\u043a \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b <code>gEfiHiiPackageListProtocolGuid<\/code>.<\/p>\n<p>  \u0421\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u0443\u044e \u0434\u043b\u044f HII \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 VS \u043c\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u043c. \u041d\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u2014 \u043e\u0434\u043d\u043e BMP-\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e\u0433\u043e \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e: \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u043c \u0442\u0438\u043f\u0430 \u201cHII\u201d \u0431\u044b\u043b\u043e \u044d\u0442\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0438 \u0442\u043e\u0433\u0434\u0430 UEFI \u043d\u0430\u043c \u0435\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>TranslateBmpToGopBlt<\/code> \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442 BMP-\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <code>EFI_IMAGE_INPUT<\/code>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0437 \u0434\u0432\u0443\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 <code>HiiDatabase->NewPackageList<\/code> \u0438 <code>HiiImage->GetImage<\/code>. \u041d\u043e \u0432\u043e\u0442 \u0436\u0435 \u0431\u0435\u0434\u0430 \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>TranslateBmpToGopBlt<\/code> \u0432 \u043c\u0430\u0441\u0442\u0435\u0440-\u0432\u0435\u0440\u0441\u0438\u0438 VisualUefi \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430; \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d \u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b <code>gEfiHiiPackageListProtocolGuid<\/code>. \u041f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a VisualUefi \u0443\u0441\u0442\u0440\u043e\u0435\u043d, \u0438 \u043a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0432\u0441\u0451 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0435\u0435. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 UEFI \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0438\u0437 EDK-II\\EDK-II.sln<\/p>\n<p>  \u0412 edk2, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u0438\u0448\u0435\u043c \u0432 \u0444\u0430\u0439\u043b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<pre><code class=\"cpp\">[Protocols]   gEfiHiiDatabaseProtocolGuid     ## CONSUMES   gEfiHiiImageProtocolGuid        ## CONSUMES   gEfiHiiPackageListProtocolGuid  ## CONSUMES<\/code><\/pre>\n<p>  \u2014\u0442\u043e \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0444\u0430\u0439\u043b AutoGen.c \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438:<\/p>\n<pre><code class=\"cpp\">\u2026 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHiiDatabaseProtocolGuid = {0xef9fc172, 0xa1b2, 0x4693, {0xb3, 0x27, 0x6d, 0x32, 0xfc, 0x41, 0x60, 0x42}}; GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHiiImageProtocolGuid = {0x31a6406a, 0x6bdf, 0x4e46, {0xb2, 0xa2, 0xeb, 0xaa, 0x89, 0xc4, 0x09, 0x20}}; GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHiiPackageListProtocolGuid = { 0x6a1ee763, 0xd47a, 0x43b4, {0xaa, 0xbe, 0xef, 0x1d, 0xe2, 0xab, 0x56, 0xfc}}; \u2026<\/code><\/pre>\n<p>  \u0412 VisualUefi, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0431\u044b\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0435 \u043d\u0443\u0436\u043d\u044b\u0435, \u043f\u043e \u043c\u043d\u0435\u043d\u0438\u044e \u0418\u043e\u043d\u0435\u0441\u043a\u0443, \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0432 EDK-II\\GlueLib\\guid.c \u0438 \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u043b\u0438\u043d\u043a\u0443\u044e\u0442\u0441\u044f \u043a \u043b\u044e\u0431\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443. \u0417\u043d\u0430\u0447\u0438\u0442, \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f <a href=\"https:\/\/github.com\/tyomitch\/VisualUefi\/commit\/4420c7d577fd107dfc3bb4b4c73ffc4cf217572c\">\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c<\/a> \u0432 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0434\u0432\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">#include &lt;Protocol\/HiiPackageList.h> \u2026 EFI_GUID gEfiHiiPackageListProtocolGuid = EFI_HII_PACKAGE_LIST_PROTOCOL_GUID;<\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>TranslateBmpToGopBlt<\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0432 edk2\\MdeModulePkg\\Library\\BaseBmpSupportLib\\BmpSupportLib.c, \u0438 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u043b\u0435\u0436\u0430\u0449\u0438\u0445 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 EDK-II. \u041d\u0435 \u0431\u0443\u0434\u0435\u043c \u043b\u0435\u043d\u0438\u0442\u044c\u0441\u044f, \u0438 <a href=\"https:\/\/github.com\/tyomitch\/VisualUefi\/commit\/7300d34b16cf9e96391505db83401eb7ee8a204e\">\u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c<\/a> \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 EDK-II\\BaseBmpSupportLib\\BaseBmpSupportLib.vcxproj \u2014 \u044f \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b EDK-II\\UefiSortLib\\UefiSortLib.vcxproj \u0438 \u043b\u0438\u0448\u044c \u0437\u0430\u043c\u0435\u043d\u0438\u043b \u0432 \u043d\u0451\u043c ProjectGuid \u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432:<\/p>\n<pre><code class=\"xml\">&lt;ItemGroup>   &lt;ClCompile Include=\"$(EDK_PATH)\\MdePkg\\Library\\BaseSafeIntLib\\SafeIntLib.c\" \/>   &lt;ClCompile Include=\"$(EDK_PATH)\\MdeModulePkg\\Library\\BaseBmpSupportLib\\BmpSupportLib.c\" \/> &lt;\/ItemGroup><\/code><\/pre>\n<p>  <code>TranslateBmpToGopBlt<\/code> \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>SafeUint32Mult<\/code> \u0438\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 BaseSafeIntLib, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432 VisualUefi \u0442\u043e\u0436\u0435 \u043d\u0435\u0442; \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0430\u0439\u043b SafeIntLib.c \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u044d\u0442\u043e\u0433\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u043d\u0443\u0436\u0434 \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u201cBuild Solution\u201d \u0438\u043b\u0438 Ctrl+Shift+B), \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a samples\\samples.sln, \u0438 \u0442\u0430\u043c \u0432 \u0444\u0430\u0439\u043b\u0435 samples\\UefiApplication\\helloapp.c <a href=\"https:\/\/github.com\/tyomitch\/VisualUefi\/commit\/57af92f0fe05d421cd855c7535e3d6074e6a7adb#diff-1a298db42d94fb7d086ff197c98166fbaa5b36980960498c2142ac897c42f8ac\">\u0434\u043e\u0431\u0430\u0432\u0438\u043c<\/a> <code>#include &lt;Library\/BmpSupportLib.h><\/code> \u0438 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 <code>UefiMain<\/code> \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u043d\u0430:<\/p>\n<pre><code class=\"cpp\">\/\/ \u044d\u0442\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0437\u044f\u0442\u044b \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 EFI_STATUS efiStatus; EFI_GUID gopGuid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID; EFI_GRAPHICS_OUTPUT_PROTOCOL* gop; double sin, cos; \/\/ \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043e\u0442\u0441\u044e\u0434\u0430 VOID* PackageList; UINTN size; EFI_PHYSICAL_ADDRESS Buffer;  efiStatus = gBS->OpenProtocol(ImageHandle, &amp;gEfiHiiPackageListProtocolGuid,     &amp;PackageList, ImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL); if (EFI_ERROR(efiStatus)) {     Print(L\"HII Image Package not found in PE\/COFF resource section\\n\");     return efiStatus; }  EFI_IMAGE_INPUT Image = { 0 }; UINTN PixelHeight; UINTN PixelWidth; efiStatus = TranslateBmpToGopBlt(PackageList, *(UINT32*)((UINT8*)PackageList + 2),     &amp;Image.Bitmap, &amp;size, &amp;PixelHeight, &amp;PixelWidth); if (EFI_ERROR(efiStatus)) {     Print(L\"Unable to translate BMP\\n\");     return EFI_NOT_STARTED; } Image.Height = (UINT16)PixelHeight; Image.Width = (UINT16)PixelWidth;  \/\/ \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0432\u0437\u044f\u0442 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 efiStatus = gBS->LocateProtocol(&amp;gopGuid, NULL, (void**)&amp;gop); if (EFI_ERROR(efiStatus)) {     Print(L\"Unable to locate GOP\\n\");     return EFI_NOT_STARTED; } UINT32* video = (UINT32*)(UINTN)gop->Mode->FrameBufferBase;  \/\/ \u0434\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0451\u0442 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434 \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u044b\u0437\u043e\u0432\u0430 AllocatePages()<\/code><\/pre>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e, \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 UefiApplication \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u201cAdditional Include Directories\u201d \u043f\u0443\u0442\u044c $(EDK_PATH)\\MdeModulePkg\\Include, \u0438 \u0432 \u201cAdditional Dependencies\u201d \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 BaseBmpSupportLib.lib<\/p>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 IDE, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0435\u0437 VisualUefi \u043c\u044b \u0431\u044b \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/18a\/172\/6f5\/18a1726f5d59e3df29517d7ca0bb7ac2.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/18a\/172\/6f5\/18a1726f5d59e3df29517d7ca0bb7ac2.png\"\/><\/p>\n<p>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c BMP-\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<pre><code class=\"xml\">  &lt;ItemGroup>     &lt;ResourceCompile Include=\"UefiApplication.rc\" \/>     &lt;Image Include=\"ruvds.bmp\" \/>   &lt;\/ItemGroup><\/code><\/pre>\n<p>  \u0412 \u0444\u0430\u0439\u043b\u0435 UefiApplication.rc \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">1 HII \"ruvds.bmp\"<\/code><\/pre>\n<p>  \u0412\u0441\u0451, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c F5, UEFI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e (\u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 edk2) \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0442\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u0441 UEFI Shell, \u0438 \u0432 \u043d\u0451\u043c \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 <code>fs1:UefiApplication.efi<\/code><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/054\/353\/920\/054353920e32377802c263b72bdc7161.gif\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/054\/353\/920\/054353920e32377802c263b72bdc7161.gif\"\/><\/p>\n<p>  \u041d\u0438\u0447\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0433\u043e: \u0435\u0441\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 UefiApplication.efi (\u043f\u043e\u043b\u043e\u0436\u0438\u0432 \u0435\u0433\u043e \u0432 \\EFI\\BOOT\\bootx64.efi), \u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0442\u0451\u0440\u0442\u043e\u0433\u043e \u0444\u043e\u043d\u0430 \u0432\u0438\u0434\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \ud83d\ude42<\/p>\n<p>  VisualUefi \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d \u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u0431\u044b\u043b\u043e \u0431\u044b \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u2014 \u043d\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0445 UEFI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043e\u043d \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e: \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442 \u043b\u0438\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a Python; \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0432 IDE; \u0438 \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u0435\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e. \u0421\u0430\u043c\u044b\u0439 \u0434\u043e\u0441\u0430\u0434\u043d\u044b\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a VisualUefi \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u043b\u0435\u0436\u0430\u0449\u0430\u044f \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0432\u0435\u0440\u0441\u0438\u044f \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043e\u0442\u043b\u0430\u0434\u043a\u0443.<\/p>\n<blockquote><p><b>P.S.<\/b>: \u0412\u0435\u0440\u0441\u0438\u044f edk2 \u0434\u0432\u0443\u0445\u0441\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043e\u0439\u043b\u0435\u0442\u043d\u0435\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0432 VisualUefi, \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044e \u0438\u0437 edk2 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 StdLib, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0435\u0439 \u0432 \u0442.\u0447. \u0442\u0440\u0438\u0433\u043e\u043d\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f SinCos.asm \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c StdLib \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 VisualUefi, \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c UefiStdLib.lib \u0432 \u201cAdditional Dependencies\u201d \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0412 \u043c\u043e\u0451\u043c \u0444\u043e\u0440\u043a\u0435 \u044d\u0442\u043e <a href=\"https:\/\/github.com\/tyomitch\/VisualUefi\/commit\/70a2f0bc6e02d01a09a6abf9262b0342a3008622\">\u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u043e<\/a>, \u043d\u043e \u0432\u0440\u044f\u0434 \u043b\u0438 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 edk2 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 VisualUefi \u0438\u0437 \u043d\u0435\u0451 StdLib \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u043f\u0430\u0434\u0451\u0442.<\/p><\/blockquote>\n<p>  <a href=\"http:\/\/ruvds.com\/ru-rub?utm_source=habr&amp;utm_medium=article&amp;utm_campaign=%D0%90%D0%92%D0%A2%D0%9E%D0%A0&amp;utm_content=Bolee_udobnaya_razrabotka_64-bitnogo_graficheskogo_UEFI_prilozheniya\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ou\/g5\/kh\/oug5kh6sjydt9llengsiebnp40w.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ou\/g5\/kh\/oug5kh6sjydt9llengsiebnp40w.png\"\/><\/a><\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/575702\/\"> https:\/\/habr.com\/ru\/articles\/575702\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><a href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/575702\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ut\/tt\/sv\/utttsvcrkoy7i0mlogq1ov3_qlk.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ut\/tt\/sv\/utttsvcrkoy7i0mlogq1ov3_qlk.png\"\/><\/div>\n<p><\/a><br \/>  \u0412 <a href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/571624\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u00ab\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e UEFI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 Visual Studio 2019\u00bb VS \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0441\u044f \u043b\u0438\u0448\u044c \u0432 \u0434\u0432\u0443\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u0430\u0445: \u043a\u0430\u043a \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043a\u043e\u0434\u0430 \u2014 \u00ab\u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 \u0411\u043b\u043e\u043a\u043d\u043e\u0442\u00bb \u2014 \u0438 \u043a\u0430\u043a \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0434\u043b\u044f \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u0442.\u0434. \u2014 \u0431\u044b\u043b\u043e \u043e\u0442\u0434\u0430\u043d\u043e \u043d\u0430 \u043e\u0442\u043a\u0443\u043f \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0443 edk2. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0449\u044c VS \u043a\u0430\u043a IDE \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u043e: \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0437\u0430\u0438\u043c\u0435\u0442\u044c \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u043a\u043e\u0434\u0430 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. <\/p>\n<p>  \u0411\u043e\u043d\u0443\u0441\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u0443\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u043f\u0440\u043e\u0435\u043a\u0442\u0430: edk2 \u0438\u0449\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0444\u0430\u0439\u043b\u044b \u0432\u043e \u0432\u0441\u0451\u043c \u0441\u0432\u043e\u0451\u043c \u043f\u043e\u043b\u0443\u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u043d\u043e\u043c \u0434\u0435\u0440\u0435\u0432\u0435, \u0447\u0442\u043e, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0438\u0437\u043b\u0438\u0448\u043d\u0435.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-398103","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/398103","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=398103"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/398103\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=398103"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=398103"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=398103"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}