{"id":443054,"date":"2024-12-26T04:34:14","date_gmt":"2024-12-26T04:34:14","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=443054"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-12-26T04:34:14","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=443054","title":{"rendered":"<span>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 Toshiba NAS HDD \u043f\u043e\u0434 Linux<\/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\/companies\/ruvds\/articles\/867898\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/p9\/nc\/u_\/p9ncu_exuab15uawfhoolcquk1c.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/p9\/nc\/u_\/p9ncu_exuab15uawfhoolcquk1c.jpeg\" data-blurred=\"true\"\/><\/div>\n<p><\/a><br \/> \u042f \u043f\u0440\u043e\u0438\u0437\u0432\u0451\u043b \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433 \u043c\u043e\u0434\u0443\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0441\u0432\u043e\u0435\u0433\u043e HDD Toshiba, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0435\u0451 \u043f\u043e\u0434 Linux. \u041f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <b><font color=\"#3AC1EF\">\u0434\u043e\u043b\u0436\u043d\u044b<\/font><\/b> \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u043e <b><font color=\"#3AC1EF\">\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0438\u0445 \u043d\u0430 \u0441\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u0445 \u0438 \u0440\u0438\u0441\u043a<\/font><\/b>:<\/p>\n<pre><code class=\"plaintext\">$ wget https:\/\/www.canvio.jp\/en\/support\/download\/hdd\/ot_ihdd\/fw\/ISFw.dat $ grep -C2 MODELNAME ISFw.dat  # ^  # |___ \u0437\u0434\u0435\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043d\u0443\u0436\u043d\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 $ wget https:\/\/www.canvio.jp\/en\/support\/download\/hdd\/ot_ihdd\/fw\/sk060202.ftd # hdparm --fwdownload-mode3 sk060202.ftd \/dev\/sdX<\/code><\/pre>\n<p> <\/p>\n<h2><font color=\"#3AC1EF\">\u041f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u044f<\/font><\/h2>\n<p> \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u043f\u0440\u0438\u043e\u0431\u0440\u0451\u043b \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e NAS \u0434\u0438\u0441\u043a Toshiba HDWG480 HDD. \u0412\u043e\u0442 \u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>hdparm -I \/dev\/XXX<\/code>:<\/p>\n<pre><code class=\"plaintext\">ATA device, with non-removable media         Model Number:       TOSHIBA HDWG480         Serial Number:      3430A00RFR0H         Firmware Revision:  0601         Transport:          Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0 Standards:         Used: unknown (minor revision code 0x006d)         Supported: 10 9 8 7 6 5         Likely used: 10 [...]<\/code><\/pre>\n<p> \u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u044f \u0445\u043e\u0442\u0435\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. <a href=\"https:\/\/www.canvio.jp\/en\/support\/download\/hdd\/ot_ihdd\/fw\/en.htm\">\u041d\u0430 \u0441\u0430\u0439\u0442\u0435 Toshiba<\/a> \u0434\u043b\u044f \u043c\u043e\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u044f <code>0602<\/code>.<\/p>\n<p> \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e, \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 Linux \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u0442. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043b\u0438\u0448\u044c \u00abInternal Storage Firmware Update Utility\u00bb \u0434\u043b\u044f Windows.<\/p>\n<p> \u0421\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442.<a name=\"habracut\"><\/a><\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u0426\u0435\u043b\u0438<\/font><\/h3>\n<p> \u0418\u0442\u0430\u043a, \u043c\u043e\u0438 \u0437\u0430\u0434\u0430\u0447\u0438:<\/p>\n<ul>\n<li>\u041f\u043e\u043d\u044f\u0442\u044c, \u043e\u0442\u043a\u0443\u0434\u0430 \u043c\u043e\u0434\u0443\u043b\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0432\u0435\u0436\u0438\u0435 \u0444\u0430\u0439\u043b\u044b.<\/li>\n<li>\u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u0434 Linux.<\/li>\n<\/ul>\n<p> <\/p>\n<h2><font color=\"#3AC1EF\">\u0420\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433 \u043c\u043e\u0434\u0443\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f Windows<\/font><\/h2>\n<p> <\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u041d\u0430\u0447\u0430\u043b\u043e<\/font><\/h3>\n<p> <a name=\"anchorid2\"><\/a>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f <a href=\"https:\/\/www.canvio.jp\/en\/support\/download\/hdd\/ot_ihdd\/fw\/exe\/InternalStorageFwUpdateUtility_1.20.0410.exe\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a\u0430<\/a><a href=\"#anchorid1\"><sup>1<\/sup><\/a> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Wine \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <code>Program Files (x86)<\/code> \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0430\u0439\u043b\u044b:<\/p>\n<pre><code class=\"plaintext\">  18312 ISFw.exe:        PE32 executable (native) Intel 80386, for MS Windows, 4 sections 2434952 TosISFw.exe:     PE32 executable (GUI) Intel 80386, for MS Windows, 5 sections 2172296 TosISFwSvc.exe:  PE32 executable (GUI) Intel 80386, for MS Windows, 5 sections 2362248 TosISFwTray.exe: PE32 executable (GUI) Intel 80386, for MS Windows, 5 sections<\/code><\/pre>\n<p> \u0411\u0435\u0433\u043b\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u0438\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u044b, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c:<\/p>\n<ul>\n<li><code>ISFW.exe<\/code> \u2014 \u044d\u0442\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440 (\u044d\u043a\u0441\u043f\u043e\u0440\u0442 <code>DriverEntry<\/code>), \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438.<\/li>\n<li><code>TosISFw.exe<\/code> \u2014 \u044d\u0442\u043e GUI.<\/li>\n<li><code>TosISFwSvc.exe<\/code> \u2014 \u044d\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 (\u043d\u0430 \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u044b).<\/li>\n<li><code>TosISFwTray.exe<\/code> \u2014 \u043f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0438\u043a\u043e\u043d\u043a\u0443 \u0432 \u0442\u0440\u0435\u0435.<\/li>\n<\/ul>\n<p> <\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u041f\u043e\u0438\u0441\u043a \u0444\u0430\u0439\u043b\u043e\u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439<\/font><\/h3>\n<p> \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u043f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0431\u044b\u043b\u043e \u0433\u0440\u0435\u043f\u043d\u0443\u0442\u044c URL \u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430\u0445. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044d\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0430\u043b\u043e, \u043a\u0440\u043e\u043c\u0435 URL, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044f\u043c\u0438. \u0410 \u0432\u043e\u0442 \u0433\u0440\u0435\u043f\u043d\u0443\u0432 API <code>HttpOpenRequest<\/code>, \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438 Windows \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432, \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0434\u0432\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430: <code>TosISFw.exe<\/code> \u0438 <code>TosISFwSvc.exe<\/code>.<\/p>\n<p> \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043b\u043a\u0438\u0439 \u0438\u0437 \u043d\u0438\u0445 \u2014 <code>TosISFwSvc.exe<\/code> \u2014 \u043f\u043e\u0438\u0449\u0435\u043c URL, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0432 \u043f\u0435\u0440\u0435\u043a\u0440\u0451\u0441\u0442\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438.<\/p>\n<p> \u0412\u044b\u0437\u043e\u0432 <code>HttpOpenRequest<\/code> \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>0x00401040<\/code> \u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"bash\">v15 = HttpOpenRequestW(v14, L\"GET\", &amp;v36[(_DWORD)lpBuffer], 0, (LPCWSTR)szReferrer, 0, 0x84000000, 0);<\/code><\/pre>\n<p> \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u00ab\u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438\u00bb, \u043d\u0430 \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0432\u0441\u0435 \u0432\u044b\u0437\u043e\u0432\u044b API. \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u043c \u0435\u0451 \u0432 <code>dlfile<\/code>. \u041d\u0430 <code>dlfile<\/code> \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0435 \u043f\u0435\u0440\u0435\u043a\u0440\u0451\u0441\u0442\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043a\u0438:<\/p>\n<pre><code class=\"bash\">if ( !RegOpenKeyExW(         HKEY_LOCAL_MACHINE,         L\"SYSTEM\\\\CurrentControlSet\\\\Services\\\\TosISFwSvc\",         0,         0x20019u,         &amp;phkResult)   &amp;&amp; readregstring((LPBYTE)&amp;String, &amp;phkResult, L\"FwURL\")   &amp;&amp; lstrlenW(&amp;String) ) {   sub_401000();   LOBYTE(v47) = 2;   if ( dlfile(&amp;String, (int)v38) )   [...]  sub_4052E0(&amp;lpValueName, L\"%s%d\", L\"URL\", phkResult); v25 = 0; if ( !RegOpenKeyExW(         HKEY_LOCAL_MACHINE,         L\"SYSTEM\\\\CurrentControlSet\\\\Services\\\\TosISFwSvc\",         0,         0x20019u,         &amp;v25)   &amp;&amp; readregstring((LPBYTE)&amp;String, &amp;v25, lpValueName)   &amp;&amp; lstrlenW(&amp;String)   &amp;&amp; dlfile(&amp;String, (int)v36) )<\/code><\/pre>\n<p> \u041f\u0435\u0440\u0432\u0430\u044f \u0434\u0430\u0451\u0442 \u043d\u0430\u043c \u0438\u0441\u043a\u043e\u043c\u044b\u0439 \u043e\u0442\u0432\u0435\u0442: URL \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0435. \u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u043e\u043d \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a\u043e\u043c InstallShield.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/vu\/ja\/ei\/vujaei-l7glodlp36b5xvyp8p_i.png\" data-src=\"https:\/\/habrastorage.org\/webt\/vu\/ja\/ei\/vujaei-l7glodlp36b5xvyp8p_i.png\"\/><\/div>\n<p> \u0412\u043e\u0442 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435: <code>http:\/\/www.canvio.jp\/en\/support\/download\/hdd\/ot_ihdd\/fw\/ISFw.dat<\/code><\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0444\u0430\u0439\u043b\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/font><\/h3>\n<p> \u042d\u0442\u043e \u0444\u0430\u0439\u043b <code>ini<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0435\u0441\u0442\u044c \u0438 \u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c:<\/p>\n<pre><code class=\"bash\">[VERS] VERSION=\"20240513\" [Firmware] 0000=qa060378.ftd 0000model=\"TOSHIBA HDWG21E\" 0000rev=\"0603\" 0000rev0000=\"0601\" 0000native=0 0000option=0 0001=qa060378.ftd 0001model=\"TOSHIBA HDWG21C\" 0001rev=\"0603\" 0001rev0000=\"0601\" 0001native=0 0001option=0 [...] 0008=sk060202.ftd 0008model=\"TOSHIBA HDWG480 \" 0008rev=\"0602\" 0008rev0000=\"0601\" 0008native=0 0008option=0 [...] ; 905CBD24<\/code><\/pre>\n<p> \u0412 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u043e\u043c\u0435\u0440 \u0434\u0438\u0441\u043a\u0430 8. \u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u0437\u0434\u0435\u0441\u044c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u0432 \u043a\u043e\u043d\u0446\u0435. \u042d\u0442\u043e CRC32 \u0444\u0430\u0439\u043b\u0430 \u043c\u0438\u043d\u0443\u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 10 \u0431\u0430\u0439\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 <code>slice<\/code> \u0438 <code>crc32<\/code> \u0438\u0437 \u043c\u043e\u0435\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u043b\u044f \u0445\u0430\u043a\u0438\u043d\u0433\u0430 <a href=\"https:\/\/github.com\/trou\/rsbkb\">rsbkb<\/a>:<\/p>\n<pre><code class=\"bash\">$ slice -- ISFw.dat 0 -10 | crc32 905cbd24<\/code><\/pre>\n<p> \u0422\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u0444\u0430\u0439\u043b:<\/p>\n<pre><code class=\"bash\">$ wget https:\/\/www.canvio.jp\/en\/support\/download\/hdd\/ot_ihdd\/fw\/sk060202.ftd Resolving www.canvio.jp (www.canvio.jp)... 23.72.248.205, 23.72.248.202 Connecting to www.canvio.jp (www.canvio.jp)|23.72.248.205|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 1171456 (1.1M) [...]<\/code><\/pre>\n<p> \u0427\u0438\u0441\u0442\u043e \u0438\u0437 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u0441\u0442\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0441\u043c\u043e\u0436\u0435\u0442 \u043b\u0438 <code><a href=\"https:\/\/github.com\/trou\/cpu_rec_rs\">cpu_rec_rs<\/a><\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u043a\u043e\u0434 \u0432 \u044d\u0442\u043e\u043c \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0435:<\/p>\n<pre><code class=\"plaintext\">$ ~\/tools\/cpu_rec_rs\/cpu_rec_rs sk060202.ftd Loading corpus from \"\/home\/trou\/tools\/cpu_rec_rs\/cpu_rec_corpus\/*.corpus\" -------------------------------------------------     File     |   Range    | Detected Architecture ------------------------------------------------- sk060202.ftd | Whole file | ARMhf -------------------------------------------------<\/code><\/pre>\n<p> \u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 SoC ARM (\u0442\u0430\u043a \u0438 \u0435\u0441\u0442\u044c).<\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u0420\u0430\u0437\u0431\u043e\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/font><\/h3>\n<p> \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0434\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u0438\u0441\u043a \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430, \u0438 \u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>ISFW.exe<\/code>.<\/p>\n<p> \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>DriverEntry<\/code> \u0434\u043e \u0431\u043e\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u0430:<\/p>\n<pre><code class=\"bash\">NTSTATUS __stdcall DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) {   int v2; \/\/ eax    readregistry();   v2 = flashfirmware();   sub_1001812(v2 % 100 == 0, 1, v2);   return NtTerminateProcess((HANDLE)0xFFFFFFFF, 0); }<\/code><\/pre>\n<p> \u042f \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043b <code>readregistry<\/code> \u0438 <code>flashfirmware<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043b\u0435\u0433\u043a\u043e:<\/p>\n<pre><code class=\"bash\">char readregistry() {   [...]   RtlInitUnicodeString(&amp;DestinationString, L\"\\\\REGISTRY\\\\MACHINE\\\\SYSTEM\\\\CurrentControlSet\\\\Services\\\\TosISFwSvc\");   [...]   if ( NtOpenKey(&amp;KeyHandle, 0x20019u, &amp;ObjectAttributes) &gt;= 0 )   {     RtlInitUnicodeString(&amp;ValueName, L\"FW_Serial\");     if ( NtQueryValueKey(KeyHandle, &amp;ValueName, KeyValuePartialInformation, KeyValueInformation, 0x800u, &amp;ResultLength) &gt;= 0 )     {       memcpy(&amp;fwserial, &amp;KeyValueInformation[3], KeyValueInformation[2]);        [...]        RtlInitUnicodeString(&amp;ValueName, L\"FW_CurRev\");        memcpy(&amp;fw_cur, &amp;KeyValueInformation[3], KeyValueInformation[2]);         [...]         RtlInitUnicodeString(&amp;ValueName, L\"FW_NewRev\");         memcpy(fw_new, &amp;KeyValueInformation[3], KeyValueInformation[2]);           [...]           RtlInitUnicodeString(&amp;ValueName, L\"FW_Model\");           memcpy(fw_model, &amp;KeyValueInformation[3], KeyValueInformation[2]);             [...]             RtlInitUnicodeString(&amp;ValueName, L\"FW_FWFile\");             wmemcpy(path, L\"\\\\??\\\\\", 4);             memcpy(&amp;path + 4, &amp;KeyValueInformation[3], KeyValueInformation[2]);   [...] }<\/code><\/pre>\n<p> \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0430 (\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u044b\u0435 <code>TosISFwSvc.exe<\/code>) \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043b \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u044d\u0442\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.<\/p>\n<p> \u0412\u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u043e <code>flashfirmware<\/code>:<\/p>\n<pre><code class=\"bash\">int flashfirmware() {   [...]   Handle = 0;   fwdata = 0;   fwsize = 0;   memset(&amp;drivedata, 0, sizeof(drivedata));   printf(L\"%s Firmware: %s -&gt; %s\\n\", fw_model, &amp;fw_cur, fw_new);   printf(L\"DO NOT TURN OFF THE PC WHILE ANY FIRMWARE UPDATE IS RUNNING.\\n\");   printf(     L\"Your device may become unusable if you do this and Toshiba is not \\n\"      \"responsible for any damage, including any necessary replacement of \\n\"      \"the unit, caused by your doing so.\\n\");   HeapHandle = RtlCreateHeap(2u, 0, 0, 0, 0, 0);   if ( HeapHandle )   {     status = readfile(&amp;path, &amp;fwdata, &amp;fwsize);     if ( !(status % 100) )     {       Handle = verifydisk(&amp;fwserial, &amp;fw_cur, fw_model, &amp;drivedata); [...]<\/code><\/pre>\n<p> \u041f\u0440\u0438 \u0441\u0432\u043e\u0435\u0439 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>verifydisk<\/code> \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u0430 (\u0437\u0434\u0435\u0441\u044c \u0443\u0436\u0435 \u0432\u0441\u0451 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043e):<\/p>\n<pre><code class=\"bash\">HANDLE __stdcall verifydisk(PCWSTR serial, PCWSTR cur, WCHAR *model, IDENTIFY_DEVICE_DATA *devdata) {   HANDLE hdl; \/\/ edi   UNICODE_STRING cur_; \/\/ [esp+10h] [ebp-104h] BYREF   struct _UNICODE_STRING serial_; \/\/ [esp+18h] [ebp-FCh] BYREF   UNICODE_STRING model_from_drive_u; \/\/ [esp+20h] [ebp-F4h] BYREF   UNICODE_STRING serial_from_drive_u; \/\/ [esp+28h] [ebp-ECh] BYREF   UNICODE_STRING model_; \/\/ [esp+30h] [ebp-E4h] BYREF   UNICODE_STRING fwrev_from_drive_u; \/\/ [esp+38h] [ebp-DCh] BYREF   DWORD *drivenumber; \/\/ [esp+40h] [ebp-D4h]   HANDLE hdl_; \/\/ [esp+44h] [ebp-D0h]   char v14; \/\/ [esp+4Bh] [ebp-C9h] BYREF   WCHAR model_from_drive[50]; \/\/ [esp+4Ch] [ebp-C8h] BYREF   WCHAR serial_from_drive[30]; \/\/ [esp+B0h] [ebp-64h] BYREF   WCHAR fwrev_from_drive[18]; \/\/ [esp+ECh] [ebp-28h] BYREF    [...]   for ( drivenumber = 0; (unsigned int)drivenumber &lt; 0x20; drivenumber = (DWORD *)((char *)drivenumber + 1) )   {     [...]     hdl = opendrive((char)drivenumber);     if ( !hdl )       break;     if ( !getdevprop(hdl, &amp;bustype) || bustype == BusTypeUsb ) {       NtClose(hdl);     } else {       if ( get_IDENTIFY_DEVICE_DATA(hdl_, devdata, 0x200u) ) {         get_drive_serial(devdata, serial_from_drive, 30, 1);         get_drive_fw_rev(devdata, fwrev_from_drive, 18, 1);         get_drive_model(devdata, model_from_drive, 50, 1);         RtlInitUnicodeString(&amp;serial_from_drive_u, serial_from_drive);         RtlInitUnicodeString(&amp;fwrev_from_drive_u, fwrev_from_drive);         RtlInitUnicodeString(&amp;model_from_drive_u, model_from_drive);         if ( RtlEqualUnicodeString(&amp;serial_, &amp;serial_from_drive_u, 0) )         {           if ( RtlEqualUnicodeString(&amp;cur_, &amp;fwrev_from_drive_u, 0)             &amp;&amp; RtlEqualUnicodeString(&amp;model_, &amp;model_from_drive_u, 0) )           {             return hdl_;           }         }       }       NtClose(hdl_);     }   }   return 0; }<\/code><\/pre>\n<p> <\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0434\u0438\u0441\u043a\u043e\u043c<\/font><\/h3>\n<p> <\/p>\n<h4><font color=\"#3AC1EF\">\u258d \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u0430 \u0434\u0438\u0441\u043a\u0430<\/font><\/h4>\n<p> \u0417\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>opendrive<\/code> \u0438 <code>getdevprop<\/code>:<\/p>\n<pre><code class=\"bash\">HANDLE __stdcall opendrive(char Args) {   [...]   HANDLE FileHandle; \/\/ [esp+30h] [ebp-88h] BYREF   WCHAR SourceString[64]; \/\/ [esp+34h] [ebp-84h] BYREF    DestinationString.Length = 0;   *(_DWORD *)&amp;DestinationString.MaximumLength = 0;   HIWORD(DestinationString.Buffer) = 0;   memset(SourceString, 0, sizeof(SourceString));   FileHandle = 0;   wsprintf(SourceString, 64, (wchar_t *)L\"\\\\??\\\\PhysicalDrive%u\", Args);   RtlInitUnicodeString(&amp;DestinationString, SourceString);   [...]   NtOpenFile(&amp;FileHandle, 0x100003u, &amp;ObjectAttributes, &amp;IoStatusBlock, 3u, 0x20u);   return FileHandle; }  char __stdcall getdevprop(HANDLE hdl, char *bustype) {   char tmp; \/\/ al   struct _IO_STATUS_BLOCK IoStatusBlock; \/\/ [esp+Ch] [ebp-1018h] BYREF   char *bustype_; \/\/ [esp+14h] [ebp-1010h]   HANDLE FileHandle; \/\/ [esp+18h] [ebp-100Ch]   char retvalue; \/\/ [esp+1Fh] [ebp-1005h]   STORAGE_DEVICE_DESCRIPTOR InputBuffer; \/\/ [esp+20h] [ebp-1004h] BYREF    FileHandle = hdl;   bustype_ = bustype;   IoStatusBlock.Status = 0;   IoStatusBlock.Information = 0;   retvalue = 0;   memset(&amp;InputBuffer, 0, 0x1000u);   if ( NtDeviceIoControlFile( hdl, 0, 0, 0, &amp;IoStatusBlock,         IOCTL_STORAGE_QUERY_PROPERTY,          &amp;InputBuffer, 0x1000u, &amp;InputBuffer, 0x1000u) &lt; 0 ) {     tmp = 0;   } else {     tmp = InputBuffer.BusType;     retvalue = 1;   }   if ( bustype_ )     *bustype_ = tmp;   return retvalue; }<\/code><\/pre>\n<p> <code>opendrive<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e <code>PhysicalDrive<\/code> \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0442\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code><a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/winternl\/nf-winternl-ntdeviceiocontrolfile\">NtDeviceIoControlFile<\/a><\/code>, \u044f\u0432\u043b\u044f\u044e\u0449\u0430\u044f\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e <code>getdevprop<\/code>. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u00abstandard enums\u00bb \u0438\u0437 IDA (Interactive Disassembler) \u044f \u043f\u0435\u0440\u0435\u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u043b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>0x2D1400<\/code> \u0432 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435: <code><a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/winioctl\/ni-winioctl-ioctl_storage_query_property\">IOCTL_STORAGE_QUERY_PROPERTY<\/a><\/code>.<\/p>\n<p> \u0422\u0430\u043a \u043a\u0430\u043a <code>InputBuffer<\/code> \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 <code>0<\/code>, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>STORAGE_DEVICE_DESCRIPTOR<\/code>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e <code>verifydisk<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u043b\u0438 \u0434\u0438\u0441\u043a \u043f\u043e USB (<code>BusTypeUsb<\/code>), \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0442\u0430\u043a.<\/p>\n<h4><font color=\"#3AC1EF\">\u258d \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u0438\u0441\u043a\u0430<\/font><\/h4>\n<p> \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e <code>verifydisk<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>get_IDENTIFY_DEVICE_DATA<\/code>:<\/p>\n<pre><code class=\"bash\">char __stdcall get_IDENTIFY_DEVICE_DATA(HANDLE hdl, void *buff, size_t Size) {   struct _IO_STATUS_BLOCK IoStatusBlock; \/\/ [esp+Ch] [ebp-3Ch] BYREF   HANDLE FileHandle; \/\/ [esp+14h] [ebp-34h]   char v6; \/\/ [esp+1Bh] [ebp-2Dh]   ATA_PASS_THROUGH_DIRECT InputBuffer; \/\/ [esp+1Ch] [ebp-2Ch] BYREF    FileHandle = hdl;   IoStatusBlock.Status = 0;   v6 = 0;   IoStatusBlock.Information = 0;   memset(buff, 0, Size);   memset(&amp;InputBuffer, 0, sizeof(InputBuffer));   InputBuffer.Length = 0x28;   InputBuffer.AtaFlags = ATA_FLAGS_DRDY_REQUIRED|ATA_FLAGS_DATA_IN|ATA_FLAGS_NO_MULTIPLE;   InputBuffer.DataTransferLength = Size;   InputBuffer.TimeOutValue = 10;   InputBuffer.DataBuffer = buff;   InputBuffer.CurrentTaskFile[reg_Command] = 0xEC;   if ( NtDeviceIoControlFile(hdl, 0, 0, 0, &amp;IoStatusBlock,          IOCTL_ATA_PASS_THROUGH_DIRECT,          &amp;InputBuffer, 0x28u, &amp;InputBuffer, 0x28u) &gt;= 0     &amp;&amp; (InputBuffer.CurrentTaskFile[reg_Status] &amp; 9) == 0 )   {     return 1;   }   return v6; }<\/code><\/pre>\n<p> \u0422\u0435\u043f\u0435\u0440\u044c <code>NtDeviceIoControlFile<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows-hardware\/drivers\/ddi\/ntddscsi\/ni-ntddscsi-ioctl_ata_pass_through_direct\"><code>IOCTL_ATA_PASS_THROUGH_DIRECT<\/code><\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u043a\u0430\u043a \u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0435\u0451 \u0438\u043c\u044f, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0438\u0441\u043a\u0443 \u0433\u043e\u043b\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 ATA. \u0420\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0437\u0434\u0435\u0441\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0432\u0430\u0442\u043e, \u0442\u0430\u043a \u043a\u0430\u043a <code><a href=\"https:\/\/learn.microsoft.com\/en-us\/windows-hardware\/drivers\/ddi\/ntddscsi\/ns-ntddscsi-_ata_pass_through_direct\">ATA_PASS_THROUGH_DIRECT<\/a><\/code> \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u043b\u044f <code>CurrentTaskFile<\/code> \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u0430 \u0431\u0443\u0444\u0435\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u00ab\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b\u00bb.<\/p>\n<p> <code>CurrentTaskFile<\/code> \u2014 \u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0434\u043b\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f 8 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445. \u041e\u043f\u0438\u0440\u0430\u044f\u0441\u044c \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0432\u0430 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 IDA:<\/p>\n<pre><code class=\"bash\">enum ATA_INPUT_REGISTERS : __int32 {   reg_Features = 0x0,   reg_Sector_Count_in = 0x1,   reg_Sector_Number_in = 0x2,   reg_Cylinder_Low_in = 0x3,   reg_Cylinder_High_in = 0x4,   reg_Device_Head_in = 0x5,   reg_Command = 0x6,   reg_Reserved = 0x7, };  enum ATA_OUTPUT_REGISTERS : __int32 {   reg_Error = 0x0,   reg_Sector_Count_out = 0x1,   reg_Sector_Number_out = 0x2,   reg_Cylinder_Low_out = 0x3,   reg_Cylinder_High_out = 0x4,   reg_Device_Head_out = 0x5,   reg_Status = 0x6,   reg_Reserved_out = 0x7, };<\/code><\/pre>\n<p> \u0418\u0442\u0430\u043a, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0437\u0434\u0435\u0441\u044c \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 <code>0xEC<\/code>, \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0432 <a href=\"https:\/\/read.seas.harvard.edu\/cs161\/2024\/pdf\/ata-atapi-8.pdf\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>. \u0412 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 ATA\/ATAPI \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>IDENTIFY DEVICE \u2014 ECh, PIO Data-In<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0445. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, Microsoft \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <code><a href=\"https:\/\/learn.microsoft.com\/en-us\/windows-hardware\/drivers\/ddi\/ata\/ns-ata-_identify_device_data\">IDENTIFY_DEVICE_DATA<\/a><\/code>, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0432\u0441\u0451.<\/p>\n<p> \u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u043d\u0438\u0436\u0435 \u043a\u043e\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u00ab\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439\u00bb \u043b\u0438 \u0443 \u043d\u0430\u0441 \u0434\u0438\u0441\u043a, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044f \u0441\u0435\u0440\u0438\u044e, \u043d\u043e\u043c\u0435\u0440 \u0438 \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438\u0437 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0451\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u043c\u0438 \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0435.<\/p>\n<pre><code class=\"bash\">int __stdcall get_drive_serial(IDENTIFY_DEVICE_DATA *drivedata, wchar_t *dest, int destlen, char stripflag) {   return (int)getdrive_data_string( drivedata, dest, destlen,                 offsetof(IDENTIFY_DEVICE_DATA, SerialNumber), 20,                 stripflag); }    [...]   get_drive_serial(devdata, serial_from_drive, 30, 1);   [...]   RtlInitUnicodeString(&amp;serial_from_drive_u, serial_from_drive);   [...]   if ( RtlEqualUnicodeString(&amp;serial_, &amp;serial_from_drive_u, 0) )         {           if ( RtlEqualUnicodeString(&amp;cur_, &amp;fwrev_from_drive_u, 0)             &amp;&amp; RtlEqualUnicodeString(&amp;model_, &amp;model_from_drive_u, 0) )<\/code><\/pre>\n<p> <\/p>\n<h4><font color=\"#3AC1EF\">\u258d \u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0444\u0430\u0439\u043b\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438<\/font><\/h4>\n<p> \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b \u0434\u0438\u0441\u043a \u0438 \u0443\u0431\u0435\u0434\u0438\u043b\u0441\u044f, \u0447\u0442\u043e \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0448\u0438\u0442\u044c, \u043e\u043d \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043a \u0441\u0430\u043c\u043e\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443:<\/p>\n<pre><code class=\"bash\">[...]       MaxBlocksPerDownloadMicrocodeMode03 = drivedata.MaxBlocksPerDownloadMicrocodeMode03;       if ( !drivedata.MaxBlocksPerDownloadMicrocodeMode03 || drivedata.MaxBlocksPerDownloadMicrocodeMode03 == 0xFFFF ) {         MaxBlocksPerDownloadMicrocodeMode03 = 128;       } else if ( drivedata.MaxBlocksPerDownloadMicrocodeMode03 &gt;= 0x80u ) {         MaxBlocksPerDownloadMicrocodeMode03 = 128;       }       if ( MaxBlocksPerDownloadMicrocodeMode03 &gt;= drivedata.MinBlocksPerDownloadMicrocodeMode03         &amp;&amp; MaxBlocksPerDownloadMicrocodeMode03 ) {         fwblocks = fwsize &gt;&gt; 9;         fwblocks2 = fwsize &gt;&gt; 9;         v1 = 60;         do {           printprogress();           wait((LARGE_INTEGER)500LL);           --v1;         } while ( v1 );         for ( fwsize = 0; (int)fwsize &lt; 30; ++fwsize ) {           currentblock = 0;           status = 6000;           if ( fwblocks ) {             fwdata1 = fwdata;             MaxBytesPerDL = MaxBlocksPerDownloadMicrocodeMode03 &lt;&lt; 9;             while ( 1 ) {               printprogress();               blocks_to_flash = fwblocks2 - currentblock;               if ( MaxBlocksPerDownloadMicrocodeMode03 &lt; fwblocks2 - currentblock )                 blocks_to_flash = MaxBlocksPerDownloadMicrocodeMode03;               if ( !ATA_CMD_DOWNLOAD_MICRO(Handle, currentblock, blocks_to_flash, fwdata1) )                 break;               currentblock += MaxBlocksPerDownloadMicrocodeMode03;               fwdata1 += MaxBytesPerDL;               if ( currentblock &gt;= fwblocks2 )                 goto LABEL_25;             }             status = 6009; LABEL_25:             fwblocks = fwblocks2;           }           if ( !(status % 100) )             break;           v5 = 2;           do {             printprogress();             wait((LARGE_INTEGER)500LL);             --v5;           } while ( v5 );         }         if ( !(status % 100) )         {           if ( get_IDENTIFY_DEVICE_DATA(Handle, &amp;drivedata, 0x200u) ) {             get_drive_fw_rev(&amp;drivedata, newfwrev, 18, 1);             if ( wcsncmp(fw_new, newfwrev, wcslen(fw_new)) )               status = 6011;           } else {             status = 6010;           }         }       } else { LABEL_35:         status = 6006;       }   [...]   if ( status % 100 )     printf(L\"Update Failed.      \\n\");   else     printf(L\"Update Succeeded.   \\n\");<\/code><\/pre>\n<p> \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u0438\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0434\u0438\u0441\u043a\u0435: <code>MaxBlocksPerDownloadMicrocodeMode03<\/code>. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043e\u043d\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442.<\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 ATA \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438<\/font><\/h3>\n<p> <\/p>\n<h4><font color=\"#3AC1EF\">\u258d \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/font><\/h4>\n<p> \u041f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u0430\u044f \u043d\u0438\u0436\u0435 \u0432\u044b\u0434\u0435\u0440\u0436\u043a\u0430 \u0438\u0437 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 ATA \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f:<\/p>\n<blockquote><p>A.11.5.3.4 \u041f\u043e\u043b\u0435 DM MAXIMUM TRANSFER SIZE<br \/> \u0415\u0441\u043b\u0438:<\/p>\n<p> a) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f DM MAXIMUM TRANSFER SIZE (\u0441\u043c. \u0442\u0430\u0431\u043b\u0438\u0446\u0443 A.30) \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0443\u043b\u044f;<br \/> b) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f DM MAXIMUM TRANSFER SIZE \u043c\u0435\u043d\u044c\u0448\u0435 FFFFh;<br \/> c) \u043d\u0430 \u043e\u0434\u0438\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0431\u0438\u0442 DOWNLOAD MICROCODE SUPPORTED (\u0441\u043c. A.11.5.2.20) \u0438\u043b\u0438 \u0431\u0438\u0442 DOWNLOAD MICROCODE DMA SUPPORTED (\u0441\u043c. A.11.5.2.6); \u0438<br \/> d) \u043d\u0430 \u043e\u0434\u0438\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0431\u0438\u0442 DM OFFSETS DEFERRED SUPPORTED (\u0441\u043c. A.11.5.3.1) \u0438\u043b\u0438 \u0431\u0438\u0442 DM OFFSETS IMMEDIATE SUPPORTED (\u0441\u043c. A.11.5.3.3), \u0442\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0435 DM MAXIMUM TRANSFER SIZE \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0431\u043b\u043e\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 512 \u0431\u0430\u0439\u0442, \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u043e\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 DOWNLOAD MICROCODE (\u0441\u043c. 7.7) \u0438\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 DOWNLOAD MICROCODE DMA (\u0441\u043c. 7.8), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<p> a) \u0421\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u043b\u0438 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c (\u0442\u043e \u0435\u0441\u0442\u044c 03h); \u0438\u043b\u0438<br \/> b) \u0421\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f (\u0442\u043e \u0435\u0441\u0442\u044c 0Eh).<\/p>\n<p> \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f (\u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0442 \u043f\u0440\u0435\u0434\u0435\u043b\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0431\u043b\u043e\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 512 \u0431\u0430\u0439\u0442).<\/p>\n<p> \u0414\u0430\u043d\u043d\u044b\u0435 IDENTIFY DEVICE \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043a\u043e\u043f\u0438\u044e \u043f\u043e\u043b\u044f DM MAXIMUM TRANSFER SIZE (\u0441\u043c. \u0434\u0430\u043d\u043d\u044b\u0435 IDENTIFY DEVICE, \u0441\u043b\u043e\u0432\u043e 235 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 45).<\/p><\/blockquote>\n<p> \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u044f \u0445\u043e\u0447\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>DOWNLOAD MICROCODE<\/code>:<\/p>\n<blockquote><p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 DOWNLOAD MICROCODE \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0445\u043e\u0441\u0442\u0443 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u0434 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0414\u0430\u043d\u043d\u044b\u0435, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b DOWNLOAD MICROCODE \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b DOWNLOAD MICROCODE DMA \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f.<br \/> [&#8230;]<br \/> \u0421\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0438 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u0434\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438:<\/p>\n<p> 1) <i>\u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435<\/i>: \u0445\u043e\u0441\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u0434 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432 \u043e\u0434\u043d\u043e\u0439 \u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 DOWNLOAD<br \/> MICROCODE \u0438\u043b\u0438 DOWNLOAD MICROCODE DMA;<br \/> 2) <i>\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435<\/i>: \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u044d\u0442\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u044d\u043d\u0435\u0440\u0433\u043e\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0440\u0435\u0436\u0438\u043c\u043e\u043c \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u0434\u0430;<br \/> 3) <i>\u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f<\/i>: \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u043e\u043c \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u0434\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043e\u043d\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438.<\/p>\n<p> \u041f\u043e\u043b\u0435 BLOCK COUNT \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u043b\u043e\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 512 \u0431\u0430\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u044b. \u041f\u043e\u043b\u0435 BLOCK COUNT \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u044f\u0445 COUNT \u0438 LBA (\u0441\u043c. \u0442\u0430\u0431\u043b\u0438\u0446\u0443 37).<\/p><\/blockquote>\n<p> \u041f\u043e\u0434\u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>DOWNLOAD<\/code> \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/cj\/-w\/bw\/cj-wbwml4cz5zvn5xbfch8zt2du.png\" data-src=\"https:\/\/habrastorage.org\/webt\/cj\/-w\/bw\/cj-wbwml4cz5zvn5xbfch8zt2du.png\"\/><\/div>\n<p> <\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u0434<\/font><\/h3>\n<p> <\/p>\n<pre><code class=\"bash\">char ATA_CMD_DOWNLOAD_MICRO(HANDLE FileHandle, __int16 currentblock, int blocks_to_flash, void *fwdata) {   struct _IO_STATUS_BLOCK IoStatusBlock; \/\/ [esp+Ch] [ebp-38h] BYREF   char v6; \/\/ [esp+17h] [ebp-2Dh]   ATA_PASS_THROUGH_DIRECT InputBuffer; \/\/ [esp+18h] [ebp-2Ch] BYREF    IoStatusBlock.Status = 0;   IoStatusBlock.Information = 0;   memset(&amp;InputBuffer, 0, sizeof(InputBuffer));   InputBuffer.Length = 0x28;   InputBuffer.AtaFlags = ATA_FLAGS_DRDY_REQUIRED|ATA_FLAGS_DATA_OUT|ATA_FLAGS_NO_MULTIPLE;   *(_WORD *)&amp;InputBuffer.CurrentTaskFile[reg_Sector_Count_in] = blocks_to_flash;\/\/ BLOCK COUNT   *(_WORD *)&amp;InputBuffer.CurrentTaskFile[reg_Cylinder_Low_in] = currentblock;\/\/ BUFFER OFFSET   v6 = 0;   InputBuffer.DataTransferLength = blocks_to_flash &lt;&lt; 9;   InputBuffer.TimeOutValue = 70;   InputBuffer.DataBuffer = fwdata;   InputBuffer.CurrentTaskFile[reg_Features] = 3;\/\/ mode 3   InputBuffer.CurrentTaskFile[reg_Device_Head_in] = 0xE0;\/\/ OBSOLETE7|N\/A|OBSOLETE5   InputBuffer.CurrentTaskFile[reg_Command] = IDE_COMMAND_DOWNLOAD_MICROCODE;   if ( NtDeviceIoControlFile(FileHandle, 0, 0, 0, &amp;IoStatusBlock,          IOCTL_ATA_PASS_THROUGH_DIRECT,          &amp;InputBuffer, 0x28u, &amp;InputBuffer, 0x28u) &gt;= 0     &amp;&amp; (InputBuffer.CurrentTaskFile[6] &amp; 9) == 0 )\/\/ status   {     return 1;   }   return v6; }<\/code><\/pre>\n<p> \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>ATA_CMD_DOWNLOAD_MICRO<\/code> \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u043c \u0437\u0434\u0435\u0441\u044c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <code>Device<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043f\u043e \u0441\u0443\u0442\u0438, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c, \u043d\u043e \u0442\u0443\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043d\u0430 <code>0xE0<\/code>. \u0414\u043b\u044f \u043f\u0443\u0449\u0435\u0439 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u044f \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u043b \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 <code>hdparm<\/code>, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0432 \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435. \u0418 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0442\u0430\u043c \u043e\u043d\u043e \u0442\u043e\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u043d\u0430 <code>0xE0<\/code>, \u0437\u043d\u0430\u0447\u0438\u0442 \u044d\u0442\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043b\u0435\u0433\u0430\u0441\u0438-\u043c\u0443\u0441\u043e\u0440:<\/p>\n<pre><code class=\"bash\">enum { ATA_USING_LBA= (1 &lt;&lt; 6), ATA_STAT_DRQ= (1 &lt;&lt; 3), ATA_STAT_ERR= (1 &lt;&lt; 0), };      [...] r-&gt;lob.dev   = 0xa0 | ATA_USING_LBA;<\/code><\/pre>\n<p> <\/p>\n<h2><font color=\"#3AC1EF\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/font><\/h2>\n<p> \u0418\u0442\u0430\u043a, \u043f\u043e \u0441\u0443\u0442\u0438, \u043c\u043e\u0434\u0443\u043b\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ul>\n<li>\u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439,<\/li>\n<li>\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0434\u0438\u0441\u043a\u0430, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0435\u0441\u0442\u0440\u0430,<\/li>\n<li>\u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u044d\u0441\u0442\u0430\u0444\u0435\u0442\u0443 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439:<br \/> \n<ul>\n<li>\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u043b\u0438 \u0434\u0438\u0441\u043a \u043f\u043e USB,<\/li>\n<li>\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>IDENTIFY DEVICE<\/code> \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0434\u0438\u0441\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u043d \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0435,<\/li>\n<li>\u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043f\u043e 128 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 512 \u0431\u0430\u0439\u0442 \u0437\u0430 \u0440\u0430\u0437, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>DOWNLOAD MICROCODE<\/code>,<\/li>\n<li>\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>IDENTIFY DEVICE<\/code> \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0434\u0438\u0441\u043a \u0431\u044b\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p> <\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435<\/font><\/h3>\n<p> \u0411\u044b\u043b\u0430 \u043d\u0435 \u0431\u044b\u043b\u0430 \u2014 \u044f \u0440\u0435\u0448\u0438\u043b\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u043d\u0430 \u0441\u0432\u043e\u0451\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0434\u0438\u0441\u043a\u0435 NAS:<\/p>\n<pre><code class=\"bash\"># hdparm -I \/dev\/sdb | grep Firmware Firmware Revision:  0601 # hdparm --fwdownload-mode3 sk060202.ftd --yes-i-know-what-i-am-doing --please-destroy-my-drive \/dev\/sdb \/dev\/sdb: fwdownload: xfer_mode=3 min=1 max=4224 size=512 ............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................... . Done. # hdparm -I \/dev\/sdb | grep Firmware Firmware Revision:  0602<\/code><\/pre>\n<p> <\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u0421\u043d\u043e\u0441\u043a\u0430<\/font><\/h3>\n<p> <a name=\"anchorid1\"><\/a>1. \u0412\u0435\u0440\u0441\u0438\u044f 1.20.0410, MD5: 7cc7dc301f7b8a45cc56ee25e5707cc2, \u0434\u0430\u0442\u0430: 2023-12-27 <a href=\"#anchorid2\">\u21a9<\/a><\/p>\n<blockquote><p><b><font color=\"#3AC1EF\"><a href=\"https:\/\/t.me\/ruvds_community\">Telegram-\u043a\u0430\u043d\u0430\u043b \u0441\u043e \u0441\u043a\u0438\u0434\u043a\u0430\u043c\u0438, \u0440\u043e\u0437\u044b\u0433\u0440\u044b\u0448\u0430\u043c\u0438 \u043f\u0440\u0438\u0437\u043e\u0432 \u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u044f\u043c\u0438 IT \ud83d\udcbb<\/a><\/font><\/b><\/p><\/blockquote>\n<p><a href=\"http:\/\/ruvds.com\/ru-rub?utm_source=habr&amp;utm_medium=article&amp;utm_campaign=Bright_Translate&amp;utm_content=obnovlenie_proshivki_toshiba_nas_hdd_pod_linux\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/cl\/qe\/xh\/clqexh7hgfymjwsqy0nyisf8fxi.jpeg\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/cl\/qe\/xh\/clqexh7hgfymjwsqy0nyisf8fxi.jpeg\" data-blurred=\"true\"\/><\/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\/867898\/\"> https:\/\/habr.com\/ru\/articles\/867898\/<\/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\/companies\/ruvds\/articles\/867898\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/p9\/nc\/u_\/p9ncu_exuab15uawfhoolcquk1c.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/p9\/nc\/u_\/p9ncu_exuab15uawfhoolcquk1c.jpeg\" data-blurred=\"true\"\/><\/div>\n<p><\/a><br \/> \u042f \u043f\u0440\u043e\u0438\u0437\u0432\u0451\u043b \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433 \u043c\u043e\u0434\u0443\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0441\u0432\u043e\u0435\u0433\u043e HDD Toshiba, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0435\u0451 \u043f\u043e\u0434 Linux. \u041f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <b><font color=\"#3AC1EF\">\u0434\u043e\u043b\u0436\u043d\u044b<\/font><\/b> \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u043e <b><font color=\"#3AC1EF\">\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0438\u0445 \u043d\u0430 \u0441\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u0445 \u0438 \u0440\u0438\u0441\u043a<\/font><\/b>:<\/p>\n<pre><code class=\"plaintext\">$ wget https:\/\/www.canvio.jp\/en\/support\/download\/hdd\/ot_ihdd\/fw\/ISFw.dat $ grep -C2 MODELNAME ISFw.dat  # ^  # |___ \u0437\u0434\u0435\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043d\u0443\u0436\u043d\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 $ wget https:\/\/www.canvio.jp\/en\/support\/download\/hdd\/ot_ihdd\/fw\/sk060202.ftd # hdparm --fwdownload-mode3 sk060202.ftd \/dev\/sdX<\/code><\/pre>\n<p> <\/p>\n<h2><font color=\"#3AC1EF\">\u041f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u044f<\/font><\/h2>\n<p> \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u043f\u0440\u0438\u043e\u0431\u0440\u0451\u043b \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e NAS \u0434\u0438\u0441\u043a Toshiba HDWG480 HDD. \u0412\u043e\u0442 \u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>hdparm -I \/dev\/XXX<\/code>:<\/p>\n<pre><code class=\"plaintext\">ATA device, with non-removable media         Model Number:       TOSHIBA HDWG480         Serial Number:      3430A00RFR0H         Firmware Revision:  0601         Transport:          Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0 Standards:         Used: unknown (minor revision code 0x006d)         Supported: 10 9 8 7 6 5         Likely used: 10 [...]<\/code><\/pre>\n<p> \u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u044f \u0445\u043e\u0442\u0435\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. <a href=\"https:\/\/www.canvio.jp\/en\/support\/download\/hdd\/ot_ihdd\/fw\/en.htm\">\u041d\u0430 \u0441\u0430\u0439\u0442\u0435 Toshiba<\/a> \u0434\u043b\u044f \u043c\u043e\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u044f <code>0602<\/code>.<\/p>\n<p> \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e, \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 Linux \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u0442. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043b\u0438\u0448\u044c \u00abInternal Storage Firmware Update Utility\u00bb \u0434\u043b\u044f Windows.<\/p>\n<p> \u0421\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442.<\/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-443054","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/443054","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=443054"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/443054\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=443054"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=443054"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=443054"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}