DRAFT: Take more than your usual care.
SILO_MONITOR
The SILO_MONITOR (formally _SILO_MONITOR) represents a registered monitor of server silos in modern releases of Windows 10. A driver or other kernel-mode software calls the PsRegisterSiloMonitor function to express its interest in what’s done with server silos. This creates a SILO_MONITOR whose address can then be used when calling several other functions.
Documentation Status
Microsoft is not known ever to have documented the SILO_MONITOR except in the declarations of the relevent kernel exports. It is there, and in NTDDK.H, an opaque structure that is referred to in text as “the monitor”. No C-language definition is known from Microsoft. The structure’s name doesn’t even show in symbol files.
Variability
For a structure that is exposed through kernel exports but only as opaque, the SILO_MONITOR has been strikingly stable. It is 0x20 or 0x38 bytes in 32-bit and 64-bit Windows, respectively, up to and including at least the 2004 release.
Layout
Microsoft’s names and types of the structure’s members are not known. Type information in the public symbol files for the kernel shows only the structure’s name as a declaration, not its members from a definition.
Offset (x86) | Offset (x64) | Definition |
---|---|---|
0x00 | 0x00 | unknown LIST_ENTRY |
0x08 | 0x10 |
BOOLEAN MonitorHost; |
0x09 | 0x11 |
BOOLEAN MonitorExistingSilos; |
0x0C | 0x14 | unknown ULONG |
0x10 | 0x18 |
NTSTATUS (*CreateCallback) ( PESILO); |
0x14 | 0x20 |
VOID (*TerminateCallback) ( PESILO); |
0x18 | 0x28 | unknown UNICODE_STRING |
For a few members, names and types are proposed above by inferring a correspondence with members of another structure for which Microsoft’s names and types are known with certainty. NTDDK.H has a C-language definition of the ILO_MONITOR_REGISTRATION structure. This is among the inputs to PsRegisterSiloMonitor. That Microsoft’s programmers keep the names when transferring into the lasting SILO_MONITOR is at least plausible.
NTDDK.H has type definitions for the callbacks:
- SILO_MONITOR_CREATE_CALLBACK
- SILO_MONITOR_TERMINATE_CALLBACK
Remember that for all applicable versions, the PESILO type which is an argument to both callbacks is a pointer to an EJOB.