<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>ab origine ... : reversing</title><link>http://msmvps.com/blogs/v_scherbina/archive/tags/reversing/default.aspx</link><description>Tags: reversing</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Phishing on Saturday ...</title><link>http://msmvps.com/blogs/v_scherbina/archive/2009/06/21/phishing-on-saturday.aspx</link><pubDate>Sun, 21 Jun 2009 10:41:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1695998</guid><dc:creator>V. S.</dc:creator><slash:comments>0</slash:comments><description>It&amp;rsquo;s quite often to happen with average user on the Internet &amp;ndash; to recieve spam. Sometimes it advertises some junk, but sometimes it asks user to run some executable which does some magic, for example, it allows to send sms to any mobile operator...(&lt;a href="http://msmvps.com/blogs/v_scherbina/archive/2009/06/21/phishing-on-saturday.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1695998" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/v_scherbina/archive/tags/reversing/default.aspx">reversing</category></item><item><title>A case of mysterious BSOD at tcpip!TcpIndicateData+22b</title><link>http://msmvps.com/blogs/v_scherbina/archive/2008/07/09/a-case-of-mysterious-bsod-at-tcpip-tcpindicatedata-22b.aspx</link><pubDate>Wed, 09 Jul 2008 03:01:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1639999</guid><dc:creator>V. S.</dc:creator><slash:comments>0</slash:comments><description>1. The causes Recently I was observing strange BSODs on my Vista machine quite periodically when dealing with network applications: [...] Please, read the rest of this post at http://www.shcherbyna.com/?p=117...(&lt;a href="http://msmvps.com/blogs/v_scherbina/archive/2008/07/09/a-case-of-mysterious-bsod-at-tcpip-tcpindicatedata-22b.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1639999" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/v_scherbina/archive/tags/reversing/default.aspx">reversing</category><category domain="http://msmvps.com/blogs/v_scherbina/archive/tags/researches/default.aspx">researches</category></item><item><title>The case of Task Manager that does not kill</title><link>http://msmvps.com/blogs/v_scherbina/archive/2007/12/20/the-case-of-task-manager-that-does-not-kill.aspx</link><pubDate>Thu, 20 Dec 2007 21:42:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1407625</guid><dc:creator>V. S.</dc:creator><slash:comments>2</slash:comments><description>Quite long time ago, my friend Vadym Stetsiak described a bug of Task Manager , which allows to disallow (!) the killing of a process, if it&amp;#39;s name is lsass.exe. In order to test this bug, you can rename any executable file into lsass.exe, run it...(&lt;a href="http://msmvps.com/blogs/v_scherbina/archive/2007/12/20/the-case-of-task-manager-that-does-not-kill.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1407625" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/v_scherbina/archive/tags/reversing/default.aspx">reversing</category><category domain="http://msmvps.com/blogs/v_scherbina/archive/tags/troubleshooting/default.aspx">troubleshooting</category><category domain="http://msmvps.com/blogs/v_scherbina/archive/tags/researches/default.aspx">researches</category></item><item><title>Undefeatable files &amp; folders in Windows XP SP2 - a bug in SHFileOperationW </title><link>http://msmvps.com/blogs/v_scherbina/archive/2007/07/15/undeletable-files-amp-folders-in-windows-xp-sp2.aspx</link><pubDate>Sat, 14 Jul 2007 23:01:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:998059</guid><dc:creator>V. S.</dc:creator><slash:comments>6</slash:comments><description>Recently I was surprised with one interesting behavior of my Windows XP box. I was playing with long name files and noticed that major part of my shell extensions do not work with files, whose path is longer then 260 symbols. I also noticed, that Windows...(&lt;a href="http://msmvps.com/blogs/v_scherbina/archive/2007/07/15/undeletable-files-amp-folders-in-windows-xp-sp2.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://msmvps.com/aggbug.aspx?PostID=998059" width="1" height="1"&gt;</description><enclosure url="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.99.80.59/test.zip" length="733" type="application/zip" /><category domain="http://msmvps.com/blogs/v_scherbina/archive/tags/reversing/default.aspx">reversing</category><category domain="http://msmvps.com/blogs/v_scherbina/archive/tags/troubleshooting/default.aspx">troubleshooting</category></item><item><title>The case of IE7 that would not run</title><link>http://msmvps.com/blogs/v_scherbina/archive/2006/12/02/the-case-of-ie7-that-does-not-start.aspx</link><pubDate>Sat, 02 Dec 2006 00:27:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:362293</guid><dc:creator>V. S.</dc:creator><slash:comments>4</slash:comments><description>Yesterday I met an interesting behavior of IE7. On one of my computer which runs Windows Server 2003 SP1 I was trying to publish a post to my blog ('the power of IDA'). But I failed to do that. IE7 was crashing when I tried to write something in the editor...(&lt;a href="http://msmvps.com/blogs/v_scherbina/archive/2006/12/02/the-case-of-ie7-that-does-not-start.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://msmvps.com/aggbug.aspx?PostID=362293" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/v_scherbina/archive/tags/reversing/default.aspx">reversing</category><category domain="http://msmvps.com/blogs/v_scherbina/archive/tags/troubleshooting/default.aspx">troubleshooting</category></item><item><title>Why does Windows do not provide more flexible API for Shell Context Menu Handlers? </title><link>http://msmvps.com/blogs/v_scherbina/archive/2006/11/17/why-does-windows-do-not-provide-more-flexible-api-for-shell-context-menu-handlers.aspx</link><pubDate>Fri, 17 Nov 2006 00:01:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:297010</guid><dc:creator>V. S.</dc:creator><slash:comments>5</slash:comments><description>&lt;span&gt;Recently, I
came across an interesting situation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;My PC (XP
SP2) was making some calculations. CPU activity was high. I was surfing through
my folders and clicked on one of them using right button of the mouse. The
context menu appeared after 10-20 seconds … “Why does it takes so long” -&lt;span&gt;&amp;nbsp; &lt;/span&gt;I asked myself? This question leaded me to
investigations …&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;


