Skip to content

Commit f6166d8

Browse files
committed
Added Silo to Job Format.
1 parent 66afc70 commit f6166d8

3 files changed

Lines changed: 68 additions & 2 deletions

File tree

NtApiDotNet/NtJob.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -739,11 +739,35 @@ public NtResult<string> QuerySiloRootDirectory(bool throw_on_error)
739739
{
740740
using (var buffer = new SafeStructureInOutBuffer<SiloObjectRootDirectory>(64 * 1024, true))
741741
{
742-
return QueryInformation(JobObjectInformationClass.JobObjectSiloRootDirectory,
742+
return QueryInformation(JobObjectInformationClass.JobObjectSiloRootDirectory,
743743
buffer, out int length).CreateResult(throw_on_error, () => buffer.Result.Path.ToString());
744744
}
745745
}
746746

747+
/// <summary>
748+
/// Get Silo basic information.
749+
/// </summary>
750+
/// <param name="throw_on_error">True to throw on error.</param>
751+
/// <returns>The Silo Basic Information.</returns>
752+
public NtResult<SiloObjectBasicInformation> QuerySiloBasicInformation(bool throw_on_error)
753+
=> Query<SiloObjectBasicInformation>(JobObjectInformationClass.JobObjectSiloBasicInformation, default, throw_on_error);
754+
755+
/// <summary>
756+
/// Get Silo basic information.
757+
/// </summary>
758+
/// <param name="throw_on_error">True to throw on error.</param>
759+
/// <returns>The Server Silo Basic Information.</returns>
760+
public NtResult<ServerSiloBasicInformation> QueryServerSiloBasicInformation(bool throw_on_error)
761+
=> Query<ServerSiloBasicInformation>(JobObjectInformationClass.JobObjectServerSiloBasicInformation, default, throw_on_error);
762+
763+
/// <summary>
764+
/// Get Silo user shared data.
765+
/// </summary>
766+
/// <param name="throw_on_error">True to throw on error.</param>
767+
/// <returns>The Silo User Shared Data.</returns>
768+
public NtResult<SiloUserSharedData> QuerySiloUserSharedData(bool throw_on_error)
769+
=> Query<SiloUserSharedData>(JobObjectInformationClass.JobObjectServerSiloUserSharedData, default, throw_on_error);
770+
747771
/// <summary>
748772
/// Method to query information for this object type.
749773
/// </summary>

NtObjectManager/Cmdlets/Object/FormatNtJobCmdlet.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,40 @@ private void FormatUILimits(NtJob job)
125125
WriteObject(string.Empty);
126126
}
127127

128+
private void FormatSilo(NtJob job)
129+
{
130+
var basic_info = job.QuerySiloBasicInformation(false);
131+
if (!basic_info.IsSuccess)
132+
return;
133+
WriteObject("[Silo]");
134+
WriteObject($"Silo ID : {basic_info.Result.SiloId}");
135+
WriteObject($"Silo Parent ID: {basic_info.Result.SiloParentId}");
136+
WriteObject($"Process Count : {basic_info.Result.NumberOfProcesses}");
137+
WriteObject(string.Empty);
138+
if (!basic_info.Result.IsInServerSilo)
139+
return;
140+
var server_info = job.QueryServerSiloBasicInformation(false);
141+
if (!server_info.IsSuccess)
142+
return;
143+
WriteObject("[Server Silo]");
144+
WriteObject($"Session ID : {server_info.Result.ServiceSessionId}");
145+
WriteObject($"Exit Status : {server_info.Result.ExitStatus}");
146+
WriteObject($"State : {server_info.Result.State}");
147+
WriteObject($"Downlevel : {server_info.Result.IsDownlevelContainer}");
148+
WriteObject(string.Empty);
149+
var user_data = job.QuerySiloUserSharedData(false);
150+
if (!user_data.IsSuccess)
151+
return;
152+
WriteObject($"Console ID : {user_data.Result.ActiveConsoleId}");
153+
WriteObject($"Foreground PID: {user_data.Result.ConsoleSessionForegroundProcessId}");
154+
WriteObject($"Service SID : {user_data.Result.ServiceSessionId}");
155+
WriteObject($"User SID : {user_data.Result.SharedUserSessionId}");
156+
WriteObject($"System Root : {user_data.Result.NtSystemRoot}");
157+
WriteObject($"NT Product : {user_data.Result.NtProductType}");
158+
WriteObject($"Multisession : {user_data.Result.IsMultiSessionSku}");
159+
WriteObject(string.Empty);
160+
}
161+
128162
private void FormatJob(NtJob job)
129163
{
130164
if (Filter.HasFlag(JobFormatFilter.BasicInfo))
@@ -143,6 +177,10 @@ private void FormatJob(NtJob job)
143177
{
144178
FormatUILimits(job);
145179
}
180+
if (Filter.HasFlag(JobFormatFilter.Silo))
181+
{
182+
FormatSilo(job);
183+
}
146184
}
147185

148186
private void FormatJobs(IEnumerable<NtJob> jobs)

NtObjectManager/Cmdlets/Object/JobFormatFilter.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,12 @@ public enum JobFormatFilter
3939
/// </summary>
4040
UILimits = 8,
4141
/// <summary>
42+
/// Silo information.
43+
/// </summary>
44+
Silo = 0x10,
45+
/// <summary>
4246
/// Display all formats.
4347
/// </summary>
44-
All = BasicLimits | ProcessList | BasicInfo | UILimits
48+
All = BasicLimits | ProcessList | BasicInfo | UILimits | Silo
4549
}
4650
}

0 commit comments

Comments
 (0)