DonatShell
Server IP : 180.180.241.3  /  Your IP : 216.73.216.252
Web Server : Microsoft-IIS/7.5
System : Windows NT NETWORK-NHRC 6.1 build 7601 (Windows Server 2008 R2 Standard Edition Service Pack 1) i586
User : IUSR ( 0)
PHP Version : 5.3.28
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /Windows/diagnostics/system/PCW/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME SHELL ]     

Current File : /Windows/diagnostics/system/PCW//TS_ProgramCompatibilityWizard.ps1
# Copyright © 2008, Microsoft Corporation. All rights reserved.


#TS_ProgramCompatibilityWizard
#rparsons - 05 May 2008

$ShortcutListing = New-Object System.Collections.Hashtable
$ExeListing = New-Object System.Collections.ArrayList
$CombinedListing = New-Object System.Collections.ArrayList

Import-LocalizedData -BindingVariable CompatibilityStrings -FileName CL_LocalizationData

$typeDefinition = @"

using System;
using System.IO;
using System.Runtime.InteropServices;

public class Utility
{
    public static string GetStartMenuPath()
    {
        return Environment.GetFolderPath(Environment.SpecialFolder.StartMenu);
    }

    public static string GetAllUsersStartMenuPath()
    {
        return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Microsoft\\Windows\\Start Menu");
    }

    public static string GetDesktopPath()
    {
        return Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
    }

    [DllImport("sfc.dll", SetLastError=true, EntryPoint="SfcIsFileProtected", CharSet=CharSet.Unicode)]
    [return : MarshalAs(UnmanagedType.Bool)]
    public static extern bool SfcIsFileProtected(IntPtr RpcHandle, String ProtFileName);

    public static bool IsFileProtected(String FileName)
    {
        return SfcIsFileProtected(IntPtr.Zero, FileName);
    }
}
"@

$typeDefinition2 = @"

using System;
using System.Collections;
using System.Diagnostics;
using System.IO;

public class ProgramSorter : IComparer
{
    int IComparer.Compare(Object x, Object y)
    {
        string friendlyNameX = GetFriendlyName(x.ToString());
        string friendlyNameY = GetFriendlyName(y.ToString());

        return friendlyNameX.CompareTo(friendlyNameY);
    }

    public string GetFriendlyName(string path)
    {
        if (path.EndsWith(".lnk"))
        {
            return Path.GetFileNameWithoutExtension(path);
        }

        FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(path);
        string friendlyName = null;

        if(versionInfo != null)
        {
            if(versionInfo.FileDescription != null)
            {
                friendlyName = versionInfo.FileDescription.Trim();
            }
        }

        if((friendlyName == null) || (friendlyName == String.Empty))
        {
            friendlyName = Path.GetFileNameWithoutExtension(path);
        }

        return friendlyName;
    }
}
"@


$typeDefinition3 = @"

using System;
using System.Runtime.InteropServices;
using System.Text;

public class ExeFromLnk
{
    const int MAX_PATH = 260;

    [DllImport("acppage.dll", EntryPoint="GetExeFromLnk", CharSet=CharSet.Unicode)]
    [return : MarshalAs(UnmanagedType.Bool)]
    public static extern bool GetExeFromLnk(String pszLnk, StringBuilder pszExe, int cchSize);

    public static String GetTargetExePath(String LinkPath)
    {
        StringBuilder exePath = new StringBuilder(MAX_PATH);
        if (GetExeFromLnk(LinkPath, exePath, exePath.Capacity))
        {
            return exePath.ToString().Replace("$", "`$");
        }

        return String.Empty;
    }

    public static String EscapePath(String Path)
    {
        return Path.Replace("$", "`$");
    }
}
"@

$type = Add-Type -TypeDefinition $typeDefinition -PassThru
$type3 = Add-Type -TypeDefinition $typeDefinition3 -PassThru