&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;Windows Shell supports so called ‘shell
extensions’ which allow extending the functionality of shell. It allows 3&lt;sup&gt;rd&lt;/sup&gt;
party products to write custom menu handlers that append own menu items to shell
menu and help user easily use some feature of the product. Typical example of
such approach is WinRar, WinZip applications. Shell extension is represented as
COM component that implements several COM interfaces. I will concentrate here
on IShellExtInit interface mostly.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;


&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;So, when I click on my folders I see the
following picture: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;
&lt;img src="http://msmvps.com/photos/v_scherbina/images/292513/335x375.aspx" align="middle" height="375" width="335"&gt;f&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;span&gt;As you can see on screenshot I have WinRar
shell extension installed on my PC. Seems like there is something inside it’s handler
that cause delays.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;


&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;Each shell extension object implements
IShellExtInit interface. According to documentation, IShellExtInit has method
named Initialize with the following params:&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-right:-42.5pt;font-weight:bold;font-style:italic;"&gt;HRESULT Initialize(LPCITEMIDLIST pidlFolder, IDataObject *pdtobj,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; HKEY hkeyProgID);&lt;/p&gt;
&lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style="font-size:8pt;font-family:Courier;"&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;

&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;
&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;span&gt;The IDataObject object passed to the method
allows obtaining the path of folder user clicked on. One is able to get the handle to structure that contains file names and finally pass that handle to DragQueryFile
function to get the path. DragQueryFile function is defined with following
parameters:&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-right:-42.5pt;font-weight:bold;font-style:italic;"&gt;INT DragQueryFile(HDROP hDrop, UINT iFile, LPTSTR lpszFile,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UINT cch);&amp;nbsp; &amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;span&gt;I can set breakpoint in WinDbg to DrawQueryFileA/ DrawQueryFileW functions to see where they are called. This gives me ability to check what extensions are calling this function, and what is going on in Initialize method of each extension.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;
&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;span&gt;Following commands do that:&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;span style="font-weight:bold;font-style:italic;"&gt;0:001&amp;gt; bp DragQueryFileA&lt;/span&gt;&lt;br style="font-weight:bold;font-style:italic;"&gt;&lt;span style="font-weight:bold;font-style:italic;"&gt;0:001&amp;gt; bp DragQueryFileW &lt;/span&gt;&lt;br&gt;&lt;/p&gt;


