Skip to main content

ScrewDrivers Client Plugin Registry Configuration

Overview

The ScrewDrivers Client uses protocol-specific plugins to integrate with RDP and Citrix ICA connections. Understanding the registry configuration for these plugins is essential for troubleshooting client installation issues, connection problems, and plugin loading failures.

This technical reference documents the registry keys and values created by the ScrewDrivers Client installer for both RDP and ICA (Citrix) protocols.

RDP Plugin Configuration

The RDP plugin enables ScrewDrivers functionality over Remote Desktop Protocol connections.

Plugin DLL Files

The RDP plugin DLL is installed to the Windows system directory:

VersionDLL FilenameLocation
v4sdrdp5.dllC:\Windows\system32
v6 (64-bit)sdrdp64.dllC:\Windows\system32
v6 (32-bit)sdrdp32.dllC:\Windows\system32
v7 (64-bit)sdrdp64.dllC:\Windows\system32
v7 (32-bit)sdrdp32.dllC:\Windows\system32

Auto-Run Registry Entry

The installer creates an auto-run entry that executes install_rdp.exe at user logon to ensure the RDP plugin is properly configured.

Registry Path:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

Values:

  • Value Name: ScrewDrivers RDP Plugin
  • Value Type: REG_SZ
  • Value Data: Path to install_rdp.exe

Example Value Data:

C:\Program Files\Tricerat\Simplify Printing\ScrewDrivers Client v4\install_rdp.exe
info

The exact path varies by version. For v6 and v7, the path typically includes "ScrewDrivers" rather than "Simplify Printing" in the folder structure.

RDP Plugin User Configuration

The install_rdp.exe utility configures the following registry values in the current user's hive (HKCU):

Registry Path:

HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default\Addins\SDFXP

This key path creates intermediate keys: "Default", "Addins", and "SDFXP".

Values:

Value NameTypeDataPurpose
NameREG_SZPath to RDP plugin DLLSpecifies plugin location
PCoIPEnabledREG_DWORD1Enables PCoIP protocol support
REMOTECONTROLPERSISTENTREG_DWORD0Controls remote control persistence

Example Values:

Name: C:\Windows\system32\sdrdp5.dll
PCoIPEnabled: 1
REMOTECONTROLPERSISTENT: 0

Troubleshooting RDP Plugin Issues

If RDP connections aren't loading ScrewDrivers:

  1. Verify the auto-run entry exists in HKLM\...\Run
  2. Check that install_rdp.exe exists at the specified path
  3. Verify user-level configuration in HKCU\...\Terminal Server Client\...\SDFXP
  4. Confirm the plugin DLL exists at the path specified in the Name value
  5. Check DLL permissions: Ensure the current user can read the DLL
  6. Re-run install_rdp.exe manually to recreate user-level configuration

ICA (Citrix) Plugin Configuration

The ICA plugin enables ScrewDrivers functionality over Citrix ICA connections.

Plugin DLL Files

The ICA plugin DLL is installed to the Citrix ICA Client directory:

ArchitectureDLL FilenameLocation
v4sdica6.dllCitrix ICA Client directory
v6 (64-bit)sdica32.dllC:\Program Files (x86)\Citrix\ICA Client
v6 (32-bit)sdica32.dllC:\Program Files\Citrix\ICA Client
v7 (64-bit)sdica32.dllC:\Program Files (x86)\Citrix\ICA Client
v7 (32-bit)sdica32.dllC:\Program Files\Citrix\ICA Client
info

Even on 64-bit systems, the Citrix ICA Client often runs as a 32-bit process, which is why the plugin is installed to Program Files (x86) and uses sdica32.dll.

ICA Virtual Channel Configuration

The installer configures the ScrewDrivers virtual channel in the Citrix ICA Client configuration.

Registry Path (64-bit Windows):

HKEY_LOCAL_MACHINE\Software\Wow6432Node\Citrix\ICA Client\Engine\Configuration\Advanced\Modules

Registry Path (32-bit Windows):

HKEY_LOCAL_MACHINE\Software\Citrix\ICA Client\Engine\Configuration\Advanced\Modules

ICA Registry Values

The following subkeys and values are configured:

ICA 3.0 Subkey

Path: ...\Modules\ICA 3.0

Value:

  • Value Name: VirtualDriver
  • Value Type: REG_SZ
  • Action: Adds ScrewDriversFXP to the existing list of virtual drivers

ScrewDriversFXP Subkey (New)

Path: ...\Modules\ScrewDriversFXP

Value:

  • Value Name: DriverNameWin32
  • Value Type: REG_SZ
  • Value Data: sdica32.dll

VirtualDriver Subkey

Path: ...\Modules\VirtualDriver

Value:

  • Value Name: ScrewDriversFXP
  • Value Type: REG_SZ
  • Value Data: "" (empty string)

Complete ICA Configuration Example

