{"id":313621,"date":"2020-11-23T15:01:42","date_gmt":"2020-11-23T15:01:42","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=313621"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=313621","title":{"rendered":"NTFS Reparse Points"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u0432\u0430\u043c \u0433\u0430\u0439\u0434 \u043f\u043e NTFS Reparse points (\u0434\u0430\u043b\u0435\u0435 RP), \u0442\u043e\u0447\u043a\u0430\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u042d\u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044f\u0434\u0440\u0430 Windows \u0438 \u0435\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u0442\u0435\u043e\u0440\u0438\u044e \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438, \u043f\u043e\u0442\u043e\u043c \u0434\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u043a\u0443.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/6a\/gf\/4b\/6agf4bcaset4np-2znvb5r9taqi.jpeg\"><br \/>  <a name=\"habracut\"><\/a><br \/>  RP \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0444\u0438\u0447 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b NTFS, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0437\u0430\u0434\u0430\u0447 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f. \u041a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, Acronis \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438.<\/p>\n<h2>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438<\/h2>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u043c\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u044d\u0442\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438. \u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0434\u0430\u043b\u0435\u0435 \u2014 \u044d\u0442\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430.<\/p>\n<ul>\n<li>\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0441 MSDN: <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/fileio\/reparse-points\">docs.microsoft.com\/en-us\/windows\/win32\/fileio\/reparse-points<\/a><\/li>\n<li>\u041c. \u0420\u0443\u0441\u0441\u0438\u043d\u043e\u0432\u0438\u0447, \u0414. \u0421\u043e\u043b\u043e\u043c\u043e\u043d, \u0410. \u0418\u043e\u043d\u0435\u0441\u043a\u0443, \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Microsoft Windows. 6-\u0435 \u0438\u0437\u0434. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041e\u0421. \u0421\u0442\u0440 535.<\/li>\n<li>\u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0438 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0433\u0430\u0439\u0434: <a href=\"http:\/\/hex.pp.ua\/reparse-point-custom.php\">hex.pp.ua\/reparse-point-custom.php<\/a><\/li>\n<li>\u041e\u0447\u0435\u043d\u044c \u043a\u043b\u0430\u0441\u0441\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 RP: <a href=\"https:\/\/github.com\/aleksk\/LazyCopy\">github.com\/aleksk\/LazyCopy<\/a><\/li>\n<li>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043d\u0438\u0436\u0435: <a href=\"https:\/\/github.com\/Dabudabot\/injection-monitor\">github.com\/Dabudabot\/injection-monitor<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u0422\u0435\u043e\u0440\u0438\u044f<\/h2>\n<p>  \u0422\u043e\u0447\u043a\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u043b\u0438 Reparse Point (RP) \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u043c, \u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0442\u0435\u0433\u043e\u043c. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-hardware\/drivers\/ddi\/ntifs\/ns-ntifs-_reparse_guid_data_buffer\">REPARSE_GUID_DATA_BUFFER<\/a>.<\/p>\n<pre><code class=\"cpp\">typedef struct _REPARSE_GUID_DATA_BUFFER {   ULONG  ReparseTag;   USHORT ReparseDataLength;   USHORT Reserved;   GUID   ReparseGuid;   struct {     UCHAR DataBuffer[1];   } GenericReparseBuffer; } REPARSE_GUID_DATA_BUFFER, *PREPARSE_GUID_DATA_BUFFER; <\/code><\/pre>\n<p>  \u0420\u0430\u0437\u043c\u0435\u0440 \u0431\u043b\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 RP \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e 16 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442.<br \/>  <b>ReparseTag<\/b> \u2014 32-\u0445 \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u044b\u0439 \u0442\u044d\u0433.<br \/>  <b>ReparseDataLength<\/b> \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u043d\u043d\u044b\u0445<br \/>  <b>DataBuffer<\/b> \u2014 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435<\/p>\n<p>  RP, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 Microsoft, \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-hardware\/drivers\/ddi\/ntifs\/ns-ntifs-_reparse_data_buffer\">REPARSE_DATA_BUFFER<\/a>. \u041d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0445 RP.<\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0444\u043e\u0440\u043c\u0430\u0442 \u0442\u0435\u0433\u0430:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hm\/g9\/he\/hmg9heytt6cnxcconetjpodxg9g.png\"><\/p>\n<p>  <b>M<\/b> \u2014 \u0411\u0438\u0442 \u041c\u0430\u0439\u043a\u0440\u043e\u0441\u043e\u0444\u0442; \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0431\u0438\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u0437\u043d\u0430\u0447\u0438\u0442 \u0442\u0435\u0433 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 \u041c\u0430\u0439\u043a\u0440\u043e\u0441\u043e\u0444\u0442.<br \/>  <b>L<\/b> \u2014 \u0411\u0438\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438; \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0431\u0438\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u0437\u043d\u0430\u0447\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f RP \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043d\u0430 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u0435 \u0441 \u043d\u0438\u0437\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0440\u0435\u0430\u043a\u0446\u0438\u0438 \u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0432\u044b\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<br \/>  <b>R<\/b> \u2014 \u0417\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0431\u0438\u0442;<br \/>  <b>N<\/b> \u2014 \u0411\u0438\u0442 \u0437\u0430\u043c\u0435\u043d\u044b \u0438\u043c\u0435\u043d\u0438; \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0431\u0438\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u0437\u043d\u0430\u0447\u0438\u0442 \u0444\u0430\u0439\u043b \u0438\u043b\u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0443\u0433\u0443\u044e \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.<br \/>  <b>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u0433\u0430<\/b> \u2014 \u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0443 Microsoft;<\/p>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 RP, NTFS \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0444\u0430\u0439\u043b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 <i>\\\\$Extend\\\\$Reparse<\/i>. \u0418\u043c\u0435\u043d\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043e RP. \u0422\u0430\u043a\u043e\u0435 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043b\u044e\u0431\u043e\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e.<\/p>\n<p>  \u0427\u0435\u0440\u0435\u0437 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c RP \u0432 Windows \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a, \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u043e\u0447\u0435\u043a \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u043e\u043c\u043e\u0432 \u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432.<\/p>\n<p>  \u0416\u0435\u0441\u0442\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 Windows \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0438\u043d\u043e\u043d\u0438\u043c\u043e\u043c \u043d\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0444\u0430\u0439\u043b \u043d\u0430 \u0434\u0438\u0441\u043a\u0435. \u042d\u0442\u043e \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0435\u0449\u0435 \u043e\u0434\u043d\u043e \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432. \u042d\u0442\u0438\u043c \u0436\u0451\u0441\u0442\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0445.<\/p>\n<p>  \u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 RP \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c:<\/p>\n<ul>\n<li>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u044f\u043c\u0438 <b>SE_BACKUP_NAME<\/b> \u0438\u043b\u0438 <b>SE_RESTORE_NAME<\/b>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 RP, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 <b>ReparseTag<\/b> \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c <b>DataBuffer<\/b><\/li>\n<li>\u0414\u0440\u0430\u0439\u0432\u0435\u0440 \u0440\u0435\u0436\u0438\u043c\u0430 \u044f\u0434\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0444\u0435\u0440\u0430 \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0432\u043e\u0439 \u0444\u0430\u0439\u043b \u0441 RP<\/h2>\n<p>  1. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438<\/p>\n<pre><code class=\"cpp\">void GetPrivilege(LPCTSTR priv) { \tHANDLE hToken; \tTOKEN_PRIVILEGES tp; \tOpenProcessToken(GetCurrentProcess(), \t\tTOKEN_ADJUST_PRIVILEGES, &amp;hToken); \tLookupPrivilegeValue(NULL, priv, &amp;tp.Privileges[0].Luid); \ttp.PrivilegeCount = 1; \ttp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; \tAdjustTokenPrivileges(hToken, FALSE, &amp;tp, \t\tsizeof(TOKEN_PRIVILEGES), NULL, NULL); \tCloseHandle(hToken); }  GetPrivilege(SE_BACKUP_NAME); GetPrivilege(SE_RESTORE_NAME); GetPrivilege(SE_CREATE_SYMBOLIC_LINK_NAME); <\/code><\/pre>\n<p>  2. \u041f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-hardware\/drivers\/ddi\/ntifs\/ns-ntifs-_reparse_guid_data_buffer\">REPARSE_GUID_DATA_BUFFER<\/a>. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432 \u0434\u0430\u043d\u043d\u044b\u0435 RP \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 <i>\u201cMy reparse data\u201d<\/i>.<\/p>\n<pre><code class=\"cpp\">TCHAR data[] = _T(&quot;My reparse data&quot;); BYTE reparseBuffer[sizeof(REPARSE_GUID_DATA_BUFFER) + sizeof(data)]; PREPARSE_GUID_DATA_BUFFER rd = (PREPARSE_GUID_DATA_BUFFER) reparseBuffer;  ZeroMemory(reparseBuffer, sizeof(REPARSE_GUID_DATA_BUFFER) + sizeof(data));  \/\/ {07A869CB-F647-451F-840D-964A3AF8C0B6} static const GUID my_guid = { 0x7a869cb, 0xf647, 0x451f, { 0x84, 0xd, 0x96, 0x4a, 0x3a, 0xf8, 0xc0, 0xb6 }};  rd-&gt;ReparseTag = 0xFF00; rd-&gt;ReparseDataLength = sizeof(data); rd-&gt;Reserved = 0; rd-&gt;ReparseGuid = my_guid; memcpy(rd-&gt;GenericReparseBuffer.DataBuffer, &amp;data, sizeof(data)); <\/code><\/pre>\n<p>  3. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b.<\/p>\n<pre><code class=\"cpp\">LPCTSTR name = _T(&quot;TestReparseFile&quot;);  _tprintf(_T(&quot;Creating empty file\\n&quot;)); HANDLE hFile = CreateFile(name, \tGENERIC_READ | GENERIC_WRITE,  \t0, NULL, \tCREATE_NEW,  \tFILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, \tNULL); if (INVALID_HANDLE_VALUE == hFile) { _tprintf(_T(&quot;Failed to create file\\n&quot;)); \treturn -1; } <\/code><\/pre>\n<p>  4. \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0444\u0430\u0439\u043b \u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/api\/ioapiset\/nf-ioapiset-deviceiocontrol\">DeviceIoControl<\/a> \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/api\/winioctl\/ni-winioctl-fsctl_set_reparse_point\">FSCTL_SET_REPARSE_POINT<\/a>.<\/p>\n<pre><code class=\"cpp\">_tprintf(_T(&quot;Creating reparse\\n&quot;)); if (!DeviceIoControl(hFile, FSCTL_SET_REPARSE_POINT, rd, rd-&gt;ReparseDataLength + REPARSE_GUID_DATA_BUFFER_HEADER_SIZE, NULL, 0, &amp;dwLen, NULL)) { \tCloseHandle(hFile); \tDeleteFile(name);  \t_tprintf(_T(&quot;Failed to create reparse\\n&quot;)); \treturn -1; }  CloseHandle(hFile); <\/code><\/pre>\n<p>  \u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/gist.github.com\/Dabudabot\/573fbe79cddbf86f71e3a5396d43b35d\">\u0442\u0443\u0442<\/a>. <\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0443 \u043d\u0430\u0441 \u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b. \u0423\u0442\u0438\u043b\u0438\u0442\u0430 <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-server\/administration\/windows-commands\/fsutil\">fsutil<\/a> \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 \u0444\u0430\u0439\u043b \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043d\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/mt\/zn\/2-\/mtzn2-einprbpe9lyirflde36bm.png\"><\/p>\n<h2>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 RP<\/h2>\n<p>  \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u044f\u0434\u0440\u0435\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u0434\u0435\u0442\u0430\u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043c\u0438\u043d\u0438-\u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430. \u0425\u043e\u0440\u043e\u0448\u0435\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0435\u0441\u0442\u044c \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043e\u0442 Microsoft \u0441 <a href=\"https:\/\/github.com\/microsoft\/Windows-driver-samples\/tree\/master\/filesys\/miniFilter\">\u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u043a\u043e\u0434\u0430<\/a>. \u0410 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 <i>post callback<\/i> \u043c\u0435\u0442\u043e\u0434. <\/p>\n<p>  \u041d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c <b>IRP<\/b> c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <b>FILE_OPEN_REPARSE_POINT<\/b>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0432\u044b\u0437\u043e\u0432\u0435\u043c <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-hardware\/drivers\/ddi\/fltkernel\/nf-fltkernel-fltreissuesynchronousio\">FltReissueSynchronousIo<\/a>. \u0414\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442 \u0437\u0430\u043f\u0440\u043e\u0441, \u043d\u043e \u0443\u0436\u0435 \u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 <b>Create.Options<\/b>.<\/p>\n<p>  \u0412\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-hardware\/drivers\/ddi\/fltkernel\/ns-fltkernel-_flt_callback_data\">PFLT_CALLBACK_DATA<\/a> \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u0435 <b>TagData<\/b>. \u0415\u0441\u043b\u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-hardware\/drivers\/ddi\/fltkernel\/nf-fltkernel-fltfscontrolfile\">FltFsControlFile<\/a> \u0441 \u043a\u043e\u0434\u043e\u043c <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-hardware\/drivers\/ifs\/fsctl-get-reparse-point\">FSCTL_GET_REPARSE_POINT<\/a>, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043d\u0430\u0448 \u0431\u0443\u0444\u0435\u0440 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<pre><code class=\"cpp\">\/\/ todo \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u0448 \u043b\u0438 \u044d\u0442\u043e \u0442\u044d\u0433, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0433\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 if (Data-&gt;TagData != NULL)  { if ((Data-&gt;Iopb-&gt;Parameters.Create.Options &amp; FILE_OPEN_REPARSE_POINT) != FILE_OPEN_REPARSE_POINT)     {       Data-&gt;Iopb-&gt;Parameters.Create.Options |= FILE_OPEN_REPARSE_POINT;        FltSetCallbackDataDirty(Data);       FltReissueSynchronousIo(FltObjects-&gt;Instance, Data);     }      status = FltFsControlFile(       FltObjects-&gt;Instance,        FltObjects-&gt;FileObject,        FSCTL_GET_REPARSE_POINT,        NULL,        0,        reparseData,       reparseDataLength,       NULL     ); } <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/4x\/ev\/s8\/4xevs8qfb3xqaruyy94c_kickk8.png\"><\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438. \u041c\u043e\u0436\u043d\u043e \u0432\u043d\u043e\u0432\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c <b>IRP<\/b>. \u0418\u043b\u0438 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 <a href=\"https:\/\/github.com\/aleksk\/LazyCopy\/tree\/master\/Driver\/LazyCopyDriver\">LazyCopy<\/a> \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 RP \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043f\u0443\u0442\u044c \u0434\u043e \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430. \u0410\u0432\u0442\u043e\u0440 \u043d\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0444\u0430\u0439\u043b\u0430, \u0430 \u043b\u0438\u0448\u044c \u043f\u0435\u0440\u0435\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 RP \u0432 <i>stream context<\/i> \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430. \u0414\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0444\u0430\u0439\u043b\u0430. \u0412\u043e\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<pre><code class=\"cpp\">\/\/ Operations.c - PostCreateOperationCallback  NT_IF_FAIL_LEAVE(LcGetReparsePointData(FltObjects, &amp;fileSize, &amp;remotePath, &amp;useCustomHandler));  NT_IF_FAIL_LEAVE(LcFindOrCreateStreamContext(Data, TRUE, &amp;fileSize, &amp;remotePath, useCustomHandler, &amp;streamContext, &amp;contextCreated));  \/\/ Operations.c - PreReadWriteOperationCallback  status = LcGetStreamContext(Data, &amp;context);  NT_IF_FAIL_LEAVE(LcGetFileLock(&amp;nameInfo-&gt;Name, &amp;fileLockEvent));  NT_IF_FAIL_LEAVE(LcFetchRemoteFile(FltObjects, &amp;context-&gt;RemoteFilePath, &amp;nameInfo-&gt;Name, context-&gt;UseCustomHandler, &amp;bytesFetched));  NT_IF_FAIL_LEAVE(LcUntagFile(FltObjects, &amp;nameInfo-&gt;Name)); NT_IF_FAIL_LEAVE(FltDeleteStreamContext(FltObjects-&gt;Instance, FltObjects-&gt;FileObject, NULL)); <\/code><\/pre>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, RP \u0438\u043c\u0435\u044e\u0442 \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0441\u043f\u0435\u043a\u0442\u0440 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u041e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043d\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<h2>\u0417\u0430\u0434\u0430\u0447\u043a\u0430<\/h2>\n<p>  \u0418\u0433\u0440\u0443\u0448\u043a\u0430 <i>Half-life<\/i> \u0443\u043c\u0435\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0432\u0443\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445: <i>software mode<\/i> \u0438 <i>hardware mode<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0432 \u0438\u0433\u0440\u0435. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043a\u043e\u0432\u044b\u0440\u044f\u0432 \u0438\u0433\u0440\u0443\u0448\u043a\u0443 \u0432 <i>IDA Pro<\/i>, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0440\u0435\u0436\u0438\u043c\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0439 \u043c\u0435\u0442\u043e\u0434\u043e\u043c <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/api\/libloaderapi\/nf-libloaderapi-loadlibrarya\">LoadLibrary<\/a> \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439: <b>sw.dll<\/b> \u0438\u043b\u0438 <b>hw.dll<\/b>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/i-\/8c\/2c\/i-8c2cwohldfxbmvmbbjqvc0ivg.png\"><\/p>\n<p>  \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <i>\u201c-soft\u201d<\/i>) \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0442\u0430 \u0438\u043b\u0438 \u0438\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0438 \u043f\u043e\u0434\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/api\/libloaderapi\/nf-libloaderapi-loadlibrarya\">LoadLibrary<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/4n\/mi\/1n\/4nmi1nc6gwymw2fqmgmrqxh2kem.png\"><\/p>\n<p>  \u0421\u0443\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442\u044c \u0438\u0433\u0440\u0443\u0448\u043a\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0432 <i>software mode<\/i>, \u0434\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b. \u0412 \u0438\u0434\u0435\u0430\u043b\u0435 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0435\u0433\u043e \u0432\u044b\u0431\u043e\u0440\u0430, \u043e\u043d \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0432 <i>hardware mode<\/i>.<\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0440\u043e\u043f\u0430\u0442\u0447\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b, \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c dll \u0444\u0430\u0439\u043b, \u0434\u0430 \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c <b>hw.dll<\/b> \u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u044e \u0432 <b>sw.dll<\/b>, \u043d\u043e \u043c\u044b \u043d\u0435 \u0438\u0449\u0435\u043c \u043b\u0451\u0433\u043a\u0438\u0445 \u043f\u0443\u0442\u0435\u0439. \u041f\u043b\u044e\u0441, \u0435\u0441\u043b\u0438 \u0438\u0433\u0440\u0443 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c, \u044d\u0444\u0444\u0435\u043a\u0442 \u043f\u0440\u043e\u043f\u0430\u0434\u0435\u0442.<\/p>\n<h2>\u0420\u0435\u0448\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u042f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435: \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u0438\u043d\u0438-\u0444\u0438\u043b\u044c\u0442\u0440 \u0434\u0440\u0430\u0439\u0432\u0435\u0440. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0438 \u043d\u0430 \u043d\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u043b\u0438\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u044b. \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e <b>IRP_MJ_CREATE<\/b>, \u0432\u0435\u0434\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/api\/libloaderapi\/nf-libloaderapi-loadlibrarya\">LoadLibrary<\/a>, \u043e\u043d \u043f\u043e \u0441\u0443\u0442\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0444\u0430\u0439\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u044b \u0437\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u0433\u0440\u044b \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <b>sw.dll<\/b>, \u043c\u044b \u0432\u0435\u0440\u043d\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441 <b>STATUS_REPARSE<\/b> \u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u043d\u043e \u0443\u0436\u0435 \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 <b>hw.dll<\/b>. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: <i>\u043e\u0442\u043a\u0440\u044b\u043b\u0430\u0441\u044c \u043d\u0443\u0436\u043d\u0430\u044f \u043d\u0430\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0445\u043e\u0442\u044c user space \u0438 \u043f\u0440\u043e\u0441\u0438\u043b \u0443 \u043d\u0430\u0441 \u0434\u0440\u0443\u0433\u0443\u044e<\/i>.<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0432\u0435\u0434\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430\u0448 \u0442\u0440\u044e\u043a \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438\u0433\u0440\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u044f\u043c\u043e \u0432 <b>DriverEntry<\/b> \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0437\u0432\u0430\u0442\u044c <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-hardware\/drivers\/ddi\/ntddk\/nf-ntddk-pssetcreateprocessnotifyroutine\">PsSetCreateProcessNotifyRoutine<\/a> \u0438 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441.<\/p>\n<pre><code class=\"cpp\">NT_IF_FAIL_LEAVE(PsSetCreateProcessNotifyRoutine(IMCreateProcessNotifyRoutine, FALSE)); <\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043c\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/procthread\/zwqueryinformationprocess\">ZwQueryInformationProcess<\/a>. <\/p>\n<pre><code class=\"cpp\">NT_IF_FAIL_LEAVE(PsLookupProcessByProcessId(ProcessId, &amp;eProcess));  NT_IF_FAIL_LEAVE(ObOpenObjectByPointer(eProcess, OBJ_KERNEL_HANDLE, NULL, 0, 0, KernelMode, &amp;hProcess));  NT_IF_FAIL_LEAVE(ZwQueryInformationProcess(hProcess,                                                ProcessImageFileName,                                                buffer,                                                returnedLength,                                                &amp;returnedLength)); <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043e\u043d \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0438\u0441\u043a\u043e\u043c\u044b\u043c, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <b>hl.exe<\/b>, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0435\u0433\u043e <b>PID<\/b>.<\/p>\n<pre><code class=\"cpp\">target = &amp;Globals.TargetProcessInfo[i]; if (RtlCompareUnicodeString(&amp;processNameInfo-&gt;Name, &amp;target-&gt;TargetName, TRUE) == 0) {       target-&gt;NameInfo = processNameInfo;       target-&gt;isActive = TRUE;       target-&gt;ProcessId = ProcessId;        LOG((&quot;[IM] Found process creation: %wZ\\n&quot;, &amp;processNameInfo-&gt;Name)); } <\/code><\/pre>\n<p>  \u0418\u0442\u0430\u043a, \u0442\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d <b>PID<\/b> \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043d\u0430\u0448\u0435\u0439 \u0438\u0433\u0440\u044b. \u041c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a <i>pre create callback<\/i>. \u0422\u0430\u043c \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043c\u044f \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430. \u0412 \u044d\u0442\u043e\u043c \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-hardware\/drivers\/ddi\/fltkernel\/nf-fltkernel-fltgetfilenameinformation\">FltGetFileNameInformation<\/a>. \u0414\u0430\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043d\u0435\u043b\u044c\u0437\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 <b>DPC<\/b> \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 (\u0447\u0438\u0442\u0430\u0439 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-hardware\/drivers\/kernel\/managing-hardware-priorities\">\u043f\u0440\u043e IRQL<\/a>), \u043e\u0434\u043d\u0430\u043a\u043e, \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0437\u043e\u0432 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430 <i>pre create<\/i>, \u0447\u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u043c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043d\u0435 \u0432\u044b\u0448\u0435 <b>APC<\/b>.<\/p>\n<pre><code class=\"cpp\">status = FltGetFileNameInformation(Data, FLT_FILE_NAME_OPENED | FLT_FILE_NAME_QUERY_FILESYSTEM_ONLY | FLT_FILE_NAME_ALLOW_QUERY_ON_REPARSE, &amp;fileNameInfo); <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e, \u0435\u0441\u043b\u0438 \u043d\u0430\u0448\u0435 \u0438\u043c\u044f <b>sw.dll<\/b>, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0432 <b>FileObject<\/b> \u043d\u0430 <b>hw.dll<\/b>. \u0418 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 <b>STATUS_REPARSE<\/b>.<\/p>\n<pre><code class=\"cpp\">\/\/ may be it is sw if (RtlCompareUnicodeString(&amp;FileNameInfo-&gt;Name, &amp;strSw, TRUE) == 0) { \/\/ concat NT_IF_FAIL_LEAVE(IMConcatStrings(&amp;replacement, &amp;FileNameInfo-&gt;ParentDir, &amp;strHw));  \/\/ then need to change NT_IF_FAIL_LEAVE(IoReplaceFileObjectName(FileObject, replacement.Buffer, replacement.Length)); }  Data-&gt;IoStatus.Status = STATUS_REPARSE; Data-&gt;IoStatus.Information = IO_REPARSE; return FLT_PREOP_COMPLETE; <\/code><\/pre>\n<p>  \u0411\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u0430\u044f, \u043d\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c. \u0412\u0435\u0441\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u044f\u043c\u0438 <a href=\"https:\/\/github.com\/Dabudabot\/injection-monitor\">\u0442\u0443\u0442<\/a>.<\/p>\n<h2>\u0422\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c<\/h2>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0448\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0438, \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u0433\u0440\u044b \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">\/\/ testapp.exe #include &quot;TestHeader.h&quot;  int main() { \tTestFunction(); \treturn 0; }  \/\/ testdll0.dll #include &quot;..\/include\/TestHeader.h&quot; #include &lt;iostream&gt;  \/\/ This is an example of an exported function. int TestFunction() { std::cout &lt;&lt; &quot;hello from test dll 0&quot; &lt;&lt; std::endl; return 0; }  \/\/ testdll1.dll #include &quot;..\/include\/TestHeader.h&quot; #include &lt;iostream&gt;  \/\/ This is an example of an exported function. int TestFunction() { std::cout &lt;&lt; &quot;hello from test dll 1&quot; &lt;&lt; std::endl; return 0; } <\/code><\/pre>\n<p>  \u0421\u043e\u0431\u0435\u0440\u0435\u043c <i>testapp.exe<\/i> \u0441 <i>testdll0.dll<\/i>, \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0438\u0445 \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0443 (\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043c \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c <i>testdll1.dll<\/i>. \u0417\u0430\u0434\u0430\u0447\u0435\u0439 \u043d\u0430\u0448\u0435\u0433\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c <i>testdll0<\/i> \u043d\u0430 <i>testdll1<\/i>. \u041c\u044b \u043f\u043e\u0439\u043c\u0435\u043c \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0432\u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0435\u0441\u043b\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 <i>\u201chello from test dll 1\u201d<\/i>, \u0432\u043c\u0435\u0441\u0442\u043e <i>\u201chello from test dll 0\u201d<\/i>. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0431\u0435\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043d\u0430\u0448\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/2f\/pb\/s3\/2fpbs3nxq09mlwteb21jai1gs1a.png\"><\/p>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zo\/-v\/nv\/zo-vnvel8jiu0iydirsic6u785c.png\"><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044f \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u044b\u0432\u043e\u0434 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u0430\u0441\u044c \u0434\u0440\u0443\u0433\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/l6\/f6\/b9\/l6f6b9bxmcx_hy3henexq-ph98m.png\"><\/p>\n<p>  \u041f\u043b\u044e\u0441 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c \u0434\u043b\u044f \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430, \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043b\u043e\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u043e\u0432\u043e\u0440\u044f\u0442, \u0447\u0442\u043e \u043c\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0439\u043c\u0430\u043b\u0438 \u043d\u0430\u0448 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439. \u0422\u0435\u0441\u0442 \u0443\u0434\u0430\u043b\u0441\u044f, \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0430\u043c\u043e\u0439 \u0438\u0433\u0440\u0435. \u041d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u0435\u043c\u0441\u044f \ud83d\ude42<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/github.com\/Dabudabot\/injection-monitor\/blob\/master\/docs\/demo3.gif?raw=true\"><\/p>\n<p>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e. \u041f\u0438\u0448\u0438\u0442\u0435 \u0432\u0430\u0448\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c.<\/p><\/div>\n<p> \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\/company\/acronis\/blog\/528992\/\"> https:\/\/habr.com\/ru\/company\/acronis\/blog\/528992\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u0432\u0430\u043c \u0433\u0430\u0439\u0434 \u043f\u043e NTFS Reparse points (\u0434\u0430\u043b\u0435\u0435 RP), \u0442\u043e\u0447\u043a\u0430\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u042d\u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044f\u0434\u0440\u0430 Windows \u0438 \u0435\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u0442\u0435\u043e\u0440\u0438\u044e \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438, \u043f\u043e\u0442\u043e\u043c \u0434\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u043a\u0443.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/6a\/gf\/4b\/6agf4bcaset4np-2znvb5r9taqi.jpeg\">  <\/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-313621","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/313621","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=313621"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/313621\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=313621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=313621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=313621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}