&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;span&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style="font-size:11pt;font-family:Courier;"&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;Here is what I see in command line after
executing “bl”: &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;

&lt;img src="http://msmvps.com/photos/v_scherbina/images/297019/500x356.aspx"&gt;
&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br&gt;Now I am going to click on folder and see where DrawQueryFile is called. I click on a folder, and I see the following places where the rarext.dll calls DrawQueryFile:&lt;span&gt;&lt;/span&gt;
&lt;/p&gt;&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;; first call&lt;br&gt;&lt;b&gt;&lt;span style="font-size:11pt;font-family:Courier;"&gt;02d0c44d 6a00&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;push&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;02d0c44f 6a00&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;push&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;02d0c451 6aff&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;push&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;0FFFFFFFFh&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;02d0c453 ff75d4&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span&gt;&lt;/span&gt;push&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dword ptr [ebp-2Ch]&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;02d0c456 e881a90000&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;call&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;rarext!DllCanUnloadNow+0xc0ac (02d16ddc)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;



&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;; second call&lt;br&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size:11pt;font-family:Courier;"&gt;02d0c491 6800040000&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;push&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;400h&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;02d0c496 8d85bcfbffff&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;lea&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;eax,[ebp-444h]&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;02d0c49c 50&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;push&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;eax&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;02d0c49d 8bfb&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;mov&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;edi,ebx&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;02d0c49f 57&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;push&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;edi&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;02d0c4a0 ff75d4&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;push&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dword ptr [ebp-2Ch]&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;02d0c4a3 e834a90000&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span&gt;&lt;/span&gt;call&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;rarext!DllCanUnloadNow+0xc0ac (02d16ddc)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;



&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;; third call&lt;br&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size:11pt;font-family:Courier;"&gt;02d0c4b1 6800080000&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;push&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;800h&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;02d0c4b6 8d85bcf3ffff&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;lea&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;eax,[ebp-0C44h]&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;02d0c4bc 50&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&lt;/span&gt;push&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;eax&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;02d0c4bd 57&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;push&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;edi&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;02d0c4be ff75d4&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;push&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dword ptr [ebp-2Ch]&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;02d0c4c1 e81ca90000&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;call&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;rarext!DllCanUnloadNow+0xc0b2 (02d16de2)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;span&gt;In all cases the intstruction «call
rarext!DllCanUnloadNow+address” is mapped to the call to DragQueryFile(A|W).
Following code at rarext!DllCanUnloadNow+address shows that: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;


&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size:11pt;font-family:Courier;"&gt;02d16ddc jmp dword ptr [rarext!__CPPdebugHook+0xc1bc
(02d233e8)] ds:0023:02d233e8={SHELL32!DragQueryFileA (7ca73fb3)}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;


&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;i&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;b&gt;&lt;span style="font-size:11pt;font-family:Courier;"&gt;02d16de2 jmp dword ptr [rarext!__CPPdebugHook+0xc1c0
(02d233ec)] ds:0023:02d233ec={SHELL32!DragQueryFileW (7ca1fcee)}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;


&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;b&gt;&lt;span style="font-size:11pt;font-family:Courier;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;Let me do some explanations on what is going in
the code mentioned above. The first call is used to obtain the number of files
user selected. It can be seen by the &lt;/span&gt;&lt;b&gt;&lt;span style="font-size:11pt;font-family:Courier;"&gt;0FFFFFFFFh &lt;/span&gt;&lt;/b&gt;&lt;span&gt;value passed to DragQueryFile as iFile
parameter. According to documentation: &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;
&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;i&gt;&lt;span&gt;- iFile&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;Index of the file to
query. If the value of the iFile parameter is 0xFFFFFFFF, DragQueryFile returns
a count of the files dropped.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;span&gt;Second call is made to obtain the ANSI version
of path and the third call is made to obtain the UNICODE version of path. So
pity, that developers of WinRar do not know what &lt;i&gt;MultiByteToWideChar&lt;/i&gt; do and that it’s much faster then calling &lt;i&gt;DragQueryFileW&lt;/i&gt; function. However, I want
to concentrate on another issue.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;span&gt;In IShellExtInit::Initialize handler any shell
extension almost always does the same things. It calls &lt;i&gt;DragQueryFile &lt;/i&gt;to obtain the number of selected files, and then call
&lt;i&gt;DragQueryFile &lt;/i&gt;to query the path to a
file. Imagine, that I have 10 shell extensions that need to know what file was
selected by the user. Most likely they will implement the same functionality in
its code. The list of following operations will be performed:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm -42.5pt 0.0001pt 36pt;text-indent:-18pt;"&gt;&lt;span&gt;&lt;span&gt;-&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;call
&lt;i&gt;DragQueryFile &lt;/i&gt;to get number of
selected files&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm -42.5pt 0.0001pt 36pt;text-indent:-18pt;"&gt;&lt;span&gt;&lt;span&gt;-&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;call
&lt;i&gt;DragQueryFile &lt;/i&gt;in a loop for each file
to get it’s path&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm -42.5pt 0.0001pt 36pt;text-indent:-18pt;"&gt;&lt;span&gt;&lt;span&gt;-&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;do
some logics. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&lt;span&gt;Graphically, this can be represented in the
following way:&lt;/span&gt;&lt;/p&gt;





