<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://toorcon.techpathways.com/cs/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>ProScript and Perl </title><link>http://toorcon.techpathways.com/cs/forums/5/ShowForum.aspx</link><description>Discussions related to the ProScript API and Perl</description><dc:language>en-US</dc:language><generator>CommunityServer 2.0 (Build: 60217.2664)</generator><item><title>Re: Reading binary contents from a file</title><link>http://toorcon.techpathways.com/cs/forums/thread/93.aspx</link><pubDate>Mon, 16 Oct 2006 21:44:30 GMT</pubDate><guid isPermaLink="false">e7e58421-8683-42c1-b30c-f6943a49c522:93</guid><dc:creator>Chris</dc:creator><slash:comments>0</slash:comments><comments>http://toorcon.techpathways.com/cs/forums/thread/93.aspx</comments><wfw:commentRss>http://toorcon.techpathways.com/cs/forums/commentrss.aspx?SectionID=5&amp;PostID=93</wfw:commentRss><description>&lt;P&gt;Harlan,&lt;/P&gt;
&lt;P&gt;We think we found a fix to your issue. We've still got a little in house testing to do, and should have soemthing for you to test by tomorrow. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Re: Reading binary contents from a file</title><link>http://toorcon.techpathways.com/cs/forums/thread/92.aspx</link><pubDate>Sat, 14 Oct 2006 12:04:56 GMT</pubDate><guid isPermaLink="false">e7e58421-8683-42c1-b30c-f6943a49c522:92</guid><dc:creator>keydet89</dc:creator><slash:comments>0</slash:comments><comments>http://toorcon.techpathways.com/cs/forums/thread/92.aspx</comments><wfw:commentRss>http://toorcon.techpathways.com/cs/forums/commentrss.aspx?SectionID=5&amp;PostID=92</wfw:commentRss><description>Chris,&lt;br&gt;&lt;br&gt;Thanks, I'll check back then...&lt;br&gt;&lt;br&gt;Harlan&lt;br&gt;</description></item><item><title>Re: Reading binary contents from a file</title><link>http://toorcon.techpathways.com/cs/forums/thread/91.aspx</link><pubDate>Fri, 13 Oct 2006 20:46:53 GMT</pubDate><guid isPermaLink="false">e7e58421-8683-42c1-b30c-f6943a49c522:91</guid><dc:creator>Chris</dc:creator><slash:comments>0</slash:comments><comments>http://toorcon.techpathways.com/cs/forums/thread/91.aspx</comments><wfw:commentRss>http://toorcon.techpathways.com/cs/forums/commentrss.aspx?SectionID=5&amp;PostID=91</wfw:commentRss><description>&lt;P&gt;Harlan,&lt;/P&gt;
&lt;P&gt;As usual thanks for the post. You continue to write some great&amp;nbsp;ProScipts. The team is looking into your issues and we should have an answer by Monday along with the NIST Hacking Case image you reported. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Re: Reading binary contents from a file</title><link>http://toorcon.techpathways.com/cs/forums/thread/90.aspx</link><pubDate>Fri, 13 Oct 2006 00:16:16 GMT</pubDate><guid isPermaLink="false">e7e58421-8683-42c1-b30c-f6943a49c522:90</guid><dc:creator>keydet89</dc:creator><slash:comments>0</slash:comments><comments>http://toorcon.techpathways.com/cs/forums/thread/90.aspx</comments><wfw:commentRss>http://toorcon.techpathways.com/cs/forums/commentrss.aspx?SectionID=5&amp;PostID=90</wfw:commentRss><description>As a follow-up to this, I think there may be a problem with the documentation, or the PSReadRaw() function.&amp;nbsp; The docs say that after PSReadRaw() completes, the file pointer updated by the number of bytes read.&amp;nbsp; To test this, I altered the getRpDescr() function (pasted below), and ran the ProScript all over again.&amp;nbsp; The script read the same bytes, over and over.&lt;br&gt;&lt;br&gt;Thanks,&lt;br&gt;&lt;br&gt;Harlan&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------------------------------&lt;br&gt;#---------------------------------------------------------&lt;br&gt;# getRpDescr()&lt;br&gt;# Read the rp.log file to get the description and creation&lt;br&gt;# date&lt;br&gt;#---------------------------------------------------------&lt;br&gt;sub getRpDescr {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $path = shift;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $buffer;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $tag = 1;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $offset = 0x10;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $str;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (my $oFile = PSOpen($path)) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PSSeek($oFile,$offset,0,PS_FILE_BEGIN);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (0..9) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PSDisplayText("\tOffset = $offset");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $buffer = PSReadRaw($oFile,2);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PSDisplayText("\t$buffer");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PSClose($oFile);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PSDisplayText("File could not be opened.");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;}&lt;br&gt;</description></item><item><title>Reading binary contents from a file</title><link>http://toorcon.techpathways.com/cs/forums/thread/89.aspx</link><pubDate>Thu, 12 Oct 2006 23:56:10 GMT</pubDate><guid isPermaLink="false">e7e58421-8683-42c1-b30c-f6943a49c522:89</guid><dc:creator>keydet89</dc:creator><slash:comments>0</slash:comments><comments>http://toorcon.techpathways.com/cs/forums/thread/89.aspx</comments><wfw:commentRss>http://toorcon.techpathways.com/cs/forums/commentrss.aspx?SectionID=5&amp;PostID=89</wfw:commentRss><description>I'm having trouble reading some data from files in PD 4.8.&amp;nbsp; Here's the issue:&lt;br&gt;&lt;br&gt;&lt;br&gt;I'm trying to parse data from the rp.log files in the XP restore points.&amp;nbsp; I have no trouble locating the system drive, navigating to the necessary directories, and getting a list of files.&amp;nbsp; I'm also able to go to offset 0x210 in the file, read in 8 bytes, and compute the creation time.&lt;br&gt;&lt;br&gt;My problem now is getting the description from the file.&amp;nbsp; The description is a null-terminated Unicode string starting at offset 0x10.&amp;nbsp; I can get there easily enough and get the first letter, but after that, my code bombs (code pasted below).&amp;nbsp; Ideally what I want getRpDescr() to do is return the description string.&amp;nbsp; I'm trying to just get it to read the bytes now, and I'm having some trouble.&amp;nbsp; Here's what the output looks like for me (excerpt):&lt;br&gt;&lt;br&gt;RP25&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 16&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; S&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 18&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 20&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 22&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 24&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; e&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 26&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 28&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 30&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 32&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; h&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 34&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thu Jan 20 20:56:37 2005 (UTC)&lt;br&gt;RP26&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 16&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; S&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 18&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 20&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 22&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 24&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; w&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 26&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 28&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 30&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 32&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Offset = 34&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thu Jan 20 21:05:47 2005 (UTC)&lt;br&gt;&lt;br&gt;Thanks,&lt;br&gt;&lt;br&gt;Harlan&lt;br&gt;&lt;br&gt;-----------------------------------------------------------------------------------------&lt;br&gt;#! c:\perl\bin\perl.exe&lt;br&gt;#-------------------------------------------------------------&lt;br&gt;# SysRestore.pl, version 0.1&lt;br&gt;# ProScript to parse the System Restore subdirectories for rp.log files, and &lt;br&gt;# then parse the files for description and creation time info&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;#&lt;br&gt;# Copyright 2006 H. Carvey, keydet89@yahoo.com&lt;br&gt;#-------------------------------------------------------------&lt;br&gt;use ProScript;&lt;br&gt;PSDisplayText("SysRestore.pl v. 0.1");&lt;br&gt;PSDisplayText("ProScript to parse through the System Restore subdirectories on Windows XP");&lt;br&gt;PSDisplayText("systems and return the descriptions and creation times from the rp\.log files.");&lt;br&gt;PSDisplayText("\n");&lt;br&gt;#-------------------------------------------------------------&lt;br&gt;# Get the SystemRoot value&lt;br&gt;my %sysinfo = ();&lt;br&gt;$numRegs = PSGetNumRegistries();&lt;br&gt;&lt;br&gt;if ($numRegs == 0) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PSDisplayText("No registries to process");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br&gt;}&lt;br&gt;&lt;br&gt;$regName = PSGetRegistryAt(0);&lt;br&gt;PSRefreshRegistry($regName);&lt;br&gt;my $keyName = "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion";&lt;br&gt;my $rHandle = PSOpenRegistry($regName, $keyName);&lt;br&gt;&lt;br&gt;if ($rHandle == 0) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PSDisplayText("Unable to locate registry key");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br&gt;}&lt;br&gt;else {&lt;br&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; PSDisplayText("Registry opened succesfully.");&lt;br&gt;}&lt;br&gt;&lt;br&gt;while (1) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $RegKeyInfo&amp;nbsp; = &amp;amp;ProScript::PSReadRegistry($rHandle);&lt;br&gt;&amp;nbsp; last if ($RegKeyInfo-&amp;gt;{nType} == -1);&lt;br&gt;&amp;nbsp; next if ($RegKeyInfo-&amp;gt;{nType} == PS_TYPE_KEY);&lt;br&gt;&amp;nbsp; my $value = $RegKeyInfo-&amp;gt;{strRegName};&lt;br&gt;&amp;nbsp; my $data&amp;nbsp; = $RegKeyInfo-&amp;gt;{strValueData};&lt;br&gt;#&amp;nbsp; PSDisplayText($value." --&amp;gt; ".$data);&lt;br&gt;&amp;nbsp; $sysinfo{$value} = $data;&lt;br&gt;}&lt;br&gt;PSCloseHandle($rHandle);&lt;br&gt;#-------------------------------------------------------------&lt;br&gt;# Now we have a %sysinfo hash, and all we really want is the &lt;br&gt;# "SystemRoot" value&lt;br&gt;&lt;br&gt;my $sysroot = $sysinfo{"SystemRoot"};&lt;br&gt;my $drive&amp;nbsp;&amp;nbsp; = (split(/:/,$sysinfo{"SystemRoot"},2))[0];&lt;br&gt;# $drive should now just be a drive letter &lt;br&gt;&lt;br&gt;my $objectName = PSGetObjectName(0);&lt;br&gt;my $path&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = $objectName."\\".$drive.":\\System Volume Information";&lt;br&gt;&lt;br&gt;#---------------------------------------------------------&lt;br&gt;# First, we need to get the name of the _restore directory&lt;br&gt;#---------------------------------------------------------&lt;br&gt;my $pHandle = PSOpenDir($path,0);&lt;br&gt;if ($pHandle == NULL) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PSDisplayText("$path not opened.");&lt;br&gt;}&lt;br&gt;my $rest = "_restore";&lt;br&gt;my $restoredir;&lt;br&gt;my $tag = 1;&lt;br&gt;while ($tag) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $file = &amp;amp;ProScript::PSReadDirectory($pHandle);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $tag = 0 if ($file == NULL || $file-&amp;gt;{strName} eq "");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $restoredir = $file-&amp;gt;{strName} if ($file-&amp;gt;{bIsDirectory} &amp;amp;&amp;amp; $file-&amp;gt;{strName} =~ m/^$rest/i);&lt;br&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; PSDisplayText("Name : $file-&amp;gt;{strName}");&lt;br&gt;}&lt;br&gt;PSCloseHandle($pHandle);&lt;br&gt;&lt;br&gt;$path = $path."\\".$restoredir."\\";&lt;br&gt;&lt;br&gt;#---------------------------------------------------------&lt;br&gt;# Now, we need to get the list of subdirectories&lt;br&gt;#---------------------------------------------------------&lt;br&gt;my @rpdirs = ();&lt;br&gt;my $rpdir = "RP";&lt;br&gt;&lt;br&gt;my $pHandle = PSOpenDir($path,0);&lt;br&gt;if ($pHandle == NULL) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PSDisplayText("$path not opened.");&lt;br&gt;}&lt;br&gt;my $tag = 1;&lt;br&gt;while ($tag) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $file = &amp;amp;ProScript::PSReadDirectory($pHandle);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $tag = 0 if ($file == NULL || $file-&amp;gt;{strName} eq "");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; push(@rpdirs,$file-&amp;gt;{strName}) if ($file-&amp;gt;{bIsDirectory} &amp;amp;&amp;amp; $file-&amp;gt;{strName} =~ m/^$rpdir/);&lt;br&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; PSDisplayText("Name : $file-&amp;gt;{strName}");&lt;br&gt;}&lt;br&gt;PSCloseHandle($pHandle);&lt;br&gt;foreach my $rp (@rpdirs) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $rp_path = $path.$rp."\\rp\.log";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PSDisplayText($rp);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; getRpDescr($rp_path);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $creation = getCreationTime($rp_path);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PSDisplayText("\t$creation (UTC)");&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;#---------------------------------------------------------&lt;br&gt;# getCreationTime()&lt;br&gt;# Read the rp.log file to get the description and creation&lt;br&gt;# date&lt;br&gt;#---------------------------------------------------------&lt;br&gt;sub getCreationTime {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $path = shift;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $t_val = 0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (my $oFile = PSOpen($path)) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (PSSeek($oFile,0x210,0,PS_FILE_BEGIN)) {&lt;br&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; my $buffer = &amp;amp;ProScript::PSReadRaw($oFile,8);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; my $buffer = PSReadRaw($oFile,8);&lt;br&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PSCloseHandle($oFile);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; my @vals = unpack("VV",$buffer);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $t_val = getTime($vals[0],$vals[1]);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PSDisplayText("File seek to first offset failed.");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PSDisplayText("File could not be opened.");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PSClose($oFile);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return gmtime($t_val);&lt;br&gt;}&lt;br&gt;&lt;br&gt;#---------------------------------------------------------&lt;br&gt;# getRpDescr()&lt;br&gt;# Read the rp.log file to get the description and creation&lt;br&gt;# date&lt;br&gt;#---------------------------------------------------------&lt;br&gt;sub getRpDescr {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $path = shift;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $buffer;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $tag = 1;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $offset = 0x10;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $str;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (my $oFile = PSOpen($path)) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (0..9) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PSDisplayText("\tOffset = $offset");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PSSeek($oFile,$offset,0,PS_FILE_BEGIN);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $buffer = PSReadRaw($oFile,2);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PSDisplayText("\t$buffer");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $offset += 2;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PSClose($oFile);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PSDisplayText("File could not be opened.");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;}&lt;br&gt;&lt;br&gt;#---------------------------------------------------------&lt;br&gt;# getTime()&lt;br&gt;# Get Unix-style date/time from FILETIME object&lt;br&gt;# Input : 8 byte FILETIME object&lt;br&gt;# Output: Unix-style date/time&lt;br&gt;# Thanks goes to Andreas Schuster for the below code, which he&lt;br&gt;# included in his ptfinder.pl&lt;br&gt;#---------------------------------------------------------&lt;br&gt;sub getTime {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $lo = shift;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $hi = shift;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $t;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($lo == 0 &amp;amp;&amp;amp; $hi == 0) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $t = 0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $lo -= 0xd53e8000;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $hi -= 0x019db1de;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $t = int($hi*429.4967296 + $lo/1e7);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $t = 0 if ($t &amp;lt; 0);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $t;&lt;br&gt;}&lt;br&gt;</description></item></channel></rss>