Skip to content

Winlogon Notify, Taskman and AppSetup

Older Winlogon logon hooks beside Shell and Userinit, mostly legacy on Windows 11.

Use it to spot values added to the older Winlogon hooks beside Shell and Userinit, a sign of tampering.

  • SOFTWARE
  • Persistence

What It Is

Winlogon is the Windows component that manages interactive sign-in and sign-out. Its key in HKLM SOFTWARE holds logon settings beside the main Shell and Userinit values, including a Notify subkey where notification package DLLs were registered to handle Winlogon events. An AppSetup value can name programs such as Usrlogon.cmd that run at logon on a Terminal Server. These Winlogon notification packages and the GINA are from older Windows and are ignored from Windows Vista onward.

What It Proves

Up to Windows Vista, Explorer ran the Taskman command line when it started as the shell. AppSetup lists programs run at logon, and the legacy Notify subkeys named DLLs the logon process loaded. Each was a place to run code at logon, so a value still marks tampering.

What It Does Not Prove

On Windows 7 and later Explorer no longer runs Taskman, and Notify DLLs stopped loading after Windows XP and Server 2003. So treat both as legacy locations that flag tampering rather than active autoruns. Taskman is absent by default and AppSetup is empty except on Remote Desktop servers, where Usrlogon.cmd is normal.

Where It Lives

Winlogon Notify, Taskman and AppSetup lives in the SOFTWARE hive, which holds settings for the whole machine. Offline Hive shows the path inside the hive file, as Registry Explorer opens it, and Live System shows the same key as regedit shows it on a running machine. The line under the path is where the hive file sits on disk.

SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
Hive file: C:\Windows\System32\config\SOFTWARE

What It Looks Like

These are three values from this key on ws-042, the fictional machine the wiki follows, decoded into plain English. Each row shows the value as Windows stores it, its name, type and data, then what it tells you.

Values in Winlogon Notify, Taskman and AppSetup, each with what it tells you
Registry ValueWhat It Tells You

Taskman

REG_SZ(not present)

Taskman is absent, which is the normal state. Explorer runs it only up to Windows Vista, so treat it as legacy. A value here would still flag tampering.

AppSetup

REG_SZ(not present)

AppSetup is not set, as on a workstation. Remote Desktop servers keep Usrlogon.cmd here. Userinit in the same key does carry upd.exe, so read it in full.

Notify

SubkeyKey not present

No Notify key exists, as expected. Its DLLs stopped loading after Windows XP. A Notify entry would not run on Windows 11 but would still mark tampering.

How to Read It

Read Taskman and AppSetup in the Winlogon key. On a Remote Desktop server, Usrlogon.cmd in AppSetup is normal. List any Notify subkeys. On modern Windows these no longer run, but they still flag tampering. Cross check Shell and Userinit in the same key for added programs.

When Windows Writes It
When a value or Notify subkey is written.
Which Windows Versions
Windows XP to 11. Taskman runs only up to Windows Vista, and Notify only up to Windows XP and Server 2003.
Tools That Parse It
Autoruns, Registry Explorer, RECmd

Hunt It

Defender records these writes within retention. A hit shows the value set, not that it ran. Taskman and AppSetup are empty on a clean workstation.

KQLDefender XDR, Advanced hunting
// Writes to Taskman, AppSetup or a Notify subkey under WinlogonDeviceRegistryEvents| where Timestamp > ago(30d)| where DeviceName startswith "ws-042"| where RegistryKey contains @"\CurrentVersion\Winlogon"| where RegistryValueName in~ ("Taskman", "AppSetup") or RegistryKey contains @"\Winlogon\Notify"| project Timestamp, ActionType, RegistryKey, RegistryValueName, RegistryValueData, InitiatingProcessCommandLine

Confirm It With

One artefact can mislead on its own. These other records show the same activity, or pin down when it happened, so use them to back up what Winlogon Notify, Taskman and AppSetup shows.

  • AmcacheGives the SHA-1 of a program named in Taskman or AppSetup.
  • Process Starts at Logon, Security Event 4688Not in the RegistryShows whether anything listed actually ran at logon, as legacy entries may not.

Sources