HKLM\Software\Wow6432Node\Citrix\ICA Client\Engine\Configuration\Advanced\Modules
├── ICA 3.0
│ └── VirtualDriver = "Thinwire3.0,ClientDrive,ClientAudio,ScrewDriversFXP,..."
├── ScrewDriversFXP
│ └── DriverNameWin32 = "sdica32.dll"
└── VirtualDriver
└── ScrewDriversFXP = ""

Troubleshooting ICA Plugin Issues

If Citrix connections aren't loading ScrewDrivers:

  1. Verify the correct registry path: Use WOW6432Node on 64-bit systems
  2. Check VirtualDriver list: Ensure ScrewDriversFXP is listed in ICA 3.0\VirtualDriver
  3. Verify ScrewDriversFXP subkey exists with DriverNameWin32 value
  4. Confirm DLL location: Check that sdica32.dll exists in the Citrix ICA Client directory
  5. Review Citrix ICA Client version: Older versions may not support virtual channels properly
  6. Check virtual channel allowlist: Some Citrix policies restrict which virtual channels can load
  7. Restart Citrix ICA Client: The virtual channel configuration is read at startup

Manual Plugin Registration

If the installer failed to properly configure the plugins, you can manually create the registry entries.

Manual RDP Plugin Registration

# Create auto-run entry (adjust path for your version)
New-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" `
-Name "ScrewDrivers RDP Plugin" `
-Value "C:\Program Files\Tricerat\ScrewDrivers\Client\install_rdp.exe" `
-PropertyType String `
-Force

# Run install_rdp.exe to configure user-level settings
& "C:\Program Files\Tricerat\ScrewDrivers\Client\install_rdp.exe"

Manual ICA Plugin Registration

# Determine the correct registry path based on OS architecture
$regPath = if ([Environment]::Is64BitOperatingSystem) {
"HKLM:\Software\Wow6432Node\Citrix\ICA Client\Engine\Configuration\Advanced\Modules"
} else {
"HKLM:\Software\Citrix\ICA Client\Engine\Configuration\Advanced\Modules"
}

# Create ScrewDriversFXP subkey
New-Item -Path "$regPath\ScrewDriversFXP" -Force
New-ItemProperty -Path "$regPath\ScrewDriversFXP" `
-Name "DriverNameWin32" `
-Value "sdica32.dll" `
-PropertyType String `
-Force

# Add to VirtualDriver list in ICA 3.0
$icaPath = "$regPath\ICA 3.0"
$currentValue = (Get-ItemProperty -Path $icaPath -Name "VirtualDriver").VirtualDriver
if ($currentValue -notlike "*ScrewDriversFXP*") {
$newValue = $currentValue + ",ScrewDriversFXP"
Set-ItemProperty -Path $icaPath -Name "VirtualDriver" -Value $newValue
}

# Create VirtualDriver subkey entry
New-Item -Path "$regPath\VirtualDriver" -Force
New-ItemProperty -Path "$regPath\VirtualDriver" `
-Name "ScrewDriversFXP" `
-Value "" `
-PropertyType String `
-Force

Write-Host "ICA plugin registered. Restart Citrix ICA Client."

Verification Scripts

Verify RDP Plugin Configuration

# Check auto-run entry
$runKey = Get-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" `
-Name "ScrewDrivers RDP Plugin" -ErrorAction SilentlyContinue
if ($runKey) {
Write-Host "✓ Auto-run entry exists: $($runKey.'ScrewDrivers RDP Plugin')"
} else {
Write-Host "✗ Auto-run entry missing"
}

# Check user-level configuration
$sdfxpKey = Get-ItemProperty -Path "HKCU:\Software\Microsoft\Terminal Server Client\Default\Addins\SDFXP" `
-ErrorAction SilentlyContinue
if ($sdfxpKey) {
Write-Host "✓ User configuration exists"
Write-Host " DLL: $($sdfxpKey.Name)"
} else {
Write-Host "✗ User configuration missing (run install_rdp.exe)"
}

Verify ICA Plugin Configuration

# Determine correct registry path
$regPath = if ([Environment]::Is64BitOperatingSystem) {
"HKLM:\Software\Wow6432Node\Citrix\ICA Client\Engine\Configuration\Advanced\Modules"
} else {
"HKLM:\Software\Citrix\ICA Client\Engine\Configuration\Advanced\Modules"
}

# Check if ScrewDriversFXP is in VirtualDriver list
$ica30 = Get-ItemProperty -Path "$regPath\ICA 3.0" -ErrorAction SilentlyContinue
if ($ica30.VirtualDriver -like "*ScrewDriversFXP*") {
Write-Host "✓ ScrewDriversFXP in VirtualDriver list"
} else {
Write-Host "✗ ScrewDriversFXP not in VirtualDriver list"
}

# Check ScrewDriversFXP subkey
$fxpKey = Get-ItemProperty -Path "$regPath\ScrewDriversFXP" -ErrorAction SilentlyContinue
if ($fxpKey.DriverNameWin32 -eq "sdica32.dll") {
Write-Host "✓ ScrewDriversFXP subkey configured correctly"
} else {
Write-Host "✗ ScrewDriversFXP subkey missing or incorrect"
}