<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><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:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Gregory Strike</title>
	
	<link>http://www.gregorystrike.com</link>
	<description>Buzzed-up Scripting and More!</description>
	<lastBuildDate>Thu, 14 Mar 2013 15:54:32 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/GregoryStrike" /><feedburner:info uri="gregorystrike" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>GregoryStrike</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Google Reader Alternatives</title>
		<link>http://feedproxy.google.com/~r/GregoryStrike/~3/ooqmKizEUWU/</link>
		<comments>http://www.gregorystrike.com/2013/03/14/google-reader-alternatives/#comments</comments>
		<pubDate>Thu, 14 Mar 2013 12:40:06 +0000</pubDate>
		<dc:creator>Gregory Strike</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://www.gregorystrike.com/?p=1525</guid>
		<description><![CDATA[As you probably heard Google Reader, along with many other Google services are shutting down. Google Reader will be no longer as of July 1st, 2013. Google Reader has completely changed the way I absorb information from the Internet. I rely on it daily&#8230; no HOURLY to keep up to date! Now that it&#8217;s going <a href='http://www.gregorystrike.com/2013/03/14/google-reader-alternatives/' class='excerpt-more'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p>As you <a href="https://www.google.com/reader/view/#stream/feed%2Fhttp%3A%2F%2Ffeeds.feedburner.com%2Fblogspot%2FMKuf">probably heard</a> Google Reader, along with many other Google services are shutting down. Google Reader will be no longer as of July 1st, 2013.</p>
<p>Google Reader has completely changed the way I absorb information from the Internet. I rely on it daily&#8230; no HOURLY to keep up to date! Now that it&#8217;s going away I, as well as many others, are going to be trying to find alternatives.</p>
<p>Here I would like to create a list of Google Reader alternatives of all of us.  Here&#8217;s what I&#8217;m looking for in a replacement.</p>
<p>1. Something that has a desktop web interface.<br />
2. A mobile interface.  (At least an API for developers so they could create their own.)<br />
3. Subscriptions are synced, meaning, you don&#8217;t have to subscribe to each RSS on each device (ie. One list rules them all.)<br />
4. If there&#8217;s an open source daemon that I could run on my home Linux server that meets the above requirements, that would work too.</p>
<table>
<tbody>
<tr>
<td align="center" width="200"><a href="http://feedly.com/">Feedly</a></td>
<td><img class=" wp-image-1539 alignleft" alt="Feedly Logo" src="http://www.gregorystrike.com/wp-content/uploads/2013/03/Feedly-Logo.png" width="100" height="100" />This is the one I switched over to. It was a really nice one-click transition for me. They automatically imported all my feeds and they even brought over my favorites!</p>
<p>They have a <a href="http://blog.feedly.com/2013/03/14/google-reader/">blog post</a> talking about the transition from Google Reader.  Currently, their servers utilize the Google Reader API.  However, when Google Reader goes dark, they have implemented their own copy of the API which will be a seamless transition!</td>
</tr>
<tr>
<td align="center" width="200"><a href="http://theoldreader.com/">The Old Reader</a></td>
<td><a href="http://www.gregorystrike.com/wp-content/uploads/2013/03/The-Old-Reader-Logo.png"><img class="alignleft  wp-image-1540" alt="The Old Reader Logo" src="http://www.gregorystrike.com/wp-content/uploads/2013/03/The-Old-Reader-Logo.png" width="100" height="81" /></a>At first glance The Old Reader appears to be the Google Reader before Google did the overhaul. It has one click sign in, using a Facebook or Google+ account. Unfortunately, they do not have a mobile app, which is a requirement of mine, but I wanted to make sure I had at least SOMETHING out here.</td>
</tr>
</tbody>
</table>
<p>If you have any other alternatives please let me know and post them in the comments section for others.</p>
<img src="http://feeds.feedburner.com/~r/GregoryStrike/~4/ooqmKizEUWU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gregorystrike.com/2013/03/14/google-reader-alternatives/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.gregorystrike.com/2013/03/14/google-reader-alternatives/</feedburner:origLink></item>
		<item>
		<title>Streaming Google Music with MPD</title>
		<link>http://feedproxy.google.com/~r/GregoryStrike/~3/eZykVmc0_s4/</link>
		<comments>http://www.gregorystrike.com/2013/03/02/streaming-google-music-with-mpd/#comments</comments>
		<pubDate>Sat, 02 Mar 2013 19:38:35 +0000</pubDate>
		<dc:creator>Gregory Strike</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[MPD]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.gregorystrike.com/?p=1513</guid>
		<description><![CDATA[I&#8217;ve been thinking about building a plugin for MPD that would allow it to talk with Google Music for a while now. Currently, when I purchase music from Google Music, I have to download it and push the new music up to my local music share on my network. Once my music is there, MPD <a href='http://www.gregorystrike.com/2013/03/02/streaming-google-music-with-mpd/' class='excerpt-more'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been thinking about building a plugin for <a href="http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki">MPD</a> that would allow it to talk with <a href="http://music.google.com">Google Music</a> for a while now.  Currently, when I purchase music from Google Music, I have to download it and push the new music up to my local music share on my network.  Once my music is there, MPD can stream it without a problem&#8230;  I love MPD!</p>
<p>I started to investigate the idea this weekend.  I found these two projects that I wanted to share with you guys.  They helped me prove out that the plugin I want to write is possible without TOO much work.</p>
<p>     <strong><a href="https://github.com/simon-weber/Unofficial-Google-Music-API" title="Unofficial Google Music API">Unofficial Google Music API</a></strong> &#8211; An unofficial, opensource API written in Python for Google Music.<br />
     <strong><a href="http://sourceforge.net/projects/musicpd/files/mpc/0.22/">MPC</a></strong> &#8211; A linux terminal based MPD client.</p>
<p>First, by modifying the example.py in the Google Music API a little I was able to create a script that would sign into Google Music, find the first song in my library and grab the streaming URL of that song.</p>
<pre class="brush: python; title: ; notranslate">
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from getpass import getpass
from gmusicapi import Api

def ask_for_credentials():
    &quot;&quot;&quot;Make an instance of the api and attempts to login with it.
    Return the authenticated api.
    &quot;&quot;&quot;

    api = Api()

    logged_in = False
    attempts = 0

    while not logged_in and attempts &lt; 3:
        email = raw_input(&quot;Email: &quot;)
        password = getpass()

        logged_in = api.login(email, password)
        attempts += 1

    return api


def demonstration():
    &quot;&quot;&quot;Demonstrate some api features.&quot;&quot;&quot;

    api = ask_for_credentials()

    if not api.is_authenticated():
        print &quot;Sorry, those credentials weren't accepted.&quot;
        return

    print &quot;Successfully logged in.&quot;
    print

    #Get all of the users songs.
    #library is a big list of dictionaries, each of which contains a single song.
    print &quot;Loading library...&quot;,
    library = api.get_all_songs()
    print &quot;done.&quot;

    print len(library), &quot;tracks detected.&quot;
    print

    #Show some info about a song. There is no guaranteed order;
    # this is essentially a random song.
    first_song = library[0]
    print &quot;The first song I see is '{}' by '{}'.&quot;.format(
        first_song[&quot;name&quot;],
        first_song[&quot;artist&quot;])

    #We're going to create a new playlist and add a song to it.
    #Songs are uniquely identified by 'song ids', so let's get the id:
    song_id = first_song[&quot;id&quot;]
    
    print (api.get_stream_url(song_id))

    #It's good practice to logout when finished.
    api.logout()
    print &quot;All done!&quot;

if __name__ == '__main__':
    demonstration()
</pre>
<p>When running the script above, it&#8217;ll ask for a Google account and password.  Once they are entered the script will login and load the library of the account.  It will grab the first song in the library and output the URL to stream the song.  Now that I had the streaming URL, I needed a way to add that to my MPD queue.</p>
<pre class="brush: bash; title: ; notranslate">
mpc clear
mpc add &quot;URL FROM SCRIPT ABOVE&quot;
mpc play
</pre>
<p>Low and behold!  When I hit play the song started playing!  So now we know that it can work the next step is figuring out if there&#8217;s a way to tie the Google Music library in with MPD&#8217;s library.</p>
<img src="http://feeds.feedburner.com/~r/GregoryStrike/~4/eZykVmc0_s4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gregorystrike.com/2013/03/02/streaming-google-music-with-mpd/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.gregorystrike.com/2013/03/02/streaming-google-music-with-mpd/</feedburner:origLink></item>
		<item>
		<title>Configure NetBIOS over TCP/IP with Group Policy</title>
		<link>http://feedproxy.google.com/~r/GregoryStrike/~3/88g8vebm1wg/</link>
		<comments>http://www.gregorystrike.com/2013/02/25/configure-netbios-over-tcpip-group-policy/#comments</comments>
		<pubDate>Mon, 25 Feb 2013 16:05:16 +0000</pubDate>
		<dc:creator>Gregory Strike</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[VBScript]]></category>

		<guid isPermaLink="false">http://www.gregorystrike.com/?p=1502</guid>
		<description><![CDATA[I came across a situation last week where I needed to finally disable NetBIOS over TCP/IP. While looking for a way to disable it, unfortunately, I found that there really isn&#8217;t a good clean way to do so using Group Policy. At least, if there was a good way, I couldn&#8217;t find it. What I <a href='http://www.gregorystrike.com/2013/02/25/configure-netbios-over-tcpip-group-policy/' class='excerpt-more'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p>I came across a situation last week where I needed to finally disable NetBIOS over TCP/IP. While looking for a way to disable it, unfortunately, I found that there really isn&#8217;t a good clean way to do so using Group Policy. At least, if there was a good way, I couldn&#8217;t find it.</p>
<p>What I came up with was a VBScript that disables NetBIOS over TCP/IP for every NIC in a computer. The script can be easily modified to enable NetBIOS over TCP/IP as well. I&#8217;m currently using this as a Computer Startup Script. Once the script is run, the effects should take place on the next reboot.</p>
<p><a href="http://www.gregorystrike.com/wp-content/uploads/2013/02/NetBIOS.png"><img class="aligncenter size-medium wp-image-1506" alt="A screenshot of the settings the script modifies." src="http://www.gregorystrike.com/wp-content/uploads/2013/02/NetBIOS-251x300.png" width="251" height="300" /></a></p>
<p>The screenshot above shows you the settings we&#8217;re modifying. Use this as a reference so you know which line to uncomment in the script.  By default I have the script set to 2 &#8211; Disable NetBIOS over TCP/IP.</p>
<pre class="brush: vb; title: ; notranslate">
'  Title:      Configure NetBIOS over TCP/IP
'   Date:      2/25/2013
'Updated:
' Author:      Gregory Strike
'    URL:      http://www.gregorystrike.com/2013/02/25/configure-netbios-over-tcpip-group-policy/
'
'Purpose:      The following script will itterate through all NICs on a computer
'              to configuure NetBIOS over TCP/IP.  It finds the NICs listed under:
'              HKLM\SYSTEM\CurrentControlSet\services\NetBT\Parameters\Interfaces
'
'              For each NIC under the key, it sets the NetbiosOptions value to one
'              of the below.  (Be sure to uncomment the setting you desire.)
'
'              0 - Default: Use DHCP setting from the DHCP Server
'              1 - Enable NetBIOS over TCP/IP
'              2 - Disable NetBIOS over TCP/IP
'
'License:      This script is free to use given the following restrictions are followed.
'              1. When used the Author and URL above must remain in place, unaltered.
'              2. Do not publish the contents of this script anywhere. Instead a link
'                 must be provided back to the URL listed above.
'
'Requirements: Administrative Privileges

const HKEY_LOCAL_MACHINE = &amp;H80000002

strComputer = &quot;.&quot;
Set ObjWMI = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\&quot; &amp; strComputer &amp; &quot;\root\default:StdRegProv&quot;)

'Set the path to the Network Interfaces
strKeyPath = &quot;SYSTEM\CurrentControlSet\services\NetBT\Parameters\Interfaces&quot;

'Get all the known interfaces
ObjWMI.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys

'If there was a problem getting strKeyPath, exit the script before throwing an error.
If IsNull(arrSubKeys) Then WScript.Quit

WScript.Echo Now() &amp; &quot; - Searching for Network Adapaters.&quot;

'Loop through all Network Interface Cards and disable NetBIOS over TCP/IP
For Each Adapter In arrSubKeys
	WScript.Echo Now() &amp; &quot; - Disabling NetBIOS over TCP/IP on '&quot; &amp; Adapter &amp; &quot;'&quot;

	'Default: Use DHCP setting from the DHCP Server
	'objWMI.SetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath &amp; &quot;\&quot; &amp; Adapter, &quot;NetbiosOptions&quot;, 0

	'Enable NetBIOS over TCP/IP
	'objWMI.SetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath &amp; &quot;\&quot; &amp; Adapter, &quot;NetbiosOptions&quot;, 1

	'Disable NetBIOS over TCP/IP
	objWMI.SetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath &amp; &quot;\&quot; &amp; Adapter, &quot;NetbiosOptions&quot;, 2
Next

WScript.Echo Now() &amp; &quot; - Completed.&quot;
</pre>
<p>Enjoy!</p>
<img src="http://feeds.feedburner.com/~r/GregoryStrike/~4/88g8vebm1wg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gregorystrike.com/2013/02/25/configure-netbios-over-tcpip-group-policy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.gregorystrike.com/2013/02/25/configure-netbios-over-tcpip-group-policy/</feedburner:origLink></item>
		<item>
		<title>Generate a Time Lapse Video from an Online Webcam Using Open Source</title>
		<link>http://feedproxy.google.com/~r/GregoryStrike/~3/H8YtuDqdwX4/</link>
		<comments>http://www.gregorystrike.com/2012/09/14/generate-a-time-lapse-video-from-an-online-webcam-using-open-source/#comments</comments>
		<pubDate>Fri, 14 Sep 2012 20:23:09 +0000</pubDate>
		<dc:creator>Gregory Strike</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Webcam]]></category>

		<guid isPermaLink="false">http://www.gregorystrike.com/?p=1456</guid>
		<description><![CDATA[I&#8217;ve generated a couple time lapse videos in the past and I wanted to share my process with my readers. Let&#8217;s say you&#8217;ve found a webcam source online and you wanted to capture a time lapse video from it. For instance, here is Old Faithful at Yellowstone National Park which publishes a .JPG every minute. <a href='http://www.gregorystrike.com/2012/09/14/generate-a-time-lapse-video-from-an-online-webcam-using-open-source/' class='excerpt-more'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve generated a couple time lapse videos in the past and I wanted to share my process with my readers.</p>
<p>Let&#8217;s say you&#8217;ve found a webcam source online and you wanted to capture a time lapse video from it.  For instance, here is <a href="http://www.nps.gov/webcams-yell/oldfaithvc.jpg">Old Faithful</a> at Yellowstone National Park which publishes a .JPG every minute.  How would you create a time lapse from it?  And even better, how would you do it using completely FREE software?!</p>
<p><a href="http://www.gregorystrike.com/wp-content/uploads/2012/09/oldfaithvc.jpg"><img src="http://www.gregorystrike.com/wp-content/uploads/2012/09/oldfaithvc-300x228.jpg" alt="" title="Old Faithful Webcam Shot" width="300" height="228" class="aligncenter size-medium wp-image-1478" /></a></p>
<p>First, since the script is a <a href="http://en.wikipedia.org/wiki/Bash_(Unix_shell)">Bash</a> script you need to be running Bash.  The easiest way to do this is to be running a version Linux (<a href="http://www.ubuntu.com/">Ubuntu </a>or <a href="http://linuxmint.com/">Linux Mint</a> are nice!) since Bash is usually the default shell.  You could also use Cygwin to do this in Windows, but it is beyond the scope of this article on how to use it.  From here on out, I will assume you are running Bash in Linux.</p>
<p>Way back in 2007 I <a href="http://www.gregorystrike.com/2007/06/06/bash-script-interval-get/">published a Bash script</a> that captures a URL at a provided interval and saves it to a directory.  This is the heart the process.  Go ahead and grab <a href="http://www.gregorystrike.com/2007/06/06/bash-script-interval-get/">the script</a> and save it in your home directory as <strong>iget.sh</strong>.  Though it&#8217;s pretty self-explanatory there is a more detailed explanation on the script&#8217;s page as well.  Once you have the script saved you need to give it execute permissions by running:</p>
<pre class="brush: bash; title: ; notranslate">
chmod +x ~/iget.sh
</pre>
<p>Now we&#8217;re ready to capture the images.  Launch a terminal session and create a directory to store the webcam images.  Once created, change to that directory.</p>
<pre class="brush: bash; title: ; notranslate">
mkdir webcam
cd webcam
</pre>
<p>Run the iget.sh script with the required parameters.</p>
<pre class="brush: bash; title: ; notranslate">
../iget.sh http://www.nps.gov/webcams-yell/oldfaithvc.jpg of.jpg 60
</pre>
<p>The first parameter is the URL to be downloaded.  The second parameter (of.jpg) is a base file name, every file that is saved to your computer will be time stamped and ended with this.  Make sure you use the same extension (.jpg) that the webcam is publishing.  The third parameter (60) is the amount of seconds between captures.  Since the Old Faithful webcam updates every minute, I&#8217;ve chosen 60 seconds.</p>
<p>Let the script run for as long as you want.  After you&#8217;ve captured all the frames you want for your video, move on to the next step.</p>
<p>&#8230;Don&#8217;t worry, I&#8217;ll wait&#8230;</p>
<p>&#8230;Got them yet?  Good!</p>
<p>Ok, the next step is to delete any duplicate frames that may exist.  This can occur for a couple reasons but depending on what you&#8217;re using the video for you may or may not want to do this.  I prefer to delete them since I mainly use it for entertainment purposes and it creates a smoother looking video.  Save the following script to your home directory as <strong>rmdupe.sh</strong>.</p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/bash

cksum * | sort -n &gt; filelist

old=&quot;&quot;
while read sum lines filename
do
      if [[ &quot;$sum&quot; != &quot;$old&quot; ]] ; then
            old=&quot;$sum&quot;
            continue
      fi
      rm -f &quot;$filename&quot;

done &lt; filelist
</pre>
<p>Give it execute permissions using chmod and then run it in the directory you saved the .JPG files to.</p>
<pre class="brush: bash; title: ; notranslate">
chmod +x ~/rmdupe.sh
~/rmdupe.sh
</pre>
<p>Great!  Now we&#8217;ve got rid of all our duplicate files.  The next step is to remove any frames that may be corrupt.  To do this I&#8217;m going to use a utility called jpeginfo, don&#8217;t worry.   It&#8217;s free.  However, it may not be installed by default on your Linux distribution so you&#8217;ll have to install it.</p>
<pre class="brush: bash; title: ; notranslate">
sudo apt-get install jpeginfo
</pre>
<p>Once it&#8217;s installed run this in the directory.  It may take a while to go through but it will validate the JPEGs in the directory and delete any that fail validation.</p>
<pre class="brush: bash; title: ; notranslate">
find . -name &quot;*&quot; -exec jpeginfo -c {} \; | grep -E &quot;WARNING|ERROR&quot; | cut -d &quot; &quot; -f 1 | xargs rm -r
</pre>
<p>Now for the fun part where we convert the JPEGs to a movie.  To do this I&#8217;m going to use mencoder, another free utility available in Linux.  To install it run this:</p>
<pre class="brush: bash; title: ; notranslate">
sudo apt-get install mencoder
</pre>
<p>And here&#8217;s a command to convert the JPGs to a movie.  You can tweak the arguments to change the codec, framerate, bitrate so be sure to check out the documentation how to tweak it.</p>
<pre class="brush: bash; title: ; notranslate">
mencoder &quot;mf://*.jpg&quot; -mf fps=10 -o OldFaithful.avi -ovc lavc -lavcopts vcodec=msmpeg4v2:vbitrate=800 
</pre>
<p>Once done, you&#8217;ll have a time lapse .AVI file!  Here&#8217;s what it looked like after an afternoon of capturing.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/CbB1xNrLILY?hl=en_US" frameborder="0" allowfullscreen></iframe></p>
<p>Thanks for reading guys!  Enjoy!</p>
<img src="http://feeds.feedburner.com/~r/GregoryStrike/~4/H8YtuDqdwX4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gregorystrike.com/2012/09/14/generate-a-time-lapse-video-from-an-online-webcam-using-open-source/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.gregorystrike.com/2012/09/14/generate-a-time-lapse-video-from-an-online-webcam-using-open-source/</feedburner:origLink></item>
		<item>
		<title>How to Deploy Adobe Reader (and Patches) with Active Directory</title>
		<link>http://feedproxy.google.com/~r/GregoryStrike/~3/7NBVVd7C8N0/</link>
		<comments>http://www.gregorystrike.com/2012/08/23/how-to-deploy-adobe-reader-and-patches-with-active-directory/#comments</comments>
		<pubDate>Thu, 23 Aug 2012 19:48:27 +0000</pubDate>
		<dc:creator>Gregory Strike</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Batch]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.gregorystrike.com/?p=1385</guid>
		<description><![CDATA[In my organization we push out Adobe Reader using an Active Directory policy. In order to do this using we use the Software Management features of Active Directory which requires an .MSI. Adobe supplies an .MSI for Adobe Reader and it&#8217;s relatively simple to deploy as long as it&#8217;s a base version (ie. no updates). <a href='http://www.gregorystrike.com/2012/08/23/how-to-deploy-adobe-reader-and-patches-with-active-directory/' class='excerpt-more'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p>In my organization we push out Adobe Reader using an Active Directory policy.  In order to do this using we use the Software Management features of Active Directory which requires an .MSI.  Adobe supplies an .MSI for Adobe Reader and it&#8217;s relatively simple to deploy as long as it&#8217;s a base version (ie. no updates).  However, If you have to apply the quarterly updates the process becomes a little less intuitive.  It is my hope that contributing this information and the script below will make the process a little easier for people to keep their Adobe Reader patched.</p>
<p>First, if you are deploying Adobe Reader, Adobe requires that you sign <a href="http://www.adobe.com/products/reader/rdr_distribution1.html">Distribution Agreement</a> with them.  It&#8217;s free, really not that difficult and it&#8217;s the only way to legally obtain the .MSI required to do the deployment.  So just do it.</p>
<p>The purpose of this post is really about how to patch an Adobe Reader .MSI with the .MSP in a way that you are still able to customize the patched version with the Adobe Customization Wizard and then have that in a ready state to deploy using Active Directory.  I&#8217;m not going to cover much of how to configure the group policies, I&#8217;m assuming that you already have that knowledge.  After all, you guys are smart! <img src='http://www.gregorystrike.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Since the scheduled updates of Adobe Reader is quarterly, patching it has not been I did often.  By the time the new patch came out, I had forgotten how to do the process and wasn&#8217;t able to devote the time into trying to do it again.  So, to help with this I&#8217;ve written a script that will patch the Adobe Reader .MSI using the .MSP and then extract some files from the .EXE installer. I&#8217;ll explain it below.</p>
<pre class="brush: batch; title: ; notranslate">ECHO OFF

REM Title:       AdobeReaderPatcher.cmd
REM Date:        8/22/2012
REM Author:      Gregory Strike
REM URL:         http://www.gregorystrike.com/2012/08/23/how-to-deploy-adobe-reader-and-patches-with-active-directory/
REM
REM Purpose:     Automate the process of patching the Adobe Reader .MSI Installer
REM
REM Permissions: This script should be run from an elevated Command Prompt.
REM
REM License:     This script is free to use given the following restrictions are followed.
REM              1. When used the Author and URL above must remain in place, unaltered.
REM              2. Do not publish the contents of this script anywhere. Instead a link 
REM                 must be provided back to the URL listed above.
REM
REM This script was built using information I found at http://forums.adobe.com/message/4166521.

CLS

REM THESE MUST BE SET TO THE CORRECT VERSIONS!
SET BASEVER=1010
SET PATCHVER=1014
SET LANG=en_US

REM In most circumstances the variables following this line do not need to be modified.
SET BASE=AdbeRdr
SET PATCH=AdbeRdrUpd
SET CURDIR=%~dp0
SET AIPDIR=%CURDIR%AIP
SET EXEDIR=%CURDIR%EXE

REM Checking prerequisites
ECHO Checking prerequisites...
IF NOT EXIST %CURDIR%%BASE%%BASEVER%_%LANG%.msi GOTO :MISSINGFILE
IF NOT EXIST %CURDIR%%PATCH%%PATCHVER%.msp GOTO :MISSINGFILE
IF NOT EXIST %CURDIR%%BASE%%PATCHVER%_%LANG%.exe GOTO MISSINGFILE

IF EXIST %AIPDIR% GOTO :FOLDEREXISTS
IF EXIST %EXEDIR% GOTO :FOLDEREXISTS

REM Creating AIP Folder base
ECHO Creating AIP Folder base...
msiexec /a %CURDIR%%BASE%%BASEVER%_%LANG%.msi TARGETDIR=&quot;%AIPDIR%&quot; /passive

REM Patching AIP with .MSP
ECHO Patching AIP with .MSP...
msiexec /a %AIPDIR%\%BASE%%BASEVER%_%LANG%.msi /p %CURDIR%%PATCH%%PATCHVER%.msp /passive

REM Renaming .MSI in AIP
ECHO Renaming .MSI in AIP...
RENAME %AIPDIR%\%BASE%%BASEVER%_%LANG%.msi %BASE%%PATCHVER%_%LANG%.msi

REM Extracting Setup Files from Base .EXE
ECHO Extracting Setup Files from Base .EXE...
%CURDIR%%BASE%%PATCHVER%_%LANG%.exe -sfx_o&quot;%EXEDIR%&quot; -sfx_ne
COPY %EXEDIR%\Setup.exe %AIPDIR%\Setup.exe
COPY %EXEDIR%\Setup.ini %AIPDIR%\Setup.ini

REM Updating Setup.ini
ECHO Updating Setup.ini...

TYPE %EXEDIR%\Setup.ini | FINDSTR /I /V \[Product\] &gt; %AIPDIR%\Setup1.ini
TYPE %AIPDIR%\Setup1.ini | FINDSTR /I /V MSI= &gt; %AIPDIR%\Setup2.ini
TYPE %AIPDIR%\Setup2.ini | FINDSTR /I /V PATCH= &gt; %AIPDIR%\Setup.ini
DEL %AIPDIR%\Setup1.ini
DEL %AIPDIR%\Setup2.ini

ECHO. &gt;&gt; %AIPDIR%\Setup.ini
ECHO [Product] &gt;&gt; %AIPDIR%\Setup.ini
ECHO MSI=%BASE%%PATCHVER%_%LANG%.msi &gt;&gt; %AIPDIR%\Setup.ini

GOTO :END

:MISSINGFILE
ECHO.
ECHO ERROR - One of the following files was not found:
ECHO %BASE%%BASEVER%_%LANG%.msi
ECHO %PATCH%%PATCHVER%.msp
ECHO %BASE%%PATCHVER%_%LANG%.exe
ECHO.
ECHO 1. Verify these files exist in the same directory as this script (%CURDIR%).
ECHO 2. Verify the BASEVER, PATCHVER and LANG variables at the top are correct.

GOTO :END

:FOLDEREXISTS
ECHO.
ECHO ERROR - One or both of these folders already exists:
ECHO %AIPDIR%
ECHO %EXEDIR%
ECHO.
ECHO Please delete these folders and rerun the script.
ECHO.

:END
ECHO.
ECHO Script Complete.</pre>
<p>Unless Adobe changes the process or naming convention of their files this script should take three files and output a working AIP (Administrator Install Point) directory with a patched .MSI that is ready to deploy via Group Policy.  It follows all the steps that Adobe has laid out but simply automates it.  Using this, the AIP is also in a state that can be customized by the Adobe Customization Wizard if you need to create a transform (.MST) to customize the options that are deployed.  You only need this script if you are deploying a PATCHED .MSI.  If you are using a base version this is unnecessary.</p>
<p>Here&#8217;s a list of the files you need.  You should be able to pull these from Adobe&#8217;s FTP site (<a href="ftp://ftp.adobe.com/pub/adobe/reader/win/">ftp://ftp.adobe.com/pub/adobe/reader/win/</a>).  They should all be downloaded and placed in the same folder.  Again, remember the Distribution Agreement mentioned above.</p>
<table>
<tr>
<td>File</td>
<td>Example Filename</td>
</tr>
<tr>
<td>The script above, Silly!</td>
<td>AdobeReaderPatcher.cmd</td>
</tr>
<tr>
<td>The base .MSI</td>
<td>AdbeRdr1010_en_US.msi</td>
</tr>
<tr>
<td>The .MSP patch</td>
<td>AdbeRdrUpd1014.msp</td>
</tr>
<tr>
<td>The .EXE installer for the new version</td>
<td>AdbeRdr1014_en_US.exe</td>
</tr>
</table>
<p>Once all the files are downloaded and located in the same folder you need to update some variables in the script so that it knows which versions it&#8217;s working with.  The script doesn&#8217;t modify it&#8217;s logic based on these variables, it&#8217;s really just using them to generate filenames on the fly.  The script above was written shortly after Adobe Reader X v10.1.4 was released so it is already set to take the v10.1.0 .MSI and apply the v10.1.4 .MSP to the en_US version.  Note the following lines in the script is where you make the modifications.</p>
<pre class="brush: batch; title: ; notranslate">
REM THESE MUST BE SET TO THE CORRECT VERSIONS!
SET BASEVER=1010
SET PATCHVER=1014
SET LANG=en_US
</pre>
<p>Once your changes are saved, <strong>launch an elevated Command Prompt</strong> and CD to your working directory.<br />
<a href="http://www.gregorystrike.com/wp-content/uploads/2012/08/AdobeReaderPatcher_CDToDirectory.png"><img src="http://www.gregorystrike.com/wp-content/uploads/2012/08/AdobeReaderPatcher_CDToDirectory.png" alt="" title="AdobeReaderPatcher - CD to Directory" width="733" height="395" class="aligncenter size-full wp-image-1404" /></a></p>
<p>Once there run <em>AdobeReaderPatcher.cmd</em> (or whatever you named it), and it will go through the patching process.<br />
<a href="http://www.gregorystrike.com/wp-content/uploads/2012/08/AdobeReaderPatcher_RunningScript.png"><img src="http://www.gregorystrike.com/wp-content/uploads/2012/08/AdobeReaderPatcher_RunningScript.png" alt="" title="AdobeReaderPatcher - Running Script" width="733" height="395" class="aligncenter size-full wp-image-1405" /></a></p>
<p>The script will generate a directory called &#8220;AIP&#8221;.  When all is done, this will be the folder you copy to your network share or customize with the Adobe Customization Wizard.  I should mention that the two setup (setup.exe and setup.ini) files that are copied are pulled from the .EXE.  It&#8217;s actually the only reason we need the .EXE.  Some of the options you may choose in the Adobe Customization Wizard require these files.</p>
<p>It&#8217;ll be interesting to see if this works with the next version of Adobe Reader X (v10.1.5?).  Good luck everyone!</p>
<img src="http://feeds.feedburner.com/~r/GregoryStrike/~4/7NBVVd7C8N0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gregorystrike.com/2012/08/23/how-to-deploy-adobe-reader-and-patches-with-active-directory/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.gregorystrike.com/2012/08/23/how-to-deploy-adobe-reader-and-patches-with-active-directory/</feedburner:origLink></item>
		<item>
		<title>How to Check S.M.A.R.T Status of Hard Drive Remotely</title>
		<link>http://feedproxy.google.com/~r/GregoryStrike/~3/0NNLQoScAxE/</link>
		<comments>http://www.gregorystrike.com/2012/08/03/how-to-check-s-m-a-r-t-status-of-hard-drive-remotely/#comments</comments>
		<pubDate>Fri, 03 Aug 2012 14:54:47 +0000</pubDate>
		<dc:creator>Gregory Strike</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[WMI]]></category>

		<guid isPermaLink="false">http://www.gregorystrike.com/?p=1371</guid>
		<description><![CDATA[SMART (Self-Monitoring, Analysis and Reporting Technology) is a technology incorporated into most hard drives that monitors the health the drive. Using SMART, the drive will log read/write failures. If the number of failures reach a certain threshold the drive can communicate that back to the BIOS or operating system and alert the user that the <a href='http://www.gregorystrike.com/2012/08/03/how-to-check-s-m-a-r-t-status-of-hard-drive-remotely/' class='excerpt-more'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p>SMART (Self-Monitoring, Analysis and Reporting Technology) is a technology incorporated into most hard drives that monitors the health the drive.  Using SMART, the drive will log read/write failures.  If the number of failures reach a certain threshold the drive can communicate that back to the BIOS or operating system and alert the user that the drive is failing.  It&#8217;s then up to the user to replace the drive before the loss of data.</p>
<p>I needed a way to check the SMART status of a drive remotely and was able to come up with a couple different methods to do it.  I wasn&#8217;t interested in any of the metrics, only whether or not SMART thought the drive was failing.  So all of the examples below will give you the same answers but I thought I&#8217;d share the code for accessing it with a couple different languages.  All of the examples are remotely querying the computer using WMI, so it is important that you have security to WMI on the remote computer.</p>
<p>This example, from Command Prompt using WMIC, will grab the Caption and Status for all drives on the computer.  Grabbing the caption is beneficial for identifying which status belongs to which drive.</p>
<pre class="brush: batch; title: ; notranslate">
WMIC /Node:REMOTECOMPUTER DiskDrive GET Caption, Status
</pre>
<p>Here&#8217;s an example using PowerShell:</p>
<pre class="brush: powershell; title: ; notranslate">
$WMI = Get-WMIObject -Computer REMOTECOMPUTER -Class Win32_DiskDrive
ForEach ($Drive in $WMI){ 
     $Drive.Caption + &quot;: &quot; + $Drive.Status
}
</pre>
<p>And finally an example using VBScript:</p>
<pre class="brush: vb; title: ; notranslate">
strComputer = &quot;REMOTECOMPUTER&quot;
Set objWMIService = GetObject(&quot;winmgmts:&quot; _
    &amp; &quot;{impersonationLevel=impersonate}!\\&quot; &amp; strComputer &amp; &quot;\root\cimv2&quot;)

Set colDrives = objWMIService.ExecQuery(&quot;Select * from Win32_DiskDrive&quot;)

For Each Drive in colDrives
    WScript.Echo Drive.Caption &amp; &quot;: &quot; &amp; Drive.Status
Next
</pre>
<p>Running any of the above should give you the Caption and Status of the drive.  If the status is &#8220;Degraded&#8221; or &#8220;Pred Fail&#8221; it&#8217;s likely that the drive is going to fail and the drive needs to be replaced.  There are other values that status could be set to, for a more detailed explanation see <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa394132(v=vs.85).aspx">Win32_DiskDrive class</a> on MSDN.</p>
<p>One thing to note is just because SMART or the Status say the drive is fine doesn&#8217;t mean it is.  If the drive is having issues and the logged failures on the drive haven&#8217;t crossed a threshold the drive may still report as &#8220;OK&#8221;.  However, if SMART is saying there&#8217;s a problem, you should be able to trust it.</p>
<img src="http://feeds.feedburner.com/~r/GregoryStrike/~4/0NNLQoScAxE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gregorystrike.com/2012/08/03/how-to-check-s-m-a-r-t-status-of-hard-drive-remotely/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.gregorystrike.com/2012/08/03/how-to-check-s-m-a-r-t-status-of-hard-drive-remotely/</feedburner:origLink></item>
		<item>
		<title>Windows Automatic Update Group Policy Reference</title>
		<link>http://feedproxy.google.com/~r/GregoryStrike/~3/kzNMxyFR9sw/</link>
		<comments>http://www.gregorystrike.com/2012/07/26/windows-automatic-update-group-policy-reference/#comments</comments>
		<pubDate>Thu, 26 Jul 2012 19:10:39 +0000</pubDate>
		<dc:creator>Gregory Strike</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.gregorystrike.com/?p=1361</guid>
		<description><![CDATA[These are the possible Group Policy settings when configuring Automatic Updates as described in the &#8220;Group Policy Management&#8221; application. I needed them all in one place in order to discuss the settings with people in my organization. Policy Description Do not display ‘Install Updates and Shut Down’ option in Shut Down Windows dialog box This <a href='http://www.gregorystrike.com/2012/07/26/windows-automatic-update-group-policy-reference/' class='excerpt-more'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p>These are the possible Group Policy settings when configuring Automatic Updates as described in the &#8220;Group Policy Management&#8221; application.  I needed them all in one place in order to discuss the settings with people in my organization.</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="198"><strong>Policy</strong></td>
<td valign="top" width="504"><strong>Description</strong></td>
</tr>
<tr>
<td valign="top" width="198"><strong>Do not display ‘Install Updates and Shut Down’ option in Shut Down Windows dialog box</strong></td>
<td valign="top" width="504">This policy setting allows you to manage whether the &#8216;Install Updates and Shut Down&#8217; option is displayed in the Shut Down Windows dialog box.</p>
<p>If you enable this policy setting, &#8216;Install Updates and Shut Down&#8217; will not appear as a choice in the Shut Down Windows dialog box, even if updates are available for installation when the user selects the Shut Down option in the Start menu.</p>
<p>If you disable or do not configure this policy setting, the &#8216;Install Updates and Shut Down&#8217; option will be available in the Shut Down Windows dialog box if updates are available when the user selects the Shut Down option in the Start menu.</td>
</tr>
<tr>
<td valign="top" width="198"><strong>Do not adjust default option to ‘Install Updates and Shut Down’ in Shut Down Windows dialog box</strong></td>
<td valign="top" width="504">This policy setting allows you to manage whether the &#8216;Install Updates and Shut Down&#8217; option is allowed to be the default choice in the Shut Down Windows dialog.</p>
<p>If you enable this policy setting, the user&#8217;s last shut down choice (Hibernate, Restart, etc.) is the default option in the Shut Down Windows dialog box, regardless of whether the &#8216;Install Updates and Shut Down&#8217; option is available in the &#8216;What do you want the computer to do?&#8217; list.</p>
<p>If you disable or do not configure this policy setting, the &#8216;Install Updates and Shut Down&#8217; option will be the default option in the Shut Down Windows dialog box if updates are available for installation at the time the user selects the Shut Down option in the Start menu.</p>
<p>Note that this policy setting has no impact if the Computer Configuration\Administrative Templates\Windows Components\Windows Update\Do not display &#8216;Install Updates and Shut Down&#8217; option in Shut Down Windows dialog box policy setting is enabled.</td>
</tr>
<tr>
<td valign="top" width="198"><strong>Enabling Windows Update Power Management to automatically wake up the system to install scheduled updates</strong></td>
<td valign="top" width="504">Specifies whether the Windows Update will use the Windows Power Management features to automatically wake up the system from hibernation, if there are updates scheduled for installation.</p>
<p>Windows Update will only automatically wake up the system if Windows Update is configured to install updates automatically. If the system is in hibernation when the scheduled install time occurs and there are updates to be applied, then Windows Update will use the Windows Power management features to automatically wake the system up to install the updates.</p>
<p>Windows update will also wake the system up and install an update if an install deadline occurs.</p>
<p>The system will not wake unless there are updates to be installed.  If the system is on battery power, when Windows Update wakes it up, it will not install updates and the system will automatically return to hibernation in 2 minutes.</td>
</tr>
<tr>
<td valign="top" width="198"><strong>Configure Automatic Updates</strong></td>
<td valign="top" width="504">Specifies whether this computer will receive security updates and other important downloads through the Windows automatic updating service.</p>
<p>This setting lets you specify if automatic updates are enabled on this computer. If the service is enabled, you must select one of the four options in the Group Policy Setting:</p>
<p>2 = Notify before downloading any updates and notify again before installing them.</p>
<p>When Windows finds updates that apply to this computer, an icon appears in the status area with a message that updates are ready to be downloaded. Clicking the icon or message provides the option to select the specific updates to download. Windows then downloads the selected updates in the background. When the download is complete, the icon appears in the status area again, with notification that the updates are ready to be installed. Clicking the icon or message provides the option to select which updates to install.</p>
<p>3 = (Default setting) Download the updates automatically and notify when they are ready to be installed</p>
<p>Windows finds updates that apply to your computer and downloads these updates in the background (the user is not notified or interrupted during this process). When the download is complete, the icon appears in the status area, with notification that the updates are ready to be installed. Clicking the icon or message provides the option to select which updates to install.</p>
<p>4 = Automatically download updates and install them on the schedule specified below</p>
<p>Specify the schedule using the options in the Group Policy Setting. If no schedule is specified, the default schedule for all installations will be everyday at 3:00 AM. If any of the updates require a restart to complete the installation, Windows will restart the computer automatically. (If a user is logged on to the computer when Windows is ready to restart, the user will be notified and given the option to delay the restart.)</p>
<p>5 = Allow local administrators to select the configuration mode that Automatic Updates should notify and install updates</p>
<p>With this option, the local administrators will be allowed to use the Automatic Updates control panel to select a configuration option of their choice. For example they can choose their own scheduled installation time. Local administrators will not be allowed to disable Automatic Updates&#8217; configuration.</p>
<p>To use this setting, click Enabled, and then select one of the options (2, 3, 4 or 5). If you select 4, you can set a recurring schedule (if no schedule is specified, all installations will occur everyday at 3:00 AM).</p>
<p>If the status is set to Enabled, Windows recognizes when this computer is online and uses its Internet connection to search Windows Update for updates that apply to this computer.</p>
<p>If the status is set to Disabled, any updates that are available on Windows Update must be downloaded and installed manually. To do this, go to http://windowsupdate.microsoft.com or click Start, click Programs (or click All Programs), and then click Windows Update.</p>
<p>If the status is set to Not Configured, use of Automatic Updates is not specified at the Group Policy level. However, an administrator can still configure Automatic Updates through Control Panel.
</td>
</tr>
<tr>
<td valign="top" width="198"><strong>Specify intranet Microsoft Updates service location</strong></td>
<td valign="top" width="504">Specifies an intranet server to host updates from Microsoft Update. You can then use this update service to automatically update computers on your network.</p>
<p>This setting lets you specify a server on your network to function as an internal update service. The Automatic Updates client will search this service for updates that apply to the computers on your network.</p>
<p>To use this setting, you must set two servername values: the server from which the Automatic Updates client detects and downloads updates, and the server to which updated workstations upload statistics. You can set both values to be the same server.</p>
<p>If the status is set to Enabled, the Automatic Updates client connects to the specified intranet Microsoft update service, instead of Windows Update, to search for and download updates. Enabling this setting means that end users in your organization don&#8217;t have to go through a firewall to get updates, and it gives you the opportunity to test updates before deploying them.</p>
<p>If the status is set to Disabled or Not Configured, and if Automatic Updates is not disabled by policy or user preference, the Automatic Updates client connects directly to the Windows Update site on the Internet.</p>
<p>Note: If the &#8220;Configure Automatic Updates&#8221; policy is disabled, then this policy has no effect.</td>
</tr>
<tr>
<td valign="top" width="198"><strong>Automatic Updates detection frequency</strong></td>
<td valign="top" width="504">Specifies the hours that Windows will use to determine how long to wait before checking for available updates. The exact wait time is determined by using the hours specified here minus zero to twenty percent of the hours specified. For example, if this policy is used to specify a 20 hour detection frequency, then all clients to which this policy is applied will check for updates anywhere between 16 and 20 hours.</p>
<p>If the status is set to Enabled, Windows will check for available updates at the specified interval.</p>
<p>If the status is set to Disabled or Not Configured, Windows will check for available updates at the default interval of 22 hours.</p>
<p>Note: The &#8220;Specify intranet Microsoft update service location&#8221; setting must be enabled for this policy to have effect.</p>
<p>Note: If the &#8220;Configure Automatic Updates&#8221; policy is disabled, this policy has no effect.</td>
</tr>
<tr>
<td valign="top" width="198"><strong>Allow non-administrators to receive update notifications</strong></td>
<td valign="top" width="504">This policy setting allows you to control whether non-administrative users will receive update notifications based on the &#8220;Configure Automatic Updates&#8221; policy setting.</p>
<p>If you enable this policy setting, Windows Automatic Update and Microsoft Update will include non-administrators when determining which logged-on user should receive update notifications. Non-administrative users will be able to install all optional, recommended, and important content for which they received a notification. Users will not see a User Account Control window and do not need elevated permissions to install these updates, except in the case of updates that contain User Interface , End User License Agreement , or Windows Update setting changes.</p>
<p>There are two situations where the effect of this setting depends on the operating system: Hide/Restore updates, and Cancel an install.</p>
<p>On XP: If you enable this policy setting, users will not see a User Account Control window and do not need elevated permissions to do either of these update-related tasks.</p>
<p>On Vista: If you enable this policy setting, users will not see a User Account Control window and do not need elevated permissions to do either of these tasks. If you do not enable this policy setting, then users will always see an Account Control window and require elevated permissions to do either of these tasks.</p>
<p>On Windows 7: This policy setting has no effect. Users will always see an Account Control window and require elevated permissions to do either of these tasks.</p>
<p>If you disable or do not configure this policy setting, then only administrative users will receive update notifications.</p>
<p>By default, this policy setting is disabled.</p>
<p>If the &#8220;Configure Automatic Updates&#8221; policy setting is disabled or is not configured, then the Elevate Non-Admin policy setting has no effect.</td>
</tr>
<tr>
<td valign="top" width="198"><strong>Turn on Software Notifications</strong></td>
<td valign="top" width="504">This policy setting allows you to control whether users see detailed enhanced notification messages about featured software from the Microsoft Update service. Enhanced notification messages convey the value and promote the installation and use of optional software. This policy setting is intended for use in loosely managed environments in which you allow the end user access to the Microsoft Update service.</p>
<p>If you enable this policy setting, a notification message will appear on the user&#8217;s computer when featured software is available. The user can click the notification to open the Windows Update Application and get more information about the software or install it. The user can also click &#8220;Close this message&#8221; or &#8220;Show me later&#8221; to defer the notification as appropriate.</p>
<p>In Windows 7, this policy setting will only control detailed notifications for optional applications. In Windows Vista, this policy setting controls detailed notifications for optional applications and updates.</p>
<p>If you disable or do not configure this policy setting, Windows 7 users will not be offered detailed notification messages for optional applications, and Windows Vista users will not be offered detailed notification messages for optional applications or updates.</p>
<p>By default, this policy setting is disabled.</p>
<p>If you are not using the Microsoft Update service, then the Software Notifications policy setting has no effect.</p>
<p>If the &#8220;Configure Automatic Updates&#8221; policy setting is disabled or is not configured, then the Software Notifications policy setting has no effect.</td>
</tr>
<tr>
<td valign="top" width="198"><strong>Allow Automatic Updates immediate installation</strong></td>
<td valign="top" width="504">Specifies whether Automatic Updates should automatically install certain updates that neither interrupt Windows services nor restart Windows.</p>
<p>If the status is set to Enabled, Automatic Updates will immediately install these updates once they are downloaded and ready to install.</p>
<p>If the status is set to Disabled, such updates will not be installed immediately.</p>
<p>Note: If the &#8220;Configure Automatic Updates&#8221; policy is disabled, this policy has no effect.</td>
</tr>
<tr>
<td valign="top" width="198"><strong>Turn on recommended updates via Automatic Updates</strong></td>
<td valign="top" width="504">Specifies whether Automatic Updates will deliver both important as well as recommended updates from the Windows Update update service.</p>
<p>When this policy is enabled, Automatic Updates will install recommended updates as well as important updates from Windows Update update service.</p>
<p>When disabled or not configured Automatic Updates will continue to deliver important updates if it is already configured to do so.</td>
</tr>
<tr>
<td valign="top" width="198"><strong>No auto-restart with logged on users for scheduled automations installations</strong></td>
<td valign="top" width="504">Specifies that to complete a scheduled installation, Automatic Updates will wait for the computer to be restarted by any user who is logged on, instead of causing the computer to restart automatically.</p>
<p>If the status is set to Enabled, Automatic Updates will not restart a computer automatically during a scheduled installation if a user is logged in to the computer. Instead, Automatic Updates will notify the user to restart the computer.</p>
<p>Be aware that the computer needs to be restarted for the updates to take effect.</p>
<p>If the status is set to Disabled or Not Configured, Automatic Updates will notify the user that the computer will automatically restart in 5 minutes to complete the installation.</p>
<p>Note: This policy applies only when Automatic Updates is configured to perform scheduled installations of updates. If the &#8220;Configure Automatic Updates&#8221; policy is disabled, this policy has no effect.</td>
</tr>
<tr>
<td valign="top" width="198"><strong>Re-prompt for restart with scheduled installations</strong></td>
<td valign="top" width="504">Specifies the amount of time for Automatic Updates to wait before prompting again with a scheduled restart.</p>
<p>If the status is set to Enabled, a scheduled restart will occur the specified number of minutes after the previous prompt for restart was postponed.</p>
<p>If the status is set to Disabled or Not Configured, the default interval is 10 minutes.</p>
<p>Note: This policy applies only when Automatic Updates is configured to perform scheduled installations of updates. If the &#8220;Configure Automatic Updates&#8221; policy is disabled, this policy has no effect.</td>
</tr>
<tr>
<td valign="top" width="198"><strong>Delay Restart for scheduled installations</strong></td>
<td valign="top" width="504">Specifies the amount of time for Automatic Updates to wait before proceeding with a scheduled restart.</p>
<p>If the status is set to Enabled, a scheduled restart will occur the specified number of minutes after the installation is finished.</p>
<p>If the status is set to Disabled or Not Configured, the default wait time is 15 minutes.</p>
<p>Note: This policy applies only when Automatic Updates is configured to perform scheduled installations of updates. If the &#8220;Configure Automatic Updates&#8221; policy is disabled, this policy has no effect.</td>
</tr>
<tr>
<td valign="top" width="198"><strong>Reschedule Automatic Updates scheduled installations</strong></td>
<td valign="top" width="504">Specifies the amount of time for Automatic Updates to wait, following system startup, before proceeding with a scheduled installation that was missed previously.</p>
<p>If the status is set to Enabled, a scheduled installation that did not take place earlier will occur the specified number of minutes after the computer is next started.</p>
<p>If the status is set to Disabled, a missed scheduled installation will occur with the next scheduled installation.</p>
<p>If the status is set to Not Configured, a missed scheduled installation will occur one minute after the computer is next started.</p>
<p>Note: This policy applies only when Automatic Updates is configured to perform scheduled installations of updates. If the &#8220;Configure Automatic Updates&#8221; policy is disabled, this policy has no effect.</td>
</tr>
<tr>
<td valign="top" width="198"><strong>Enable client-side targeting</strong></td>
<td valign="top" width="504">Specifies the target group name or names that should be used to receive updates from an intranet Microsoft update service.</p>
<p>If the status is set to Enabled, the specified target group information is sent to the intranet Microsoft update service which uses it to determine which updates should be deployed to this computer.</p>
<p>If the intranet Microsoft update service supports multiple target groups this policy can specify multiple group names separated by semicolons. Otherwise, a single group must be specified.</p>
<p>If the status is set to Disabled or Not Configured, no target group information will be sent to the intranet Microsoft update service.</p>
<p>Note: This policy applies only when the intranet Microsoft update service this computer is directed to is configured to support client-side targeting. If the &#8220;Specify intranet Microsoft update service location&#8221; policy is disabled or not configured, this policy has no effect.</td>
</tr>
<tr>
<td valign="top" width="198"><strong>Allow signed updates from an intranet Microsoft update service location</strong></td>
<td valign="top" width="504">This policy setting allows you to manage whether Automatic Updates accepts updates signed by entities other than Microsoft when the update is found on an intranet Microsoft update service location.</p>
<p>If you enable this policy setting, Automatic Updates accepts updates received through an intranet Microsoft update service location, if they are signed by a certificate found in the &#8220;Trusted Publishers&#8221; certificate store of the local computer.</p>
<p>If you disable or do not configure this policy setting, updates from an intranet Microsoft update service location must be signed by Microsoft.</p>
<p>Note: Updates from a service other than an intranet Microsoft update service must always be signed by Microsoft and are not affected by this policy setting.</td>
</tr>
</tbody>
</table>
<img src="http://feeds.feedburner.com/~r/GregoryStrike/~4/kzNMxyFR9sw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gregorystrike.com/2012/07/26/windows-automatic-update-group-policy-reference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.gregorystrike.com/2012/07/26/windows-automatic-update-group-policy-reference/</feedburner:origLink></item>
		<item>
		<title>How to Echo a Computer’s IP Adress in a Batch File</title>
		<link>http://feedproxy.google.com/~r/GregoryStrike/~3/-JGgr_nWlMk/</link>
		<comments>http://www.gregorystrike.com/2012/07/18/how-to-echo-a-computers-ip-adress-in-a-batch-file/#comments</comments>
		<pubDate>Wed, 18 Jul 2012 20:51:40 +0000</pubDate>
		<dc:creator>Gregory Strike</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Batch]]></category>

		<guid isPermaLink="false">http://www.gregorystrike.com/?p=1354</guid>
		<description><![CDATA[This is going to just be a quick post but hopefully there&#8217;s enough detail to get you going. I needed a way to display just the IP address of a computer within a batch file. I accomplished this by using a combination of FOR, ipconfig, and find: The heart of the command is ipconfig. You&#8217;re <a href='http://www.gregorystrike.com/2012/07/18/how-to-echo-a-computers-ip-adress-in-a-batch-file/' class='excerpt-more'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p>This is going to just be a quick post but hopefully there&#8217;s enough detail to get you going.</p>
<p>I needed a way to display just the IP address of a computer within a batch file.  I accomplished this by using a combination of FOR, ipconfig, and find:</p>
<pre class="brush: batch; title: ; notranslate">
FOR /F &quot;delims=: tokens=2&quot; %%a in ('ipconfig ^| find &quot;IPv4&quot;') do set _IPAddress=%%a
ECHO %_IPAddress%
</pre>
<p>The heart of the command is <strong>ipconfig</strong>.  You&#8217;re probably familiar with it, but if you&#8217;re not it displays a bunch of IP related information for the computer you&#8217;re on.  This includes the IP address.</p>
<p>The next part is <strong>find</strong>.  This only outputs the lines that have a string match.  I&#8217;m feeding it &#8220;IPv4&#8243; as I&#8217;m using it in WinPE v3.1, which is Windows 7 based. In XP and older you&#8217;d have to change &#8220;IPv4&#8243; to &#8220;IP Address&#8221; or something like that.</p>
<p>The <strong>for</strong> statement simply pulls out the correct part of the string and stores it in a variable called _IPAddress.  This can then be echoed anywhere else in the batch file.</p>
<img src="http://feeds.feedburner.com/~r/GregoryStrike/~4/-JGgr_nWlMk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gregorystrike.com/2012/07/18/how-to-echo-a-computers-ip-adress-in-a-batch-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.gregorystrike.com/2012/07/18/how-to-echo-a-computers-ip-adress-in-a-batch-file/</feedburner:origLink></item>
		<item>
		<title>Can’t TFTP Boot into WDS with VirtualBox VM</title>
		<link>http://feedproxy.google.com/~r/GregoryStrike/~3/uuZacROG310/</link>
		<comments>http://www.gregorystrike.com/2012/06/14/cant-tftp-boot-into-wds-with-virtualbox-vm/#comments</comments>
		<pubDate>Thu, 14 Jun 2012 14:41:41 +0000</pubDate>
		<dc:creator>Gregory Strike</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[VirtualBox]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.gregorystrike.com/?p=1311</guid>
		<description><![CDATA[I am using VirtualBox v4.1.16 r78094 on a Windows 7 x64 PC and my VM&#8217;s networking configuration is configured in &#8220;bridged&#8221; mode. As I was working on capturing a Windows 7 image to deploy for my company, I came across a strange issue. My VirtualBox VM was unable to PXE boot into the WDS environment. <a href='http://www.gregorystrike.com/2012/06/14/cant-tftp-boot-into-wds-with-virtualbox-vm/' class='excerpt-more'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p>I am using VirtualBox v4.1.16 r78094 on a Windows 7 x64 PC and my VM&#8217;s networking configuration is configured in &#8220;bridged&#8221; mode. As I was working on capturing a Windows 7 image to deploy for my company, I came across a strange issue. My VirtualBox VM was unable to PXE boot into the WDS environment. Other physical machines were not having an issue, just the VirtualBox VMs. When attempting to PXE boot, I would see this error.</p>
<div id="attachment_1312" class="wp-caption aligncenter" style="width: 748px"><a href="http://www.gregorystrike.com/wp-content/uploads/2012/06/VirtualBox_PXE_Error.png"><img class="size-full wp-image-1312  " title="VirtualBox PXE Error" src="http://www.gregorystrike.com/wp-content/uploads/2012/06/VirtualBox_PXE_Error.png" alt="FATAL: Could not read from the boot medium!  System halted." width="738" height="485" /></a><p class="wp-caption-text">FATAL: Could not read from the boot medium! System halted.</p></div>
<p>In the above screenshot my virtual network card was in bridged mode with the adapter type set to &#8220;Intel PRO/1000 MT Desktop (82540EM)&#8221;. To troubleshoot and see if the adapter type was the issue I changed it to &#8220;PCnet-FAST III (Am79C973)&#8221;. Doing this, I was able to get a little further, but still had problems.</p>
<div id="attachment_1314" class="wp-caption aligncenter" style="width: 750px"><a href="http://www.gregorystrike.com/wp-content/uploads/2012/06/VirtualBox_PXE_Error_2.png"><img class="size-full wp-image-1314 " title="VirtualBox PXE Error 2" src="http://www.gregorystrike.com/wp-content/uploads/2012/06/VirtualBox_PXE_Error_2.png" alt="Downloaded WDSNBP...  Architecture: x64   TFTP download failed   FATAL: Could not read from the boot medium!  System halted." width="740" height="483" /></a><p class="wp-caption-text">Downloaded WDSNBP&#8230;<br />Architecture: x64<br />TFTP download failed<br />FATAL: Could not read from the boot medium! System halted.</p></div>
<p>After some research I found that I needed to install the Orcale VM VirtualBox Extension Pack. It can be downloaded from the <a href="https://www.virtualbox.org/wiki/Downloads">VirtualBox.org Download Page</a>. Once installed, I changed the Adapter type back to &#8220;Intel PRO/1000 MT Desktop (82540EM)&#8221; and was able to successfully boot into the WDS environment!</p>
<p style="text-align: center;"><a href="http://www.gregorystrike.com/wp-content/uploads/2012/06/VirtualBox_PXE_Success.png"><img class="aligncenter size-large wp-image-1327" title="VirtualBox PXE Success" src="http://www.gregorystrike.com/wp-content/uploads/2012/06/VirtualBox_PXE_Success-1024x833.png" alt="" width="695" height="565" /></a></p>
<img src="http://feeds.feedburner.com/~r/GregoryStrike/~4/uuZacROG310" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gregorystrike.com/2012/06/14/cant-tftp-boot-into-wds-with-virtualbox-vm/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.gregorystrike.com/2012/06/14/cant-tftp-boot-into-wds-with-virtualbox-vm/</feedburner:origLink></item>
		<item>
		<title>How to Remove a Virus or Malware From Your Windows Computer</title>
		<link>http://feedproxy.google.com/~r/GregoryStrike/~3/ggZIQvX5flM/</link>
		<comments>http://www.gregorystrike.com/2012/06/01/how-to-remove-a-virus-or-malware-from-your-windows-computer/#comments</comments>
		<pubDate>Fri, 01 Jun 2012 19:16:33 +0000</pubDate>
		<dc:creator>Gregory Strike</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Malware]]></category>
		<category><![CDATA[Viruses]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.gregorystrike.com/?p=1260</guid>
		<description><![CDATA[I would like to start this post out by saying that this post is BY NO MEANS a fix all solution. Every malware (viruses too, but I&#8217;ll simply referring to them both as malware) is different. As the malware-software-writing turds get better at creating their malware they are constantly changing how they infect a system. <a href='http://www.gregorystrike.com/2012/06/01/how-to-remove-a-virus-or-malware-from-your-windows-computer/' class='excerpt-more'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p>I would like to start this post out by saying that this post is <strong>BY NO MEANS</strong> a fix all solution. Every malware (viruses too, but I&#8217;ll simply referring to them both as malware) is different. As the malware-software-writing turds get better at creating their malware they are constantly changing how they infect a system. Most of them are pretty easy to remove, but, others can be a real pain depending on the types of defenses the malware has in place. Also, understand that you use this information at your own risk. I am not responsible for any harm you may cause your system. It is important that you understand what you are doing BEFORE you do it. This post is written for people that should have good solid experience with computers, if this is not you, you may want to find someone to help you out.</p>
<p>In order to successfully infect a system, malware has to be executed somehow. This can be done by tricking a user into running an infected program or it can even be done without user intervention by exploiting security holes found in the user&#8217;s system. When the computer is turned off the OS, all the applications and any existing viruses are killed and no longer running. Their processes are terminated. So, for malware to be effective the malware needs to be able to survive a reboot. The malware does this is by finding a way to tell the operating system to launch the malware on the next reboot. This way the malware can always be sure it is running. The areas below are places I find that malware developers target the most because they help meet this very need.</p>
<p>For quick reference for those that bookmark this page, here they are.  They are explained further below.</p>
<pre>
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Startup Folders [Current User &#038; All Users]
HKEY_CLASSES_ROOT\.exe\PersistentHandler
HKEY_CLASSES_ROOT\exefile\shell\open\command
</pre>
<p><strong>HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run</strong><br />
This is usually the first place I check. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run is a registry key used to tell Windows which programs to run when a specific user logs into the computer. So when a user logs into the computer anything under this registry key will be executed. It is a HIGHLY targeted area for malware developers to attack! Since it is located under HKEY_CURRENT_USER the user will have full access to read &#038; write any changes here. So for malware developers it&#8217;s the proverbial low hanging fruit because it&#8217;s easy to write anything you want under this key.</p>
<p>Since this registry key is SPECIFIC TO THE USER it will only affect the user currently logged into the computer. So if ALL users are seeing the same infection on this computer, it is not likely located here (You may want to check the next registry key located under HKEY_LOCAL_MACHINE). What you are looking for here is anything that looks out of place. If you&#8217;re not familiar with the registry, most of it probably looks out of place! However, You should have a good feel of what you want running on your computer.</p>
<p>Some things to look for under this key would be .EXE files with random letters (ie. Hf&#038;21fe~!.EXE). It&#8217;s uncommon for normal software developers to use names so cryptic, it makes their job harder. Malware, on the other hand, will often use random .EXE names in order to prevent detection by antivirus software as the malware .EXE could now be named anything. If you find one and you feel the .EXE is malicious, make note of the path, delete the registry value and delete (or at least rename) the .EXE.</p>
<p>Another thing to look for are entries that run programs stored in the user profile. In Windows XP this would be C:\Documents and Settings\[USERNAME]\&#8230; For Vista and Windows 7 it would be anything under C:\Users\[USERNAME]\. The user profile is writable by the user and therefore an easy target. Do the same as above, make note of the path, delete the registry value and then delete the .EXE.</p>
<p>One more thing to for look for here are programs called with &#8220;Rundll32&#8243;. Rundll32.exe itself is not malware (though some malware may disguise itself as rundll32.exe). It&#8217;s a legitimate .EXE used by Windows.  If rundll32.exe is located in the System32 directory, it&#8217;s probably ok. What you should look for is the file that is listed directly after rundll32.exe (ie. &#8220;rundll32.exe &#8216;C:\Documents and Settings\[username]\Application Data\blahblahblah&#8221;). The blahblahblah is the file I would be concerned about. Keep in mind that legitimate programs can also use rundll32.exe, so before you delete anything be sure you know what you are deleting.</p>
<div id="attachment_1270" class="wp-caption aligncenter" style="width: 705px"><a href="http://www.gregorystrike.com/wp-content/uploads/2012/06/REGEDIT_Run_Key_Example1.png"><img class="size-large wp-image-1270" title="RegEdit - Local Machine Run Malware Example" src="http://www.gregorystrike.com/wp-content/uploads/2012/06/REGEDIT_Run_Key_Example1-1024x601.png" alt="" width="695" height="407" /></a><p class="wp-caption-text">A screenshot of the HKEY_LOCAL_MACHINE Run key showing an example of a suspicious entry. This run key works just like the HKEY_CURRENT_USER key with the difference being that it applies to all users on the system.</p></div>
<p><strong>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run</strong><br />
This registry key is pretty much the same as the HKEY_CURRENT_USER key above with the main difference being that it is SYSTEM WIDE. The entries under this key will be executed by any user that signs on to the computer. It&#8217;s not targeted as much as HKEY_CURRENT_USER because you need Administrative privileges to write changes here. However, some malware will still try to write here because if they are able to the benefit is that they can be sure their malware runs anytime ANYONE signs on to the computer, not just the person that caused the initial infection.</p>
<p>You are looking for the same types of entries here as the HKEY_CURRENT_USER key above.</p>
<p><strong>Startup Folders [Current User &#038; All Users]</strong><br />
The startup folder dates WAY back to Windows 3.1 (probably even earlier) and it is still used to this day. It&#8217;s purpose is very similar to the Run keys above, it runs programs when a user signs in. The difference is that this is a folder, not a registry key.</p>
<p>The default startup folder locations for all users. Anything located in these folders will be executed when ANY user signs on to the computer.</p>
<pre>Windows XP - "C:\Documents and Settings\All Users\Start Menu\Programs\Startup"
Vista / 7  - "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"</pre>
<p>The default startup folder locations for a specific user. This applies only to the specific user and will not affect others that sign on to the system.</p>
<pre>Windows XP - "C:\Documents and Settings\[USER NAME]\Start Menu\Programs\Startup"
Vista / 7  - "C:\Users\[USER NAME]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"</pre>
<p>In these folders we are again looking for things that don&#8217;t belong or look suspicious. The same type of rules apply here as they do in the Run keys above (ie. random characters). Most of time, however, the items listed in these folder will be shortcuts (or links). So in order to be sure we find the executable culprit, we need to <strong>Right-Click</strong> on the suspected file and choose <strong>properties</strong>. On the <strong>Shortcut</strong> tab, it will give us the <strong>Target</strong>. The target should be the actual executable file that will run. Make a note of the path, delete the shortcut, and then rename or delete the executable.</p>
<div id="attachment_1280" class="wp-caption aligncenter" style="width: 387px"><a href="http://www.gregorystrike.com/wp-content/uploads/2012/06/Shortcut-Properties-Example.png"><img class="size-full wp-image-1280" title="Shortcut Properties Example" src="http://www.gregorystrike.com/wp-content/uploads/2012/06/Shortcut-Properties-Example.png" alt="" width="377" height="533" /></a><p class="wp-caption-text">Example of the Properties view of a shortcut</p></div>
<p><strong>File Association .EXE Hijacking</strong><br />
These next two registry locations handle the file associations of .EXE files.  Basically, A file association is how Windows knows what program to use to open a certain type of file.  For instance when you click on a .XLS file, Windows knows to open Excel.  If you click on a .PDF file, Windows will know to open Adobe Reader.</p>
<p>Windows also has file associations for .EXE files.  In normal situations when a user clicks on an .EXE, Windows will check the assocation for .EXE files and then use Explorer to launch the requested .EXE.  Everyone is happy.</p>
<p><a href="http://www.gregorystrike.com/wp-content/uploads/2012/06/Association_Flow_Standard.png"><img src="http://www.gregorystrike.com/wp-content/uploads/2012/06/Association_Flow_Standard.png" alt="" title="Standard File Association Flow" width="598" height="286" class="aligncenter size-full wp-image-1293" /></a></p>
<p>However, malware can hijack the association so that anytime an .EXE is run, the malware is run.  Once the malware runs, it will usually run the originally intended .EXE and the user is none the wiser to what&#8217;s occurring in the background.  The result is the malware runs.</p>
<p><a href="http://www.gregorystrike.com/wp-content/uploads/2012/06/Association_Flow_Hijacked.png"><img src="http://www.gregorystrike.com/wp-content/uploads/2012/06/Association_Flow_Hijacked.png" alt="" title="Hijacked File Association Flow" width="799" height="286" class="aligncenter size-full wp-image-1294" /></a></p>
<p>To check that this isn&#8217;t happening you&#8217;ll want to check these registry keys:</p>
<pre>
<strong>HKEY_CLASSES_ROOT\.exe\PersistentHandler</strong> 
     <strong>(Default)</strong> value should equal: {098f2470-bae0-11cd-b579-08002b30bfeb}
<strong>HKEY_CLASSES_ROOT\exefile\shell\open\command</strong> 
     <strong>(Default)</strong> value should equal: "%1" %*
     <strong>IsolatedCommand</strong> value should equal: "%1" %*
</pre>
<p>That covers the first places I check when troubleshoot malware problems.  I hope that reading this article has taught you something and you may be able to approach your issue with a little more insight than before.</p>
<p>Again, please let me stress that this will not fix ALL the malware issues out there.  If you&#8217;re still having problems getting it cleaned up be sure to ask your &#8220;computer guy&#8221; to give you a hand.  If you do, be sure to buy him/her lunch or something.  Most of us are really nice people and won&#8217;t make a big deal out of it but I can tell you that showing your appreciation with some food or <strong>*GASP*</strong> even a little money would stand out as it doesn&#8217;t happen that often.  It would also be greatly appreciated!  &#8230;Oh, and there&#8217;s always <a href="http://www.amazon.com/registry/wishlist/23L4DL9IYCGWX/ref=cm_sw_r_tw_ws_Y7a0ob082ADWK">my Amazon wishlist</a>! <img src='http://www.gregorystrike.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/GregoryStrike/~4/ggZIQvX5flM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gregorystrike.com/2012/06/01/how-to-remove-a-virus-or-malware-from-your-windows-computer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.gregorystrike.com/2012/06/01/how-to-remove-a-virus-or-malware-from-your-windows-computer/</feedburner:origLink></item>
	</channel>
</rss>
