WinCC 7 Runtime on Virtual Machines: RDP Console Session, Automatic Logon, and Active Directory Privilege Delegation
Siemens WinCC V7.0 (and later V7.x service packs through V7.5 SP2) was designed originally to run on a dedicated, locally-attended operator station. The HMI/SCADA suite uses several privileged Windows mechanisms — SeLockMemoryPrivilege, SeDebugPrivilege, DCOM service control of the WinCC CCAS/CCES/CCRuntime services, and winsta0\default interactive access — that behave differently when the runtime is moved to a virtual machine (VMware vSphere, Hyper-V, or VirtualBox) and reached over Remote Desktop Protocol (RDP). Operators who are intentionally given limited (non-administrator) domain credentials in the Active Directory lose the ability to relaunch the "Active Graphics Runtime" from the taskbar after an RDP session is dropped, the link is restored, or the VM console is disconnected. This reference describes the full, defensible configuration of WinCC runtime inside a VM with non-elevated operator accounts, RDP console-session discipline, automatic Windows logon, and a least-privilege Active Directory model.
1. Problem Statement and Symptoms
The classical failure pattern, replicated on every WinCC V7.x installation that has been virtualized without the configuration steps below, is:
- WinCC V7.0 SP3 (or later) is installed on a Windows 7 / Windows Server 2008 R2 (or later) virtual machine joined to an Active Directory domain.
- Operators sit at a thin client or workstation and connect to the VM through Microsoft Remote Desktop Client (mstsc.exe) or VMware Horizon RDP client.
- The operator domain account is intentionally a member of the Users group only — explicitly not a member of local
Administrators,Power Users, orRemote Desktop Users. - WinCC Graphics Runtime is launched in the RDP session and runs normally.
- The network is briefly interrupted, the thin client sleeps, or the operator closes the RDP window by clicking the X instead of Log Off.
- When the RDP link is restored, the operator's domain account is locked out by the domain controller because the cached credential is exhausted, or the RDP session is reconnected to
Session 0while the WinCC processes are still bound toSession 1. - The operator is forced to log off and log on again. WinCC Graphics Runtime is no longer running, but the operator cannot right-click the WinCC taskbar icon and select Active Graphics Runtime because the limited account lacks the required DCOM launch and
SC_MANAGER_ALL_ACCESSrights on theCCRuntime,CCAlgServer, andCCArchiveServerservices. - The operator also cannot restart the VM from a shutdown command. The HMI screen is dead until an administrator intervenes.
Administrators group on the WinCC VM to fix this problem violates the principle of least privilege and is explicitly prohibited by the Siemens WinCC V7.0 SP3 system manual, section "User rights and user groups". The correct fix is the configuration sequence in §3 through §7.2. Architectural Overview of the WinCC Runtime in a VM
WinCC V7.x is implemented as a coordinated set of Windows services plus an interactive process. The interactive process is the WinCC Graphics Runtime (PDLRT.exe), which must run on WinSta0\Default of an active interactive session. Under RDP, that means Session 1 or higher, never Session 0 (the services-only session that exists from Windows Vista onward).
| Service / Process | Executable | Start type | Minimum privileges |
|---|---|---|---|
| CCRuntime | CCRuntime.exe |
Automatic | Local System or dedicated domain service account with SeLockMemoryPrivilege and SeTcbPrivilege
|
| CCAlgServer | CCAlgServer.exe |
Automatic | Local System |
| CCArchiveServer | CCArchiveServer.exe |
Automatic | Local System or delegated service account with write access to archive directory and SQL |
| CCMessageServer | CCMsgServer.exe |
Automatic | Local System |
| CCConnectivityServer | CCConnSrv.exe |
Automatic | Local System |
| CCEsgServer | CCEsgSrv.exe |
Automatic | Local System |
| WinCC Graphics Runtime | PDLRT.exe |
Manual (interactive) | Interactive operator account, member of SIMATIC HMI local group; not Administrators |
| WinCC Explorer | CCExplorer.exe |
Manual | Engineering account only, never the operator account |
The split between services (Local System, always running) and the Graphics Runtime (interactive operator context) is the source of almost every virtualization problem. When the RDP session drops, only the Graphics Runtime dies; the seven background services keep running but become orphaned, and a fresh operator logon cannot restart PDLRT.exe without the rights listed in §5.
3. Prerequisites
- Siemens WinCC V7.0 SP3 or later (current as of writing: V7.5 SP2 Update 14, see Siemens entry ID 109760458).
- Windows 7 SP1, Windows 10 LTSC 2019/2021, or Windows Server 2016/2019/2022 on the VM (x64). Windows XP as the host OS — referenced in legacy installations — is out of mainstream support and must be migrated; see the Windows lifecycle policy at Microsoft Lifecycle Policy.
- Active Directory domain functional level 2008 R2 or higher.
- A dedicated WinCC Service Account (e.g.
[email protected]) — a managed service account (gMSA) is preferred on Windows Server 2012 or later; see Group Managed Service Accounts overview. - A dedicated WinCC Operator Account (e.g.
[email protected]) — non-administrator, password-never-expires, logon-hours-restricted. - RDP client on the operator workstation (mstsc.exe version 10.0.19041 or later) or VMware Horizon Client 2306 or later.
- Hypervisor: VMware vSphere 7.0 U3 or later, or Hyper-V 2019 or later. Configure the VM with Reserve all guest memory (locked) and Enable 3D graphics if the operator station will use hardware-accelerated graphics, per vSphere 7 virtual machine administration.
4. Create the WinCC Local Groups on the VM
WinCC V7.x installs two local groups that govern who may interact with the runtime. Verify they exist on the VM:
- Log on to the VM console as a local administrator.
- Open Computer Management → Local Users and Groups → Groups.
- Confirm the presence of
SIMATIC HMIandSIMATIC HMI Viewer. If absent, the WinCC installation is incomplete or the SIMATIC HMI license is missing. - Add the operator account (or, preferably, a domain security group
DOMAIN\WinCC-Operators) toSIMATIC HMIonly. Do not add it toSIMATIC HMI Viewer; that group exists for read-only web clients.
SIMATIC HMI works because the local SAM (Security Account Manager) transparently expands the group membership at logon. This is the correct way to manage 5–500 operators without touching the VM. Reference: Microsoft local accounts documentation.5. Delegate DCOM and Service Rights to the WinCC Service Account
Before the operator account can relaunch PDLRT.exe, the service account that runs CCRuntime must be allowed to impersonate, and the operator must be allowed to start and stop the CCRuntime service. WinCC's setup grants this automatically when the SIMATIC HMI is configured for the correct user, but a virtualized install often loses these rights when the VM is sysprepped or cloned. Re-apply them as follows.
5.1 Configure service logon
- Open
services.mscon the VM. - For each of
CCRuntime,CCAlgServer,CCArchiveServer,CCMessageServer,CCConnectivityServer,CCEsgServer, open Properties → Log On tab. - Select This account and enter
DOMAIN\svc-winccwith its password, or browse to the gMSA. - Click OK; restart each service.
5.2 Grant service start/stop rights to operators
Use sc.exe sdset to add an ACE that allows the operator group SERVICE_START and SERVICE_STOP on each WinCC service without giving the operator group SERVICE_ALL_ACCESS. The security descriptor string for a typical install is:
sc sdset CCRuntime D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWRPWPDTLOCRRC;;;BA)(A;;RPWP;;;DOMAIN\WinCC-Operators)
Repeat for CCAlgServer, CCArchiveServer, CCMessageServer, CCConnectivityServer, and CCEsgServer. The trailing ACE (A;;RPWP;;;DOMAIN\WinCC-Operators) grants the RP (SERVICE_START) and WP (SERVICE_STOP) rights only. Reference: Microsoft service permissions reference.
5.3 Configure DCOM launch permissions for WinCC
- Open
dcomcnfg.exe→ Component Services → Computers → My Computer → DCOM Config. - Locate
CCAlgClass,CCArchiveClass,CCChannelAttach,CCConnectivityClass,CCEsgClass,CCMessageClass, andCCPDLClass. - Right-click each → Properties → Security tab.
- Under Launch and Activation Permissions, click Edit. Add the operator group
DOMAIN\WinCC-Operatorsand tick Local Launch and Local Activation only. Do not grant Remote Launch or Remote Activation — those would allow cross-network code execution and violate the Siemens WinCC hardening guide.
6. RDP Console Session Discipline
This is the single most important configuration in the entire solution. Operators must always connect to the VM's console session, not to a numbered virtual session. Microsoft documents this under "Connecting to the console session" in Terminal Services overview.
6.1 Why console-only
When two RDP users (e.g. an engineer at Session 2 and an operator at Session 3) connect to the same VM, they each receive an independent desktop. The CCRuntime service cannot arbitrate which session owns PDLRT.exe, and the WinCC alarm logging subsystem can become inconsistent. By forcing every user to the console (Session 1), only one interactive session exists, and the WinCC runtime cannot be desynchronized from the services.
6.2 Connecting with mstsc.exe
From the operator workstation, open a command prompt and execute:
mstsc.exe /v:<vm-fqdn> /console /f
The /console switch is the legacy syntax used in Windows XP and Windows Server 2003. On Windows Vista and later, the equivalent switch is /admin:
mstsc.exe /v:<vm-fqdn> /admin /f
Save the connection as an .rdp file in the operator's startup folder so it launches automatically. The /f flag opens the session full-screen, hiding the Windows desktop from the operator — recommended on a plant-floor thin client.
/admin versus /console. Microsoft deprecated /console in Windows Vista; /admin is the documented replacement and behaves identically for console-session attachment. Source: Microsoft Terminal Services documentation.6.3 Connecting with VMware Horizon Client
If the thin client uses VMware Horizon 2306 or later, create a desktop pool with the following settings:
- Connection Server restrictions → Restrict to single session per user = ON.
- Display protocol = VMware Blast or PCoIP (do not use RDP through Horizon when the underlying VM is also reachable by mstsc, because the two protocols fight over Session 1).
- Logoff after disconnect = Never — instead, use the GPO in §7.4 to enforce a 60-minute idle session timeout with no forced logoff.
Reference: VMware Horizon desktop and application pool configuration.
7. Automatic Logon and Automatic Runtime Start
The operator's environment must be fully hands-off. Two mechanisms are required.
7.1 AutoAdminLogon on the VM
- On the VM, open
regedit.exeand navigate toHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon. - Set the following REG_SZ values:
-
AutoAdminLogon=1 -
DefaultUserName=DOMAIN\op-wincc-01 -
DefaultDomainName=DOMAIN.LOCAL -
DefaultPassword= (encrypted value, see note) -
AutoLogonCount=0(re-arm every boot) -
ForceAutoLogon=1(Windows 7 / Server 2008 R2 and later)
-
- Encrypt the password using
Sysinternals Autologon.exe, which writes the encryptedDefaultPassworddirectly. The plain-text password is never stored. Reference: Windows Sysinternals Autologon.
DefaultPassword as REG_SZ with the cleartext password leaves the credential readable by any local administrator. Always use Autologon.exe or the cpau.exe scheduled-task approach documented in Microsoft computer forensics guidance.7.2 Auto-launch WinCC Graphics Runtime at logon
Place a shortcut in the operator's startup folder that targets the project-specific runtime executable:
"C:\Program Files (x86)\Siemens\Automation\WinCC\WinCCProjects\<project>\<computer>\PDLRT.exe" -project <project> -computer <computer>
Alternatively, configure the WinCC project so that Graphics Runtime is started by the CCRuntime service via the project property Computer → Startup → Start WinCC Runtime automatically. This second method is preferred because it survives RDP session loss: the service brings the runtime back up at the next interactive logon without operator intervention.
7.3 Disable shutdown / restart from the operator desktop
Apply the following GPO at the OU that contains the WinCC VM computer object:
User Configuration → Administrative Templates → Desktop → Start Menu and Taskbar
- Remove and prevent access to the Shut Down command = Enabled
- Remove Logoff on the Start Menu = Enabled (WinCC 7.0 only; on WinCC 7.4 and later leave this as Not Configured and instead use §7.4)
This guarantees the operator cannot accidentally reboot the VM by clicking the wrong corner.
7.4 Idle-session Group Policy
Apply the following GPO to the DOMAIN\WinCC-Operators group:
-
Computer Configuration → Administrative Templates → Windows Components → Remote Desktop Services → Remote Desktop Session Host → Session Time Limits
- Set time limit for disconnected sessions = Enabled, 5 minutes
- Set time limit for active sessions = Enabled, 12 hours
- Set time limit for idle sessions = Enabled, 60 minutes
-
Computer Configuration → Administrative Templates → Windows Components → Remote Desktop Services → Connections
- Restrict Remote Desktop Services users to a single Remote Desktop Services session = Enabled
Reference: Microsoft Terminal Services Group Policy reference.
8. Active Directory Account Hardening
Two Active Directory accounts (or groups) participate in the runtime: the WinCC Service Account and the WinCC Operator Account. Their configuration must follow the Active Directory privileged accounts and groups guide.
| Attribute | Service Account (gMSA) | Operator Account |
|---|---|---|
| Account type | Group Managed Service Account (gMSA) | Standard user |
| Password | Auto-rotated 30 days by KDS root key | Set to never expire, min 24 chars, no logon from any other host |
| Member of |
SIMATIC HMI, Distributed COM Users, Performance Log Users
|
SIMATIC HMI, Remote Desktop Users on the VM only, deny Domain Admins cross-membership |
| Logon workstations | The VM's LogonWorkstation attribute set to its FQDN |
The VM's FQDN plus the thin-client IP if direct RDP |
| Delegation | Trust this user for delegation to any service (Kerberos only) — required for WinCC user archive SQL delegation | Not trusted for delegation |
| Smart card required | No (service account, no interactive logon) | Optional; if enabled, configure Kerberos armoring |
| SID History | Clear | Clear |
sIDHistory from migrations, and its password will be set to "never expire" — a compliance red flag. A gMSA solves both: the password is 240 characters long, rotated automatically, and the principal cannot be used for interactive logon. See Group Managed Service Accounts overview.9. VMware vSphere Layer
The hypervisor layer introduces two issues not present on a physical WinCC station.
9.1 Time skew
WinCC license checking and Kerberos tickets require the VM clock to be within 5 minutes of the domain controller. On vSphere, configure NTP from the host:
- In vCenter, select the ESXi host → Configure → Time Configuration → Edit.
- Set NTP servers:
ntp1.domain.local,ntp2.domain.local. - Start the
ntpdservice and enablentpTimeProviderin/etc/ntp.confon the host. Reference: vSphere timekeeping best practice. - On the Windows guest, disable the Windows Time service's VMIC time provider and point to the host via
w32tm /config /syncfromflags:domhier /reliable:YES /update.
9.2 vCenter permission to start the VM
When the WinCC VM is powered off (for example after a graceful shutdown initiated by the WinCC redundancy software), an operator with only RDP access cannot power it back on. Delegate the minimum vCenter permission to the operator group:
- In vSphere Client, navigate to Administration → Roles → New Role.
- Name:
WinCC-VM-Operator. - Privileges:
VirtualMachine.Interact.PowerOn,VirtualMachine.Interact.PowerOff,VirtualMachine.Interact.ConsoleInteract,VirtualMachine.Interact.DeviceConnection— and explicitly notVirtualMachine.Config.AdvancedConfigorVirtualMachine.Inventory.Remove. - Assign the role to
DOMAIN\WinCC-Operatorsat the VM object level (propagate = no). The role should not be granted at the datacenter, cluster, or folder level. Reference for permission structures: vSphere role-based access control.
10. Verification Procedure
After applying the configuration, validate the result with the following checklist. Every step must pass before the system is handed over to operations.
-
Session test. Connect from the operator thin client with
mstsc /v:vm-fqdn /admin /f. Verify in Task Manager → Users tab that the session ID is1and the session name is Services (i.e. console). -
Service test. Open
services.mscas the operator and confirm the operator can start, stop, and restart theCCRuntimeservice without elevation. If a UAC prompt appears, the §5.2 ACL was not applied correctly. - Disconnection test. Pull the network cable from the thin client for 30 seconds. Restore. The operator account must not be locked. The WinCC runtime must reconnect automatically within 60 seconds; if it does not, §7.2 is misconfigured.
- Restart test. From the operator account, attempt Start → Shutdown. The shutdown command must be absent. Then attempt to start the VM from the vSphere Client — the operator must have Power On permission only on this VM, not on the datacenter.
-
Privilege escalation test. From the operator account, run
whoami /priv. The output must not containSeDebugPrivilegeenabled,SeTakeOwnershipPrivilegeenabled, orSeLoadDriverPrivilege. If any of these appear, the operator account is effectively a local administrator and §4 and §5 must be re-checked. -
Archive test. Trigger a process value archive segment close (or wait one minute) and verify
CCArchiveServerwrites to the configured archive directory. The operator account does not need write access to the directory — only the service account does, and the gMSA already has it via §5.1.
11. Common Failure Modes and Diagnostic Matrix
| Symptom | Likely root cause | Corrective action |
|---|---|---|
| "Access denied" when operator clicks Active Graphics Runtime | Operator not in SIMATIC HMI local group |
Re-apply §4; re-log the operator session |
Operator cannot start CCRuntime service |
§5.2 sc sdset not run, or ACL string has typo |
Re-run sc sdset; verify with sc sdshow CCRuntime
|
| WinCC runtime is orphaned (process visible in Task Manager, no graphics on screen) | Operator connected to a non-console RDP session while another user holds Session 1 | Force all clients to use /admin; enforce single-session GPO in §7.4 |
| Domain account locks out after every disconnect | AutoAdminLogon is mis-configured to log on as a different account than the operator's interactive credential, exhausting the cached credential | Set AutoAdminLogon to log on as a dedicated console account (§7.1) and configure the operator thin client to RDP in as the same account |
| vSphere "permission to perform this operation was denied" when operator clicks Power On | vCenter role assigned at datacenter or folder level, not VM level | Re-apply §9.2 with the role at the VM object only |
| Time-tagged alarms are 5 minutes behind real time | VM clock not synchronizing to ESXi host, and Kerberos drift | Apply §9.1; check w32tm /monitor against the PDC emulator |
| Operator sees the Windows desktop and can launch Internet Explorer | Shell replacement not configured; explorer.exe is the default shell |
Replace the shell with PDLRT.exe via HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell = PDLRT.exe in a GPO-managed registry preference |
12. Shell Replacement and Kiosk-Mode Hardening (Optional)
For installations where the WinCC VM is a dedicated operator station with no engineering access, replace the Windows shell so the operator sees only the WinCC runtime and cannot escape to Explorer. Apply the GPO:
User Configuration → Administrative Templates → System → Custom User Interface
-
Custom User Interface = Enabled, UI file:
"C:\Program Files (x86)\Siemens\Automation\WinCC\WinCCProjects\<project>\<computer>\PDLRT.exe"
This GPO corresponds to the registry value HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\Shell. The operator can no longer reach Ctrl+Alt+Del → Task Manager. To preserve the ability to relaunch the runtime after a hang, create a Windows shortcut bound to Ctrl+Alt+F12 in the WinCC project that re-executes PDLRT.exe. Reference: Microsoft kiosk-mode shell policy.
13. Field-Commissioning Checklist
Use this checklist during Site Acceptance Test (SAT):
- ☐ WinCC Service Account is a gMSA with auto-rotated password.
- ☐ WinCC Operator Account cannot log on to any workstation except the WinCC VM (verified with
Get-ADUser op-wincc-01 -Properties LogonWorkstations). - ☐ Operator account is a member of
SIMATIC HMIlocal group on the VM only. - ☐ Operator account is not a member of local
Administrators,Power Users,Backup Operators, orRemote Desktop Usersat the domain level. - ☐
sc sdsetapplied to all six CC* services with(A;;RPWP;;;DOMAIN\WinCC-Operators). - ☐ DCOM launch permissions on the seven WinCC classes allow operator group Local Launch and Local Activation only.
- ☐ RDP client on every operator workstation is configured with
/adminand full-screen. - ☐ Idle session limit set to 60 minutes; disconnected session limit set to 5 minutes; single-session restriction enforced.
- ☐ Remove and prevent access to the Shut Down command GPO enabled.
- ☐ AutoAdminLogon configured via Autologon.exe (no cleartext password in registry).
- ☐ WinCC project property Start WinCC Runtime automatically = ON.
- ☐ NTP from ESXi host to PDC emulator verified with
w32tm /monitor. - ☐ vCenter role
WinCC-VM-Operatorassigned at the VM object only. - ☐ Verification procedure in §10 executed and signed off.
Why does the operator's account get locked out when the RDP link is restored?
The domain controller tracks failed Kerberos authentications and locks the account after the threshold defined in the account's LockoutThreshold attribute (default 10 attempts in Windows Server 2019 and later). When the RDP session is forcibly reconnected to Session 0 or the AutoAdminLogon cached credential is exhausted, each reconnect counts as a failed authentication. Configure AutoAdminLogon to a dedicated console-only service account with no password expiry and a LockoutThreshold of 0 (never lock), but harden the account so it can log on to the VM only.
Can I use mstsc.exe /console on Windows 10 and later?
No. Microsoft removed the /console switch from mstsc.exe starting with Windows Vista. Use /admin instead, which has identical behavior for the purposes of console-session attachment. The legacy /console switch is silently ignored on Windows 10 / 11 / Server 2016 or later; if you see the client connect to Session 2 or higher, the /console switch is being passed by an outdated RDP client and must be replaced with /admin.
Why does the operator see the Windows desktop and not the WinCC runtime after a disconnect?
This is the orphaned-session condition: the operator's new RDP session landed in a numbered session (e.g. Session 2) while the CCRuntime service has not yet rebound the orphaned PDLRT.exe from the previous session. The remedy is to enforce the single-session GPO in §7.4, force the client to use /admin in §6.2, and enable Start WinCC Runtime automatically in the WinCC project. After the next RDP reconnect, the runtime will relaunch automatically without operator intervention.
What is the minimum Active Directory functional level required for this configuration?
Windows Server 2008 R2 functional level is the minimum, because gMSA (Group Managed Service Accounts) require 2012 or later domain controllers but can authenticate against 2008 R2 domain controllers as long as the KDS root key has been published and replicated. Microsoft documents the matrix at gMSA overview. If you cannot raise the functional level, fall back to a regular user account as a service account with a 240-character random password stored in a sealed LAPS (Local Administrator Password Solution) database, rotated every 30 days.
Is it safe to put the operator account in the local Administrators group on the VM as a quick fix?
No. Siemens WinCC V7.0 and later explicitly document in the system manual that operator accounts must not be local administrators. The reasons are (a) the operator can disable the WinCC services, which causes a process-value gap that is undetectable from the engineering station; (b) the operator can install software on the VM, which can interact badly with the WinCC COM singletons; and (c) the operator can read other users' cached credentials from the SAM database, breaking the plant's credential-isolation model. The correct fix is the configuration sequence in §3 through §7, not elevation.