&lt;p class="MsoNormal" style="margin-right:-42.5pt;"&gt;&amp;nbsp;&lt;img src="http://msmvps.com/photos/v_scherbina/images/297071/500x244.aspx"&gt;&amp;nbsp;&lt;br&gt;&lt;span&gt;From this scheme you can see that most shell
extensions do almost the same steps in order to get the list of selected files.
I wonder, why Shell team did not make some more flexible and
efficient solution that allows to avoid this overhead?&lt;o:p&gt;&lt;br&gt;&lt;/o:p&gt;&lt;br&gt;For example, by passing the list of selected
files into the Initialize function. This will significantly decrease the amount
of code need to be written by shell extensions writers and, on the other side,
it will be more efficient because there will be no need to make a huge amount
of calls to &lt;i&gt;DragQueryFile &lt;/i&gt;for each
shell extension module.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=297010" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/v_scherbina/archive/tags/reversing/default.aspx">reversing</category><category domain="http://msmvps.com/blogs/v_scherbina/archive/tags/troubleshooting/default.aspx">troubleshooting</category></item><item><title>OllyDbg, Windows XP SP2 (32-bit) and Kaspersky Antivirus</title><link>http://msmvps.com/blogs/v_scherbina/archive/2006/10/19/OllyDbg_2C00_-Windows-XP-SP2-_2800_32_2D00_bit_2900_-and-Kaspersky-Antivirus.aspx</link><pubDate>Thu, 19 Oct 2006 18:43:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:189397</guid><dc:creator>V. S.</dc:creator><slash:comments>3</slash:comments><description>
&lt;p&gt;I use &lt;a href="http://www.ollydbg.de/"&gt;OllyDbg&lt;/a&gt; debugger from time to time. The most wonderful debugger I ever seen: it&amp;#39;s light, powerful and does not require installation ... This evening I got a few BSOD&amp;#39;s on my Windows XP SP2 after running OllyDbg. So I started the investigations. &lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;Analyzing minidump using WinDbg showed that system went down because of csrss.exe crash. This actually does not answer the question: why exactly OllyDbg causes BSODing. Debugging OllyDbg using WinDbg I found the function &lt;span style="font-style:italic;"&gt;where&lt;/span&gt; the system dies: &lt;/p&gt;

&lt;p&gt;ntdll!KiUserApcDispatcher:&lt;br /&gt;
7c90eac0 8d7c2410&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lea&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; edi,[esp+10h]&lt;br /&gt;
7c90eac4 58&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pop&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax&lt;br /&gt;
&lt;span style="font-weight:bold;"&gt;7c90eac5 ffd0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call&amp;nbsp;&amp;nbsp;&amp;nbsp; eax&lt;/span&gt;&lt;br /&gt;
7c90eac7 6a01&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
7c90eac9 57&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push&amp;nbsp;&amp;nbsp;&amp;nbsp; edi&lt;br /&gt;
&lt;strong&gt;7c90eaca e84aebffff&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call&amp;nbsp;&amp;nbsp;&amp;nbsp; ntdll!ZwContinue (7c90d619)&lt;/strong&gt;&lt;/p&gt;

