#!/usr/bin/env perl
#############################################################################
# DevPartner boundschecker 9.0, 9.1 trial period reset                      #
#############################################################################
use strict;
use Win32;
use Win32::File;
use Win32::Registry;

my $DEBUG = 0;

#############################################################################
my $arch  = Win32::GetChipName();
my @osver = Win32::GetOSVersion();

die "Your system is too old" if ( $osver[1] < 5 ); # 5: 2k, xp, 2k3
die "Your system is too new" if ( $osver[1] > 6 ); # 6: Vista, Win7; 7: ?

my ( $x64, $vista ) = ( $arch eq '8664', $osver[1] > 5 );

my $allu = $ENV{ $vista ? 'PUBLIC' : 'ALLUSERSPROFILE' } . "\\.compuware";
my $rkey = "SOFTWARE\\" . "Wow6432Node\\" x $x64 . "Compuware\\DLM";

print "allu = '$allu'\nrkey = 'HKLM\\$rkey'\n" if ( $DEBUG );

#############################################################################
opendir(DIR, $allu) || die "Can't scan '$allu' directory -- $!";
while( my $n = readdir(DIR) ) {
  print "$n\n" if ( $DEBUG > 1 );
  my $p = "$allu\\$n";
  next unless ( $n =~ m!^\._!o && -f $p );

  print "unlink: '$p'\n";
  my $a = 0;
  Win32::File::GetAttributes($p, $a);
  $a &= ~(Win32::File::HIDDEN | Win32::File::SYSTEM | Win32::File::READONLY);
  Win32::File::SetAttributes($p, $a);
  unlink($p);
}
closedir(DIR);

#############################################################################
my $DLM;
$::HKEY_LOCAL_MACHINE->Open($rkey, $DLM) || die "Can't open '$rkey' -- $^E";

my %Values;
$DLM->GetValues(\%Values);

for my $k (keys %Values) {
  my ($t, $v) = ( $Values{$k}->[1], $Values{$k}->[2] );
  print "k=$k t=$t v=$v\n" if ( $DEBUG > 1 );
  next unless ( $t == Win32::Registry::REG_SZ && length($v) == 224 );

  print "DeleteValue: 'HKLM\\$rkey\\$k'\n";
  $DLM->DeleteValue($k);
} 
 
$DLM->Close();

#############################################################################
exit 0;
