<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>softblog</title>
	
	<link>http://www.softblog.com</link>
	<description>About software, computers, etc.</description>
	<pubDate>Fri, 31 Oct 2008 22:06:26 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/softblog" type="application/rss+xml" /><item>
		<title>Getting through the Google “winter”</title>
		<link>http://feeds.feedburner.com/~r/softblog/~3/438495902/</link>
		<comments>http://www.softblog.com/2008-10/getting-through-google-winter/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 22:06:26 +0000</pubDate>
		<dc:creator>AB</dc:creator>
		
		<category><![CDATA[Marketing]]></category>

		<category><![CDATA[google penalty]]></category>

		<category><![CDATA[googlebot]]></category>

		<category><![CDATA[organic search]]></category>

		<guid isPermaLink="false">http://www.softblog.com/?p=44</guid>
		<description><![CDATA[Winter came early to the usually sunny and warm South-West Utah this year. First, early frost came in the beginning of October, killing tomatoes my wife was so fond of, as well as quite a few other outside plants of hers. Then, at about the same time I&#8217;ve got an email from Google stating &#8220;Removal [...]]]></description>
			<content:encoded><![CDATA[<p>Winter came early to the usually sunny and warm South-West Utah this year. First, early frost came in the beginning of October, killing tomatoes my wife was so fond of, as well as quite a few other outside plants of hers. Then, at about the same time I&#8217;ve got an email from Google stating &#8220;Removal from Google&#8217;s Index &#8230; In order to preserve the quality of our search engine, pages from winability.com are scheduled to be removed temporarily from our search results for at least 30 days.&#8221; WHAT??? It took me a few seconds to understand what is was about: Goggle decided to penalize my main business web site for something that violated its terms of service. Considering that Google was a significant source of visitors to the web site, my heart skipped a few beats.  It looked like we were up for a long, cold winter this year.</p>
<p>I went to review the source pages of the web site right away, to see what exactly triggered the Google penalty. It turned out, I had a paragraph of text on the page enclosed with the tags <strong>&lt;div class=&#8221;description&#8221;&gt;&#8230;&lt;/div&gt;</strong>. Nothing bad by itself, until you pull the style.css file and see that the definition for class &#8220;description&#8221; was: <strong>.description { display: none; }</strong> In other words, the text that was between the tags was not displayed on the page. Yet it was visible to the googlebot. A clear violation of the Google&#8217;s terms, indeed!</p>
<p>How come I had that piece of hidden text on the web page? It happened a few years ago, when I was doing the last redesign of the web site. I was playing with different style sheets, one designed to display the web page on the screen, and another one to be used when the page was sent to the printer.  I was using the display: none; attributes in the printing style sheet to suppress the printing of the non-essential elements (like menus, which have no use when printed on paper). While playing with the different layouts, I forgot about one invisible piece of text I left there. And now, several years later, Goggle finally figured out that the text was hidden and decided to penalize me.</p>
<p>Once I realized what the problem was about, I removed the hidden text from all pages, and submitted a reconsideration request to Google. They replied: &#8220;Please allow several weeks for the reconsideration request.&#8221; Several weeks! As if the stock market crisis was not enough of bad news at that time.</p>
<p>Then, after a few days passed, the frost was gone, and the usual warm fall returned to Utah. One morning, while checking the Google search results the N-th time, I saw my web site back in the results. Hurray, Google has lifted its punishment, and allowed my web site back into its index! It turned out that instead of &#8220;at least 30 days&#8221; or &#8220;several weeks&#8221; the penalty lasted only about 6 days. (Of course, I&#8217;m not complaining!).</p>
<p>Looking at the web site statistics, here is how the Google penalty affected the traffic:</p>
<div class="mceTemp mceIEcenter">
<dl id="attachment_46" class="wp-caption aligncenter" style="width: 413px;">
<dt class="wp-caption-dt"><a href="http://www.softblog.com/wp-content/uploads/2008/10/google-winter-sm.png"><img class="size-full wp-image-46" title="Google &quot;winter&quot;" src="http://www.softblog.com/wp-content/uploads/2008/10/google-winter-sm.png" alt="Google &quot;winter&quot;" width="403" height="125" /></a></dt>
</dl>
</div>
<p>The decrease in the traffic was noticeable, but not devastating. Why? Because the &#8220;organic&#8221; Google traffic, although significant, was not the primary source of the visitors to my web site. What was the primary source then, you might ask? Sorry, I&#8217;m not telling (I have a lot of competition!) Let me just mention that the &#8220;word of mouth&#8221; kind of traffic, that is people telling their friends and colleagues about my products, the web sites recommending my products to their users, and other similar sources, play a very prominent role in keeping my business alive.</p>
<p>Even though the Google punishment was light, I promised to myself that I will pay better attention to the web pages in the future and make sure I don&#8217;t do something stupid again that would trigger the Google &#8220;winter&#8221; again. It may not be so short next time.</p>
<p>Post from: <a href="http://www.softblog.com">softblog.com</a></p>
<p><a href="http://www.softblog.com/2008-10/getting-through-google-winter/">Getting through the Google &#8220;winter&#8221;</a></p>
<img src="http://feeds.feedburner.com/~r/softblog/~4/438495902" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softblog.com/2008-10/getting-through-google-winter/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.softblog.com/2008-10/getting-through-google-winter/</feedburner:origLink></item>
		<item>
		<title>Is GPL software free as in “free love”?</title>
		<link>http://feeds.feedburner.com/~r/softblog/~3/390174789/</link>
		<comments>http://www.softblog.com/2008-09/intergating-gpl-and-proprietary-software/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 00:38:51 +0000</pubDate>
		<dc:creator>AB</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[free software]]></category>

		<category><![CDATA[GPL]]></category>

		<category><![CDATA[plug-in]]></category>

		<guid isPermaLink="false">http://www.softblog.com/?p=36</guid>
		<description><![CDATA[I was contemplating the other day how to extend AB Commander to make it able to collaborate with several third-party software products. For example, it would be cool to add some support for the 7z files, which are created by the file compressor 7-Zip . It shouldn&#8217;t be too difficult, I thought, because 7-Zip is [...]]]></description>
			<content:encoded><![CDATA[<p>I was contemplating the other day how to extend <a title="More information about AB Commander" href="http://www.WinAbility.com/abcommander/" target="_blank">AB Commander</a> to make it able to collaborate with several third-party software products. For example, it would be cool to add some support for the 7z files, which are created by the file compressor <a title="7-Zip web site" href="http://www.7-zip.org/" target="_blank">7-Zip</a> . It shouldn&#8217;t be too difficult, I thought, because 7-Zip is an open source project, I could examine its source code to see how exactly the 7z files are handled, and maybe reuse some of its code in AB Commander?</p>
<p>Not so fast. 7-Zip is licensed under the <a title="GPL licenses" href="http://www.gnu.org/licenses/licenses.html" target="_blank">GPL license</a>, which strictly forbids the re-use of its source code in the non-GPL&#8217;d projects. If I want to use some of the GPL&#8217;d code in my own software, I need to convert my whole project to the GPL license and open its whole source code, something I don&#8217;t want to do.</p>
<p>After thinking some more, I came up with an idea: I&#8217;d make a separate module (a plug-in) that would serve as a bridge between my closed-source project and the GPL&#8217;d project. I would make the plug-in GPL&#8217;d (because it would need to use some of the GPL&#8217;d code), and publish its source code.  My closed source project would link to the plug-in, the plug-in would link to the other GPL&#8217;d project&#8217;s code, and everyone would be happy: the users of AB Commander would get additional software functionality, the plug-in would be GPL&#8217;d, and I would keep the source code of AB Commander closed. Pretty smart, huh?</p>
<p>Again, not so fast. Let&#8217;s browse through the <a title="GPL FAQ" href="http://www.gnu.org/licenses/gpl-faq.html" target="_blank">GPL FAQ</a>, that explains the issues related to linking between proprietary software and the GPL&#8217;d software (or, as they put it, &#8220;free&#8221; software, where &#8220;free&#8221; is as in &#8220;free speech&#8221;). For example, the answer to the question <a name="NFUseGPLPlugins" href="http://www.gnu.org/licenses/gpl-faq.html#NFUseGPLPlugins" target="_blank">Can I release a non-free program that&#8217;s designed to load a GPL-covered plug-in?</a><a name="NFUseGPLPlugins"> </a><a name="NFUseGPLPlugins">reads &#8220;<strong>&#8230;</strong></a><a name="NFUseGPLPlugins"><strong>In order to use the GPL-covered plug-ins, the main program must be released under the GPL or a GPL-compatible free software license&#8230;</strong>&#8220;</a></p>
<p>Huh? I could understand the requirement to GPL any code derived from a GPL&#8217;d code, it&#8217;s their code and they are free to restrict its re-use anyway they want, but to require two separate modules dynamically linking to each other to be covered by GPL if only one of them is GPL&#8217;d? It seems like asking a bit too much. Especially considering that GPL programs have no reservations about linking to proprietary software. Just take any software for Windows, GPL or not, it&#8217;s linking to the Microsoft&#8217;s proprietory system libraries. Looks like the <a href="http://www.gnu.org/philosophy/why-free.html" target="_blank">philosophy</a> of the &#8220;free software&#8221; is it&#8217;s OK to take advantage of the evil and dirty proprietory software, as long as it is not trying to link back to take some advantage of the GPL&#8217;d software.</p>
<p>Not fair!</p>
<p>Post from: <a href="http://www.softblog.com">softblog.com</a></p>
<p><a href="http://www.softblog.com/2008-09/intergating-gpl-and-proprietary-software/">Is GPL software free as in &#8220;free love&#8221;?</a></p>
<img src="http://feeds.feedburner.com/~r/softblog/~4/390174789" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softblog.com/2008-09/intergating-gpl-and-proprietary-software/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.softblog.com/2008-09/intergating-gpl-and-proprietary-software/</feedburner:origLink></item>
		<item>
		<title>Vista Elevator 2.0</title>
		<link>http://feeds.feedburner.com/~r/softblog/~3/347814388/</link>
		<comments>http://www.softblog.com/2008-07/vista-elevator2/#comments</comments>
		<pubDate>Sun, 27 Jul 2008 23:08:43 +0000</pubDate>
		<dc:creator>AB</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[vista elevator]]></category>

		<category><![CDATA[vista uac]]></category>

		<guid isPermaLink="false">http://www.softblog.com/?p=32</guid>
		<description><![CDATA[(This post is moved here from the TweakUAC web site, where it was first published on February 27, 2007)
Vista Elevator 2.0 is an updated version of the sample application Vista Elevator that uses a different approach to solving the problem of starting a non-elevated task from an elevated one.
The first version of Vista Elevator used [...]]]></description>
			<content:encoded><![CDATA[<p>(This post is moved here from the <a title="TweakUAC web site" href="http://www.tweak-uac.com/" target="_blank">TweakUAC</a> web site, where it was first published on February 27, 2007)</p>
<p>Vista Elevator 2.0 is an updated version of the sample application <a title="Vista Elevator v.1.0" href="http://www.codeproject.com/KB/vista-security/VistaElevator.aspx" target="_blank">Vista Elevator</a> that uses a different approach to solving the problem of starting a non-elevated task from an elevated one.</p>
<p>The first version of Vista Elevator used a trick that created a non-elevated process by programming Vista Task Scheduler to start such a process immediately upon its registration. It worked even if the parent process was elevated. However, there were a few problems with that:</p>
<ol>
<li>It worked well when the process was started by an administrator (that is, by an account with a “split token”). However, if the account was of a standard user (or a Guest account) it did not work as expected: the secondary non-elevated process was created by Task Scheduler to be executed in the administrator’s context, rather than in the original context of the standard user account. The task would launch not when it was registered, but later on, when the administrator logged on to the system.</li>
<li>The target machine could have Task Scheduler disabled. In such a case, this method would fail to start the secondary non-elevated task at all.</li>
</ol>
<p>To solve these problems, a different approach is necessary. An obvious method of achieving the goal would be to have a separate helper executable that would help the main application launch a non-elevated task, when necessary. Specifically, it would work as follows:</p>
<ol>
<li>When a user wants to run the application (main.exe), s/he would start by launching the helper executable (helper.exe) first.</li>
<li>The helper process would start non-elevated, but it would launch main.exe, and request it to start elevated (for example, by using the Run Elevated() function).</li>
<li>After the administrator would have approved the launch of main.exe, the user would work with it, as usual. Helper.exe would keep running non-elevated, waiting for a signal from main.exe.</li>
<li>When main.exe would need to start a non-elevated task, it would send a signal to helper.exe, using some sort of inter-process communication, and helper.exe would start a non-elevated process on main.exe’s behalf.</li>
</ol>
<p>Such an approach would solve both problems described above: it would not require Task Scheduler to be running on the target system, and it would launch the non-elevated task in the context of the original user, whether it is an administrator, a standard user, or a guest.</p>
<p>What is not good about this approach, it requires a separate helper process to be running all the time, wasting the CPU cycles. It also requires to design a communication protocol between the helper and the main executable, which is not a trivial task and is subject to errors. Wouldn’t it be better if we could use some other non-elevated process already running on the target system to launch a non-elevated process on the main.exe’s behalf? Let’s see… There actually is a process that is guaranteed to run all the time while the user is logged on to the system: the Windows shell! And it runs non-elevated, just what we need. Seems like a perfect candidate for our helper process. But how can we ask Windows shell to launch a process on our behalf? Simply calling ShellExecute() or Start Process() would not work, because they would be executed by our process, not by the shell. What we need to do is <em>inject</em> our code into the shell process and make it launch a process on our behalf!</p>
<p>So, the plan of the attack could be as follows:</p>
<ol>
<li>Our process would find a window that belongs to the shell, and that is guaranteed to be available at any time. A good window for this purpose is <strong>Progman</strong>, that is responsible for displaying the desktop. We can call the <strong>FindWindow()</strong> API to obtain a handle to this window.</li>
<li>Our process would call <strong>RegisterWindowsMessage()</strong> API to register a unique message that we would use to communicate with the shell’s window. It must be unique to avoid possible conflicts and side effects if we would have accidentally picked a message that is already used by the shell for some purpose.</li>
<li>Our elevated process would call <strong>SetWindowsHookEx()</strong> API to install a global hook, to be invoked when a windows message gets processed by any process running on the system.</li>
<li>Once the hook is installed we would send our unique message to the shell’s window, and that would make our hook procedure to get invoked. (That’s how we inject our code into the shell’s process!)</li>
<li>When the hook procedure is called (in the context of the shell process), it would call <strong>ShellExecute()</strong> API to launch the non-elevated process that we need. The process would start non-elevated because the shell’s process is not elevated, and our process would inherit the shell’s elevation level.</li>
<li>Finally, we would remove the hook, as we no longer need it and it should no longer be called and waste system resources and CPU cycles.</li>
</ol>
<p>That’s the plan that is implemented as the RunNonElevated() function in the <a href="/files/VistaTools.cxx">VistaTools.cxx</a> file that VistaElevator 2.0 uses. To make it work, the design of the VistaElevator application had to be changed significantly:</p>
<p>Firstly, in order to be able to install a global hook, the hook procedure must reside in a DLL. It means that we can no longer have a single executable, we must create a DLL to go with it, as well.</p>
<p>Secondly, in order to be able to pass data from our process to our code injected in the shell’s process, we must set up a special code section to be shared between several processes.</p>
<p>Finally, to be able to use this method with both 32-bit and 64-bit versions of Vista, we must produce two separate builds, one 32-bit and another one 64-bit. The reason for that is that on a 64-bit Vista the shell is a native 64-bit process, and in order to be able to hook it, we need to use 64-bit code, too.</p>
<p>To see the details, use the download links below:</p>
<p>THIS CODE AND INFORMATION IS PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.</p>
<p><a href="/files/VistaElevator2.zip">VistaElevator2.zip</a></p>
<p>(the compiled executables only, without the source code)</p>
<p><a href="/files/VistaElevator2-src.zip">VistaElevator2-src.zip</a></p>
<p>(the source code, a Visual Studio 2005 project)</p>
<p>Note: If you want to compile the source code on your own, make sure you have the latest Windows SDK (see msdn.microsoft.com for more information).</p>
<p>Post from: <a href="http://www.softblog.com">softblog.com</a></p>
<p><a href="http://www.softblog.com/2008-07/vista-elevator2/">Vista Elevator 2.0</a></p>
<img src="http://feeds.feedburner.com/~r/softblog/~4/347814388" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softblog.com/2008-07/vista-elevator2/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.softblog.com/2008-07/vista-elevator2/</feedburner:origLink></item>
		<item>
		<title>The first bug in Vista UAC?</title>
		<link>http://feeds.feedburner.com/~r/softblog/~3/347806058/</link>
		<comments>http://www.softblog.com/2008-07/the-first-bug-in-vista-uac/#comments</comments>
		<pubDate>Sun, 27 Jul 2008 22:51:52 +0000</pubDate>
		<dc:creator>AB</dc:creator>
		
		<category><![CDATA[Computers]]></category>

		<category><![CDATA[uac]]></category>

		<category><![CDATA[uac bug]]></category>

		<guid isPermaLink="false">http://www.softblog.com/?p=30</guid>
		<description><![CDATA[(This post is moved here from the TweakUAC web site, were it appeared first on January 1st, 2007).
I believe I&#8217;ve stumbled upon the first bug in Vista UAC (in the final release of Vista, not in a beta version).
It&#8217;s very easy to see the bug in action:

Login to your computer with the Guest account. (You [...]]]></description>
			<content:encoded><![CDATA[<p>(This post is moved here from the <a title="TweakUAC web site" href="http://www.tweak-uac.com/" target="_blank">TweakUAC</a> web site, were it appeared first on January 1st, 2007).</p>
<p>I believe I&#8217;ve stumbled upon the first bug in Vista <a href="/what-is-uac/">UAC</a> (in the final release of Vista, not in a beta version).</p>
<p>It&#8217;s very easy to see the bug in action:</p>
<ul>
<li>Login to your computer with the Guest account. (You may need to enable the Guest account first, using the Control Panel).</li>
<li>Download any digitally signed program (such as <a href="/download/">TweakUAC</a>), save it to the default download folder (C:\Users\Guest\Downloads).</li>
<li>Now run the file you’ve just downloaded, and take a look at the elevation prompt displayed:</li>
</ul>
<div style="text-align: center"><img src="http://www.softblog.com/files/UAC-bug.gif" alt="" /></div>
<p>As you can see, UAC cannot recognize that the file contains a valid digital signature, and it warns you that the program is “unidentified”. This is a bug, because you can check that the digital signature of the file is actually valid:</p>
<div style="text-align: center"><img src="http://www.softblog.com/files/UAC-bug-certificate.gif" alt="" /></div>
<p>This problem is not limited to the TweakUAC file, any other digitally signed executable (such as the installation utilities of most software packages) will produce the same effect. All you need to do to reproduce this bug is login to Vista with the Guest account and run a digitally signed file from the Guest\Downloads folder. Note that if you copy the executable into the C:\Program Files folder, and run the file from there, its digital signature would magically become recognizable by UAC! Move the file to the root folder C:\, and the file again becomes unidentified to UAC.</p>
<p>Is this bug dangerous? Yes, it is! The whole idea behind UAC is to shift the responsibility of distinguishing the bad programs from the good ones to the end user (you!). The only tool that UAC gives you in this regard is the digital signature information, and it turns out it’s broken! How are you supposed to make the decision whether to trust a certain program or not if UAC does not provide you with the correct information? (Nevermind, it’s a rhetorical question).</p>
<p>Andrei Belogortseff</p>
<p><a href="http://www.winability.com/" target="_blank">WinAbility Software Corp.</a></p>
<p>Comments:</p>
<h3 id="comments">21 Responses to “The first bug in Vista UAC?”</h3>
<ol class="commentlist">
<li id="comment-46" class="alt"> <cite><a rel="external nofollow" href="http://www.pagetable.com/">Myria</a></cite> Says:<br />
<small class="commentmetadata"><a href="#comment-46">February 17th, 2007 at 10:10 pm</a> </small></p>
<p>I believe that this is because there is an NTFS fork on the directory that says that anything in that directory shouldn’t be trusted.  This is similar to XP in how it knows that a file was downloaded recently by IE.</li>
<li id="comment-49"> <cite>Soumitra</cite> Says:<br />
<small class="commentmetadata"><a href="#comment-49">February 19th, 2007 at 6:06 pm</a> </small></p>
<p>Hi Andrei,</p>
<p>Have a quick question about TweakUAC. Can I suppress UAC messages only for a single application using TWeak? Or does it suppress all UAC messages, system wide?</p>
<p>Thanks.</p>
<p>Regards,</p>
<p>Soumitra</li>
<li id="comment-50" class="alt"><cite><a rel="external nofollow" href="http://www.winability.com">Andrei Belogortseff</a></cite> Says:
<p><small class="commentmetadata"><a href="#comment-50">February 20th, 2007 at 11:20 am</a> </small></p>
<p>Hi Soumitra,</p>
<p>&gt; Can I suppress UAC messages only for a single application using TWeak?</p>
<p>No, it’s impossible.</p>
<p>&gt; Or does it suppress all UAC messages, system wide?</p>
<p>Yes, that’s how it works.</p>
<p>Andrei.</li>
<li id="comment-51"> <cite><a rel="external nofollow" href="http://www.winability.com">Andrei Belogortseff</a></cite> Says:<br />
<small class="commentmetadata"><a href="#comment-51">February 20th, 2007 at 11:22 am</a> </small></p>
<p>Hi Myria,</p>
<p>&gt; I believe that this is because there is an NTFS fork on the directory that says that anything in that directory shouldn’t be trusted. This is similar to XP in how it knows that a file was downloaded recently by IE.</p>
<p>It may very well be so, but it does not make it any less of a bug. If a file contains a valid digital signature, Windows should not misrepresent it as coming from an unidentified publisher.</p>
<p>Andrei.</li>
<li id="comment-55" class="alt"> <cite>Chris</cite> Says:<br />
<small class="commentmetadata"><a href="#comment-55">February 26th, 2007 at 1:09 pm</a> </small></p>
<p>How did you take a screenshot of the UAC?  I can’t get Print Screen to copy it to the clipboard, and the snipping tool isn’t working either.</li>
<li id="comment-56"> <cite><a rel="external nofollow" href="http://www.winability.com">Andrei Belogortseff</a></cite> Says:<br />
<small class="commentmetadata"><a href="#comment-56">February 26th, 2007 at 9:55 pm</a> </small></p>
<p>Hi Chris,</p>
<p>&gt; How did you take a screenshot of the UAC? I can’t get Print Screen to copy it to the clipboard, and the snipping tool isn’t working either.</p>
<p>Those tools don’t work because UAC displays its messages on the secure desktop, to which the “normal” user tools have no access. To solve this problem, I’ve changed the local security policy to make the UAC prompts to appear on the user’s desktop.  After that, I used the regular Print Screen key to capture the screenshots.</p>
<p>Hope this helps,</p>
<p>Andrei.</li>
<li id="comment-60" class="alt"> <cite><a rel="external nofollow" href="http://www.softbyte.co.uk">Matthew Bragg</a></cite> Says:<br />
<small class="commentmetadata"><a href="#comment-60">March 4th, 2007 at 2:58 am</a> </small></p>
<p>Hi Andrei,</p>
<p>I sell software to a *very* non-technical customer base. My setup procedure includes installation of an .ocx file into the \windows\system32 folder and registration of it using regsvr32. In order to copy anything into the \windows\system32 folder under Vista I have to turn off UAC. I would like to be able to do this automatically, programmatically, so I don’t have to make my users mess with UAC. I’d like to be able to turn off UAC for a second or two programmatically, then turn it back on. Will your software enable me to do that?</p>
<p>Thanks</li>
<li id="comment-61"> <cite><a rel="external nofollow" href="http://www.winability.com">Andrei Belogortseff</a></cite> Says:<br />
<small class="commentmetadata"><a href="#comment-61">March 4th, 2007 at 11:42 am</a> </small></p>
<p>Hi Matthew,</p>
<p>&gt; I’d like to be able to turn off UAC for a second or two programmatically, then turn it back on.</p>
<p>Unfortunately it’s impossible: if you enable or disable the UAC, Windows must be restarted before the change would have take effect.</p>
<p>To solve your problem:</p>
<p>&gt; In order to copy anything into the \windows\system32 folder under Vista I have to turn off UAC.</p>
<p>It looks like your setup process is executing non-elevated, that’s why it cannot do that. You may want to try to start it elevated and see if it would have solved the problem without turning off the UAC.</p>
<p>HTH</p>
<p>Andrei.</li>
<li id="comment-142" class="alt"> <cite>caz</cite> Says:<br />
<small class="commentmetadata"><a href="#comment-142">March 25th, 2007 at 10:24 am</a> </small></p>
<p>don’t use TweakUAC because this program makes your Vista unsafe!</li>
<li id="comment-145"> <cite>Herbys</cite> Says:<br />
<small class="commentmetadata"><a href="#comment-145">March 29th, 2007 at 10:30 pm</a> </small></p>
<p>&gt; How are you supposed to make the decision whether to trust a certain program or not if UAC does not provide you with the correct information? (Nevermind, it’s a rhetorical question).</p>
<p>The answer is you are not. A guest should not be allowed to make any decision about installing software. If you log on as a valid user, the prompt works just fine. If you log on as a guest, you shouldn’t be installing software, so any dire warning is fine.</p>
<p>Yes, this might be unintended behavior (or perhaps it is not), but its impact is null.</li>
<li id="comment-146" class="alt"> <cite><a rel="external nofollow" href="http://www.winability.com">Andrei Belogortseff</a></cite> Says:<br />
<small class="commentmetadata"><a href="#comment-146">March 31st, 2007 at 4:47 pm</a> </small></p>
<p>Hi Herbys, you wrote:</p>
<p>&gt; The answer is you are not. A guest should not be allowed to make any decision about installing software.</p>
<p>Sorry, but you are missing the point: the UAC displays this information for the _administrator_ to use and to make a decision, not for the guest user. The administrator is supposed to review the information and enter his or her password to approve the action. Take a look at the screenshot and see for yourself.</p>
<p>&gt; If you log on as a guest, you shouldn’t be installing software</p>
<p>Why shouldn’t I? What if I want to install a program for use by the guests only? For example, I use only one web browser (IE), but I never know what browser a guest may want to use. So, being a good host <img class="wp-smiley" src="http://www.tweak-uac.com/wp-includes/images/smilies/icon_smile.gif" alt=":-)" /> I want to install also Firefox and Opera, but I don’t want them to clutter my desktop, etc., I want them to be used by the guests only. To achieve that, I would log in to the guest account and install the additional browsers from there.</p>
<p>&gt; so any dire warning is fine.</p>
<p>Wrong.</p>
<p>&gt; Yes, this might be unintended behavior (or perhaps it is not), but its impact is null.</p>
<p>May be, may be not. In any case, it does not make it any less of a bug!</li>
<li id="comment-148"> <cite><a rel="external nofollow" href="http://www.vjgamer.com/">Timothy Conner</a></cite> Says:<br />
<small class="commentmetadata"><a href="#comment-148">April 10th, 2007 at 9:28 pm</a> </small></p>
<p>Is there any plan to adapt your program into a Control Panel Applet? I think that would be very clever.</li>
<li id="comment-149" class="alt"> <cite><a rel="external nofollow" href="http://www.winability.com">Andrei Belogortseff</a></cite> Says:<br />
<small class="commentmetadata"><a href="#comment-149">April 11th, 2007 at 9:07 am</a> </small></p>
<p>Hi Timothy, you wrote:</p>
<p>&gt; Is there any plan to adapt your program into a Control Panel Applet?</p>
<p>No, we don’t have such plans at this time, sorry.</li>
<li id="comment-160"> <cite>Mike</cite> Says:<br />
<small class="commentmetadata"><a href="#comment-160">June 18th, 2007 at 9:19 pm</a> </small></p>
<p>Anyone know why Vista won’t let me rename any new folder?</p>
<p>The permissions are all checked for me as administrator, still I get an error message, “folder does not exist”.  I can put things in folder and move it, but can’t rename it?</li>
<li id="comment-190" class="alt"> <cite>Bob</cite> Says:<br />
<small class="commentmetadata"><a href="#comment-190">January 29th, 2008 at 9:46 am</a> </small></p>
<p>To be honest, I have always thought that digitally signing was merely a way of generating more revenue.  It doesn’t offer you any more security and windows will always moan at you regardless of an application having a signature or not.</p>
<p>Even if your application has the “all powerful” and completely unnecessary Windows Logo certification, it still offers nothing to you as a user other than the reassurance that the person/s developing the software has allot of spare cash.</li>
<li id="comment-195"> <cite>Thomas</cite> Says:<br />
<small class="commentmetadata"><a href="#comment-195">February 24th, 2008 at 10:34 am</a> </small></p>
<p>Bob Said:</p>
<p>&gt; To be honest, I have always thought that digitally signing was merely a way of generating more revenue.</p>
<p>I have to agree. I’ve heard the argument of how it’s all designed to protect users from malicious software, and that’s all well and good as far as that goes — but since Vista, and most mobile OSes, don’t offer a way for users to say “okay, I understand the risk, I accept full responsibility, please go ahead and run this unsigned application without restrictions, and never bother me again when I try to run this application”… That makes it pretty clear it’s just a racket initiated by VeriSign and the like, and happily endorsed by Microsoft.</li>
<li id="comment-198" class="alt"> <cite>Andrew</cite> Says:<br />
<small class="commentmetadata"><a href="#comment-198">May 17th, 2008 at 9:03 am</a> </small></p>
<p>This is not a bug.</p>
<p>The first screen shot shows that Windows doesn’t trust the identity contained in the certificate.  In other words, “I can read this, but I don’t know if I should trust the person who wrote it.”</p>
<p>The second screen shot just shows that the certificate is well-formed, that Windows can understand the information contained within it.  It says nothing about what Windows will do with that information.</p>
<p>Who did you did you pay to sign the certificate for you?  If they’re not someone with a well-established reputation, then I don’t WANT my computer to automatically trust them.</p>
<p>It’s just like how web browsers automatically trust SSL certificates signed by Thawte or Verisign, but will ask you before accepting a certificate from Andy’s Shady Overnight Certificate Company.  As always, it’s a balancing act between usability and security.</li>
<li id="comment-199"> <cite><a rel="external nofollow" href="http://www.winability.com">Andrei Belogortseff</a></cite> Says:<br />
<small class="commentmetadata"><a href="#comment-199">May 17th, 2008 at 10:04 am</a> </small></p>
<p>Andrew,  you wrote:</p>
<p>&gt; This is not a bug.</p>
<p>OK, there is a fine line between a bug and a feature, let’s assume for a moment that it’s a feature rather than a bug. If so, what benefit is this feature supposed to provide? As the second screen shows, the file is digitally signed, and Vista can detect that. Yet, it shows the publisher as “unidentified” on the first screen. Note also (as I mentioned in the post), that if you move the file to one a few specific folders (such as C:/Program files), Vista would magically begin to recognize the publisher. Move the file to some other folder, and it’s unidentified again.</p>
<p>If you can explain why they designed it that way, I would agree with you. Until then, it’s a bug. Guilty until proven innocent!</p>
<p>&gt; Who did you pay to sign the certificate for you?</p>
<p>That particular file was signed with a Verisign certificate, but the same problem occurs with _any_ file, signed with _any_ certificate. Try it yourself and you will see.</li>
<li id="comment-201" class="alt"> <cite>Farthen</cite> Says:<br />
<small class="commentmetadata"><a href="#comment-201">June 1st, 2008 at 12:53 pm</a> </small></p>
<p>I  think that it occurs because of IE7 protected mode - see <a rel="nofollow" href="http://victor-youngun.blogspot.com/2008/03/internet-explorer-7-protected-mode-vs.html,">http://victor-youngun.blogspot.com/2008/03/internet-explorer-7-protected-mode-vs.html,</a> it’s a guide to run firefox in protected mode, and this explains very good how the protected mode works… the prompt is because the “Download” Folder is a protected folder (level “low”) and I think it only displays at the guest, because Windows forces UAC to display certificate in normal user mode in “low” level folders, but NOT for the MUCH MORE RESTRICTED “guest” account. This would be my explanaition.</p>
<p>It doesn’t mean that I like it how Microsoft handels this but this would eventually explain WHY the warning appears sometimes and sometimes not.</li>
<li id="comment-202"> <cite>Farthen</cite> Says:<br />
<small class="commentmetadata"><a href="#comment-202">June 1st, 2008 at 12:55 pm</a> </small></p>
<p>sorry, in my last post there is a comma in the link, the correct link is:</p>
<p><a rel="nofollow" href="http://victor-youngun.blogspot.com/2008/03/internet-explorer-7-protected-mode-vs.html">http://victor-youngun.blogspot.com/2008/03/internet-explorer-7-protected-mode-vs.html</a></li>
<li id="comment-205" class="alt"> <cite><a rel="external nofollow" href="http://www.winability.com">Andrei Belogortseff</a></cite> Says:<br />
<small class="commentmetadata"><a href="#comment-205">June 3rd, 2008 at 7:16 pm</a> </small></p>
<p>Farthen: thank you for the information and explanation!</li>
</ol>
<p>Post from: <a href="http://www.softblog.com">softblog.com</a></p>
<p><a href="http://www.softblog.com/2008-07/the-first-bug-in-vista-uac/">The first bug in Vista UAC?</a></p>
<img src="http://feeds.feedburner.com/~r/softblog/~4/347806058" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softblog.com/2008-07/the-first-bug-in-vista-uac/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.softblog.com/2008-07/the-first-bug-in-vista-uac/</feedburner:origLink></item>
		<item>
		<title>A book review: “Conversation Marketing” by Ian Lurie</title>
		<link>http://feeds.feedburner.com/~r/softblog/~3/344792416/</link>
		<comments>http://www.softblog.com/2008-07/book-review-conversition-marketing/#comments</comments>
		<pubDate>Thu, 24 Jul 2008 17:09:27 +0000</pubDate>
		<dc:creator>AB</dc:creator>
		
		<category><![CDATA[Marketing]]></category>

		<category><![CDATA[conversation marketing]]></category>

		<category><![CDATA[internet marketing]]></category>

		<guid isPermaLink="false">http://www.softblog.com/?p=28</guid>
		<description><![CDATA[Summary: If you are a small business owner who&#8217;s got a web site, but is unsure what to do next,  where to invest your hard earned money to make the web site actually work for your business, this book will serve you well as a good introduction into the Internet marketing.
Although anyone can read this [...]]]></description>
			<content:encoded><![CDATA[<p>Summary: If you are a small business owner who&#8217;s got a web site, but is unsure what to do next,  where to invest your hard earned money to make the web site actually work for your business, this book will serve you well as a good introduction into the Internet marketing.</p>
<p>Although anyone can <a title="Online version of the Conversation Marketing book" href="http://www.conversationmarketing.com/cmonline/intro.cfm" target="_blank">read this book online</a> for free, I&#8217;ve ordered a paper version of it about a year ago, after seeing it mentioned by Bob Walsh in his <a title="The blog of Bob Walsh" href="http://www.47hats.com/" target="_blank">blog</a>. I was not in the marketing mood, and I did not read it  then. These days, I&#8217;m getting closer to releasing a new software product (stay tuned for the big announcement here, any day now :-) ), and I&#8217;m preparing myself to switching from the programming to the marketing mode for some time, so I decided it was time to read it now. I&#8217;m not a novice in the Internet matters (I created the first web site for my business back in 1994, before Google, Yahoo!, and MSN even existed), still I found this book of a good value.</p>
<p>Not that it took too long to read the book: it&#8217;s only 93 pages, including the Table of Contents and Acknowledgments. That was my first suprise when I got the book, &#8220;Can a book this thin be any good?&#8221;. It was, although not without some shortcomings. The biggest of which were rather awkward analogies used throughout the book. For example, the book begins with a description of an imaginary Farmer&#8217;s Market that is neat, shiny, visited by a lot of people, but that happens not to have any lettuce on its shelves. This analogy is used to illustrate a poorly designed web site, that does not do a good job of delivering what the visitors are looking for. To me, the analogy is poor: the problem of the missing lettuce was probably caused by a one-time misjudgement of the market&#8217;s management, and is easily fixed (by ordering the lettuce!). Problems with web site design and navigation are not so easy to correct.</p>
<p>Another example of a poor analogy is further in the book, when the author explains that you must use a double-opt-in method of subscribing people to your email list. &#8220;Don&#8217;t sign them up and then ask to unsubscribe!&#8221;, writes the author, &#8220;That&#8217;s just rude, like eating the last piece of cake and then asking if anyone wants it&#8221;. Sure, eating the last piece of cake is rude, but it does not illustrate the rudeness of the subscribing to an email list without asking for the permission first. A better analogy, IMHO, would be, for example,  a situation when you are standing on a bus stop, waiting for your bus, and a taxi driver would suddenly stop by you, push you into the car, and start driving, yelling &#8220;I&#8217;ll take you whenever you want to go, if you don&#8217;t want that, I can drop you off on the next corner!&#8221;. Now that&#8217;s what&#8217;s getting on an unwanted email list feels like, if you ask me.</p>
<p>Anyway, those are minor things, which fortunately did not diminish the good value of the book itself for me. What I really liked about the book is the practical advice the author has given, taking an imaginary small business as a case study. Too many books on the Internet marketing give a too abstract advice, that&#8217;s difficult to apply to the reality. &#8220;Choose the right keyphrases&#8221;, &#8220;implement good site navigation&#8221;, &#8220;start a blog&#8221;, all that sounds well in theory, but when it comes down to the reality, the question &#8220;how do I apply that to my particular situation, to my specific business?&#8221; often remains hard to answer. What the author of &#8220;Conversation marketing&#8221; did, he illustrated the advice he was giving by applying it to the specific situation of a specific small business, step by step, taking it from a regular &#8220;brick and walls&#8221; business to a business with strong Internet presence, and solid Internet strategy for the future.</p>
<p>The author does not go into the technical details too deeply, and that&#8217;s probably why the book turned out so thin in the end. But that&#8217;s a good thing, in my opinion: you don&#8217;t need to allocate a lot of time for reading it, just a few hours would be enough. Of course, when you start applying the advice to your own business and web site, you will want to revisit the pages, to make sure you&#8217;re not missing anything.</p>
<p>To summarize, if you are looking for a good review of the current state of the art and practical advice on doing business on the Internet, get this book. (Just ignore the analogies it has or come up with your own :-) )</p>
<p>Post from: <a href="http://www.softblog.com">softblog.com</a></p>
<p><a href="http://www.softblog.com/2008-07/book-review-conversition-marketing/">A book review: &#8220;Conversation Marketing&#8221; by Ian Lurie</a></p>
<img src="http://feeds.feedburner.com/~r/softblog/~4/344792416" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softblog.com/2008-07/book-review-conversition-marketing/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.softblog.com/2008-07/book-review-conversition-marketing/</feedburner:origLink></item>
		<item>
		<title>Quick and dirty way of cleaning the Windows icon cache</title>
		<link>http://feeds.feedburner.com/~r/softblog/~3/314286836/</link>
		<comments>http://www.softblog.com/2008-06/cleaning-icon-cache/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 03:07:01 +0000</pubDate>
		<dc:creator>AB</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[icon cache]]></category>

		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.softblog.com/2008-06/cleaning-icon-cache/</guid>
		<description><![CDATA[When developing my software, sometimes I need to try a few changes to the application icon, to see which image looks better. Unfortunately, replacing the icon within the application file does not make Windows recognize the new icon when displaying a shortcut to the file: it displays the old icon no matter what: pressing the [...]]]></description>
			<content:encoded><![CDATA[<p>When developing my software, sometimes I need to try a few changes to the application icon, to see which image looks better. Unfortunately, replacing the icon within the application file does not make Windows recognize the new icon when displaying a shortcut to the file: it displays the old icon no matter what: pressing the F5 key to refresh the desktop, using the shortcut Properties window to force it to use the new icon, nothing has an effect.</p>
<p>The problem, of course, is the <em>icon cache</em>: turns out that Windows keeps each icon in its memory (the icon cache), and when  it needs to draw the icon, it uses the copy from the cache rather than retrieving the icon image from the original application file. It makes Windows draw the icons faster, but the negative side effect is the inability of Windows to detect the change of the icon.</p>
<p>The naïve approach to this problem seems to be to delete the icon cache,  and thus force Windows to recreate it from scratch. Browsing the user profile folder (such as <em>C:\Users\Username</em> on Vista, or <em>C:\Documents and Settings\Username </em>on XP) reveals the file named suspiciously <em>IconCache.db </em>(located in the subfolder <em>AppData/Local </em>on Vista or  <em>Local Settings\Application Data</em> on XP. Note that this file usually has the SYSTEM and HIDDEN attributes, so you may need to change your Windows folder settings to see this file). However, deleting this file causes no effect: Windows keeps displaying the old icon. (Which is not very surprising, because the very fact that Windows did not stop us from deleting this file kind of tells us that the file was not in use by Windows). Even restarting the computer does not help: Windows simply recreates the <em>IconCache.db </em>file with the old icon in it, and keeps displaying the old icon!</p>
<p>Nevertheless, it is possible to delete the icon cache and force Windows to rebuild it. Turns out, Windows recreates the  <em>IconCache.db </em>file when the user logs off from his or her account. When the user logs back on, Windows loads the <em>IconCache.db</em> file back intro its memory. This gives us the idea when could be the proper time to delete the <em>IconCache.db</em> file: when the user is logged off. But how to delete the file if the user is not logged on and there is no way to start Windows Explorer or some other file management tool (such as my <a href="http://www.WinAbility.com/abcommander/" title="Link to the AB Commander web page" target="_blank">AB Commander</a>, sorry for the plug, couldn&#8217;t resist :-) ) Easy: log in to another user account (such as the administrator&#8217;s one) and delete the <em>IconCache.db</em> file that exists in your own profile (you do use separate accounts for the day-to-day work and for the administrative tasks, do you?) Another way is to log off from your account and then connect to your computer from another computer on your LAN (you do have both a desktop and a laptop, do you? And they can talk to each other over the local network, can they? If not, what are you doing reading this blog? Just kidding&#8230;) Anyway, from another networked computer navigate to your profile over the network, delete <em>IconCache.db</em>, then go back to the first computer and log back into  your account. This time Windows will recreate its cache and start displaying the new icon.</p>
<p>Post from: <a href="http://www.softblog.com">softblog.com</a></p>
<p><a href="http://www.softblog.com/2008-06/cleaning-icon-cache/">Quick and dirty way of cleaning the Windows icon cache</a></p>
<img src="http://feeds.feedburner.com/~r/softblog/~4/314286836" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softblog.com/2008-06/cleaning-icon-cache/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.softblog.com/2008-06/cleaning-icon-cache/</feedburner:origLink></item>
		<item>
		<title>Making Vista play nice with XP on a network</title>
		<link>http://feeds.feedburner.com/~r/softblog/~3/301951515/</link>
		<comments>http://www.softblog.com/2008-05/making-vista-play-nice-with-xp-on-a-network/#comments</comments>
		<pubDate>Sat, 31 May 2008 17:35:07 +0000</pubDate>
		<dc:creator>AB</dc:creator>
		
		<category><![CDATA[Computers]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[connectivity]]></category>

		<category><![CDATA[network]]></category>

		<category><![CDATA[problem]]></category>

		<category><![CDATA[troubleshooting]]></category>

		<category><![CDATA[vista]]></category>

		<guid isPermaLink="false">http://www.softblog.com/2008-05/making-vista-play-nice-with-xp-on-a-network/</guid>
		<description><![CDATA[While testing my software for compatibility with Windows Vista during the last couple of years I&#8217;ve noticed that Vista often does not want to play nice with other computers on my LAN. If there are only XP computers connected, everything was fine: they could see each other, I could move files between their shared folders, [...]]]></description>
			<content:encoded><![CDATA[<p>While testing my software for compatibility with Windows Vista during the last couple of years I&#8217;ve noticed that Vista often does not want to play nice with other computers on my LAN. If there are only XP computers connected, everything was fine: they could see each other, I could move files between their shared folders, etc., no problems. However, should I start a computer with Windows Vista on it, more often than not that computer would not connect to others. When that happened in the past, I usually was in the middle of some other work that I did not want to interrupt,  so I would just move the files using a USB flash drive and be done with it.  When it happened yesterday, however, I was fed up with it and decided to get to the root of the problem.</p>
<p>The problem was, when I opened the Network folder on the Vista computer, I could see all other computers on the same LAN, as it was supposed to be. However, an attempt to open any of them would either present me with a login box (and no user name and password I tried would let me connect to that computer), or an error message would appear saying &#8220;Windows cannot access \\DEV. Check the spelling of the name&#8230;&#8221;, (where DEV is another computer on the LAN running XP) with the error code 0&#215;80070035 &#8220;The network path was not found&#8221;. Pressing the Diagnose  button would result in the message &#8220;DEV is not a valid host name&#8221;. Which kind of did not make sense because DEV did show up in the Network folder.</p>
<p>I&#8217;ve spent a couple of hours googling around  and trying every troubleshooting suggestion I could find, like:</p>
<ul>
<li>Is the name of the workroup correct?</li>
<li>If Network discovery and File sharing enabled?</li>
<li>Is there something to share from the Vista computer (like a folder on its hard drive)?</li>
<li>Does turning the firewall temporarily off make a difference?</li>
<li>Does  rebooting the Vista computer help?</li>
</ul>
<p>Nothing helped, the Vista computer could not connect to others. After googling some  more, I&#8217;ve found the <a href="http://www.linux-watch.com/news/NS4434907782.html" target="_blank">solution</a>. (Ironically, it&#8217;s a suggestion for the  Linux users, but it worked for me, too):</p>
<ol>
<li>Open the Local Security Policy console (it&#8217;s on the Start - Administrative Tools menu)</li>
<li>Navigate to  Local Policy - Security Options</li>
<li>Locate the entry named &#8220;Network security: LAN Manager authentication level&#8221;</li>
<li>Change the value to &#8220;Send LM and NTLM responses&#8221;</li>
</ol>
<p>After I did that, the Vista computer magically started to recognize the presence of other computers and connect to them, just like XP computers always did.</p>
<p>What exactly did the policy change do? It allowed Vista to use a less strong network <a href="http://support.microsoft.com/kb/147706" target="_blank">authentication protocol</a>. Why was it necessary? Apparently, my router (Buffalo AirStation) that runs a variation of Linux, does not provide full support for the NTLM  authentication. It is it dangerous to  allow the LM responses? It would be dangerous if I allowed unknown persons to plug into my LAN and eavesdrop on the traffic (by doing that they could recover my Windows password), but no one but me is connecting to my LAN. I have to make a note to myself: when I upgrade the router, I need to try to turn off the LM responses on all computers and see if my network would work OK.</p>
<p>Hope this helps someone.</p>
<p>Update: (September 8, 2008)</p>
<p>If you have one of the Home editions of Vista that doesn&#8217;t come with the Local Security Policy tool, you can change this policy manually with the Registry Editor: navigate to the key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa, and set the REG_DWORD value named <strong>LmCompatibilityLevel</strong> to <strong>0</strong>. This is equivalent to setting the &#8220;Send LM and NTLM responses&#8221; value as described above.</p>
<p>Post from: <a href="http://www.softblog.com">softblog.com</a></p>
<p><a href="http://www.softblog.com/2008-05/making-vista-play-nice-with-xp-on-a-network/">Making Vista play nice with XP on a network</a></p>
<img src="http://feeds.feedburner.com/~r/softblog/~4/301951515" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softblog.com/2008-05/making-vista-play-nice-with-xp-on-a-network/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.softblog.com/2008-05/making-vista-play-nice-with-xp-on-a-network/</feedburner:origLink></item>
		<item>
		<title>How to create a shared clipboard and copy and paste text between computers with ease</title>
		<link>http://feeds.feedburner.com/~r/softblog/~3/280958199/</link>
		<comments>http://www.softblog.com/2008-04/how-to-create-a-shared-clipboard-and-copy-and-paste-text-between-computers-with-ease/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 18:24:04 +0000</pubDate>
		<dc:creator>AB</dc:creator>
		
		<category><![CDATA[Computers]]></category>

		<category><![CDATA[Productivity]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[autohotkey]]></category>

		<category><![CDATA[shared clipboard]]></category>

		<guid isPermaLink="false">http://www.softblog.com/2008-04/how-to-create-a-shared-clipboard-and-copy-and-paste-text-between-computers-with-ease/</guid>
		<description><![CDATA[(It&#8217;s been a very busy time here lately: the taxes, a new product that&#8217;s almost done, but just can&#8217;t quite get finished, and as a result, no spare time for this blog of mine. Dear Subscribers (both of you), I&#8217;m very sorry, please don&#8217;t give up on me, I&#8217;ll try to post more often here [...]]]></description>
			<content:encoded><![CDATA[<p>(It&#8217;s been a very busy time here lately: the taxes, a new product that&#8217;s almost done, but just can&#8217;t quite get finished, and as a result, no spare time for this blog of mine. Dear Subscribers (both of you), I&#8217;m very sorry, please don&#8217;t give up on me, I&#8217;ll try to post more often here in the future. OK, I want to finish my new product first, and <em>then</em> I&#8217;ll try to post more often. I promise :-) ).</p>
<p>Anyway,  today I&#8217;ll write about a neat way of creating a &#8220;shared&#8221; clipboard on your LAN, to be able to quickly send pieces of text between computers just as easily as pressing Ctrl+C and Ctrl+V.</p>
<p>Not sure what I mean? Suppose you have several computers connected into a LAN, and you need to copy some text on one computer and paste into another, how would you do it? For instance, most of the time I browse the Internet with my laptop. If I encounter a download link to an interesting program, I want to try it, but I don&#8217;t want to install it on the laptop itself (I&#8217;m very selective about what gets installed where), I want to download it to my test computer and try it out there first. So I need to copy the web address from the web browser running on the laptop, and paste that address into the web browser running on the test computer. If it were the same computer, the procedure would be extremely easy: Ctrl+C, then Ctrl+V, and that&#8217;s all. But if I do Ctrl+C on one computer and then Ctrl+V on another one, it does not work the way I want, because the second computer has its own clipboard, independent of the clipboard the first computer has.</p>
<p>To solve this problem, I need to create a &#8220;shared&#8221; clipboard. In the past I used a little utility called Netclip, that did that for me:  it used a shared folder as the storage for the shared clipboard, and whenever I wanted to copy something across the network, I would press Ctrl+Alt+C, to copy, and then moved to the second computer, pressed Ctrl+Alt+V there, and that would paste the result there.  It worked well for years, but then Vista came along, and Netclip stopped working with it (and it did not seem like the Netclip developers were around anymore to release a new Vista-compatible version). So I started searching for a replacement, and tried a few other similar utilities, claiming the ability to share the clipboard between several computers. Unfortunately, none of them worked well.</p>
<p>Finally, some time ago I encountered a free tool called <a href="http://www.autohotkey.com" title="AutoHotkey web site" target="_blank">AutoHotkey</a> (it&#8217;s a pity I did not discover it earlier, it would have saved me quite a lot of keystokes). In a nutshell, Aut0Hotkey enables you to create scripts to be executed when certain keys are pressed.  There are plenty of examples at their web site of the scripts doing a lot of different things, check it out!</p>
<p>One of the first things I tried with AutoHotkey was to write a script that would emulate the functionality of the Netclip utility.The idea was as follows: I would set up a shared folder on one my computers that is turned on most of the time.  Then I would set up two hot keys, one (Win+C) to copy whatever was currently selected to a file located in the shared folder, and the second key (Win+V) to read information from that file, and paste it into the clipboard.</p>
<p>After looking into the sample AutoHotkey scripts, I came up with the following script to emulate Netclip:</p>
<pre>
--- begin netclip.ahk ----

path := "\\your_computer\your_shared_folder\netclip.txt"</pre>
<pre>#C:: ; Win+C

AutoTrim Off  ; Retain any leading and trailing whitespace on the clipboard.

FileDelete, %path%</pre>
<pre>if (ErrorLevel &gt; 0 ) ; could not delete the file
{
 MsgBox FileDelete failed for %path%
 return
}

Send ^c	; copy whatever it is to the clipboard</pre>
<pre>FileAppend, %ClipboardAll%, %path%

if (ErrorLevel &gt; 0 ) ; could not write the file
{
 MsgBox FileAppend failed for %path%
 return
}
return

#V::	; Win+V

FileRead, Clipboard, *c %path%

if (ErrorLevel &gt; 0 ) ; could not read the file
{
 MsgBox FileRead failed for %path%
 return
}

Send ^v	; paste whatever it is from the clipboard</pre>
<pre>return

--- end netclip.ahk ----</pre>
<p>To use this script, copy the code between the dashed lines and save it to a text file named netclip.ahk (or whatever  you want to name it, but keep its extension .ahk). The only thing that you need to modify in the script is the variable <em>path</em> that contains the location of the shared file to be used for the storage, at the very top of the script. Make sure the shared folder you use for storage is writable from other computers on your LAN.</p>
<p>If you have not done it yet, install AutoHotkey on each computer,  and copy the script to each computer, too  (or put it into the shared folder itself). Create a shortcut to the script, and use it whenever you want to activate the shared clipboard.  If you want it to be always active, add the shortcut to your Programs - Startup folder.<br />
Now, whenever you want to copy some text to the shared clipboard, select it just as you would for the regular copy, but instead of Ctrl+C press Win+C. To paste it into another computer, go to that computer and instead of the usual Ctrt+V press Win+V. Yes, it&#8217;s that easy :-)</p>
<p>It works well for me, I hope it will work just as well for you, too. Happy copy-pasting, bye till next time. I&#8217;m off to finish my new product (stay tuned!).</p>
<p>Post from: <a href="http://www.softblog.com">softblog.com</a></p>
<p><a href="http://www.softblog.com/2008-04/how-to-create-a-shared-clipboard-and-copy-and-paste-text-between-computers-with-ease/">How to create a shared clipboard and copy and paste text between computers with ease</a></p>
<img src="http://feeds.feedburner.com/~r/softblog/~4/280958199" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softblog.com/2008-04/how-to-create-a-shared-clipboard-and-copy-and-paste-text-between-computers-with-ease/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.softblog.com/2008-04/how-to-create-a-shared-clipboard-and-copy-and-paste-text-between-computers-with-ease/</feedburner:origLink></item>
		<item>
		<title>Giving Mint.com a try</title>
		<link>http://feeds.feedburner.com/~r/softblog/~3/252656466/</link>
		<comments>http://www.softblog.com/2008-03/giving-mintcom-a-try/#comments</comments>
		<pubDate>Sun, 16 Mar 2008 23:01:43 +0000</pubDate>
		<dc:creator>AB</dc:creator>
		
		<category><![CDATA[Productivity]]></category>

		<category><![CDATA[mint.com]]></category>

		<guid isPermaLink="false">http://www.softblog.com/2008-03/giving-mintcom-a-try/</guid>
		<description><![CDATA[One thing that is always scarce when running a small business is time. I&#8217;ve been constantly looking for tools and services that can automate some of the routine tasks I do, hoping that they would save me some extra time to spend on the more interesting activities. A few months ago I learned about one [...]]]></description>
			<content:encoded><![CDATA[<p>One thing that is always scarce when running a small business is <em>time</em>. I&#8217;ve been constantly looking for tools and services that can automate some of the routine tasks I do, hoping that they would save me some extra time to spend on the more interesting activities. A few months ago I learned about one such service: <a href="http://www.mint.com" title="Mint.com" target="_blank">Mint.com</a>. The idea sounded quite interesting: you give it the login details to your online credit card and bank accounts, and it would keep track of them, giving you the high-level overviews, notifications of various events (such as when new bills become available), etc. Although it seemed somewhat risky to give a third party online service the login details to my financial accounts, the promise of the potential savings in time seemed significant enough, so I decided to give it a try.</p>
<p>The service was (and still is as of this writing) in a beta phase, so I expected a few hiccups now and then. To my surprise,the setup went rather smooth: after providing my login details to various bank and credit card accounts, Mint.com downloaded the transaction history for those accounts, and I could see my financial picture in one place. I liked it! When a new credit card bill became available, Mint.com would display a notification both on the online dashboard, and it would also send me an email message. That was the most useful feature of Mint.com for me, that would allow me to free myself from the regular routine of going through the bills every few days and checking their due dates. With Mint.com, I could just wait for an email notification to arrive, and when it did, I would open that online account directly, paid the bill, and forget about it till the next notification.</p>
<p>Well, a few minor hiccups did happen during the few months I was trying it. For example, it was supposed to automatically download the new transactions from my accounts at least once a day, but sometimes it would not update the history for 3 or 4 days. That was easy to fix by pressing the Update button on the Mint.com dashboard and force it to download the latest transactions. Sometimes it would characterize the transactions inaccurately (for example, it described payments for the web hosting service as travel expense). However, those were the minor things, and the primary function of Mint.com that I liked the most (keeping track of the credit card bills) seemed to work well.</p>
<p>Until last week.</p>
<p>Two new credit card bills arrived a few days ago and I was unpleasantly surprised to see the LATE FEE lines on each of them. Turns out Mint.com did not send me any notifications about them, even though I checked its dashboard almost daily. Now I&#8217;m stuck with two missed credit payments. Sigh&#8230;</p>
<p>I guess, the moral of this story is, I should not had trusted such an important procedure as keeping track of the credit card bills to a service in beta. For now, I&#8217;m going to close my Mint.com account, and set up the email notifications with each credit card company directly. Maybe I&#8217;ll give Mint.com another try when they end the beta period and start doing business &#8220;for real&#8221;.</p>
<p>I hope this story will help someone be more careful when trusting credit card bill payments to the third-party services.</p>
<p>Post from: <a href="http://www.softblog.com">softblog.com</a></p>
<p><a href="http://www.softblog.com/2008-03/giving-mintcom-a-try/">Giving Mint.com a try</a></p>
<img src="http://feeds.feedburner.com/~r/softblog/~4/252656466" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softblog.com/2008-03/giving-mintcom-a-try/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.softblog.com/2008-03/giving-mintcom-a-try/</feedburner:origLink></item>
		<item>
		<title>Vista tools</title>
		<link>http://feeds.feedburner.com/~r/softblog/~3/240462080/</link>
		<comments>http://www.softblog.com/2008-02/vista-tools/#comments</comments>
		<pubDate>Sun, 24 Feb 2008 18:19:23 +0000</pubDate>
		<dc:creator>AB</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[api]]></category>

		<category><![CDATA[asInvoker]]></category>

		<category><![CDATA[c++]]></category>

		<category><![CDATA[elevation]]></category>

		<category><![CDATA[process]]></category>

		<category><![CDATA[requireAdministrator]]></category>

		<category><![CDATA[runas]]></category>

		<category><![CDATA[TokenElevation]]></category>

		<category><![CDATA[TokenElevationType]]></category>

		<category><![CDATA[uac]]></category>

		<category><![CDATA[vista]]></category>

		<guid isPermaLink="false">http://www.softblog.com/2008-02/vista-tools/</guid>
		<description><![CDATA[(This article was originally published at the TweakUAC site.)
Version 2.1 (Updated 2008-Feb-24)
While porting our applications to Windows Vista, we had to overcome quite a few challenges related to the new security features of Vista (such as the User Account Control). We decided to make public several functions we&#8217;ve developed, to make it easier for other [...]]]></description>
			<content:encoded><![CDATA[<p>(This article was originally published at the <a href="http://www.tweak-uac.com/" target="_blank">TweakUAC</a> site.)</p>
<p>Version 2.1 (Updated 2008-Feb-24)</p>
<p>While porting <a href="http://www.winability.com/" target="_blank">our applications</a> to Windows Vista, we had to overcome quite a few challenges related to the new security features of Vista (such as the <a href="http://www.tweak-uac.com/what-is-uac/" target="_blank">User Account Control</a>). We decided to make public several functions we&#8217;ve developed, to make it easier for other developers to solve such problems, too.</p>
<p>The functions we&#8217;ve developed are written in C++ (using Microsoft Visual Studio 2005), and packaged in the file <a href="http://www.softblog.com/files/VistaTools.cxx" target="_blank">VistaTools.cxx</a>. Please note:</p>
<p>THIS CODE AND INFORMATION IS PROVIDED &#8220;AS IS&#8221; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.</p>
<p>TERMS OF USE: You are free to use this file in any way you like, for both the commercial and non-commercial purposes, royalty-free, AS LONG AS you agree with the warranty disclaimer above, EXCEPT that you may not remove or modify the warranty statement and the copyright notice the file contains.</p>
<p>The file VistaTools.cxx contains the following functions:</p>
<p><strong>BOOL IsVista();</strong></p>
<blockquote><p>Use IsVista() to determine whether the current process is running under Windows Vista (or a later version of Windows, whatever it will be).</p></blockquote>
<p>Return Values:</p>
<blockquote><p>If the function succeeds, and the current version of Windows is Vista or later, the return value is TRUE.</p></blockquote>
<blockquote><p>If the function fails, or if the current version of Windows is older than Vista (that is, if it is Windows XP, Windows 2000, Windows Server 2003, Windows 98, etc.) the return value is FALSE.</p></blockquote>
<p><strong>BOOL IsWow64();</strong></p>
<blockquote><p>Use IsWow64() to determine whether the current 32-bit process is running under 64-bit Windows (Vista or XP).</p></blockquote>
<p>Return Values:</p>
<blockquote><p>If the function succeeds, and the current version of Windows is x64, the return value is TRUE.</p>
<p>If the function fails, or if the current version of Windows is 32-bit, the return value is FALSE.</p>
<p>NOTE: While this function is not Vista specific (it works under XP as well), we include it here to be able to prevent execution of the 32-bit code under 64-bit Windows, when required.</p></blockquote>
<p><strong>HRESULT<br />
GetElevationType( __out TOKEN_ELEVATION_TYPE * ptet );</strong></p>
<blockquote><p>Use GetElevationType() to determine the elevation type of the current process.</p></blockquote>
<p>Parameters:</p>
<blockquote><p>ptet - [out] Pointer to a variable that receives the elevation type of the current process.</p>
<p>The possible values are:</p>
<p>TokenElevationTypeDefault - User is not using a &#8220;split&#8221; token. This value indicates that either UAC is disabled, or the process is started by a standard user (not a member of the Administrators group).</p>
<p>The following two values can be returned only if both the UAC is enabled and the user is a member of the Administrator&#8217;s group (that is, the user has a &#8220;split&#8221; token):</p>
<p>TokenElevationTypeFull - the process is running elevated.</p>
<p>TokenElevationTypeLimited - the process is not running elevated.</p></blockquote>
<p>Return Values:</p>
<blockquote><p>If the function succeeds, the return value is S_OK. If the function fails, the return value is E_FAIL. To get extended error information, call GetLastError().</p></blockquote>
<p><strong>HRESULT<br />
IsElevated( __out_opt BOOL * pbElevated = NULL );</strong></p>
<blockquote><p>Use IsElevated() to determine whether the current process is elevated or not.</p></blockquote>
<p>Parameters:</p>
<blockquote><p>pbElevated - [out] [optional] Pointer to a BOOL variable that, if non-NULL, receives the result.</p>
<p>The possible values are:</p>
<p>TRUE - the current process is elevated. This value indicates that either UAC is enabled, and the process was elevated by the administrator, or that UAC is disabled and the process was started by a user who is a member of the Administrators group.</p>
<p>FALSE - the current process is not elevated (limited). This value indicates that either UAC is enabled, and the process was started normally, without the elevation, or that UAC is disabled and the process was started by a standard user.</p></blockquote>
<p>Return Values</p>
<blockquote>
<p align="left">If the function succeeds, and the current process is elevated, the return value is S_OK. If the function succeeds, and the current process is not elevated, the return value is S_FALSE. If the function fails, the return value is E_FAIL. To get extended error information, call GetLastError().</p>
</blockquote>
<p><strong>BOOL<br />
RunElevated(<br />
__in  HWND hwnd,<br />
__in  LPCTSTR pszPath,<br />
__in_opt LPCTSTR pszParameters = NULL,<br />
__in_opt LPCTSTR pszDirectory = NULL );</strong></p>
<blockquote><p>Use RunElevated() to start an elevated process. This function calls ShellExecEx() with the verb &#8220;runas&#8221; to start the elevated process.</p></blockquote>
<p>Parameters:</p>
<blockquote><p>hwnd - [in] Window handle to any message boxes that the system might produce while executing this function.</p>
<p>pszPath -[in] Address of a null-terminated string that specifies the name of the executable file that should be used to start the process.</p>
<p>pszParameters - [in] [optional] Address of a null-terminated string that contains the command-line parameters for the process. If NULL, no parameters are passed to the process.</p>
<p>pszDirectory - [in] [optional] Address of a null-terminated string that specifies the name of the working directory. If NULL, the current directory is used as the working directory.</p></blockquote>
<p>Return Values</p>
<blockquote><p>If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE. To get extended error information, call GetLastError().</p>
<p>NOTE: This function will start a process elevated no matter which attribute (asInvoker, highestAvailable, or requireAdministrator) is specified in its manifest, and even if there is no such attribute at all.</p></blockquote>
<p align="left"><strong>BOOL<br />
RunNonElevated(<br />
__in  HWND hwnd,<br />
__in  LPCTSTR pszPath,<br />
__in_opt LPCTSTR pszParameters = NULL,<br />
__in_opt LPCTSTR pszDirectory = NULL );</strong></p>
<blockquote><p>Use RunNonElevated() to start a non-elevated process. If the current process is not elevated, it calls ShellExecuteEx() to start the new process. If the current process is elevated, it injects itself into the (non-elevated) shell process, and starts a non-elevated process from there.</p></blockquote>
<p>Parameters:</p>
<blockquote><p>hwnd - [in] Window handle to any message boxes that the system might produce while executing this function.</p>
<p>pszPath - [in] Address of a null-terminated string that specifies the executable file that should be used to start the process.</p>
<p>pszParameters - [in] [optional] Address of a null-terminated string that contains the command-line parameters for the process. If NULL, no parameters are passed to the process.</p>
<p>pszDirectory - [in] [optional] Address of a null-terminated string that specifies the name of the working directory. If NULL, the current directory is used as the working directory.</p></blockquote>
<p>Return Values</p>
<blockquote><p>If the function succeeds, the return value is TRUE. If the function fails, the return value is FALSE. To get extended error information, call GetLastError().</p>
<p>NOTE: For this function to work, the application must be marked with the asInvoker or highestAvailable attributes in its manifest. If the executable to be started is marked as requireAdministrator, it will be started elevated!</p></blockquote>
<p><strong>How to use the file VistaTools.cxx</strong></p>
<p>Make sure you have the latest Windows SDK (see msdn.microsoft.com for more information) or this file may not compile!</p>
<p>This file contains the Win32 stuff only, it can be used with or without other frameworks, such as MFC, ATL, etc.</p>
<p>This is a &#8220;combo&#8221; file that contains both the declarations (usually placed in the .h files) as well as the definitions (usually placed in the .cpp files) of the functions. To get the declarations only, include it as you would any .h file. To get both the declarations and definitions, define IMPLEMENT_VISTA_TOOLS before including the file. (The latter should be done once and only once per project).</p>
<p>For example, to use this file in a MFC project, create a file MyVistaTools.cpp that contains the following:</p>
<blockquote><p>#include &#8220;StdAfx.h&#8221;</p>
<p>#define IMPLEMENT_VISTA_TOOLS<br />
#include &#8220;VistaTools.cxx&#8221;</p></blockquote>
<p>This would make MyVistaTools.cpp the implementation file of the VistaTools function for your project. Don&#8217;t forget to add MyVistaTools.cpp to your project! You can add VistaTools.cxx to your project, as well, but it should be excluded from the build, because its contents is compiled when it is included in MyVistaTools.cpp file with IMPLEMENT_VISTA_TOOLS defined, as shown above.</p>
<p>In other files of your project, where you need to use the functions declared in VistaTools.cxx, include it without defining IMPLEMENT_VISTA_TOOLS, just as you would include a .h file:</p>
<blockquote><p>#include &#8220;VistaTools.cxx&#8221;</p></blockquote>
<p>To use the function <strong>RunNonElevated()</strong>, this file must be compiled into a DLL. In such a case, define DLL_EXPORTS when compiling the DLL, and do not define DLL_EXPORTS when compiling the projects linking to the DLL.</p>
<p>If you don&#8217;t need to use <strong>RunNonElevated()</strong>, then this file may be a part of an EXE project. In such a case, define DONTWANT_RunNonElevated and NO_DLL_IMPORTS to make this file compile properly.</p>
<p>For an example of using VistaTools.cxx in a real project, see <a href="http://www.tweak-uac.com/programming/vista-elevator2/" target="_blank">VistaElevator 2.0</a>.</p>
<p><strong>How do I download the file VistaTools.cxx?</strong></p>
<p>Simply right-click on the link below and choose the <em>Save target as</em> command (or similar) to save it to your hard drive:</p>
<blockquote><p><a href="http://www.softblog.com/files/VistaTools.cxx" target="_blank"><strong>Download VistaTools.cxx</strong></a></p></blockquote>
<p>If you use this file in your own project, an acknowledgment will be appreciated, although it&#8217;s not required.</p>
<p>Enjoy!</p>
<p>Post from: <a href="http://www.softblog.com">softblog.com</a></p>
<p><a href="http://www.softblog.com/2008-02/vista-tools/">Vista tools</a></p>
<img src="http://feeds.feedburner.com/~r/softblog/~4/240462080" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softblog.com/2008-02/vista-tools/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.softblog.com/2008-02/vista-tools/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 2.599 seconds --><!-- Cached page served by WP-Cache -->