Done! Once I realized it&amp;#39;s connected with kernel I remembered that recently I installed &lt;a href="http://www.kaspersky.com/"&gt;Kaspersky Antivirus&lt;/a&gt;...Uninstalling antivirus solved the problem. &lt;br /&gt;
&amp;nbsp;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=189397" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/v_scherbina/archive/tags/reversing/default.aspx">reversing</category></item><item><title>Sometimes you DO need to invent the wheels</title><link>http://msmvps.com/blogs/v_scherbina/archive/2006/10/19/Sometimes-you-DO-need-to-invent-the-wheel.aspx</link><pubDate>Thu, 19 Oct 2006 11:19:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:188224</guid><dc:creator>V. S.</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;There is a well-known approach that states &amp;#39;&lt;u&gt;there is no need to re-invent the wheel&lt;/u&gt;&amp;#39;. In other words, it means that if you decided to implement some functionality in your program, you should googlize to make sure it&amp;#39;s not implemented by other people and if it is then just use it and don&amp;#39;t waste the time. The time seems to be very important in software development cycle. Sure. &lt;br /&gt;&lt;br /&gt;Nice. But in fact there are some problems.&lt;/p&gt;&lt;p&gt;In any operating system to reuse some functionality you need some interfaces to be exposed to communicate with them. Let&amp;#39;s say your program should load some library and communicate with it via exported functions. It gives your application the flexibility - you may load/unload the code you want to run any time, the only one problem is that: &lt;u&gt;&lt;strong&gt;in most cases&lt;/strong&gt; &lt;strong&gt;you cannot control the code&lt;/strong&gt;&lt;/u&gt;.&lt;/p&gt;&lt;p&gt;I will omit the scenario when the library that contains needed for your program functionality is developed by the developer in your company. I want to tell about the scenario when your application uses different components from different vendors. &lt;/p&gt;&lt;p&gt;So let&amp;#39;s say you have the video rendering application. The application takes the video file as the input and produces the screenshots as the output. The application uses COM to communicate with Microsoft DirectShow (DS) 9.0. &lt;/p&gt;&lt;p&gt;This is what I told above: application uses DS interfaces to process the video file. It does not even know what components implement those interfaces - your application really does not care about it... And this causes a lot of&amp;nbsp; problems(all problems refer to using inproc server):&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- when your application process video using 3rd party codecs you cannot control memory allocation/dealloaction by the codec&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- the 3rd pary component code have an access to your application memory: thus it may cause heap corruption, etc&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- exotic situations (like described below)&lt;/p&gt;&lt;p&gt;My exotic case was connected with strange MessageBox I saw when debugging my application. The following call to IFilterGraph-&amp;gt;Connect(...) showed message box like this:&lt;/p&gt;&lt;p&gt;&lt;img src="http://msmvps.com/photos/v_scherbina/images/188362/500x341.aspx" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The output window contains list of interesting strings: &lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;#39;console.exe&amp;#39;: &lt;strong&gt;Loaded &amp;#39;D:\Program Files\Common Files\Ahead\DSFilter\NeVideo.ax&amp;#39;,&lt;/strong&gt; Binary was not built with debug information.&lt;br /&gt;&amp;#39;console.exe&amp;#39;: Loaded &amp;#39;D:\WINDOWS\system32\ddraw.dll&amp;#39;, No symbols loaded.&lt;br /&gt;&amp;#39;console.exe&amp;#39;: Loaded &amp;#39;D:\WINDOWS\system32\dciman32.dll&amp;#39;, No symbols loaded.&lt;br /&gt;First-chance exception at 0x04eca8ed in console.exe: 0xC0000005: Access violation writing location 0x00000000.&lt;br /&gt;First-chance exception at 0x04ec9ed6 in console.exe: 0xC0000005: Access violation writing location 0x00000000.&lt;br /&gt;First-chance exception at 0x04eca0e7 in console.exe: 0xC0000005: Access violation writing location 0x00000000.&lt;br /&gt;First-chance exception at 0x04eca225 in console.exe: 0xC0000005: Access violation writing location 0x00000000.&lt;br /&gt;First-chance exception at 0x04ec7e76 in console.exe: 0xC0000005: Access violation writing location 0x00000000.&lt;br /&gt;First-chance exception at 0x04ec7fcb in console.exe: 0xC0000005: Access violation writing location 0x00000000.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Looking at &lt;em&gt;&amp;#39;&lt;/em&gt;D:\Program Files\Common Files\Ahead\DSFilter\NeVideo.ax&lt;em&gt;&amp;#39; &lt;/em&gt;sections:&lt;/p&gt;&lt;p&gt;&lt;img src="http://msmvps.com/photos/v_scherbina/images/188409/original.aspx" /&gt;&lt;/p&gt;&lt;p&gt;answers the question: the dll file is packed using &lt;a href="http://www.aspack.com/asprotect.html" target="_blank"&gt;AsProtect&lt;/a&gt; protector - the typical behavour of protector is to add &lt;em&gt;&amp;#39;&lt;/em&gt;&lt;u&gt;adata&amp;#39; &lt;/u&gt;section. The message box I saw was the protection action of AsProtect. It detects my Visual Studio debugger as WinIce/SoftIce (I don&amp;#39;t have none of them installed) and terminate my process.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Now I back to the topic of my post. If somebody invented the wheel for you, make sure it&amp;#39;s safe.&amp;nbsp; In this situation I can only &lt;strong&gt;deinstall&lt;/strong&gt; Nero codecs and never install them again...&lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=188224" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/v_scherbina/archive/tags/reversing/default.aspx">reversing</category></item><item><title>IE 7 Beta 3 bugs ...</title><link>http://msmvps.com/blogs/v_scherbina/archive/2006/07/08/IE-7-Beta-3-bugs-_2E00__2E00__2E00_.aspx</link><pubDate>Sat, 08 Jul 2006 17:44:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:104226</guid><dc:creator>V. S.</dc:creator><slash:comments>0</slash:comments><description>I installed yesterday IE 7 Beta 3 (for XP SP2 32bit) and now I realize that it contains a lot of bugs. It crashes mostly when you navigate to &amp;quot;specific urls&amp;quot;. Here is the steps to reproduce:&lt;br /&gt;&lt;br /&gt;- login to msmvsps.com&lt;br /&gt;- goto http://msmvps.com/ControlPanel/Blogs/articlelist.aspx&lt;br /&gt;- click on &amp;quot;New Article&amp;quot; button&lt;br /&gt;- wait untill IE7 dies&lt;br /&gt;&lt;br /&gt;Error report is as always not imformative, I used OllyDbg debbuger to attach to process to see the &amp;quot;details&amp;quot; of a crash. Look at attached screenshot. &lt;br /&gt;&lt;br /&gt;P.S. Issue has been submitted &lt;a href="https://connect.microsoft.com/IE/feedback/ViewFeedback.aspx?FeedbackID=166569"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=104226" width="1" height="1"&gt;</description><enclosure url="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.10.42.26/ie_5F00_crush.JPG" length="191808" type="image/jpeg" /><category domain="http://msmvps.com/blogs/v_scherbina/archive/tags/reversing/default.aspx">reversing</category></item><item><title>Finally Microsoft implemented InternetReadFileExW function ...</title><link>http://msmvps.com/blogs/v_scherbina/archive/2006/07/07/Finally-Microsoft-implemented-InternetReadFileExW-function-_2E00__2E00__2E00_.aspx</link><pubDate>Fri, 07 Jul 2006 15:17:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:104127</guid><dc:creator>V. S.</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;font style="background-color:#d4d0c8;"&gt;Some time ago I was surprised when noticed that UNICODE version of WinInet function InternetReadFileEx is not implemented. Disassembling wininet.dll gave me the following results:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;.text:000007FF7D0D16A0 ; InternetReadFileExW proc near&lt;br /&gt;.text:000007FF7D0D16A0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sub&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rsp, 28h&lt;br /&gt;.text:000007FF7D0D16A4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecx, 78h&lt;br /&gt;.text:000007FF7D0D16A9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call&amp;nbsp;&amp;nbsp;&amp;nbsp; cs:SetLastError&lt;br /&gt;.text:000007FF7D0D16AF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xor&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax, eax&lt;br /&gt;.text:000007FF7D0D16B1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rsp, 28h&lt;br /&gt;.text:000007FF7D0D16B5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retn&lt;br /&gt;.text:000007FF7D0D16B5 InternetReadFileExW endp&lt;/p&gt;
&lt;p&gt;So InternetReadFileExW just was calling SetLastError(120); which means that this function is not impelemneted on the target system. The problem is: at that time official documentation stated that InternetReadFileExW&amp;nbsp;is implemented!&lt;/p&gt;
&lt;p&gt;I wrote several letters to MSFT about this issue, but they just forgot about me - there were no reply concerning my problem. Now I see that starting with IE7 Beta&amp;nbsp;Microsoft implemented this function as a quick hack - it simply calls InternetReadFileExA:&lt;/p&gt;
&lt;p&gt;.text:6302FDC7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public InternetReadFileExW&lt;br /&gt;.text:6302FDC7 InternetReadFileExW proc near&lt;br /&gt;.text:6302FDC7&lt;br /&gt;.text:6302FDC7 hFile&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = dword ptr&amp;nbsp; 8&lt;br /&gt;.text:6302FDC7 lpBuffersOut&amp;nbsp;&amp;nbsp;&amp;nbsp; = dword ptr&amp;nbsp; 0Ch&lt;br /&gt;.text:6302FDC7 dwFlags&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = dword ptr&amp;nbsp; 10h&lt;br /&gt;.text:6302FDC7 dwContext&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = dword ptr&amp;nbsp; 14h&lt;br /&gt;.text:6302FDC7&lt;br /&gt;.text:6302FDC7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; edi, edi&lt;br /&gt;.text:6302FDC9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push&amp;nbsp;&amp;nbsp;&amp;nbsp; ebp&lt;br /&gt;.text:6302FDCA&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ebp, esp&lt;br /&gt;.text:6302FDCC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax, [ebp+lpBuffersOut]&lt;br /&gt;.text:6302FDCF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push&amp;nbsp;&amp;nbsp;&amp;nbsp; esi&lt;br /&gt;.text:6302FDD0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xor&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; esi, esi&lt;br /&gt;.text:6302FDD2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax, esi&lt;br /&gt;.text:6302FDD4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; short loc_6302FDF3&lt;br /&gt;.text:6302FDD6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [eax+8], esi&lt;br /&gt;.text:6302FDD9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jnz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; short loc_6302FDF3&lt;br /&gt;.text:6302FDDB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push&amp;nbsp;&amp;nbsp;&amp;nbsp; [ebp+dwContext] ; dwContext&lt;br /&gt;.text:6302FDDE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push&amp;nbsp;&amp;nbsp;&amp;nbsp; [ebp+dwFlags]&amp;nbsp;&amp;nbsp; ; dwFlags&lt;br /&gt;.text:6302FDE1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push&amp;nbsp;&amp;nbsp;&amp;nbsp; eax&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; lpBuffersOut&lt;br /&gt;.text:6302FDE2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push&amp;nbsp;&amp;nbsp;&amp;nbsp; [ebp+hFile]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; hFile&lt;br /&gt;&lt;font color="#ff0000"&gt;.text:6302FDE5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call&amp;nbsp;&amp;nbsp;&amp;nbsp; InternetReadFileExA&lt;br /&gt;&lt;/font&gt;.text:6302FDEA&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; esi, eax&lt;br /&gt;.text:6302FDEC&lt;br /&gt;.text:6302FDEC loc_6302FDEC:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;.text:6302FDEC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax, esi&lt;br /&gt;.text:6302FDEE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pop&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; esi&lt;br /&gt;.text:6302FDEF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pop&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ebp&lt;br /&gt;.text:6302FDF0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retn&amp;nbsp;&amp;nbsp;&amp;nbsp; 10h&lt;br /&gt;.text:6302FDF3 ; ---------------------------------------------------------------------------&lt;br /&gt;.text:6302FDF3&lt;br /&gt;..text:6302FDF3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push&amp;nbsp;&amp;nbsp;&amp;nbsp; 57h&lt;br /&gt;.text:6302FDF5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jmp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; loc_63044AE6&lt;br /&gt;.text:6302FDF5 InternetReadFileExW endp&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=104127" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/v_scherbina/archive/tags/reversing/default.aspx">reversing</category></item></channel></rss>