# Function to convert to WQL path
function ConvertTo-WQLPath([string]$wqlPath = $(throw "No path is specified"))
{
    if($wqlPath -eq $null)
    {
        return $false
    }

    return $wqlPath.Replace("\", "\\")
}

# Function to retrieve all of the shortcuts from the provided directory
function Get-ShortcutList([string]$path = $(throw $CompatibilityStrings.Throw_NO_PATH))
{
    Get-ChildItem -Path $path -recurse -filter *.lnk | Foreach-Object {
        $fullPath = ConvertTo-WQLPath($_.FullName)

        $exePath = $type3::GetTargetExePath($fullPath)

        if(($exePath -ne $null) -and -not([String]::IsNullOrEmpty($exePath)) -and ([System.IO.Path]::GetExtension($exePath) -eq ".exe"))
        {
            if(Test-Path $exePath)
            {
                if(-not($type::IsFileProtected($exePath)))
                {
                    if(-not($ShortcutListing.ContainsKey($fullPath)) -and -not($ShortcutListing.ContainsValue($exePath)))
                    {
                        [System.Collections.Hashtable]$ShortcutListing.Add($fullPath, $exePath)
                    }
                }
            }
        }
    }
}

# Function to retrieve all the executables from the provided directory
function Get-ExeList([string]$path = $(throw $CompatibilityStrings.Throw_NO_PATH))
{
    Get-ChildItem -Path $path -recurse -filter *.exe | Foreach-Object {
        $exePath = $_.FullName.Replace("$", "`$")

        if(Test-Path $exePath)
        {
            if(-not($type::IsFileProtected($exePath)))
            {
                if(-not($ExeListing.Contains($exePath)) -and -not($ShortcutListing.ContainsValue($exePath)))
                {
                    $ExeListing.Add($exePath)
                }
            }
        }
    }
}

# Function to determine whether the selected program is valid
function Test-Selection([string]$appPath)
{
    $testresult = $false

    if(($appPath -ne $null) -and -not([String]::IsNullOrEmpty($appPath)))
    {
        $testresult = test-path $appPath

        if($testresult)
        {
            if(-not($type::IsFileProtected($appPath)))
            {
                $extension = [System.IO.Path]::GetExtension($appPath)
                $testresult = ($extension -eq ".exe") -or ($extension -eq ".msi")
            }
            else
            {
                $testresult = $false
                Set-Variable -name rebrowseText -value $CompatibilityStrings.Text_FILE_PROTECTED -scope global
            }
        }
    }

    Set-Variable -name appValid -value $testResult -scope global
}

$LaunchMethod = "ControlPanel"

try {
    $LaunchMethod = Get-DiagInput -id IT_LaunchMethod -errorAction silentlyContinue
}
# MSDT_E_NO_ANSWER_NOUI
catch {
    $LaunchMethod = "ControlPanel"
}

[string]$startMenuPath = $type::GetStartMenuPath()
[string]$allUsersStartMenuPath = $type::GetAllUsersStartMenuPath()
[string]$desktopPath = $type::GetDesktopPath()

$choices = New-Object System.Collections.ArrayList
set-variable ChoicesAvailable $false -scope global

#Add a 'Not Listed' entry
$notListedChoice = @{}
$notListedChoice.Add("Name", $CompatibilityStrings.Program_Choice_NOTLISTED)
$notListedChoice.Add("Description", $CompatibilityStrings.Program_Choice_NOTLISTED)
$notListedChoice.Add("Value", "NotListed")

$choices += $notListedChoice

if($LaunchMethod -ne "ContextMenu")
{
    Write-DiagProgress -activity $CompatibilityStrings.Text_Activity_TROUBLESHOOTING -status $CompatibilityStrings.Text_Status_SEARCHING

    Get-ShortcutList($startMenuPath)
    Get-ShortcutList($allUsersStartMenuPath)
    Get-ShortcutList($desktopPath)
    Get-ExeList($desktopPath)

    #Combine the entries into one list for sorting
    foreach($pathKey in $ShortcutListing.keys)
    {
        $CombinedListing.Add($pathKey)
    }

    foreach($exePath in $ExeListing)
    {
        $CombinedListing.Add($exePath)
    }

    #Sort the combined list
    Add-Type -TypeDefinition $typeDefinition2
    $programSorter = New-Object ProgramSorter
    $CombinedListing.Sort($programSorter)

    #Add choices for each entry in the combined list
    foreach($path in $CombinedListing)
    {
        Set-Variable -name ChoicesAvailable -value $true -scope global
        $friendlyName = $programSorter.GetFriendlyName($path)
        $fullPathToTarget = $path

        if ($path.EndsWith(".lnk"))
        {
            $fullPathToTarget = $ShortcutListing[$path]
        }

        $choice = @{}
        $choice.Add("Name", $friendlyName)
        $choice.Add("Description", $fullPathToTarget)
        $choice.Add("Value", $fullPathToTarget)

        $choices += $choice
    }
}

if(-not($ChoicesAvailable))
{
    $selectedProgram = Get-DiagInput -id IT_BrowseForFile
}
else
{
    $selectedProgram = Get-DiagInput -id IT_SelectProgram -choice $choices

    if($selectedProgram -eq "NotListed")
    {
        $selectedProgram = Get-DiagInput -id IT_BrowseForFile
    }

}

Set-Variable -name rebrowseText -value $CompatibilityStrings.Text_FILE_INVALID -scope global
Set-Variable -name appValid -value $false -scope global
Test-Selection($selectedProgram)

$InstanceId = 0

while(-not($appValid))
{
    $InstanceId++
    $selection = $selectedProgram
    $selectedProgram = Get-DiagInput -id IT_RebrowseForFile -parameter @{ "SelectedProgram" = $selection; "RebrowseText" = $rebrowseText; "Instance" = $InstanceId }
    Set-Variable -name rebrowseText -value $CompatibilityStrings.Text_FILE_INVALID -scope global
    Test-Selection($selectedProgram)
}

$appName = [System.IO.Path]::GetFileNameWithoutExtension($selectedProgram).Replace("$", "`$")

#Go back through the choices to find the display name for the selected application.
foreach ($choice in $choices)
{
    if($choice["Value"] -eq $selectedProgram)
    {
        $appName = $choice["Name"].Replace("$", "`$")
        break
    }
}

#TODO: Shortcut icon index not working properly?
Update-DiagRootCause -id "RC_IncompatibleApplication" -Detected $true -parameter @{ "TARGETPATH" = $selectedProgram; "APPNAME" = $appName}


Anon7 - 2022
AnonSec Team