Skip to content

Commit decb80b

Browse files
committed
Added additional object queries.
1 parent d03157c commit decb80b

17 files changed

Lines changed: 182 additions & 20 deletions

NtApiDotNet.Forms/Properties/AssemblyInfo.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System.Reflection;
2-
using System.Runtime.CompilerServices;
32
using System.Runtime.InteropServices;
43

54
// General Information about an assembly is controlled through the following

NtApiDotNet/NtEnlistment.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,24 @@ public override NtStatus QueryInformation(EnlistmentInformationClass info_class,
404404
public override NtStatus SetInformation(EnlistmentInformationClass info_class, SafeBuffer buffer)
405405
{
406406
return NtSystemCalls.NtSetInformationEnlistment(Handle, info_class, buffer, buffer.GetLength());
407+
}
408+
409+
/// <summary>
410+
/// Query the information class as an object.
411+
/// </summary>
412+
/// <param name="info_class">The information class.</param>
413+
/// <param name="throw_on_error">True to throw on error.</param>
414+
/// <returns>The information class as an object.</returns>
415+
public override NtResult<object> QueryObject(EnlistmentInformationClass info_class, bool throw_on_error)
416+
{
417+
switch (info_class)
418+
{
419+
case EnlistmentInformationClass.EnlistmentBasicInformation:
420+
return Query<EnlistmentBasicInformation>(info_class, default, throw_on_error);
421+
case EnlistmentInformationClass.EnlistmentCrmInformation:
422+
return Query<EnlistmentCrmInformation>(info_class, default, throw_on_error);
423+
}
424+
return base.QueryObject(info_class, throw_on_error);
407425
}
408426

409427
#endregion

NtApiDotNet/NtEvent.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ public override NtResult<object> QueryObject(EventInformationClass info_class, b
257257
switch (info_class)
258258
{
259259
case EventInformationClass.EventBasicInformation:
260-
return Query<EventBasicInformation>(info_class, default, throw_on_error).Cast<object>();
260+
return Query<EventBasicInformation>(info_class, default, throw_on_error);
261261
}
262262

263263
return base.QueryObject(info_class, throw_on_error);

NtApiDotNet/NtFile.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4840,17 +4840,17 @@ public override NtResult<object> QueryObject(FileInformationClass info_class, bo
48404840
switch (info_class)
48414841
{
48424842
case FileInformationClass.FileBasicInformation:
4843-
return Query<FileBasicInformation>(info_class, default, throw_on_error).Cast<object>();
4843+
return Query<FileBasicInformation>(info_class, default, throw_on_error);
48444844
case FileInformationClass.FileEndOfFileInformation:
4845-
return Query<FileEndOfFileInformation>(info_class, default, throw_on_error).Cast<object>();
4845+
return Query<FileEndOfFileInformation>(info_class, default, throw_on_error);
48464846
case FileInformationClass.FileStandardInformation:
4847-
return Query<FileStandardInformation>(info_class, default, throw_on_error).Cast<object>();
4847+
return Query<FileStandardInformation>(info_class, default, throw_on_error);
48484848
case FileInformationClass.FileNetworkOpenInformation:
4849-
return Query<FileNetworkOpenInformation>(info_class, default, throw_on_error).Cast<object>();
4849+
return Query<FileNetworkOpenInformation>(info_class, default, throw_on_error);
48504850
case FileInformationClass.FileInternalInformation:
4851-
return Query<FileInternalInformation>(info_class, default, throw_on_error).Cast<object>();
4851+
return Query<FileInternalInformation>(info_class, default, throw_on_error);
48524852
case FileInformationClass.FileRemoteProtocolInformation:
4853-
return Query<FileRemoteProtocolInformation>(info_class, default, throw_on_error).Cast<object>();
4853+
return Query<FileRemoteProtocolInformation>(info_class, default, throw_on_error);
48544854
}
48554855
return base.QueryObject(info_class, throw_on_error);
48564856
}

NtApiDotNet/NtNamedPipeFile.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -313,11 +313,11 @@ public override NtResult<object> QueryObject(FileInformationClass info_class, bo
313313
switch (info_class)
314314
{
315315
case FileInformationClass.FilePipeInformation:
316-
return Query<FilePipeInformation>(info_class, default, throw_on_error).Cast<object>();
316+
return Query<FilePipeInformation>(info_class, default, throw_on_error);
317317
case FileInformationClass.FilePipeLocalInformation:
318-
return Query<FilePipeLocalInformation>(info_class, default, throw_on_error).Cast<object>();
318+
return Query<FilePipeLocalInformation>(info_class, default, throw_on_error);
319319
case FileInformationClass.FilePipeRemoteInformation:
320-
return Query<FilePipeRemoteInformation>(info_class, default, throw_on_error).Cast<object>();
320+
return Query<FilePipeRemoteInformation>(info_class, default, throw_on_error);
321321
}
322322
return base.QueryObject(info_class, throw_on_error);
323323
}

NtApiDotNet/NtObjectWithDuplicateAndInfo.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ public virtual NtResult<object> QueryObject(Q info_class, bool throw_on_error)
178178
/// <param name="info_class">The information class.</param>
179179
/// <returns>The information class as an object.</returns>
180180
/// <remarks>If the information class doesn't have an explicit object type a raw byte query will be made.</remarks>
181-
public virtual object QueryObject(Q info_class)
181+
public object QueryObject(Q info_class)
182182
{
183183
return QueryObject(info_class, true).Result;
184184
}

NtApiDotNet/NtProcess.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2196,19 +2196,19 @@ public override NtResult<object> QueryObject(ProcessInformationClass info_class,
21962196
switch (info_class)
21972197
{
21982198
case ProcessInformationClass.ProcessBasicInformation:
2199-
return Query<ProcessBasicInformation>(info_class, default, throw_on_error).Cast<object>();
2199+
return Query<ProcessBasicInformation>(info_class, default, throw_on_error);
22002200
case ProcessInformationClass.ProcessIoCounters:
2201-
return Query<IoCounters>(info_class, default, throw_on_error).Cast<object>();
2201+
return Query<IoCounters>(info_class, default, throw_on_error);
22022202
case ProcessInformationClass.ProcessTimes:
2203-
return Query<KernelUserTimes>(info_class, default, throw_on_error).Cast<object>();
2203+
return Query<KernelUserTimes>(info_class, default, throw_on_error);
22042204
case ProcessInformationClass.ProcessQuotaLimits:
2205-
return Query<QuotaLimitsEx>(info_class, default, throw_on_error).Cast<object>();
2205+
return Query<QuotaLimitsEx>(info_class, default, throw_on_error);
22062206
case ProcessInformationClass.ProcessVmCounters:
2207-
return Query<VmCountersEx>(info_class, default, throw_on_error).Cast<object>();
2207+
return Query<VmCountersEx>(info_class, default, throw_on_error);
22082208
case ProcessInformationClass.ProcessCycleTime:
2209-
return Query<ProcessCycleTimeInformation>(info_class, default, throw_on_error).Cast<object>();
2209+
return Query<ProcessCycleTimeInformation>(info_class, default, throw_on_error);
22102210
case ProcessInformationClass.ProcessProtectionInformation:
2211-
return Query<PsProtection>(info_class, default, throw_on_error).Cast<object>();
2211+
return Query<PsProtection>(info_class, default, throw_on_error);
22122212
}
22132213
return base.QueryObject(info_class, throw_on_error);
22142214
}

NtApiDotNet/NtResourceManager.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,24 @@ public override NtStatus QueryInformation(ResourceManagerInformationClass info_c
528528
public override NtStatus SetInformation(ResourceManagerInformationClass info_class, SafeBuffer buffer)
529529
{
530530
return NtSystemCalls.NtSetInformationResourceManager(Handle, info_class, buffer, buffer.GetLength());
531+
}
532+
533+
/// <summary>
534+
/// Query the information class as an object.
535+
/// </summary>
536+
/// <param name="info_class">The information class.</param>
537+
/// <param name="throw_on_error">True to throw on error.</param>
538+
/// <returns>The information class as an object.</returns>
539+
public override NtResult<object> QueryObject(ResourceManagerInformationClass info_class, bool throw_on_error)
540+
{
541+
switch (info_class)
542+
{
543+
case ResourceManagerInformationClass.ResourceManagerBasicInformation:
544+
return Query<ResourceManagerBasicInformation>(info_class, default, throw_on_error);
545+
}
546+
return base.QueryObject(info_class, throw_on_error);
531547
}
548+
532549
#endregion
533550

534551
#region Public Properties

NtApiDotNet/NtResult.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,15 @@ public static NtResult<T> CreateResultFromError(NtStatus status, bool throw_on_e
137137
return status.CreateResultFromError<T>(throw_on_error);
138138
}
139139

140+
/// <summary>
141+
/// Conversion operator from T to object.
142+
/// </summary>
143+
/// <param name="result">The result to convert.</param>
144+
public static implicit operator NtResult<object>(NtResult<T> result)
145+
{
146+
return result.Cast<object>();
147+
}
148+
140149
internal NtResult(NtStatus status, T result)
141150
{
142151
Status = status;

NtApiDotNet/NtSemaphore.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,25 @@ public NtResult<int> Release(int count, bool throw_on_error)
157157
public override NtStatus QueryInformation(SemaphoreInformationClass info_class, SafeBuffer buffer, out int return_length)
158158
{
159159
return NtSystemCalls.NtQuerySemaphore(Handle, info_class, buffer, (int)buffer.ByteLength, out return_length);
160+
}
161+
162+
/// <summary>
163+
/// Query the information class as an object.
164+
/// </summary>
165+
/// <param name="info_class">The information class.</param>
166+
/// <param name="throw_on_error">True to throw on error.</param>
167+
/// <returns>The information class as an object.</returns>
168+
public override NtResult<object> QueryObject(SemaphoreInformationClass info_class, bool throw_on_error)
169+
{
170+
switch (info_class)
171+
{
172+
case SemaphoreInformationClass.SemaphoreBasicInformation:
173+
return Query<SemaphoreBasicInformation>(info_class, default, throw_on_error);
174+
}
175+
176+
return base.QueryObject(info_class, throw_on_error);
160177
}
178+
161179
#endregion
162180

163181
#region Public Properties

0 commit comments

Comments
 (0)