From 0a65c04e009f9bd796a1a87a085f15f628692adc Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 2 Sep 2025 13:46:31 +0000
Subject: [PATCH 01/22] Initial plan
From 5e6a4579dac1b0be35d70035736d7912a3e3b29f Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 2 Sep 2025 13:49:46 +0000
Subject: [PATCH 02/22] Initial analysis - prepare to add XML documentation
comments
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
Src/DSInternals.Common/packages.lock.json | 14 ++++++++++++++
Src/global.json | 2 +-
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/Src/DSInternals.Common/packages.lock.json b/Src/DSInternals.Common/packages.lock.json
index 75a5f18..b74f1c7 100644
--- a/Src/DSInternals.Common/packages.lock.json
+++ b/Src/DSInternals.Common/packages.lock.json
@@ -2,6 +2,15 @@
"version": 1,
"dependencies": {
".NETFramework,Version=v4.8": {
+ "Microsoft.NETFramework.ReferenceAssemblies": {
+ "type": "Direct",
+ "requested": "[1.0.3, )",
+ "resolved": "1.0.3",
+ "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
+ "dependencies": {
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3"
+ }
+ },
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
@@ -96,6 +105,11 @@
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": {
+ "type": "Transitive",
+ "resolved": "1.0.3",
+ "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ=="
+ },
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
diff --git a/Src/global.json b/Src/global.json
index 80d9230..c83d6f2 100644
--- a/Src/global.json
+++ b/Src/global.json
@@ -1,7 +1,7 @@
{
"$schema": "Schema/Global.schema.json",
"sdk": {
- "version": "9.0.304",
+ "version": "8.0.119",
"rollForward": "latestFeature"
},
"msbuild-sdks": {
From 27cdba8d89b418371b4e8ac93989e4f3df8eb412 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 2 Sep 2025 13:57:28 +0000
Subject: [PATCH 03/22] Add XML documentation to core utility classes
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
.../Data/Principals/DSUser.cs | 11 ++
.../Extensions/RSAExtensions.cs | 5 +
Src/DSInternals.Common/Validator.cs | 137 ++++++++++++++++++
.../Commands/Base/ADDBCommandBase.cs | 22 +++
Src/DSInternals.PowerShell/packages.lock.json | 56 ++-----
.../packages.lock.json | 14 ++
.../NDceRpc.Microsoft/Client.cs | 10 ++
.../packages.lock.json | 24 +--
Src/DSInternals.SAM/packages.lock.json | 14 ++
9 files changed, 241 insertions(+), 52 deletions(-)
diff --git a/Src/DSInternals.Common/Data/Principals/DSUser.cs b/Src/DSInternals.Common/Data/Principals/DSUser.cs
index 33870a1..1689504 100644
--- a/Src/DSInternals.Common/Data/Principals/DSUser.cs
+++ b/Src/DSInternals.Common/Data/Principals/DSUser.cs
@@ -5,8 +5,19 @@
using DSInternals.Common.Cryptography;
using DSInternals.Common.Schema;
+ ///
+ /// Represents a user account in Active Directory with extended properties and credential information.
+ ///
public class DSUser : DSAccount
{
+ ///
+ /// Initializes a new instance of the DSUser class.
+ ///
+ /// The directory object containing the user data.
+ /// The NetBIOS domain name.
+ /// The directory secret decryptor for handling encrypted data.
+ /// The set of properties to load from the directory object.
+ /// Thrown when the object is not a user account.
public DSUser(DirectoryObject dsObject, string netBIOSDomainName, DirectorySecretDecryptor pek, AccountPropertySets propertySets = AccountPropertySets.All) : base(dsObject, netBIOSDomainName, pek, propertySets)
{
if (this.SamAccountType != SamAccountType.User)
diff --git a/Src/DSInternals.Common/Extensions/RSAExtensions.cs b/Src/DSInternals.Common/Extensions/RSAExtensions.cs
index 6175ec0..d8dfe0e 100644
--- a/Src/DSInternals.Common/Extensions/RSAExtensions.cs
+++ b/Src/DSInternals.Common/Extensions/RSAExtensions.cs
@@ -240,6 +240,11 @@ public static bool IsDERPublicKeyBlob(this byte[] blob)
return blob[0] == DERSequenceTag;
}
+ ///
+ /// Determines whether an RSA public key is weak according to the ROCA vulnerability criteria.
+ ///
+ /// The RSA public key parameters to analyze.
+ /// true if the key is considered weak; otherwise, false.
public static bool IsWeakKey(this RSAParameters publicKey)
{
// Convert the byte array modulus to unsigned BigInteger by changing it to little endian and appending 0 as sign bit:
diff --git a/Src/DSInternals.Common/Validator.cs b/Src/DSInternals.Common/Validator.cs
index 4f4cd12..bb5c49d 100644
--- a/Src/DSInternals.Common/Validator.cs
+++ b/Src/DSInternals.Common/Validator.cs
@@ -8,8 +8,17 @@
namespace DSInternals.Common
{
+ ///
+ /// Provides validation methods for parameters and system status codes.
+ ///
public static class Validator
{
+ ///
+ /// Validates that an NT status code indicates success and throws an exception if it doesn't.
+ ///
+ /// The NT status code to validate.
+ /// Thrown when the status indicates an invalid parameter.
+ /// Thrown when the status indicates a system error.
public static void AssertSuccess(NtStatus status)
{
Win32ErrorCode code = NativeMethods.RtlNtStatusToDosError(status);
@@ -34,6 +43,17 @@ internal static void AssertSuccess(NTSTATUS status)
throw new Win32Exception();
}
+ ///
+ /// Validates that a Win32 error code indicates success and throws an appropriate exception if it doesn't.
+ ///
+ /// The Win32 error code to validate.
+ /// Thrown when the error code indicates an invalid parameter or DN syntax.
+ /// Thrown when the error code indicates a file was not found.
+ /// Thrown when the error code indicates access is denied or password issues.
+ /// Thrown when the error code indicates insufficient memory.
+ /// Thrown when the error code indicates network connectivity issues.
+ /// Thrown when the error code indicates a directory object was not found.
+ /// Thrown for other Win32 error codes.
public static void AssertSuccess(Win32ErrorCode code)
{
switch (code)
@@ -88,6 +108,13 @@ public static void AssertSuccess(Win32ErrorCode code)
throw exceptionToThrow;
}
+ ///
+ /// Validates that two string values are equal using invariant culture comparison.
+ ///
+ /// The expected string value.
+ /// The actual string value to compare.
+ /// The name of the parameter being validated.
+ /// Thrown when the values are not equal.
public static void AssertEquals(string expectedValue, string actualValue, string paramName)
{
if (!String.Equals(expectedValue, actualValue, StringComparison.InvariantCulture))
@@ -97,6 +124,13 @@ public static void AssertEquals(string expectedValue, string actualValue, string
}
}
+ ///
+ /// Validates that two integer values are equal.
+ ///
+ /// The expected integer value.
+ /// The actual integer value to compare.
+ /// The name of the parameter being validated.
+ /// Thrown when the values are not equal.
public static void AssertEquals(int expectedValue, int actualValue, string paramName)
{
if (expectedValue != actualValue)
@@ -106,6 +140,13 @@ public static void AssertEquals(int expectedValue, int actualValue, string param
}
}
+ ///
+ /// Validates that two character values are equal.
+ ///
+ /// The expected character value.
+ /// The actual character value to compare.
+ /// The name of the parameter being validated.
+ /// Thrown when the values are not equal.
public static void AssertEquals(char expectedValue, char actualValue, string paramName)
{
if (expectedValue.CompareTo(actualValue) != 0)
@@ -115,6 +156,12 @@ public static void AssertEquals(char expectedValue, char actualValue, string par
}
}
+ ///
+ /// Validates that an object is not null.
+ ///
+ /// The object to validate.
+ /// The name of the parameter being validated.
+ /// Thrown when the value is null.
public static void AssertNotNull(object value, string paramName)
{
if (value == null)
@@ -123,6 +170,12 @@ public static void AssertNotNull(object value, string paramName)
}
}
+ ///
+ /// Validates that a string is not null or empty.
+ ///
+ /// The string to validate.
+ /// The name of the parameter being validated.
+ /// Thrown when the value is null or empty.
public static void AssertNotNullOrEmpty(string value, string paramName)
{
if (String.IsNullOrEmpty(value))
@@ -131,6 +184,12 @@ public static void AssertNotNullOrEmpty(string value, string paramName)
}
}
+ ///
+ /// Validates that a string is not null, empty, or consists only of whitespace characters.
+ ///
+ /// The string to validate.
+ /// The name of the parameter being validated.
+ /// Thrown when the value is null, empty, or whitespace.
public static void AssertNotNullOrWhiteSpace(string value, string paramName)
{
if (string.IsNullOrWhiteSpace(value))
@@ -139,6 +198,14 @@ public static void AssertNotNullOrWhiteSpace(string value, string paramName)
}
}
+ ///
+ /// Validates that a string has the exact specified length.
+ ///
+ /// The string to validate.
+ /// The expected length of the string.
+ /// The name of the parameter being validated.
+ /// Thrown when the value is null.
+ /// Thrown when the string length does not match the expected length.
public static void AssertLength(string value, int length, string paramName)
{
AssertNotNull(value, paramName);
@@ -148,6 +215,14 @@ public static void AssertLength(string value, int length, string paramName)
}
}
+ ///
+ /// Validates that a SecureString does not exceed the maximum allowed length.
+ ///
+ /// The SecureString to validate.
+ /// The maximum allowed length.
+ /// The name of the parameter being validated.
+ /// Thrown when the password is null.
+ /// Thrown when the password length exceeds the maximum.
public static void AssertMaxLength(SecureString password, int maxLength, string paramName)
{
AssertNotNull(password, paramName);
@@ -157,6 +232,14 @@ public static void AssertMaxLength(SecureString password, int maxLength, string
}
}
+ ///
+ /// Validates that a string does not exceed the maximum allowed length.
+ ///
+ /// The string to validate.
+ /// The maximum allowed length.
+ /// The name of the parameter being validated.
+ /// Thrown when the input is null.
+ /// Thrown when the input length exceeds the maximum.
public static void AssertMaxLength(string input, int maxLength, string paramName)
{
AssertNotNull(input, paramName);
@@ -166,6 +249,14 @@ public static void AssertMaxLength(string input, int maxLength, string paramName
}
}
+ ///
+ /// Validates that a byte array does not exceed the maximum allowed length.
+ ///
+ /// The byte array to validate.
+ /// The maximum allowed length.
+ /// The name of the parameter being validated.
+ /// Thrown when the input is null.
+ /// Thrown when the input length exceeds the maximum.
public static void AssertMaxLength(byte[] input, int maxLength, string paramName)
{
AssertNotNull(input, paramName);
@@ -175,6 +266,14 @@ public static void AssertMaxLength(byte[] input, int maxLength, string paramName
}
}
+ ///
+ /// Validates that a byte array meets the minimum required length.
+ ///
+ /// The byte array to validate.
+ /// The minimum required length.
+ /// The name of the parameter being validated.
+ /// Thrown when the data is null.
+ /// Thrown when the data length is less than the minimum.
public static void AssertMinLength(byte[] data, int minLength, string paramName)
{
AssertNotNull(data, paramName);
@@ -186,6 +285,13 @@ public static void AssertMinLength(byte[] data, int minLength, string paramName)
}
}
+ ///
+ /// Validates that a read-only byte span meets the minimum required length.
+ ///
+ /// The read-only byte span to validate.
+ /// The minimum required length.
+ /// The name of the parameter being validated.
+ /// Thrown when the data length is less than the minimum.
public static void AssertMinLength(ReadOnlySpan data, int minLength, string paramName)
{
if (data.Length < minLength)
@@ -195,6 +301,13 @@ public static void AssertMinLength(ReadOnlySpan data, int minLength, strin
}
}
+ ///
+ /// Validates that a read-only byte memory meets the minimum required length.
+ ///
+ /// The read-only byte memory to validate.
+ /// The minimum required length.
+ /// The name of the parameter being validated.
+ /// Thrown when the data length is less than the minimum.
public static void AssertMinLength(ReadOnlyMemory data, int minLength, string paramName)
{
if (data.Length < minLength)
@@ -204,6 +317,14 @@ public static void AssertMinLength(ReadOnlyMemory data, int minLength, str
}
}
+ ///
+ /// Validates that a byte array has the exact specified length.
+ ///
+ /// The byte array to validate.
+ /// The expected length of the array.
+ /// The name of the parameter being validated.
+ /// Thrown when the value is null.
+ /// Thrown when the array length does not match the expected length.
public static void AssertLength(byte[] value, long length, string paramName)
{
AssertNotNull(value, paramName);
@@ -213,6 +334,11 @@ public static void AssertLength(byte[] value, long length, string paramName)
}
}
+ ///
+ /// Validates that a file exists at the specified path.
+ ///
+ /// The path to the file to validate.
+ /// Thrown when the file does not exist.
public static void AssertFileExists(string filePath)
{
bool exists = File.Exists(filePath);
@@ -222,6 +348,11 @@ public static void AssertFileExists(string filePath)
}
}
+ ///
+ /// Validates that a directory exists at the specified path.
+ ///
+ /// The path to the directory to validate.
+ /// Thrown when the directory does not exist.
public static void AssertDirectoryExists(string directoryPath)
{
bool exists = Directory.Exists(directoryPath);
@@ -231,6 +362,12 @@ public static void AssertDirectoryExists(string directoryPath)
}
}
+ ///
+ /// Validates that a buffer's CRC32 checksum matches the expected value.
+ ///
+ /// The byte buffer to validate.
+ /// The expected CRC32 checksum value.
+ /// Thrown when the CRC check fails.
public static void AssertCrcMatches(byte[] buffer, uint expectedCrc)
{
uint actualCrc = Crc32.Calculate(buffer);
diff --git a/Src/DSInternals.PowerShell/Commands/Base/ADDBCommandBase.cs b/Src/DSInternals.PowerShell/Commands/Base/ADDBCommandBase.cs
index 5643f55..c8b7f94 100644
--- a/Src/DSInternals.PowerShell/Commands/Base/ADDBCommandBase.cs
+++ b/Src/DSInternals.PowerShell/Commands/Base/ADDBCommandBase.cs
@@ -4,6 +4,9 @@
using System.Management.Automation;
using DSInternals.DataStore;
+ ///
+ /// Provides a base class for PowerShell cmdlets that operate on Active Directory database files.
+ ///
public abstract class ADDBCommandBase : PSCmdletEx, IDisposable
{
///
@@ -39,6 +42,10 @@ public string LogPath
set;
}
+ ///
+ /// Gets a value indicating whether the database should be opened in read-only mode.
+ ///
+ /// true if the database should be opened read-only; otherwise, false. Default is true.
protected virtual bool ReadOnly
{
get
@@ -47,12 +54,19 @@ protected virtual bool ReadOnly
}
}
+ ///
+ /// Gets the Active Directory database context.
+ ///
+ /// The DirectoryContext object representing the opened database.
protected DirectoryContext DirectoryContext
{
get;
private set;
}
+ ///
+ /// Initializes the cmdlet by opening the Active Directory database.
+ ///
protected override void BeginProcessing()
{
// TODO: Debug output
@@ -78,12 +92,20 @@ protected override void BeginProcessing()
this.ThrowTerminatingError(error);
}
}
+
+ ///
+ /// Releases all resources used by the ADDBCommandBase.
+ ///
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
+ ///
+ /// Releases the unmanaged resources used by the ADDBCommandBase and optionally releases the managed resources.
+ ///
+ /// true to release both managed and unmanaged resources; false to release only unmanaged resources.
protected virtual void Dispose(bool disposing)
{
if (disposing && this.DirectoryContext != null)
diff --git a/Src/DSInternals.PowerShell/packages.lock.json b/Src/DSInternals.PowerShell/packages.lock.json
index cabfee1..30f847f 100644
--- a/Src/DSInternals.PowerShell/packages.lock.json
+++ b/Src/DSInternals.PowerShell/packages.lock.json
@@ -2,6 +2,15 @@
"version": 1,
"dependencies": {
".NETFramework,Version=v4.8": {
+ "Microsoft.NETFramework.ReferenceAssemblies": {
+ "type": "Direct",
+ "requested": "[1.0.3, )",
+ "resolved": "1.0.3",
+ "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
+ "dependencies": {
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3"
+ }
+ },
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
@@ -18,19 +27,6 @@
"resolved": "5.1.1",
"contentHash": "e31xJjG+Kjbv6YF3Yq6D4Dl3or8v7LrNF41k3CXrWozW6hR1zcOe5KYuZJaGSiAgLnwP8wcW+I3+IWEzMPZKXQ=="
},
- "DSInternals.ManagedEsent.Interop": {
- "type": "Transitive",
- "resolved": "2.0.4.1",
- "contentHash": "WTcjhN/4l6C802QCBHctCZJZAGrVlI5TzVccS+P7s4axvfi0COjMEqHwhQJ4RdzsmblmemHAq4AQay/kc1e75Q=="
- },
- "DSInternals.ManagedEsent.Isam": {
- "type": "Transitive",
- "resolved": "2.0.4.1",
- "contentHash": "ttkkBm6GIEylpxSAepD5u9pR8uP1Kf87Fmr0G4f5pgFW5oXRBGWPr8UCitWkx4hdg6hqTV12+IGOTU0oVSaDRA==",
- "dependencies": {
- "DSInternals.ManagedEsent.Interop": "2.0.4.1"
- }
- },
"Microsoft.Bcl.AsyncInterfaces": {
"type": "Transitive",
"resolved": "9.0.8",
@@ -44,6 +40,11 @@
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": {
+ "type": "Transitive",
+ "resolved": "1.0.3",
+ "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ=="
+ },
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
@@ -162,14 +163,6 @@
"System.ValueTuple": "[4.6.1, )"
}
},
- "dsinternals.datastore": {
- "type": "Project",
- "dependencies": {
- "DSInternals.Common": "[6.1.0, )",
- "DSInternals.ManagedEsent.Interop": "[2.0.4.1, )",
- "DSInternals.ManagedEsent.Isam": "[2.0.4.1, )"
- }
- },
"dsinternals.replication": {
"type": "Project",
"dependencies": {
@@ -212,19 +205,6 @@
"resolved": "9.0.8",
"contentHash": "xN2JrOfhcOyswOflVZG27XlFJDPPqU7AQtAAStWcnKoC8W9XCLOLdAYIrrwiZMfeRhavVErI8HkSO/c2TQ+z2g=="
},
- "DSInternals.ManagedEsent.Interop": {
- "type": "Transitive",
- "resolved": "2.0.4.1",
- "contentHash": "WTcjhN/4l6C802QCBHctCZJZAGrVlI5TzVccS+P7s4axvfi0COjMEqHwhQJ4RdzsmblmemHAq4AQay/kc1e75Q=="
- },
- "DSInternals.ManagedEsent.Isam": {
- "type": "Transitive",
- "resolved": "2.0.4.1",
- "contentHash": "ttkkBm6GIEylpxSAepD5u9pR8uP1Kf87Fmr0G4f5pgFW5oXRBGWPr8UCitWkx4hdg6hqTV12+IGOTU0oVSaDRA==",
- "dependencies": {
- "DSInternals.ManagedEsent.Interop": "2.0.4.1"
- }
- },
"Microsoft.Build.Tasks.Git": {
"type": "Transitive",
"resolved": "8.0.0",
@@ -261,14 +241,6 @@
"System.DirectoryServices": "[9.0.8, )"
}
},
- "dsinternals.datastore": {
- "type": "Project",
- "dependencies": {
- "DSInternals.Common": "[6.1.0, )",
- "DSInternals.ManagedEsent.Interop": "[2.0.4.1, )",
- "DSInternals.ManagedEsent.Isam": "[2.0.4.1, )"
- }
- },
"dsinternals.replication": {
"type": "Project",
"dependencies": {
diff --git a/Src/DSInternals.Replication.Model/packages.lock.json b/Src/DSInternals.Replication.Model/packages.lock.json
index 1dbef1f..93707b1 100644
--- a/Src/DSInternals.Replication.Model/packages.lock.json
+++ b/Src/DSInternals.Replication.Model/packages.lock.json
@@ -2,6 +2,15 @@
"version": 1,
"dependencies": {
".NETFramework,Version=v4.8": {
+ "Microsoft.NETFramework.ReferenceAssemblies": {
+ "type": "Direct",
+ "requested": "[1.0.3, )",
+ "resolved": "1.0.3",
+ "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
+ "dependencies": {
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3"
+ }
+ },
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
@@ -25,6 +34,11 @@
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": {
+ "type": "Transitive",
+ "resolved": "1.0.3",
+ "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ=="
+ },
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
diff --git a/Src/DSInternals.Replication/NDceRpc.Microsoft/Client.cs b/Src/DSInternals.Replication/NDceRpc.Microsoft/Client.cs
index 2db406b..d6e05d5 100644
--- a/Src/DSInternals.Replication/NDceRpc.Microsoft/Client.cs
+++ b/Src/DSInternals.Replication/NDceRpc.Microsoft/Client.cs
@@ -17,11 +17,18 @@ public class Client : IDisposable//TODO: make is serializabl to propagate throug
private readonly string _binding;
protected readonly RpcHandle _handle;
+ ///
+ /// Gets the native handle for the RPC client.
+ ///
public IntPtr Handle
{
get { return _handle.Handle; }
}
+ ///
+ /// Initializes a new instance of the Client class with the specified endpoint binding information.
+ ///
+ /// The endpoint binding information for the RPC client.
public Client(EndpointBindingInfo endpointBindingInfo)
{
_handle = new RpcClientHandle();
@@ -136,6 +143,9 @@ public void AuthenticateAs(string serverPrincipalName, NetworkCredential credent
AuthenticateAs(serverPrincipalName, credentials, protect, types);
}
+ ///
+ /// Authenticates the client using no authentication (anonymous).
+ ///
public void AuthenticateAsNone()
{
_authenticated = true;
diff --git a/Src/DSInternals.Replication/packages.lock.json b/Src/DSInternals.Replication/packages.lock.json
index e6878cd..1c8f62d 100644
--- a/Src/DSInternals.Replication/packages.lock.json
+++ b/Src/DSInternals.Replication/packages.lock.json
@@ -2,6 +2,15 @@
"version": 1,
"dependencies": {
".NETFramework,Version=v4.8": {
+ "Microsoft.NETFramework.ReferenceAssemblies": {
+ "type": "Direct",
+ "requested": "[1.0.3, )",
+ "resolved": "1.0.3",
+ "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
+ "dependencies": {
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3"
+ }
+ },
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
@@ -25,6 +34,11 @@
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": {
+ "type": "Transitive",
+ "resolved": "1.0.3",
+ "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ=="
+ },
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
@@ -143,9 +157,6 @@
"System.ValueTuple": "[4.6.1, )"
}
},
- "dsinternals.replication.interop.netframework": {
- "type": "Project"
- },
"dsinternals.replication.model": {
"type": "Project",
"dependencies": {
@@ -205,13 +216,6 @@
"System.DirectoryServices": "[9.0.8, )"
}
},
- "dsinternals.replication.interop.netcore": {
- "type": "Project",
- "dependencies": {
- "DSInternals.Common": "[6.1.0, )",
- "DSInternals.Replication.Model": "[6.1.0, )"
- }
- },
"dsinternals.replication.model": {
"type": "Project",
"dependencies": {
diff --git a/Src/DSInternals.SAM/packages.lock.json b/Src/DSInternals.SAM/packages.lock.json
index 5c21547..81a7d59 100644
--- a/Src/DSInternals.SAM/packages.lock.json
+++ b/Src/DSInternals.SAM/packages.lock.json
@@ -2,6 +2,15 @@
"version": 1,
"dependencies": {
".NETFramework,Version=v4.8": {
+ "Microsoft.NETFramework.ReferenceAssemblies": {
+ "type": "Direct",
+ "requested": "[1.0.3, )",
+ "resolved": "1.0.3",
+ "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
+ "dependencies": {
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3"
+ }
+ },
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
@@ -36,6 +45,11 @@
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": {
+ "type": "Transitive",
+ "resolved": "1.0.3",
+ "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ=="
+ },
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
From 713f016329423a8e0afcd70a884dde9b53c4a8b1 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 2 Sep 2025 14:04:51 +0000
Subject: [PATCH 04/22] Complete XML documentation for additional utility
classes
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
Src/DSInternals.Common/Schema/PrefixTable.cs | 35 +++++++++++++++-
.../Serialization/LenientJsonSerializer.cs | 41 +++++++++++++++++++
Src/DSInternals.DataStore/packages.lock.json | 14 +++++++
3 files changed, 89 insertions(+), 1 deletion(-)
diff --git a/Src/DSInternals.Common/Schema/PrefixTable.cs b/Src/DSInternals.Common/Schema/PrefixTable.cs
index ffff1fd..e694331 100644
--- a/Src/DSInternals.Common/Schema/PrefixTable.cs
+++ b/Src/DSInternals.Common/Schema/PrefixTable.cs
@@ -13,6 +13,9 @@ namespace DSInternals.Common.Schema
using PrefixIndex = ushort;
+ ///
+ /// Represents a table that maps prefix indices to OID (Object Identifier) strings for efficient OID encoding and decoding.
+ ///
public class PrefixTable
{
public const int LastBuitlInPrefixIndex = 38;
@@ -23,6 +26,10 @@ public class PrefixTable
private IDictionary _forwardMap;
private IDictionary _reverseMap;
+ ///
+ /// Initializes a new instance of the PrefixTable class.
+ ///
+ /// Optional byte array containing user-defined prefix mappings to load.
public PrefixTable(byte[] blob = null)
{
_forwardMap = new SortedDictionary();
@@ -38,6 +45,11 @@ public PrefixTable(byte[] blob = null)
}
}
+ ///
+ /// Gets or sets the OID prefix string for the specified prefix index.
+ ///
+ /// The prefix index to look up or set.
+ /// The OID prefix string, or null if the index is not found.
public string? this[PrefixIndex prefixIndex]
{
get
@@ -163,7 +175,11 @@ public int Count
return $"{prefix}.{suffix}";
}
-
+ ///
+ /// Translates an attribute syntax enumeration value to its corresponding OID string.
+ ///
+ /// The encoded attribute syntax value.
+ /// The OID string representation of the attribute syntax.
public static string Translate(AttributeSyntax encodedOid)
{
// This is a static mapping, because the prefix table might not be available, when this is first needed.
@@ -171,6 +187,12 @@ public static string Translate(AttributeSyntax encodedOid)
return String.Format(AttributeSyntaxOidFormat, lastOctet);
}
+ ///
+ /// Adds a prefix mapping with the specified index and OID prefix string.
+ ///
+ /// The prefix index.
+ /// The OID prefix string.
+ /// Thrown when oidPrefix is null.
public void Add(PrefixIndex index, string oidPrefix)
{
if (oidPrefix == null) throw new ArgumentNullException(nameof(oidPrefix));
@@ -179,6 +201,12 @@ public void Add(PrefixIndex index, string oidPrefix)
_reverseMap[oidPrefix] = index;
}
+ ///
+ /// Adds a prefix mapping with the specified index and OID prefix byte array.
+ ///
+ /// The prefix index.
+ /// The OID prefix as a byte array.
+ /// Thrown when oidPrefix is null.
public void Add(PrefixIndex index, byte[] oidPrefix)
{
if (oidPrefix == null) throw new ArgumentNullException(nameof(oidPrefix));
@@ -188,6 +216,11 @@ public void Add(PrefixIndex index, byte[] oidPrefix)
_reverseMap[oidString] = index;
}
+ ///
+ /// Loads prefix mappings from a binary blob.
+ ///
+ /// The binary data containing prefix mapping information.
+ /// Thrown when the blob is too small.
public void LoadFromBlob(byte[] blob)
{
Validator.AssertMinLength(blob, MinBlobLength, nameof(blob));
diff --git a/Src/DSInternals.Common/Serialization/LenientJsonSerializer.cs b/Src/DSInternals.Common/Serialization/LenientJsonSerializer.cs
index 52045f3..e7cce2a 100644
--- a/Src/DSInternals.Common/Serialization/LenientJsonSerializer.cs
+++ b/Src/DSInternals.Common/Serialization/LenientJsonSerializer.cs
@@ -7,8 +7,14 @@
namespace DSInternals.Common.Serialization
{
// TODO: This class needs refactoring and cleanup.
+ ///
+ /// Provides lenient JSON serialization/deserialization with support for non-standard JSON formats and encodings.
+ ///
public static class LenientJsonSerializer
{
+ ///
+ /// Gets the default JSON serializer options configured for lenient parsing.
+ ///
// One place to set behavior for all JSON in DSInternals
public static readonly JsonSerializerOptions Options = new JsonSerializerOptions
{
@@ -26,6 +32,12 @@ static LenientJsonSerializer()
Options.Converters.Add(new JsonStringEnumConverter());
}
+ ///
+ /// Deserializes a JSON string to the specified type with lenient parsing that handles non-standard formats.
+ ///
+ /// The type to deserialize to.
+ /// The JSON string to deserialize.
+ /// The deserialized object of type T, or default(T) if the input is null or whitespace.
// ---------- String input ----------
public static T DeserializeLenient(string json)
{
@@ -50,6 +62,13 @@ public static T DeserializeLenient(string json)
}
}
+ ///
+ /// Deserializes binary JSON data to the specified type with support for UTF-8 and UTF-16 encodings.
+ ///
+ /// The type to deserialize to.
+ /// The binary JSON data to deserialize.
+ /// True to decode as UTF-16, false for UTF-8.
+ /// The deserialized object of type T.
// ---------- Binary input ----------
public static T DeserializeLenient(ReadOnlySpan binaryJson, bool utf16 = false)
{
@@ -57,6 +76,12 @@ public static T DeserializeLenient(ReadOnlySpan binaryJson, bool utf16
return DeserializeLenient(json);
}
+ ///
+ /// Decodes binary JSON data to a string with support for UTF-8 and UTF-16 encodings.
+ ///
+ /// The binary JSON data to decode.
+ /// True to decode as UTF-16, false for UTF-8.
+ /// The decoded JSON string.
public static string DecodeJson(ReadOnlySpan binaryJson, bool utf16 = false)
{
// Trim terminators/padding on BYTES BEFORE decoding.
@@ -83,6 +108,12 @@ public static string DecodeJson(ReadOnlySpan binaryJson, bool utf16 = fals
return json;
}
+ ///
+ /// Trims null terminators from the end of a byte span, with support for UTF-16 encoding.
+ ///
+ /// The input byte span to trim.
+ /// True if the data is UTF-16 encoded (trims 2-byte null terminators), false for UTF-8 (trims 1-byte null terminators).
+ /// The trimmed byte span.
public static ReadOnlySpan TrimZeroTerminator(ReadOnlySpan input, bool utf16)
{
if (input.Length == 0) return input;
@@ -108,6 +139,11 @@ public static ReadOnlySpan TrimZeroTerminator(ReadOnlySpan input, bo
}
}
+ ///
+ /// Determines whether a string appears to be JSON that uses single quotes instead of double quotes.
+ ///
+ /// The string to examine.
+ /// True if the string looks like single-quoted JSON, false otherwise.
public static bool LooksLikeSingleQuotedJson(string s)
{
if (string.IsNullOrEmpty(s)) return false;
@@ -117,6 +153,11 @@ public static bool LooksLikeSingleQuotedJson(string s)
&& s.IndexOf('\'') >= 0;
}
+ ///
+ /// Normalizes single-quoted JSON to standard double-quoted JSON format.
+ ///
+ /// The single-quoted JSON string to normalize.
+ /// A normalized JSON string with double quotes.
// Converts '…' to "…" and preserves apostrophes inside strings (\' -> ')
public static string NormalizeSingleQuotedJson(string input)
{
diff --git a/Src/DSInternals.DataStore/packages.lock.json b/Src/DSInternals.DataStore/packages.lock.json
index 5a83c73..3663768 100644
--- a/Src/DSInternals.DataStore/packages.lock.json
+++ b/Src/DSInternals.DataStore/packages.lock.json
@@ -17,6 +17,15 @@
"DSInternals.ManagedEsent.Interop": "2.0.4.1"
}
},
+ "Microsoft.NETFramework.ReferenceAssemblies": {
+ "type": "Direct",
+ "requested": "[1.0.3, )",
+ "resolved": "1.0.3",
+ "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
+ "dependencies": {
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3"
+ }
+ },
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
@@ -51,6 +60,11 @@
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": {
+ "type": "Transitive",
+ "resolved": "1.0.3",
+ "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ=="
+ },
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
From 8a9e1a75ad459c986122055af3cc9a34c9382a94 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 3 Sep 2025 12:56:38 +0000
Subject: [PATCH 05/22] Revert packages.lock.json changes - only add XML
documentation
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
Src/DSInternals.DataStore/packages.lock.json | 14 --------------
1 file changed, 14 deletions(-)
diff --git a/Src/DSInternals.DataStore/packages.lock.json b/Src/DSInternals.DataStore/packages.lock.json
index 3663768..5a83c73 100644
--- a/Src/DSInternals.DataStore/packages.lock.json
+++ b/Src/DSInternals.DataStore/packages.lock.json
@@ -17,15 +17,6 @@
"DSInternals.ManagedEsent.Interop": "2.0.4.1"
}
},
- "Microsoft.NETFramework.ReferenceAssemblies": {
- "type": "Direct",
- "requested": "[1.0.3, )",
- "resolved": "1.0.3",
- "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
- "dependencies": {
- "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3"
- }
- },
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
@@ -60,11 +51,6 @@
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
- "Microsoft.NETFramework.ReferenceAssemblies.net48": {
- "type": "Transitive",
- "resolved": "1.0.3",
- "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ=="
- },
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
From 580ad588ae3922941d61ecce78c8893712e7da8a Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 3 Sep 2025 12:57:19 +0000
Subject: [PATCH 06/22] Revert all packages.lock.json files to original state
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
Src/DSInternals.Common/packages.lock.json | 14 -----
Src/DSInternals.PowerShell/packages.lock.json | 56 ++++++++++++++-----
.../packages.lock.json | 14 -----
.../packages.lock.json | 24 ++++----
Src/DSInternals.SAM/packages.lock.json | 14 -----
5 files changed, 52 insertions(+), 70 deletions(-)
diff --git a/Src/DSInternals.Common/packages.lock.json b/Src/DSInternals.Common/packages.lock.json
index b74f1c7..75a5f18 100644
--- a/Src/DSInternals.Common/packages.lock.json
+++ b/Src/DSInternals.Common/packages.lock.json
@@ -2,15 +2,6 @@
"version": 1,
"dependencies": {
".NETFramework,Version=v4.8": {
- "Microsoft.NETFramework.ReferenceAssemblies": {
- "type": "Direct",
- "requested": "[1.0.3, )",
- "resolved": "1.0.3",
- "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
- "dependencies": {
- "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3"
- }
- },
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
@@ -105,11 +96,6 @@
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
- "Microsoft.NETFramework.ReferenceAssemblies.net48": {
- "type": "Transitive",
- "resolved": "1.0.3",
- "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ=="
- },
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
diff --git a/Src/DSInternals.PowerShell/packages.lock.json b/Src/DSInternals.PowerShell/packages.lock.json
index 30f847f..cabfee1 100644
--- a/Src/DSInternals.PowerShell/packages.lock.json
+++ b/Src/DSInternals.PowerShell/packages.lock.json
@@ -2,15 +2,6 @@
"version": 1,
"dependencies": {
".NETFramework,Version=v4.8": {
- "Microsoft.NETFramework.ReferenceAssemblies": {
- "type": "Direct",
- "requested": "[1.0.3, )",
- "resolved": "1.0.3",
- "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
- "dependencies": {
- "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3"
- }
- },
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
@@ -27,6 +18,19 @@
"resolved": "5.1.1",
"contentHash": "e31xJjG+Kjbv6YF3Yq6D4Dl3or8v7LrNF41k3CXrWozW6hR1zcOe5KYuZJaGSiAgLnwP8wcW+I3+IWEzMPZKXQ=="
},
+ "DSInternals.ManagedEsent.Interop": {
+ "type": "Transitive",
+ "resolved": "2.0.4.1",
+ "contentHash": "WTcjhN/4l6C802QCBHctCZJZAGrVlI5TzVccS+P7s4axvfi0COjMEqHwhQJ4RdzsmblmemHAq4AQay/kc1e75Q=="
+ },
+ "DSInternals.ManagedEsent.Isam": {
+ "type": "Transitive",
+ "resolved": "2.0.4.1",
+ "contentHash": "ttkkBm6GIEylpxSAepD5u9pR8uP1Kf87Fmr0G4f5pgFW5oXRBGWPr8UCitWkx4hdg6hqTV12+IGOTU0oVSaDRA==",
+ "dependencies": {
+ "DSInternals.ManagedEsent.Interop": "2.0.4.1"
+ }
+ },
"Microsoft.Bcl.AsyncInterfaces": {
"type": "Transitive",
"resolved": "9.0.8",
@@ -40,11 +44,6 @@
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
- "Microsoft.NETFramework.ReferenceAssemblies.net48": {
- "type": "Transitive",
- "resolved": "1.0.3",
- "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ=="
- },
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
@@ -163,6 +162,14 @@
"System.ValueTuple": "[4.6.1, )"
}
},
+ "dsinternals.datastore": {
+ "type": "Project",
+ "dependencies": {
+ "DSInternals.Common": "[6.1.0, )",
+ "DSInternals.ManagedEsent.Interop": "[2.0.4.1, )",
+ "DSInternals.ManagedEsent.Isam": "[2.0.4.1, )"
+ }
+ },
"dsinternals.replication": {
"type": "Project",
"dependencies": {
@@ -205,6 +212,19 @@
"resolved": "9.0.8",
"contentHash": "xN2JrOfhcOyswOflVZG27XlFJDPPqU7AQtAAStWcnKoC8W9XCLOLdAYIrrwiZMfeRhavVErI8HkSO/c2TQ+z2g=="
},
+ "DSInternals.ManagedEsent.Interop": {
+ "type": "Transitive",
+ "resolved": "2.0.4.1",
+ "contentHash": "WTcjhN/4l6C802QCBHctCZJZAGrVlI5TzVccS+P7s4axvfi0COjMEqHwhQJ4RdzsmblmemHAq4AQay/kc1e75Q=="
+ },
+ "DSInternals.ManagedEsent.Isam": {
+ "type": "Transitive",
+ "resolved": "2.0.4.1",
+ "contentHash": "ttkkBm6GIEylpxSAepD5u9pR8uP1Kf87Fmr0G4f5pgFW5oXRBGWPr8UCitWkx4hdg6hqTV12+IGOTU0oVSaDRA==",
+ "dependencies": {
+ "DSInternals.ManagedEsent.Interop": "2.0.4.1"
+ }
+ },
"Microsoft.Build.Tasks.Git": {
"type": "Transitive",
"resolved": "8.0.0",
@@ -241,6 +261,14 @@
"System.DirectoryServices": "[9.0.8, )"
}
},
+ "dsinternals.datastore": {
+ "type": "Project",
+ "dependencies": {
+ "DSInternals.Common": "[6.1.0, )",
+ "DSInternals.ManagedEsent.Interop": "[2.0.4.1, )",
+ "DSInternals.ManagedEsent.Isam": "[2.0.4.1, )"
+ }
+ },
"dsinternals.replication": {
"type": "Project",
"dependencies": {
diff --git a/Src/DSInternals.Replication.Model/packages.lock.json b/Src/DSInternals.Replication.Model/packages.lock.json
index 93707b1..1dbef1f 100644
--- a/Src/DSInternals.Replication.Model/packages.lock.json
+++ b/Src/DSInternals.Replication.Model/packages.lock.json
@@ -2,15 +2,6 @@
"version": 1,
"dependencies": {
".NETFramework,Version=v4.8": {
- "Microsoft.NETFramework.ReferenceAssemblies": {
- "type": "Direct",
- "requested": "[1.0.3, )",
- "resolved": "1.0.3",
- "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
- "dependencies": {
- "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3"
- }
- },
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
@@ -34,11 +25,6 @@
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
- "Microsoft.NETFramework.ReferenceAssemblies.net48": {
- "type": "Transitive",
- "resolved": "1.0.3",
- "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ=="
- },
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
diff --git a/Src/DSInternals.Replication/packages.lock.json b/Src/DSInternals.Replication/packages.lock.json
index 1c8f62d..e6878cd 100644
--- a/Src/DSInternals.Replication/packages.lock.json
+++ b/Src/DSInternals.Replication/packages.lock.json
@@ -2,15 +2,6 @@
"version": 1,
"dependencies": {
".NETFramework,Version=v4.8": {
- "Microsoft.NETFramework.ReferenceAssemblies": {
- "type": "Direct",
- "requested": "[1.0.3, )",
- "resolved": "1.0.3",
- "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
- "dependencies": {
- "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3"
- }
- },
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
@@ -34,11 +25,6 @@
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
- "Microsoft.NETFramework.ReferenceAssemblies.net48": {
- "type": "Transitive",
- "resolved": "1.0.3",
- "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ=="
- },
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
@@ -157,6 +143,9 @@
"System.ValueTuple": "[4.6.1, )"
}
},
+ "dsinternals.replication.interop.netframework": {
+ "type": "Project"
+ },
"dsinternals.replication.model": {
"type": "Project",
"dependencies": {
@@ -216,6 +205,13 @@
"System.DirectoryServices": "[9.0.8, )"
}
},
+ "dsinternals.replication.interop.netcore": {
+ "type": "Project",
+ "dependencies": {
+ "DSInternals.Common": "[6.1.0, )",
+ "DSInternals.Replication.Model": "[6.1.0, )"
+ }
+ },
"dsinternals.replication.model": {
"type": "Project",
"dependencies": {
diff --git a/Src/DSInternals.SAM/packages.lock.json b/Src/DSInternals.SAM/packages.lock.json
index 81a7d59..5c21547 100644
--- a/Src/DSInternals.SAM/packages.lock.json
+++ b/Src/DSInternals.SAM/packages.lock.json
@@ -2,15 +2,6 @@
"version": 1,
"dependencies": {
".NETFramework,Version=v4.8": {
- "Microsoft.NETFramework.ReferenceAssemblies": {
- "type": "Direct",
- "requested": "[1.0.3, )",
- "resolved": "1.0.3",
- "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
- "dependencies": {
- "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3"
- }
- },
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
@@ -45,11 +36,6 @@
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
- "Microsoft.NETFramework.ReferenceAssemblies.net48": {
- "type": "Transitive",
- "resolved": "1.0.3",
- "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ=="
- },
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
From 24777f430c3d92b695a67f8444898ff392f1a9e4 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 3 Sep 2025 13:09:17 +0000
Subject: [PATCH 07/22] Revert global.json change and add comprehensive XML
documentation to AttributeTypeExtensions
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
.../Schema/AttributeTypeExtensions.cs | 48 +++++++++++++++++++
Src/global.json | 2 +-
2 files changed, 49 insertions(+), 1 deletion(-)
diff --git a/Src/DSInternals.Common/Schema/AttributeTypeExtensions.cs b/Src/DSInternals.Common/Schema/AttributeTypeExtensions.cs
index 2af7517..bde8bc7 100644
--- a/Src/DSInternals.Common/Schema/AttributeTypeExtensions.cs
+++ b/Src/DSInternals.Common/Schema/AttributeTypeExtensions.cs
@@ -3,8 +3,16 @@
namespace DSInternals.Common.Schema
{
+ ///
+ /// Extension methods for the AttributeType enumeration to provide metadata lookups and utility operations.
+ ///
public static class AttributeTypeExtensions
{
+ ///
+ /// Gets the syntax type for the specified attribute type.
+ ///
+ /// The attribute type to get the syntax for.
+ /// The corresponding attribute syntax, or null if not defined.
public static AttributeSyntax? GetSyntax(this AttributeType attrtyp) => attrtyp switch
{
AttributeType.RDN => AttributeSyntax.UnicodeString,
@@ -1459,6 +1467,11 @@ public static class AttributeTypeExtensions
_ => null
};
+ ///
+ /// Gets the search flags for the specified attribute type.
+ ///
+ /// The attribute type to get the search flags for.
+ /// The corresponding search flags for the attribute.
public static AttributeSearchFlags GetSearchFlags(this AttributeType attrtyp) => attrtyp switch
{
AttributeType.AccountExpires => AttributeSearchFlags.Copy,
@@ -1728,6 +1741,12 @@ public static class AttributeTypeExtensions
_ => AttributeSearchFlags.None
};
+ ///
+ /// Derives a database column name for the specified attribute type and syntax.
+ ///
+ /// The attribute type.
+ /// The attribute syntax.
+ /// A formatted column name string.
public static string DeriveColumnName(this AttributeType attrtyp, AttributeSyntax syntax)
{
char infix = syntax.GetCode();
@@ -1739,6 +1758,11 @@ public static string DeriveColumnName(this AttributeType attrtyp, AttributeSynta
return $"ATT{infix}{suffix}";
}
+ ///
+ /// Gets the character code representation for the specified attribute syntax.
+ ///
+ /// The attribute syntax.
+ /// A single character code representing the syntax type.
public static char GetCode(this AttributeSyntax syntax) => syntax switch
{
AttributeSyntax.DN => 'b',
@@ -1761,6 +1785,11 @@ public static string DeriveColumnName(this AttributeType attrtyp, AttributeSynta
_ => throw new ArgumentOutOfRangeException("Unsupported attribute syntax", nameof(syntax))
};
+ ///
+ /// Derives an index name for the specified attribute type.
+ ///
+ /// The attribute type.
+ /// A formatted index name string.
public static string DeriveIndexName(this AttributeType attrtyp)
{
string suffix = DeriveIndexSuffix(attrtyp);
@@ -1769,6 +1798,11 @@ public static string DeriveIndexName(this AttributeType attrtyp)
return $"INDEX_{suffix}";
}
+ ///
+ /// Derives a containerized index name for the specified attribute type.
+ ///
+ /// The attribute type.
+ /// A formatted containerized index name string.
public static string DeriveContainerizedIndexName(this AttributeType attrtyp)
{
string suffix = DeriveIndexSuffix(attrtyp);
@@ -1776,6 +1810,11 @@ public static string DeriveContainerizedIndexName(this AttributeType attrtyp)
return $"INDEX_P_{suffix}";
}
+ ///
+ /// Derives a tuple index name for the specified attribute type.
+ ///
+ /// The attribute type.
+ /// A formatted tuple index name string.
public static string DeriveTupleIndexName(this AttributeType attrtyp)
{
string suffix = DeriveIndexSuffix(attrtyp);
@@ -1783,6 +1822,11 @@ public static string DeriveTupleIndexName(this AttributeType attrtyp)
return $"INDEX_T_{suffix}";
}
+ ///
+ /// Derives a subtree index name for the specified attribute type.
+ ///
+ /// The attribute type.
+ /// A formatted subtree index name string.
public static string DeriveSubtreeIndexName(this AttributeType attrtyp)
{
string suffix = attrtyp.DeriveIndexSuffix();
@@ -1800,11 +1844,15 @@ private static string DeriveIndexSuffix(this AttributeType attrtyp)
///
/// Indicates if the ATTRTYP maps to an OID via the prefix table.
///
+ /// The attribute type to check.
+ /// True if the attribute type is a compressed OID; otherwise, false.
public static bool IsCompressedOid(this AttributeType attrtyp) => attrtyp <= AttributeType.LastCompressedOid;
///
/// Indicates if the ATTRTYP is used as a value of the msDS-IntId attribute.
///
+ /// The attribute type to check.
+ /// True if the attribute type is an internal ID; otherwise, false.
public static bool IsInternalId(this AttributeType attrtyp) => attrtyp >= AttributeType.FirstInternalId && attrtyp <= AttributeType.LastInternalId;
}
}
diff --git a/Src/global.json b/Src/global.json
index c83d6f2..80d9230 100644
--- a/Src/global.json
+++ b/Src/global.json
@@ -1,7 +1,7 @@
{
"$schema": "Schema/Global.schema.json",
"sdk": {
- "version": "8.0.119",
+ "version": "9.0.304",
"rollForward": "latestFeature"
},
"msbuild-sdks": {
From 73e05d38832b294b9f66f52debbf9314a335ec9d Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 3 Sep 2025 13:19:22 +0000
Subject: [PATCH 08/22] Add comprehensive XML documentation to all 700+
undocumented public members across all DSInternals projects
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
Src/DSInternals.Common/ADSI/AdsiClient.cs | 9 +
.../ADSI/AdsiObjectAdapter.cs | 30 ++
.../AzureAD/AzureADClient.cs | 37 ++
Src/DSInternals.Common/AzureAD/AzureADUser.cs | 3 +
.../AzureAD/GraphApiException.cs | 20 +
Src/DSInternals.Common/AzureAD/ODataError.cs | 3 +
.../AzureAD/ODataErrorMessage.cs | 3 +
.../AzureAD/OdataErrorResponse.cs | 7 +
.../AzureAD/OdataPagedResponse.cs | 4 +
.../Asn1/DpapiNg/CngProtectedDataBlob.cs | 9 +
.../Asn1/DpapiNg/ProtectionKeyDescriptor.cs | 9 +
.../Cryptography/Asn1/Pkcs12/Pfx.cs | 12 +
Src/DSInternals.Common/Cryptography/Crc32.cs | 3 +
.../Cryptography/DirectorySecretDecryptor.cs | 12 +
.../Cryptography/GPPrefPwdObfuscator.cs | 6 +
.../Cryptography/HashEqualityComparer.cs | 12 +
.../Cryptography/KerberosKeyDerivation.cs | 3 +
Src/DSInternals.Common/Cryptography/LMHash.cs | 6 +
Src/DSInternals.Common/Cryptography/NTHash.cs | 21 +
.../Cryptography/OrgIdHash.cs | 18 +
.../Cryptography/PrivateKeyEncryptionType.cs | 3 +
.../Cryptography/SecretEncryptionType.cs | 3 +
.../Cryptography/SecureStringExtensions.cs | 9 +
.../Cryptography/SortedFileSearcher.cs | 9 +
.../Data/DNS/DnsResourceRecord.cs | 27 +
.../Data/DNS/ResourceRecordFlags.cs | 3 +
.../Data/DNS/ResourceRecordRank.cs | 3 +
Src/DSInternals.Common/Data/DNWithBinary.cs | 6 +
.../Data/DPAPI/DPAPIBackupKey.cs | 18 +
.../Data/DPAPI/DPAPIBackupKeyType.cs | 3 +
.../Data/DPAPI/GroupKeyEnvelope.cs | 18 +
.../Data/DPAPI/GroupKeyEnvelopeFlags.cs | 3 +
.../Data/DPAPI/IKdsRootKeyResolver.cs | 18 +
.../Data/DPAPI/KdsRootKey.cs | 24 +
.../Data/DPAPI/KdsRootKeyCache.cs | 9 +
.../Data/DPAPI/ProtectionKeyIdentifier.cs | 33 ++
.../Data/DPAPI/RoamedCredential.cs | 9 +
.../Data/DPAPI/RoamedCredentialFlags.cs | 3 +
.../Data/DPAPI/RoamedCredentialType.cs | 3 +
.../Data/DPAPI/StaticKdsRootKeyResolver.cs | 15 +
.../Data/DirectoryObject.cs | 57 +++
.../Data/DistinguishedName.cs | 39 ++
.../Data/DistinguishedNameComponent.cs | 6 +
.../Data/Hello/CustomKeyInformation.cs | 6 +
.../Hello/CustomKeyInformationConverter.cs | 6 +
.../Data/Hello/FidoAttestedCredentialData.cs | 3 +
.../Data/Hello/FidoAuthenticatorData.cs | 3 +
.../Data/Hello/FidoAuthenticatorFlags.cs | 3 +
.../Data/Hello/FidoCredentialPublicKey.cs | 15 +
.../Data/Hello/KeyCredential.cs | 18 +
Src/DSInternals.Common/Data/Hello/KeyFlags.cs | 3 +
.../Data/Hello/KeyMaterialFido.cs | 3 +
Src/DSInternals.Common/Data/InstanceType.cs | 3 +
.../Data/LAPS/LapsClearTextPassword.cs | 15 +
.../Data/LAPS/LapsDecryptionStatus.cs | 3 +
.../Data/LAPS/LapsEncryptedPassword.cs | 15 +
.../Data/LAPS/LapsPasswordInformation.cs | 3 +
.../Data/LAPS/LapsPasswordSource.cs | 3 +
.../Data/Principals/AccountFactory.cs | 3 +
.../Data/Principals/AccountPropertySets.cs | 3 +
.../BitLockerRecoveryInformation.cs | 6 +
.../Data/Principals/DSAccount.cs | 3 +
.../Data/Principals/DSComputer.cs | 6 +
.../Principals/GroupManagedServiceAccount.cs | 9 +
.../Data/Principals/KerberosCredential.cs | 6 +
.../Data/Principals/KerberosCredentialNew.cs | 9 +
.../Data/Principals/KerberosKeyData.cs | 6 +
.../Data/Principals/KerberosKeyDataNew.cs | 6 +
.../Principals/SupplementalCredentials.cs | 3 +
.../Principals/SupportedEncryptionTypes.cs | 3 +
.../Data/Principals/UserAccountControl.cs | 6 +
.../Exceptions/DirectoryException.cs | 3 +
.../Exceptions/DirectoryObjectException.cs | 3 +
.../DirectoryObjectOperationException.cs | 3 +
.../SchemaAttributeNotFoundException.cs | 3 +
.../Extensions/ByteArrayExtensions.cs | 48 ++
.../Extensions/DateTimeExtensions.cs | 3 +
.../Extensions/NTAccountExtensions.cs | 3 +
.../Extensions/RegistryKeyExtensions.cs | 3 +
.../SecurityIdentifierExtensions.cs | 6 +
.../Extensions/StringExtensions.cs | 9 +
.../Interop/CryptoBuffer.cs | 12 +
.../Interop/Enums/RegistryKeyRights.cs | 3 +
.../Interop/NamedPipeConnection.cs | 6 +
Src/DSInternals.Common/Interop/OemString.cs | 3 +
.../Interop/RegistryHiveFileMapping.cs | 6 +
.../Interop/SafeOemStringPointer.cs | 9 +
.../Interop/SafeSidKeyProviderHandle.cs | 6 +
.../Interop/SafeUnicodeSecureStringPointer.cs | 3 +
.../Interop/SecureUnicodeString.cs | 3 +
.../Interop/UnicodeString.cs | 6 +
.../Kerberos/TrustAttributes.cs | 3 +
.../Kerberos/TrustAuthInfos.cs | 6 +
.../TrustAuthenticationInformation.cs | 3 +
.../Schema/AttributeOmSyntax.cs | 3 +
.../Schema/AttributeSchema.cs | 39 ++
.../Schema/AttributeSearchFlags.cs | 3 +
.../Schema/AttributeSystemFlags.cs | 3 +
Src/DSInternals.Common/Schema/BaseSchema.cs | 27 +
.../Schema/CommonDirectoryAttributes.cs | 477 ++++++++++++++++++
.../Schema/CommonDirectoryClasses.cs | 3 +
Src/DSInternals.Common/Schema/LinkType.cs | 3 +
Src/DSInternals.Common/Schema/PrefixTable.cs | 12 +
Src/DSInternals.Common/packages.lock.json | 14 +
Src/DSInternals.DataStore/ADConstants.cs | 27 +
.../AttributeMetadata.cs | 6 +
.../AttributeMetadataCollection.cs | 15 +
.../Cryptography/BootKeyRetriever.cs | 3 +
.../Cryptography/DataStoreSecretDecryptor.cs | 9 +
Src/DSInternals.DataStore/DatastoreObject.cs | 57 +++
.../DatastoreRootKeyResolver.cs | 15 +
.../DirectoryAgent.BitLocker.cs | 15 +
.../DirectoryAgent.DNS.cs | 6 +
.../DirectoryAgent.DataProtection.cs | 6 +
.../DirectoryAgent.PasswordManagement.cs | 27 +
Src/DSInternals.DataStore/DirectoryAgent.cs | 108 ++++
Src/DSInternals.DataStore/DirectoryContext.cs | 18 +
Src/DSInternals.DataStore/DirectorySchema.cs | 63 +++
Src/DSInternals.DataStore/DomainController.cs | 18 +
.../Enums/DatabaseState.cs | 3 +
.../Enums/DomainControllerOptions.cs | 3 +
.../InvalidDatabaseStateException.cs | 9 +
.../Extensions/CursorExtensions.cs | 117 +++++
.../Extensions/IsamInstanceExtensions.cs | 3 +
.../Interfaces/IDomainController.cs | 3 +
Src/DSInternals.DataStore/LinkResolver.cs | 12 +
.../SecurityDescriptorResolver.cs | 24 +
.../Commands/ADSI/GetADSIAccountCommand.cs | 3 +
.../AzureAD/GetAzureADUserExCommand.cs | 3 +
.../AzureAD/SetAzureADUserExCommand.cs | 3 +
.../Commands/Base/ADReplCommandBase.cs | 3 +
.../Commands/Base/ADSICommandBase.cs | 3 +
.../Commands/Base/AzureADCommandBase.cs | 3 +
.../Commands/Base/LsaPolicyCommandBase.cs | 3 +
.../Commands/Base/SamCommandBase.cs | 3 +
.../Datastore/AddADDBSidHistoryCommand.cs | 3 +
.../Datastore/DisableADDBAccountCommand.cs | 3 +
.../Datastore/EnableADDBAccountCommand.cs | 3 +
.../Datastore/GetADDBAccountCommand.cs | 3 +
.../Datastore/GetADDBBackupKeyCommand.cs | 3 +
...ADDBBitlockerRecoveryInformationCommand.cs | 3 +
.../GetADDBDnsResourceRecordCommand.cs | 3 +
.../Datastore/GetADDBDnsZoneCommand.cs | 3 +
.../GetADDBDomainControllerCommand.cs | 3 +
.../Commands/Datastore/GetADDBIndexCommand.cs | 3 +
.../Datastore/GetADDBKdsRootKeyCommand.cs | 9 +
.../GetADDBSchemaAttributeCommand.cs | 3 +
.../Datastore/GetADDBServiceAccountCommand.cs | 6 +
.../Commands/Datastore/GetADDBTrust.cs | 3 +
.../Commands/Datastore/GetBootKeyCommand.cs | 3 +
.../NewADDBRestoreFromMediaScriptCommand.cs | 3 +
.../Datastore/RemoveADDBObjectCommand.cs | 3 +
.../Datastore/RestoreADDBAttributeCommand.cs | 3 +
.../Datastore/SetADDBAccountControlCommand.cs | 21 +
.../SetADDBAccountPasswordCommand.cs | 3 +
.../SetADDBAccountPasswordHashCommand.cs | 3 +
.../Datastore/SetADDBBootKeyCommand.cs | 3 +
.../SetADDBDomainControllerCommand.cs | 12 +
.../Datastore/SetADDBPrimaryGroupCommand.cs | 3 +
.../Datastore/UnlockADDBAccountCommand.cs | 3 +
.../ConvertFromGPPrefPasswordCommand.cs | 3 +
.../ConvertFromUnicodePasswordCommand.cs | 3 +
.../ConvertToGPPrefPasswordCommand.cs | 3 +
.../ConvertToUnicodePasswordCommand.cs | 3 +
.../Encryption/SaveDPAPIBlobCommand.cs | 3 +
.../Hash/ConvertToKerberosKeyCommand.cs | 3 +
.../Commands/Hash/ConvertToLMHashCommand.cs | 3 +
.../Commands/Hash/ConvertToNTHashCommand.cs | 3 +
.../Hash/ConvertToOrgIdHashCommand.cs | 3 +
.../Hash/SetSamAccountPasswordHashCommand.cs | 3 +
.../Commands/LSA/GetLsaBackupKeyCommand.cs | 3 +
.../LSA/GetLsaPolicyInformationCommand.cs | 3 +
.../LSA/GetSamPasswordPolicyCommand.cs | 3 +
.../LSA/SetLsaPolicyInformationCommand.cs | 3 +
...ConvertFromADManagedPasswordBlobCommand.cs | 3 +
.../Commands/Misc/ConvertToHexCommand.cs | 3 +
.../Commands/Misc/GetADKeyCredential.cs | 3 +
.../Misc/TestPasswordQualityCommand.cs | 6 +
.../Replication/AddADReplNgcKeyCommand.cs | 3 +
.../Replication/GetADReplAccountCommand.cs | 3 +
.../Replication/GetADReplBackupKeyCommand.cs | 3 +
.../Replication/GetADReplKdsRootKey.cs | 6 +
.../Types/AccountExportFormat.cs | 6 +
.../Types/DomainController.cs | 3 +
.../Types/LsaPolicyInformation.cs | 12 +
.../SupplementalCredentialsDeserializer.cs | 15 +
.../Utils/AcceptHexStringAttribute.cs | 3 +
Src/DSInternals.Replication.Model/DSName.cs | 3 +
.../ReplicaAttribute.cs | 3 +
.../ReplicaAttributeCollection.cs | 9 +
.../ReplicaObject.cs | 33 ++
.../ReplicaObjectCollection.cs | 6 +
.../ReplicatedLinkedValueCollection.cs | 12 +
.../ReplicationCookie.cs | 9 +
.../ReplicationCursor.cs | 3 +
.../ReplicationResult.cs | 3 +
.../DirectoryReplicationClient.cs | 45 ++
.../NDceRpc.Microsoft/Client.cs | 9 +
.../NDceRpc.Microsoft/EndpointBindingInfo.cs | 15 +
.../NDceRpc.Microsoft/Guard.cs | 3 +
.../NDceRpc.Microsoft/NativeClient.cs | 6 +
.../NDceRpc.Microsoft/NativeMethods.cs | 18 +
.../NDceRpc.Microsoft/RpcException.cs | 3 +
.../NDceRpc.Microsoft/RpcHandle.cs | 12 +
.../NDceRpc.Microsoft/RpcTrace.cs | 21 +
.../SEC_WINNT_AUTH_IDENTITY.cs | 3 +
.../ReplicationProgressHandler.cs | 3 +
.../ReplicationSecretDecryptor.cs | 9 +
Src/DSInternals.Replication/RpcProtocol.cs | 3 +
.../Interop/Enums/LsaPolicyAccessMask.cs | 3 +
.../Interop/Enums/SamCommonAccessMask.cs | 3 +
.../Interop/Enums/SamDomainAccessMask.cs | 3 +
.../Enums/SamDomainPasswordProperties.cs | 3 +
.../Interop/Enums/SamServerAccessMask.cs | 3 +
.../Interop/Enums/SamSidType.cs | 3 +
.../Interop/Enums/SamUserAccessMask.cs | 3 +
.../SafeHandles/SafeLsaPolicyHandle.cs | 6 +
.../SafeHandles/SafeRpcAuthIdentityHandle.cs | 3 +
.../Interop/SafeHandles/SafeSamHandle.cs | 6 +
.../Interop/SafeHandles/SafeSamPointer.cs | 3 +
.../Interop/Structs/LsaBuffer.cs | 6 +
.../Interop/Structs/SamRidEnumeration.cs | 3 +
.../Wrappers/LsaDnsDomainInformation.cs | 3 +
.../Wrappers/LsaDomainInformation.cs | 3 +
Src/DSInternals.SAM/Wrappers/LsaPolicy.cs | 30 ++
Src/DSInternals.SAM/Wrappers/SamDomain.cs | 18 +
.../Wrappers/SamDomainPasswordInformation.cs | 3 +
Src/DSInternals.SAM/Wrappers/SamObject.cs | 6 +
Src/DSInternals.SAM/Wrappers/SamServer.cs | 21 +
Src/DSInternals.SAM/Wrappers/SamUser.cs | 9 +
230 files changed, 2641 insertions(+)
diff --git a/Src/DSInternals.Common/ADSI/AdsiClient.cs b/Src/DSInternals.Common/ADSI/AdsiClient.cs
index 864c52b..cf78ff5 100644
--- a/Src/DSInternals.Common/ADSI/AdsiClient.cs
+++ b/Src/DSInternals.Common/ADSI/AdsiClient.cs
@@ -9,6 +9,9 @@
using DSInternals.Common.Data;
using DSInternals.Common.Schema;
+ ///
+ /// Represents a AdsiClient.
+ ///
public class AdsiClient : IDisposable
{
private const string ConfigurationContainerRDN = "CN=Configuration";
@@ -88,6 +91,9 @@ public string NetBIOSDomainName
private set;
}
+ ///
+ /// GetAccounts implementation.
+ ///
public IEnumerable GetAccounts(AccountPropertySets propertySets = AccountPropertySets.All)
{
// Not all property sets work as secret attributes are never sent ove LDAP.
@@ -241,6 +247,9 @@ protected virtual void Dispose(bool disposing)
}
// This code added to correctly implement the disposable pattern.
+ ///
+ /// Dispose implementation.
+ ///
public void Dispose()
{
// Do not change this code. Put cleanup code in Dispose(bool disposing) above.
diff --git a/Src/DSInternals.Common/ADSI/AdsiObjectAdapter.cs b/Src/DSInternals.Common/ADSI/AdsiObjectAdapter.cs
index 238b9a9..ef8c2c4 100644
--- a/Src/DSInternals.Common/ADSI/AdsiObjectAdapter.cs
+++ b/Src/DSInternals.Common/ADSI/AdsiObjectAdapter.cs
@@ -7,6 +7,9 @@
using System.Linq;
using System.Security.Principal;
+ ///
+ /// Represents a AdsiObjectAdapter.
+ ///
public class AdsiObjectAdapter : DirectoryObject
{
protected SearchResult directoryEntry;
@@ -53,49 +56,76 @@ protected override bool HasBigEndianRid
}
}
+ ///
+ /// HasAttribute implementation.
+ ///
public override bool HasAttribute(string name)
{
return this.directoryEntry.Properties.Contains(name);
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out byte[] value)
{
value = this.ReadAttributeSingle(name);
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out byte[][] value)
{
value = this.ReadAttributeMulti(name);
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out int? value)
{
value = this.ReadAttributeSingle(name);
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out long? value)
{
value = this.ReadAttributeSingle(name);
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out string value, bool unicode = true)
{
// Unicode vs. IA5 strings are handled by ADSI itself.
value = this.ReadAttributeSingle(name);
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out string[] values, bool unicode = true)
{
// Unicode vs. IA5 strings are handled by ADSI itself.
values = this.ReadAttributeMulti(name);
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out DistinguishedName value)
{
string dnString = this.ReadAttributeSingle(name);
value = new DistinguishedName(dnString);
}
+ ///
+ /// ReadLinkedValues implementation.
+ ///
public override void ReadLinkedValues(string attributeName, out byte[][] values)
{
// Parse the DN with binary value
diff --git a/Src/DSInternals.Common/AzureAD/AzureADClient.cs b/Src/DSInternals.Common/AzureAD/AzureADClient.cs
index e760339..e57388e 100644
--- a/Src/DSInternals.Common/AzureAD/AzureADClient.cs
+++ b/Src/DSInternals.Common/AzureAD/AzureADClient.cs
@@ -14,6 +14,9 @@
namespace DSInternals.Common.AzureAD
{
+ ///
+ /// Client for interacting with Azure Active Directory Graph API.
+ ///
public class AzureADClient : IDisposable
{
private const string DefaultTenantId = "myorganization";
@@ -27,6 +30,10 @@ public class AzureADClient : IDisposable
private const string UsersUrlFormat = "https://graph.windows.net/{0}/users/{1}?";
private const string JsonContentType = "application/json";
private const string KeyCredentialAttributeName = "searchableDeviceKey";
+
+ ///
+ /// The maximum number of users that can be retrieved in a single batch request.
+ ///
public const int MaxBatchSize = 999;
private static readonly MediaTypeWithQualityHeaderValue s_odataContentType = MediaTypeWithQualityHeaderValue.Parse("application/json;odata=nometadata;streaming=false");
private string _tenantId;
@@ -46,6 +53,12 @@ public AzureADClient(string accessToken, Guid? tenantId = null, int batchSize =
_httpClient.DefaultRequestHeaders.Accept.Add(s_odataContentType);
}
+ ///
+ /// Retrieves a user from Azure AD by user principal name.
+ ///
+ /// The user principal name of the user to retrieve.
+ /// The Azure AD user if found.
+ /// Thrown when userPrincipalName is null or empty.
public async Task GetUserAsync(string userPrincipalName)
{
// Vaidate the input
@@ -55,6 +68,11 @@ public async Task GetUserAsync(string userPrincipalName)
return await GetUserAsync(filter, userPrincipalName).ConfigureAwait(false);
}
+ ///
+ /// Retrieves a user from Azure AD by object ID.
+ ///
+ /// The object ID of the user to retrieve.
+ /// The Azure AD user if found.
public async Task GetUserAsync(Guid objectId)
{
var filter = string.Format(CultureInfo.InvariantCulture, IdFilterParameterFormat, objectId);
@@ -80,6 +98,11 @@ private async Task GetUserAsync(string filterParameter, object user
return result.Items[0];
}
+ ///
+ /// Retrieves a paged list of users from Azure AD.
+ ///
+ /// Optional link to retrieve the next page of results.
+ /// A paged response containing Azure AD users.
public async Task> GetUsersAsync(string nextLink = null)
{
var url = new StringBuilder(nextLink);
@@ -112,6 +135,12 @@ public async Task> GetUsersAsync(string nextLink
}
}
+ ///
+ /// Updates a user's key credentials by user principal name.
+ ///
+ /// The user principal name of the user to update.
+ /// The key credentials to set for the user.
+ /// Thrown when userPrincipalName is null or empty.
public async Task SetUserAsync(string userPrincipalName, KeyCredential[] keyCredentials)
{
// Vaidate the input
@@ -121,6 +150,11 @@ public async Task SetUserAsync(string userPrincipalName, KeyCredential[] keyCred
await SetUserAsync(userPrincipalName, properties).ConfigureAwait(false);
}
+ ///
+ /// Updates a user's key credentials by object ID.
+ ///
+ /// The object ID of the user to update.
+ /// The key credentials to set for the user.
public async Task SetUserAsync(Guid objectId, KeyCredential[] keyCredentials)
{
var properties = new Dictionary { { KeyCredentialAttributeName, keyCredentials } };
@@ -191,6 +225,9 @@ private async Task SendODataRequest(HttpRequestMessage request)
}
#region IDisposable Support
+ ///
+ /// Releases all resources used by the AzureADClient.
+ ///
public virtual void Dispose()
{
_httpClient.Dispose();
diff --git a/Src/DSInternals.Common/AzureAD/AzureADUser.cs b/Src/DSInternals.Common/AzureAD/AzureADUser.cs
index 059a7a7..fc2efee 100644
--- a/Src/DSInternals.Common/AzureAD/AzureADUser.cs
+++ b/Src/DSInternals.Common/AzureAD/AzureADUser.cs
@@ -5,6 +5,9 @@
namespace DSInternals.Common.AzureAD
{
+ ///
+ /// Represents an Azure Active Directory user object.
+ ///
public class AzureADUser
{
[JsonPropertyName("objectId")]
diff --git a/Src/DSInternals.Common/AzureAD/GraphApiException.cs b/Src/DSInternals.Common/AzureAD/GraphApiException.cs
index df9824d..7e01620 100644
--- a/Src/DSInternals.Common/AzureAD/GraphApiException.cs
+++ b/Src/DSInternals.Common/AzureAD/GraphApiException.cs
@@ -1,22 +1,42 @@
namespace DSInternals.Common.AzureAD
{
+ ///
+ /// Exception thrown when Azure AD Graph API operations fail.
+ ///
public class GraphApiException : Exception
{
+ ///
+ /// Gets the Azure AD error code associated with this exception.
+ ///
public string ErrorCode
{
get;
protected set;
}
+ ///
+ /// Initializes a new instance of the GraphApiException class with a specified error message and optional error code.
+ ///
+ /// The message that describes the error.
+ /// The Azure AD error code, if available.
public GraphApiException(string message, string errorCode = null) : base(message)
{
this.ErrorCode = errorCode;
}
+ ///
+ /// Initializes a new instance of the GraphApiException class with a specified error message and a reference to the inner exception.
+ ///
+ /// The message that describes the error.
+ /// The exception that is the cause of the current exception.
public GraphApiException(string message, Exception innerException) : base(message, innerException)
{
}
+ ///
+ /// Initializes a new instance of the GraphApiException class from an OData error.
+ ///
+ /// The OData error containing error details.
public GraphApiException(ODataError error) : base(error.Message.Value)
{
this.ErrorCode = error.Code;
diff --git a/Src/DSInternals.Common/AzureAD/ODataError.cs b/Src/DSInternals.Common/AzureAD/ODataError.cs
index d472815..5604b85 100644
--- a/Src/DSInternals.Common/AzureAD/ODataError.cs
+++ b/Src/DSInternals.Common/AzureAD/ODataError.cs
@@ -2,6 +2,9 @@
namespace DSInternals.Common.AzureAD
{
+ ///
+ /// Represents an OData error from Azure AD Graph API responses.
+ ///
public class ODataError
{
[JsonPropertyName("code")]
diff --git a/Src/DSInternals.Common/AzureAD/ODataErrorMessage.cs b/Src/DSInternals.Common/AzureAD/ODataErrorMessage.cs
index f63a0fd..b9e62e1 100644
--- a/Src/DSInternals.Common/AzureAD/ODataErrorMessage.cs
+++ b/Src/DSInternals.Common/AzureAD/ODataErrorMessage.cs
@@ -2,6 +2,9 @@
namespace DSInternals.Common.AzureAD
{
+ ///
+ /// Represents an OData error message with language and value information.
+ ///
public class ODataErrorMessage
{
[JsonPropertyName("lang")]
diff --git a/Src/DSInternals.Common/AzureAD/OdataErrorResponse.cs b/Src/DSInternals.Common/AzureAD/OdataErrorResponse.cs
index 3ca5746..5c8da72 100644
--- a/Src/DSInternals.Common/AzureAD/OdataErrorResponse.cs
+++ b/Src/DSInternals.Common/AzureAD/OdataErrorResponse.cs
@@ -3,6 +3,9 @@
namespace DSInternals.Common.AzureAD
{
+ ///
+ /// Represents an OData error response container from Azure AD Graph API.
+ ///
public class OdataErrorResponse
{
[JsonPropertyName("odata.error")]
@@ -13,6 +16,10 @@ public ODataError Error
private set;
}
+ ///
+ /// Creates an exception from this error response.
+ ///
+ /// A GraphApiException containing the error details.
public Exception GetException()
{
return new GraphApiException(this.Error);
diff --git a/Src/DSInternals.Common/AzureAD/OdataPagedResponse.cs b/Src/DSInternals.Common/AzureAD/OdataPagedResponse.cs
index b7ce1db..9e5894f 100644
--- a/Src/DSInternals.Common/AzureAD/OdataPagedResponse.cs
+++ b/Src/DSInternals.Common/AzureAD/OdataPagedResponse.cs
@@ -3,6 +3,10 @@
namespace DSInternals.Common.AzureAD
{
+ ///
+ /// Represents a paged response from OData-compliant Azure AD Graph API endpoints.
+ ///
+ /// The type of items contained in the response.
public class OdataPagedResponse
{
[JsonPropertyName("value")]
diff --git a/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/CngProtectedDataBlob.cs b/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/CngProtectedDataBlob.cs
index 9e93610..45737a4 100644
--- a/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/CngProtectedDataBlob.cs
+++ b/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/CngProtectedDataBlob.cs
@@ -21,6 +21,9 @@ public class CngProtectedDataBlob
public ReadOnlyMemory Nonce { get; private set; }
+ ///
+ /// Decrypt implementation.
+ ///
public ReadOnlySpan Decrypt()
{
if (this.RawData.Length == 0)
@@ -34,6 +37,9 @@ public ReadOnlySpan Decrypt()
return decryptedData;
}
+ ///
+ /// TryDecrypt implementation.
+ ///
public bool TryDecrypt(out ReadOnlySpan cleartext)
{
if (this.RawData.Length == 0)
@@ -49,6 +55,9 @@ public bool TryDecrypt(out ReadOnlySpan cleartext)
return resultCode == Win32ErrorCode.Success;
}
+ ///
+ /// Decode implementation.
+ ///
public static CngProtectedDataBlob Decode(ReadOnlyMemory blob)
{
var cms = Cryptography.Asn1.Pkcs7.ContentInfo.Decode(blob);
diff --git a/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/ProtectionKeyDescriptor.cs b/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/ProtectionKeyDescriptor.cs
index 3580769..87ed5b5 100644
--- a/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/ProtectionKeyDescriptor.cs
+++ b/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/ProtectionKeyDescriptor.cs
@@ -6,6 +6,9 @@
namespace DSInternals.Common.Cryptography.Asn1.DpapiNg
{
+ ///
+ /// Represents a ProtectionKeyDescriptor structure.
+ ///
public struct ProtectionKeyDescriptor
{
private const string ProtectionInfoOid = "1.3.6.1.4.1.311.74.1";
@@ -23,6 +26,9 @@ public SecurityIdentifier Sid
private set;
}
+ ///
+ /// Decode implementation.
+ ///
public static ProtectionKeyDescriptor Decode(ReadOnlyMemory encoded)
{
var reader = new AsnReader(encoded, AsnEncodingRules.DER);
@@ -31,6 +37,9 @@ public static ProtectionKeyDescriptor Decode(ReadOnlyMemory encoded)
return decoded;
}
+ ///
+ /// Decode implementation.
+ ///
public static ProtectionKeyDescriptor Decode(AsnReader reader)
{
/*
diff --git a/Src/DSInternals.Common/Cryptography/Asn1/Pkcs12/Pfx.cs b/Src/DSInternals.Common/Cryptography/Asn1/Pkcs12/Pfx.cs
index 31e6c8b..389ccb9 100644
--- a/Src/DSInternals.Common/Cryptography/Asn1/Pkcs12/Pfx.cs
+++ b/Src/DSInternals.Common/Cryptography/Asn1/Pkcs12/Pfx.cs
@@ -15,7 +15,13 @@ internal struct Pfx
///
private const int PfxVersionV3 = 3;
+ ///
+ /// The AuthSafe.
+ ///
public DSInternals.Common.Cryptography.Asn1.Pkcs7.ContentInfo AuthSafe;
+ ///
+ /// The MacData.
+ ///
public DSInternals.Common.Cryptography.Asn1.Pkcs12.MacData? MacData;
/*
@@ -42,6 +48,9 @@ public IList AuthSafeData
}
}
*/
+ ///
+ /// Decode implementation.
+ ///
public static Pfx Decode(ReadOnlyMemory encoded)
{
AsnReader reader = new AsnReader(encoded, AsnEncodingRules.DER);
@@ -50,6 +59,9 @@ public static Pfx Decode(ReadOnlyMemory encoded)
return decoded;
}
+ ///
+ /// Decode implementation.
+ ///
public static Pfx Decode(AsnReader reader)
{
/*
diff --git a/Src/DSInternals.Common/Cryptography/Crc32.cs b/Src/DSInternals.Common/Cryptography/Crc32.cs
index 0abcc39..fbed73e 100644
--- a/Src/DSInternals.Common/Cryptography/Crc32.cs
+++ b/Src/DSInternals.Common/Cryptography/Crc32.cs
@@ -73,6 +73,9 @@ public static class Crc32
0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
};
+ ///
+ /// Calculate implementation.
+ ///
public static uint Calculate(byte[] buffer)
{
Validator.AssertNotNull(buffer, "buffer");
diff --git a/Src/DSInternals.Common/Cryptography/DirectorySecretDecryptor.cs b/Src/DSInternals.Common/Cryptography/DirectorySecretDecryptor.cs
index f9ff96c..a34c31a 100644
--- a/Src/DSInternals.Common/Cryptography/DirectorySecretDecryptor.cs
+++ b/Src/DSInternals.Common/Cryptography/DirectorySecretDecryptor.cs
@@ -38,6 +38,9 @@ public abstract SecretEncryptionType EncryptionType
get;
}
+ ///
+ /// DecryptHash implementation.
+ ///
public byte[] DecryptHash(byte[] blob, int rid)
{
// Decrypt layer 1:
@@ -48,6 +51,9 @@ public byte[] DecryptHash(byte[] blob, int rid)
return DecryptUsingDES(partiallyDecryptedHash, rid);
}
+ ///
+ /// EncryptHash implementation.
+ ///
public byte[] EncryptHash(byte[] hash, int rid)
{
// Encryption layer 1
@@ -57,6 +63,9 @@ public byte[] EncryptHash(byte[] hash, int rid)
return this.EncryptSecret(partiallyEncryptedHash);
}
+ ///
+ /// DecryptHashHistory implementation.
+ ///
public byte[][] DecryptHashHistory(byte[] blob, int rid)
{
// Decrypt layer 1:
@@ -76,6 +85,9 @@ public byte[][] DecryptHashHistory(byte[] blob, int rid)
return result;
}
+ ///
+ /// EncryptHashHistory implementation.
+ ///
public byte[] EncryptHashHistory(byte[][] hashHistory, int rid)
{
Validator.AssertNotNull(hashHistory, "hashHistory");
diff --git a/Src/DSInternals.Common/Cryptography/GPPrefPwdObfuscator.cs b/Src/DSInternals.Common/Cryptography/GPPrefPwdObfuscator.cs
index 6369c03..52b6564 100644
--- a/Src/DSInternals.Common/Cryptography/GPPrefPwdObfuscator.cs
+++ b/Src/DSInternals.Common/Cryptography/GPPrefPwdObfuscator.cs
@@ -15,6 +15,9 @@ public static class GPPrefPwdObfuscator
0xfa, 0xf4, 0x93, 0x10, 0x62, 0x0f, 0xfe, 0xe8,
0xf4, 0x96, 0xe8, 0x06, 0xcc, 0x05, 0x79, 0x90,
0x20, 0x9b, 0x09, 0xa4, 0x33, 0xb6, 0x6c, 0x1b };
+ ///
+ /// Decrypt implementation.
+ ///
public static string Decrypt(string input)
{
Validator.AssertNotNullOrWhiteSpace(input, "input");
@@ -35,6 +38,9 @@ public static string Decrypt(string input)
return plainText;
}
+ ///
+ /// Encrypt implementation.
+ ///
public static string Encrypt(SecureString input)
{
Validator.AssertNotNull(input, "input");
diff --git a/Src/DSInternals.Common/Cryptography/HashEqualityComparer.cs b/Src/DSInternals.Common/Cryptography/HashEqualityComparer.cs
index 04abfa8..a830fa0 100644
--- a/Src/DSInternals.Common/Cryptography/HashEqualityComparer.cs
+++ b/Src/DSInternals.Common/Cryptography/HashEqualityComparer.cs
@@ -5,11 +5,17 @@
using System.Linq;
// TODO: Rename HashEqualityComparer to ByteArrayEqualityComparer
+ ///
+ /// Represents a HashEqualityComparer.
+ ///
public class HashEqualityComparer : IEqualityComparer
{
// Singleton
private static HashEqualityComparer instance;
+ ///
+ /// GetInstance implementation.
+ ///
public static HashEqualityComparer GetInstance()
{
if(instance == null)
@@ -21,6 +27,9 @@ public static HashEqualityComparer GetInstance()
private HashEqualityComparer() {}
+ ///
+ /// Equals implementation.
+ ///
public bool Equals(byte[] x, byte[] y)
{
if (x == null || y == null)
@@ -34,6 +43,9 @@ public bool Equals(byte[] x, byte[] y)
return x.SequenceEqual(y);
}
+ ///
+ /// GetHashCode implementation.
+ ///
public int GetHashCode(byte[] obj)
{
if(obj == null || obj.LongLength == 0)
diff --git a/Src/DSInternals.Common/Cryptography/KerberosKeyDerivation.cs b/Src/DSInternals.Common/Cryptography/KerberosKeyDerivation.cs
index 25ef90d..4858e33 100644
--- a/Src/DSInternals.Common/Cryptography/KerberosKeyDerivation.cs
+++ b/Src/DSInternals.Common/Cryptography/KerberosKeyDerivation.cs
@@ -12,6 +12,9 @@ namespace DSInternals.Common.Cryptography
///
public static class KerberosKeyDerivation
{
+ ///
+ /// The 4096.
+ ///
public const int DefaultIterationCount = 4096;
///
diff --git a/Src/DSInternals.Common/Cryptography/LMHash.cs b/Src/DSInternals.Common/Cryptography/LMHash.cs
index a8648bc..94393aa 100644
--- a/Src/DSInternals.Common/Cryptography/LMHash.cs
+++ b/Src/DSInternals.Common/Cryptography/LMHash.cs
@@ -14,8 +14,14 @@ public static class LMHash
///
public const int HashSize = NativeMethods.LMHashNumBytes;
+ ///
+ /// The MaxChars.
+ ///
public const int MaxChars = NativeMethods.LMPasswordMaxChars;
+ ///
+ /// ComputeHash implementation.
+ ///
public static byte[] ComputeHash(SecureString password)
{
Validator.AssertNotNull(password, "password");
diff --git a/Src/DSInternals.Common/Cryptography/NTHash.cs b/Src/DSInternals.Common/Cryptography/NTHash.cs
index 86fc47d..feb966b 100644
--- a/Src/DSInternals.Common/Cryptography/NTHash.cs
+++ b/Src/DSInternals.Common/Cryptography/NTHash.cs
@@ -13,7 +13,13 @@ public static class NTHash
/// The size, in bytes, of the computed hash code.
///
public const int HashSize = NativeMethods.NTHashNumBytes;
+ ///
+ /// The MaxInputLength.
+ ///
public const int MaxInputLength = NativeMethods.NTPasswordMaxChars;
+ ///
+ /// sizeof implementation.
+ ///
public const int MaxBinaryLength = MaxInputLength * sizeof(char);
///
@@ -21,6 +27,9 @@ public static class NTHash
///
public static readonly byte[] Empty = ComputeHash(string.Empty);
+ ///
+ /// ComputeHash implementation.
+ ///
public static byte[] ComputeHash(SecureString password)
{
Validator.AssertMaxLength(password, MaxInputLength, nameof(password));
@@ -34,6 +43,9 @@ public static byte[] ComputeHash(SecureString password)
return hash;
}
+ ///
+ /// ComputeHash implementation.
+ ///
public static byte[] ComputeHash(ReadOnlyMemory password)
{
NtStatus result = NativeMethods.RtlCalculateNtOwfPassword(password, out byte[] hash);
@@ -42,6 +54,9 @@ public static byte[] ComputeHash(ReadOnlyMemory password)
return hash;
}
+ ///
+ /// ComputeHash implementation.
+ ///
public static byte[] ComputeHash(byte[] password)
{
Validator.AssertMaxLength(password, MaxInputLength*sizeof(char), nameof(password));
@@ -55,6 +70,9 @@ public static byte[] ComputeHash(byte[] password)
return hash;
}
+ ///
+ /// ComputeHash implementation.
+ ///
public static byte[] ComputeHash(string password)
{
Validator.AssertMaxLength(password, MaxInputLength, nameof(password));
@@ -65,6 +83,9 @@ public static byte[] ComputeHash(string password)
return hash;
}
+ ///
+ /// GetRandom implementation.
+ ///
public static byte[] GetRandom()
{
using (var rng = RandomNumberGenerator.Create())
diff --git a/Src/DSInternals.Common/Cryptography/OrgIdHash.cs b/Src/DSInternals.Common/Cryptography/OrgIdHash.cs
index fc8b1ba..390e3f1 100644
--- a/Src/DSInternals.Common/Cryptography/OrgIdHash.cs
+++ b/Src/DSInternals.Common/Cryptography/OrgIdHash.cs
@@ -8,6 +8,9 @@ namespace DSInternals.Common.Cryptography
{
public static class OrgIdHash
{
+ ///
+ /// The 10.
+ ///
public const int SaltSize = 10;
///
/// The size, in bytes, of the computed hash code.
@@ -17,6 +20,9 @@ public static class OrgIdHash
private const string HashFormat = "v1;PPH1_MD4,{0},{1},{2};";
private const string InternalHashFunction = "HMACSHA256";
+ ///
+ /// GenerateSalt implementation.
+ ///
public static byte[] GenerateSalt()
{
using(var rng = new RNGCryptoServiceProvider())
@@ -27,12 +33,18 @@ public static byte[] GenerateSalt()
}
}
+ ///
+ /// ComputeHash implementation.
+ ///
public static byte[] ComputeHash(SecureString password, byte[] salt)
{
byte[] ntHash = NTHash.ComputeHash(password);
return ComputeHash(ntHash, salt);
}
+ ///
+ /// ComputeHash implementation.
+ ///
public static byte[] ComputeHash(byte[] ntHash, byte[] salt)
{
Validator.AssertLength(ntHash, NTHash.HashSize, "ntHash");
@@ -44,12 +56,18 @@ public static byte[] ComputeHash(byte[] ntHash, byte[] salt)
return orgIdHashBytes;
}
+ ///
+ /// ComputeFormattedHash implementation.
+ ///
public static string ComputeFormattedHash(SecureString password, byte[] salt = null)
{
byte[] ntHash = NTHash.ComputeHash(password);
return ComputeFormattedHash(ntHash, salt);
}
+ ///
+ /// ComputeFormattedHash implementation.
+ ///
public static string ComputeFormattedHash(byte[] ntHash, byte[] salt = null)
{
if (salt == null)
diff --git a/Src/DSInternals.Common/Cryptography/PrivateKeyEncryptionType.cs b/Src/DSInternals.Common/Cryptography/PrivateKeyEncryptionType.cs
index 831c86c..a6e267d 100644
--- a/Src/DSInternals.Common/Cryptography/PrivateKeyEncryptionType.cs
+++ b/Src/DSInternals.Common/Cryptography/PrivateKeyEncryptionType.cs
@@ -1,5 +1,8 @@
namespace DSInternals.Common.Cryptography
{
+ ///
+ /// Defines values for PrivateKeyEncryptionType.
+ ///
public enum PrivateKeyEncryptionType : int
{
None = 0,
diff --git a/Src/DSInternals.Common/Cryptography/SecretEncryptionType.cs b/Src/DSInternals.Common/Cryptography/SecretEncryptionType.cs
index 828828a..c850a0e 100644
--- a/Src/DSInternals.Common/Cryptography/SecretEncryptionType.cs
+++ b/Src/DSInternals.Common/Cryptography/SecretEncryptionType.cs
@@ -1,5 +1,8 @@
namespace DSInternals.Common.Cryptography
{
+ ///
+ /// Defines values for SecretEncryptionType.
+ ///
public enum SecretEncryptionType : ushort
{
// TODO: Add support for SAM encryption types
diff --git a/Src/DSInternals.Common/Cryptography/SecureStringExtensions.cs b/Src/DSInternals.Common/Cryptography/SecureStringExtensions.cs
index 1ea55b5..cfc224c 100644
--- a/Src/DSInternals.Common/Cryptography/SecureStringExtensions.cs
+++ b/Src/DSInternals.Common/Cryptography/SecureStringExtensions.cs
@@ -5,6 +5,9 @@
namespace DSInternals.Common
{ public static class SecureStringExtensions
{
+ ///
+ /// ToUnicodeString implementation.
+ ///
public static string ToUnicodeString(this SecureString input)
{
IntPtr ptr = Marshal.SecureStringToBSTR(input);
@@ -17,6 +20,9 @@ public static string ToUnicodeString(this SecureString input)
Marshal.ZeroFreeBSTR(ptr);
}
}
+ ///
+ /// ToByteArray implementation.
+ ///
public static byte[] ToByteArray(this SecureString input)
{
int numBytes = input.Length * 2;
@@ -32,6 +38,9 @@ public static byte[] ToByteArray(this SecureString input)
}
return byteArray;
}
+ ///
+ /// Append implementation.
+ ///
public static void Append(this SecureString input, string suffix)
{
if(suffix != null)
diff --git a/Src/DSInternals.Common/Cryptography/SortedFileSearcher.cs b/Src/DSInternals.Common/Cryptography/SortedFileSearcher.cs
index a03a9a4..9e8c731 100644
--- a/Src/DSInternals.Common/Cryptography/SortedFileSearcher.cs
+++ b/Src/DSInternals.Common/Cryptography/SortedFileSearcher.cs
@@ -4,6 +4,9 @@
using System.IO;
using System.Text;
+ ///
+ /// Represents a SortedFileSearcher.
+ ///
public class SortedFileSearcher : IDisposable
{
///
@@ -27,6 +30,9 @@ public SortedFileSearcher(Stream inputStream)
this.reader = new StreamReader(inputStream, Encoding.ASCII, true, BufferSize, true);
}
+ ///
+ /// FindString implementation.
+ ///
public bool FindString(string query)
{
Validator.AssertNotNullOrWhiteSpace(query, nameof(query));
@@ -111,6 +117,9 @@ protected virtual void Dispose(bool disposing)
}
}
+ ///
+ /// Dispose implementation.
+ ///
public void Dispose()
{
Dispose(true);
diff --git a/Src/DSInternals.Common/Data/DNS/DnsResourceRecord.cs b/Src/DSInternals.Common/Data/DNS/DnsResourceRecord.cs
index 995520d..bf12919 100644
--- a/Src/DSInternals.Common/Data/DNS/DnsResourceRecord.cs
+++ b/Src/DSInternals.Common/Data/DNS/DnsResourceRecord.cs
@@ -6,6 +6,9 @@
namespace DSInternals.Common.Data
{
+ ///
+ /// Represents a DnsResourceRecord.
+ ///
public class DnsResourceRecord
{
private const int StructVersion = 0x05;
@@ -210,22 +213,43 @@ override public string ToString()
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct DnsResourceRecordHeader
{
+ ///
+ /// The DataLength.
+ ///
public ushort DataLength;
+ ///
+ /// The Type.
+ ///
public ResourceRecordType Type;
+ ///
+ /// The Version.
+ ///
public byte Version;
+ ///
+ /// The Rank.
+ ///
public ResourceRecordRank Rank;
///
/// Not used. The value MUST be 0x0000.
///
public ResourceRecordFlags Flags;
+ ///
+ /// The Serial.
+ ///
public uint Serial;
+ ///
+ /// The TtlSeconds.
+ ///
public uint TtlSeconds;
///
/// This field is reserved for future use. The value MUST be 0x00000000.
///
public uint Reserved;
+ ///
+ /// The TimeStamp.
+ ///
public uint TimeStamp;
}
@@ -283,6 +307,9 @@ private struct SoaResourceRecordHeader
public uint MinimumTTL;
}
+ ///
+ /// Create implementation.
+ ///
public static DnsResourceRecord Create(string zone, string name, ReadOnlySpan binaryRecordData)
{
if (string.IsNullOrWhiteSpace(zone))
diff --git a/Src/DSInternals.Common/Data/DNS/ResourceRecordFlags.cs b/Src/DSInternals.Common/Data/DNS/ResourceRecordFlags.cs
index be4ee42..3884126 100644
--- a/Src/DSInternals.Common/Data/DNS/ResourceRecordFlags.cs
+++ b/Src/DSInternals.Common/Data/DNS/ResourceRecordFlags.cs
@@ -6,6 +6,9 @@ namespace DSInternals.Common.Data
/// Specifies DNS record flags.
///
[Flags]
+ ///
+ /// Defines values for ResourceRecordFlags.
+ ///
public enum ResourceRecordFlags : ushort
{
///
diff --git a/Src/DSInternals.Common/Data/DNS/ResourceRecordRank.cs b/Src/DSInternals.Common/Data/DNS/ResourceRecordRank.cs
index 64ceb18..7f939b5 100644
--- a/Src/DSInternals.Common/Data/DNS/ResourceRecordRank.cs
+++ b/Src/DSInternals.Common/Data/DNS/ResourceRecordRank.cs
@@ -6,6 +6,9 @@ namespace DSInternals.Common.Data
/// Specifies DNS record rank.
///
[Flags]
+ ///
+ /// Defines values for ResourceRecordRank.
+ ///
public enum ResourceRecordRank : byte
{
///
diff --git a/Src/DSInternals.Common/Data/DNWithBinary.cs b/Src/DSInternals.Common/Data/DNWithBinary.cs
index a35f66c..3c03273 100644
--- a/Src/DSInternals.Common/Data/DNWithBinary.cs
+++ b/Src/DSInternals.Common/Data/DNWithBinary.cs
@@ -33,6 +33,9 @@ public DNWithBinary(string dn, byte[] binary)
this.Binary = binary;
}
+ ///
+ /// Parse implementation.
+ ///
public static DNWithBinary Parse(string dnWithBinary)
{
Validator.AssertNotNullOrEmpty(dnWithBinary, nameof(dnWithBinary));
@@ -53,6 +56,9 @@ public static DNWithBinary Parse(string dnWithBinary)
return new DNWithBinary(dn, binary);
}
+ ///
+ /// ToString implementation.
+ ///
public override string ToString()
{
return String.Format(StringFormat, this.Binary.Length * 2, this.Binary.ToHex(true), this.DistinguishedName);
diff --git a/Src/DSInternals.Common/Data/DPAPI/DPAPIBackupKey.cs b/Src/DSInternals.Common/Data/DPAPI/DPAPIBackupKey.cs
index 0b96cd3..c5b0a8c 100644
--- a/Src/DSInternals.Common/Data/DPAPI/DPAPIBackupKey.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/DPAPIBackupKey.cs
@@ -8,6 +8,9 @@
using System.Security.Cryptography.X509Certificates;
using System.Text.RegularExpressions;
+ ///
+ /// Represents a DPAPIBackupKey.
+ ///
public class DPAPIBackupKey : DPAPIObject
{
private const int KeyVersionOffset = 0;
@@ -118,6 +121,9 @@ public Guid KeyId
private set;
}
+ ///
+ /// Save implementation.
+ ///
public override void Save(string directoryPath)
{
// The target directory must exist
@@ -220,21 +226,33 @@ public static string PreferredLegacyKeyName
}
}
+ ///
+ /// GetKeyDN implementation.
+ ///
public static string GetKeyDN(Guid keyId, string domainDN)
{
return String.Format(BackupKeyDNFormat, keyId, domainDN);
}
+ ///
+ /// GetKeyName implementation.
+ ///
public static string GetKeyName(Guid keyId)
{
return String.Format(BackupKeyNameFormat, keyId);
}
+ ///
+ /// GetPreferredRSAKeyPointerDN implementation.
+ ///
public static string GetPreferredRSAKeyPointerDN(string domainDN)
{
return String.Format(BackupKeyDNFormat, PreferredRSAKeyPointerName, domainDN);
}
+ ///
+ /// GetPreferredLegacyKeyPointerDN implementation.
+ ///
public static string GetPreferredLegacyKeyPointerDN(string domainDN)
{
return String.Format(BackupKeyDNFormat, PreferredLegacyKeyPointerName, domainDN);
diff --git a/Src/DSInternals.Common/Data/DPAPI/DPAPIBackupKeyType.cs b/Src/DSInternals.Common/Data/DPAPI/DPAPIBackupKeyType.cs
index 7c505ec..dab5592 100644
--- a/Src/DSInternals.Common/Data/DPAPI/DPAPIBackupKeyType.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/DPAPIBackupKeyType.cs
@@ -6,6 +6,9 @@
namespace DSInternals.Common.Data
{
+ ///
+ /// Defines values for DPAPIBackupKeyType.
+ ///
public enum DPAPIBackupKeyType : byte
{
Unknown = 0,
diff --git a/Src/DSInternals.Common/Data/DPAPI/GroupKeyEnvelope.cs b/Src/DSInternals.Common/Data/DPAPI/GroupKeyEnvelope.cs
index fea2922..bc9cbb2 100644
--- a/Src/DSInternals.Common/Data/DPAPI/GroupKeyEnvelope.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/GroupKeyEnvelope.cs
@@ -272,6 +272,9 @@ public GroupKeyEnvelope(byte[] blob)
}
}
+ ///
+ /// Create implementation.
+ ///
public static GroupKeyEnvelope Create(KdsRootKey rootKey, ProtectionKeyIdentifier keyIdentifier, SecurityIdentifier targetSID)
{
if (rootKey == null)
@@ -295,6 +298,9 @@ public static GroupKeyEnvelope Create(KdsRootKey rootKey, ProtectionKeyIdentifie
);
}
+ ///
+ /// Create implementation.
+ ///
public static GroupKeyEnvelope Create(KdsRootKey rootKey, int l0KeyId, int l1KeyId, int l2KeyId, SecurityIdentifier targetSID, string domain, string forest)
{
if (targetSID == null)
@@ -306,6 +312,9 @@ public static GroupKeyEnvelope Create(KdsRootKey rootKey, int l0KeyId, int l1Key
return Create(rootKey, l0KeyId, l1KeyId, l2KeyId, targetSecurityDescriptor, domain, forest);
}
+ ///
+ /// Create implementation.
+ ///
public static GroupKeyEnvelope Create(KdsRootKey rootKey, int l0KeyId, int l1KeyId, int l2KeyId, byte[] targetSecurityDescriptor, string domainName, string forestName)
{
if (rootKey == null)
@@ -338,6 +347,9 @@ public static GroupKeyEnvelope Create(KdsRootKey rootKey, int l0KeyId, int l1Key
return envelope;
}
+ ///
+ /// WriteToCache implementation.
+ ///
public void WriteToCache()
{
if (this.TargetSecurityDescriptor == null)
@@ -354,6 +366,9 @@ public void WriteToCache()
Validator.AssertSuccess(result);
}
+ ///
+ /// ToByteArray implementation.
+ ///
public byte[] ToByteArray()
{
int structSize = StructureHeaderLength +
@@ -435,6 +450,9 @@ public byte[] ToByteArray()
return buffer;
}
+ ///
+ /// DeleteAllCachedKeys implementation.
+ ///
public static void DeleteAllCachedKeys()
{
Win32ErrorCode result = NativeMethods.DeleteAllCachedKeys();
diff --git a/Src/DSInternals.Common/Data/DPAPI/GroupKeyEnvelopeFlags.cs b/Src/DSInternals.Common/Data/DPAPI/GroupKeyEnvelopeFlags.cs
index 881eec5..5c93e45 100644
--- a/Src/DSInternals.Common/Data/DPAPI/GroupKeyEnvelopeFlags.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/GroupKeyEnvelopeFlags.cs
@@ -1,5 +1,8 @@
namespace DSInternals.Common.Data
{
+ ///
+ /// Defines values for GroupKeyEnvelopeFlags.
+ ///
public enum GroupKeyEnvelopeFlags : int
{
PrivateAsymmetricKey = 0,
diff --git a/Src/DSInternals.Common/Data/DPAPI/IKdsRootKeyResolver.cs b/Src/DSInternals.Common/Data/DPAPI/IKdsRootKeyResolver.cs
index d47edc8..da79c24 100644
--- a/Src/DSInternals.Common/Data/DPAPI/IKdsRootKeyResolver.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/IKdsRootKeyResolver.cs
@@ -3,12 +3,30 @@
namespace DSInternals.Common.Data
{
+ ///
+ /// Defines the contract for IKdsRootKeyResolver.
+ ///
public interface IKdsRootKeyResolver
{
+ ///
+ /// GetKdsRootKey implementation.
+ ///
public KdsRootKey? GetKdsRootKey(Guid id);
+ ///
+ /// GetKdsRootKey implementation.
+ ///
public KdsRootKey? GetKdsRootKey(DateTime effectiveTime);
+ ///
+ /// GetKdsRootKeys implementation.
+ ///
public IEnumerable GetKdsRootKeys();
+ ///
+ /// Gets or sets the SupportsLookupAll.
+ ///
public bool SupportsLookupAll { get; }
+ ///
+ /// Gets or sets the SupportsLookupByEffectiveTime.
+ ///
public bool SupportsLookupByEffectiveTime { get; }
}
}
diff --git a/Src/DSInternals.Common/Data/DPAPI/KdsRootKey.cs b/Src/DSInternals.Common/Data/DPAPI/KdsRootKey.cs
index 21331eb..8c9d749 100644
--- a/Src/DSInternals.Common/Data/DPAPI/KdsRootKey.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/KdsRootKey.cs
@@ -249,6 +249,9 @@ public KdsRootKey(Guid keyId, byte[] key)
}
}
+ ///
+ /// GetL0Key implementation.
+ ///
public byte[] GetL0Key(int l0KeyId)
{
if (l0KeyId < 0)
@@ -268,6 +271,9 @@ public byte[] GetL0Key(int l0KeyId)
return l0Key;
}
+ ///
+ /// GenerateL1Key implementation.
+ ///
public static (byte[] l1KeyCurrent, byte[] l1KeyPrevious) GenerateL1Key(
Guid kdsRootKeyId,
string kdfAlgorithm,
@@ -357,6 +363,9 @@ public static (byte[] l1KeyCurrent, byte[] l1KeyPrevious) GenerateL1Key(
return (l1KeyCurrent, l1KeyPrevious);
}
+ ///
+ /// ClientComputeL2Key implementation.
+ ///
public static (byte[] nextL1Key, byte[] nextL2Key) ClientComputeL2Key(
Guid kdsRootKeyId,
string kdfAlgorithm,
@@ -391,6 +400,9 @@ public static (byte[] nextL1Key, byte[] nextL2Key) ClientComputeL2Key(
return (nextL1Key, nextL2Key);
}
+ ///
+ /// GetKeyStartTime implementation.
+ ///
public static DateTime GetKeyStartTime(int l0KeyId, int l1KeyId, int l2KeyId)
{
if(l0KeyId < 0)
@@ -413,6 +425,9 @@ public static DateTime GetKeyStartTime(int l0KeyId, int l1KeyId, int l2KeyId)
return DateTime.FromFileTime(effectiveTimestamp * KdsKeyCycleDuration);
}
+ ///
+ /// GetKeyId implementation.
+ ///
public static (int l0KeyId, int l1KeyId, int l2KeyId) GetKeyId(DateTime effectiveTime)
{
long effectiveTimeNumeric = effectiveTime.ToFileTimeUtc();
@@ -425,6 +440,9 @@ public static (int l0KeyId, int l1KeyId, int l2KeyId) GetKeyId(DateTime effectiv
return (l0KeyId, l1KeyId, l2KeyId);
}
+ ///
+ /// ParseKdfParameters implementation.
+ ///
public static Dictionary ParseKdfParameters(byte[] blob)
{
if(blob == null || blob.Length == 0)
@@ -472,6 +490,9 @@ public static Dictionary ParseKdfParameters(byte[] blob)
return result;
}
+ ///
+ /// ParseSecretAgreementParameters implementation.
+ ///
public static (byte[] p, byte[] g) ParseSecretAgreementParameters(byte[] blob)
{
if (blob == null || blob.Length == 0)
@@ -507,6 +528,9 @@ public static (byte[] p, byte[] g) ParseSecretAgreementParameters(byte[] blob)
}
}
+ ///
+ /// GetDistinguishedName implementation.
+ ///
public static string GetDistinguishedName(Guid rootKeyId, string configurationNamingContext)
{
if (configurationNamingContext == null) throw new ArgumentNullException(nameof(configurationNamingContext));
diff --git a/Src/DSInternals.Common/Data/DPAPI/KdsRootKeyCache.cs b/Src/DSInternals.Common/Data/DPAPI/KdsRootKeyCache.cs
index de44985..e98094a 100644
--- a/Src/DSInternals.Common/Data/DPAPI/KdsRootKeyCache.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/KdsRootKeyCache.cs
@@ -54,6 +54,9 @@ public KdsRootKeyCache(IKdsRootKeyResolver resolver, bool preloadCache = false)
public bool SupportsLookupByEffectiveTime => _innerResolver.SupportsLookupAll || _innerResolver.SupportsLookupByEffectiveTime;
+ ///
+ /// GetKdsRootKey implementation.
+ ///
public KdsRootKey? GetKdsRootKey(Guid id)
{
if (_rootKeyCache.TryGetValue(id, out KdsRootKey cachedRootKey))
@@ -85,6 +88,9 @@ public KdsRootKeyCache(IKdsRootKeyResolver resolver, bool preloadCache = false)
}
}
+ ///
+ /// GetKdsRootKey implementation.
+ ///
public KdsRootKey? GetKdsRootKey(DateTime effectiveTime)
{
if (!_innerResolver.SupportsLookupAll)
@@ -121,6 +127,9 @@ public KdsRootKeyCache(IKdsRootKeyResolver resolver, bool preloadCache = false)
}
}
+ ///
+ /// GetKdsRootKeys implementation.
+ ///
public IEnumerable GetKdsRootKeys()
{
if (!this.SupportsLookupAll)
diff --git a/Src/DSInternals.Common/Data/DPAPI/ProtectionKeyIdentifier.cs b/Src/DSInternals.Common/Data/DPAPI/ProtectionKeyIdentifier.cs
index ed87469..546a288 100644
--- a/Src/DSInternals.Common/Data/DPAPI/ProtectionKeyIdentifier.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/ProtectionKeyIdentifier.cs
@@ -69,15 +69,45 @@ public GroupKeyEnvelopeFlags Flags
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct ProtectionKeyIdentifierHeader
{
+ ///
+ /// The Version.
+ ///
public int Version;
+ ///
+ /// The Magic.
+ ///
public uint Magic;
+ ///
+ /// The Flags.
+ ///
public GroupKeyEnvelopeFlags Flags;
+ ///
+ /// The L0KeyId.
+ ///
public int L0KeyId;
+ ///
+ /// The L1KeyId.
+ ///
public int L1KeyId;
+ ///
+ /// The L2KeyId.
+ ///
public int L2KeyId;
+ ///
+ /// The RootKeyId.
+ ///
public Guid RootKeyId;
+ ///
+ /// The PublicKeyLength.
+ ///
public int PublicKeyLength;
+ ///
+ /// The DomainNameLength.
+ ///
public int DomainNameLength;
+ ///
+ /// The ForestNameLength.
+ ///
public int ForestNameLength;
// Variable length strings follow
@@ -172,6 +202,9 @@ public ProtectionKeyIdentifier(Guid rootKeyId, int l0KeyId, int l1KeyId, int l2K
this.ForestName = forest;
}
+ ///
+ /// ToString implementation.
+ ///
public override string ToString()
{
DateTime cycle = KdsRootKey.GetKeyStartTime(this.L0KeyId, this.L1KeyId, this.L2KeyId);
diff --git a/Src/DSInternals.Common/Data/DPAPI/RoamedCredential.cs b/Src/DSInternals.Common/Data/DPAPI/RoamedCredential.cs
index b6a9db8..a571bb2 100644
--- a/Src/DSInternals.Common/Data/DPAPI/RoamedCredential.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/RoamedCredential.cs
@@ -6,6 +6,9 @@
using System.Text;
using DSInternals.Common.Cryptography;
+ ///
+ /// Represents a RoamedCredential.
+ ///
public class RoamedCredential : DPAPIObject
{
private const string MasterKeyCommandFormat = "dpapi::masterkey /in:\"{0}\" /sid:{1}";
@@ -137,6 +140,9 @@ public SecurityIdentifier AccountSid
private set;
}
+ ///
+ /// Save implementation.
+ ///
public override void Save(string directoryPath)
{
// The target directory must exist
@@ -224,6 +230,9 @@ public override string KiwiCommand
}
}
+ ///
+ /// ToString implementation.
+ ///
public override string ToString()
{
return String.Format("{0}: {1}", this.Type, this.FilePath);
diff --git a/Src/DSInternals.Common/Data/DPAPI/RoamedCredentialFlags.cs b/Src/DSInternals.Common/Data/DPAPI/RoamedCredentialFlags.cs
index 4b7a3c7..595b32e 100644
--- a/Src/DSInternals.Common/Data/DPAPI/RoamedCredentialFlags.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/RoamedCredentialFlags.cs
@@ -3,6 +3,9 @@
using System;
[Flags]
+ ///
+ /// Defines values for RoamedCredentialFlags.
+ ///
public enum RoamedCredentialFlags : short
{
Tombstone = 1,
diff --git a/Src/DSInternals.Common/Data/DPAPI/RoamedCredentialType.cs b/Src/DSInternals.Common/Data/DPAPI/RoamedCredentialType.cs
index f248a8e..0f0bc54 100644
--- a/Src/DSInternals.Common/Data/DPAPI/RoamedCredentialType.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/RoamedCredentialType.cs
@@ -1,5 +1,8 @@
namespace DSInternals.Common.Data
{
+ ///
+ /// Defines values for RoamedCredentialType.
+ ///
public enum RoamedCredentialType : byte
{
///
diff --git a/Src/DSInternals.Common/Data/DPAPI/StaticKdsRootKeyResolver.cs b/Src/DSInternals.Common/Data/DPAPI/StaticKdsRootKeyResolver.cs
index 1f0e381..e84384b 100644
--- a/Src/DSInternals.Common/Data/DPAPI/StaticKdsRootKeyResolver.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/StaticKdsRootKeyResolver.cs
@@ -22,23 +22,38 @@ public StaticKdsRootKeyResolver(KdsRootKey rootKey)
_kdsRootKey = rootKey;
}
+ ///
+ /// The true.
+ ///
public bool SupportsLookupAll => true;
+ ///
+ /// GetKdsRootKey implementation.
+ ///
public KdsRootKey? GetKdsRootKey(Guid id)
{
return _kdsRootKey.KeyId == id ? _kdsRootKey : null;
}
+ ///
+ /// GetKdsRootKey implementation.
+ ///
public KdsRootKey? GetKdsRootKey(DateTime effectiveTime)
{
return _kdsRootKey.EffectiveTime <= effectiveTime ? _kdsRootKey : null;
}
+ ///
+ /// GetKdsRootKeys implementation.
+ ///
public IEnumerable GetKdsRootKeys()
{
yield return _kdsRootKey;
}
+ ///
+ /// The true.
+ ///
public bool SupportsLookupByEffectiveTime => true;
}
}
diff --git a/Src/DSInternals.Common/Data/DirectoryObject.cs b/Src/DSInternals.Common/Data/DirectoryObject.cs
index d0a364a..ef495d9 100644
--- a/Src/DSInternals.Common/Data/DirectoryObject.cs
+++ b/Src/DSInternals.Common/Data/DirectoryObject.cs
@@ -14,27 +14,57 @@ protected abstract bool HasBigEndianRid
get;
}
+ ///
+ /// HasAttribute implementation.
+ ///
public abstract bool HasAttribute(string name);
+ ///
+ /// ReadAttribute implementation.
+ ///
public abstract void ReadAttribute(string name, out byte[] value);
+ ///
+ /// ReadAttribute implementation.
+ ///
public abstract void ReadAttribute(string name, out byte[][] value);
+ ///
+ /// ReadAttribute implementation.
+ ///
public void ReadAttribute(string name, out Guid? value)
{
byte[] binaryValue;
this.ReadAttribute(name, out binaryValue);
value = (binaryValue != null) ? new Guid(binaryValue) : (Guid?)null;
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public void ReadAttribute(string name, out bool value)
{
int? numericValue;
this.ReadAttribute(name, out numericValue);
value = numericValue.HasValue ? (numericValue.Value != 0) : false;
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public abstract void ReadAttribute(string name, out int? value);
+ ///
+ /// ReadAttribute implementation.
+ ///
public abstract void ReadAttribute(string name, out long? value);
+ ///
+ /// ReadAttribute implementation.
+ ///
public abstract void ReadAttribute(string name, out string value, bool unicode = true);
+ ///
+ /// ReadAttribute implementation.
+ ///
public abstract void ReadAttribute(string name, out string[] values, bool unicode = true);
+ ///
+ /// ReadAttribute implementation.
+ ///
public virtual void ReadAttribute(string name, out RawSecurityDescriptor value)
{
byte[] binarySecurityDescriptor;
@@ -42,6 +72,9 @@ public virtual void ReadAttribute(string name, out RawSecurityDescriptor value)
value = (binarySecurityDescriptor != null) ? new RawSecurityDescriptor(binarySecurityDescriptor, 0) : null;
}
+ ///
+ /// ReadLinkedValues implementation.
+ ///
public abstract void ReadLinkedValues(string attributeName, out byte[][] values);
public abstract string DistinguishedName
@@ -59,6 +92,9 @@ public abstract SecurityIdentifier Sid
get;
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public void ReadAttribute(string name, out SecurityIdentifier value)
{
byte[] binarySid;
@@ -66,8 +102,14 @@ public void ReadAttribute(string name, out SecurityIdentifier value)
value = binarySid.ToSecurityIdentifier(this.HasBigEndianRid);
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public abstract void ReadAttribute(string name, out DistinguishedName value);
+ ///
+ /// ReadAttribute implementation.
+ ///
public void ReadAttribute(string name, out SecurityIdentifier[] value)
{
value = null;
@@ -79,30 +121,45 @@ public void ReadAttribute(string name, out SecurityIdentifier[] value)
}
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public void ReadAttribute(string name, out SamAccountType? value)
{
this.ReadAttribute(name, out int? numericValue);
value = (SamAccountType?)numericValue;
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public void ReadAttribute(string name, out TrustDirection? value)
{
this.ReadAttribute(name, out int? numericValue);
value = (TrustDirection?)numericValue;
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public void ReadAttribute(string name, out TrustAttributes? value)
{
this.ReadAttribute(name, out int? numericValue);
value = (TrustAttributes?)numericValue;
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public void ReadAttribute(string name, out TrustType? value)
{
this.ReadAttribute(name, out int? numericValue);
value = (TrustType?)numericValue;
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public void ReadAttribute(string name, out DateTime? value, bool asGeneralizedTime)
{
value = null;
diff --git a/Src/DSInternals.Common/Data/DistinguishedName.cs b/Src/DSInternals.Common/Data/DistinguishedName.cs
index 804ea69..53c8de5 100644
--- a/Src/DSInternals.Common/Data/DistinguishedName.cs
+++ b/Src/DSInternals.Common/Data/DistinguishedName.cs
@@ -6,6 +6,9 @@
using System.Text;
using DSInternals.Common.Schema;
+ ///
+ /// Represents a DistinguishedName.
+ ///
public class DistinguishedName
{
private const char escapeChar = '\\';
@@ -61,6 +64,9 @@ public DistinguishedName(string dn)
}
}
+ ///
+ /// GetDnsName implementation.
+ ///
public string GetDnsName()
{
if (Components.Count == 0)
@@ -106,6 +112,9 @@ public DistinguishedName RootNamingContext
}
}
+ ///
+ /// AddParent implementation.
+ ///
public void AddParent(DistinguishedName dn)
{
if(dn == null)
@@ -120,6 +129,9 @@ public void AddParent(DistinguishedName dn)
}
}
+ ///
+ /// AddParent implementation.
+ ///
public void AddParent(string name, string value)
{
// Validation will be done in the DistinguishedNameComponent constructor
@@ -127,6 +139,9 @@ public void AddParent(string name, string value)
this.AddParent(component);
}
+ ///
+ /// AddParent implementation.
+ ///
public void AddParent(DistinguishedNameComponent component)
{
if (component != null)
@@ -135,6 +150,9 @@ public void AddParent(DistinguishedNameComponent component)
}
}
+ ///
+ /// AddChild implementation.
+ ///
public void AddChild(DistinguishedName dn)
{
if (dn == null)
@@ -149,6 +167,9 @@ public void AddChild(DistinguishedName dn)
}
}
+ ///
+ /// AddChild implementation.
+ ///
public void AddChild(string name, string value)
{
// Validation will be performed by the DistinguishedNameComponent contructor.
@@ -156,6 +177,9 @@ public void AddChild(string name, string value)
this.AddChild(component);
}
+ ///
+ /// AddChild implementation.
+ ///
public void AddChild(DistinguishedNameComponent component)
{
if (component != null)
@@ -164,6 +188,9 @@ public void AddChild(DistinguishedNameComponent component)
}
}
+ ///
+ /// ToString implementation.
+ ///
public override string ToString()
{
if (Components.Count == 0)
@@ -247,12 +274,18 @@ private static string[] SplitDN(string dn, bool isRDN)
return segments.ToArray();
}
+ ///
+ /// GetDnsNameFromDN implementation.
+ ///
public static string GetDnsNameFromDN(string dn)
{
var dnParsed = new DistinguishedName(dn);
return dnParsed.GetDnsName();
}
+ ///
+ /// GetDNFromDNSName implementation.
+ ///
public static DistinguishedName GetDNFromDNSName(string domainName)
{
Validator.AssertNotNullOrWhiteSpace(domainName, "domainName");
@@ -268,6 +301,9 @@ public static DistinguishedName GetDNFromDNSName(string domainName)
return dn;
}
+ ///
+ /// Equals implementation.
+ ///
public override bool Equals(object obj)
{
// Check for null values and compare run-time types.
@@ -278,6 +314,9 @@ public override bool Equals(object obj)
return this.ToString() == obj.ToString();
}
+ ///
+ /// GetHashCode implementation.
+ ///
public override int GetHashCode()
{
// This DN implementation is not immutable so we do not calculate the hash of the DN.
diff --git a/Src/DSInternals.Common/Data/DistinguishedNameComponent.cs b/Src/DSInternals.Common/Data/DistinguishedNameComponent.cs
index 8db8bd2..c6ae6cd 100644
--- a/Src/DSInternals.Common/Data/DistinguishedNameComponent.cs
+++ b/Src/DSInternals.Common/Data/DistinguishedNameComponent.cs
@@ -4,6 +4,9 @@
using System;
using System.Text;
+ ///
+ /// Represents a DistinguishedNameComponent.
+ ///
public class DistinguishedNameComponent
{
public string Name
@@ -26,6 +29,9 @@ public DistinguishedNameComponent(string name, string value)
this.Value = value;
}
+ ///
+ /// ToString implementation.
+ ///
public override string ToString()
{
return String.Format("{0}={1}", EscapeValue(this.Name), EscapeValue(this.Value));
diff --git a/Src/DSInternals.Common/Data/Hello/CustomKeyInformation.cs b/Src/DSInternals.Common/Data/Hello/CustomKeyInformation.cs
index 94fd1f5..5985259 100644
--- a/Src/DSInternals.Common/Data/Hello/CustomKeyInformation.cs
+++ b/Src/DSInternals.Common/Data/Hello/CustomKeyInformation.cs
@@ -76,6 +76,9 @@ public byte[] EncodedExtendedCKI
private set;
}
+ ///
+ /// this implementation.
+ ///
public CustomKeyInformation() : this(KeyFlags.None)
{
}
@@ -142,6 +145,9 @@ public CustomKeyInformation(byte[] blob)
}
}
+ ///
+ /// ToByteArray implementation.
+ ///
public byte[] ToByteArray()
{
using(var stream = new MemoryStream())
diff --git a/Src/DSInternals.Common/Data/Hello/CustomKeyInformationConverter.cs b/Src/DSInternals.Common/Data/Hello/CustomKeyInformationConverter.cs
index 419b2b0..5afacc2 100644
--- a/Src/DSInternals.Common/Data/Hello/CustomKeyInformationConverter.cs
+++ b/Src/DSInternals.Common/Data/Hello/CustomKeyInformationConverter.cs
@@ -10,6 +10,9 @@ namespace DSInternals.Common.Data
///
public class CustomKeyInformationConverter : JsonConverter
{
+ ///
+ /// Read implementation.
+ ///
public override CustomKeyInformation Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType == JsonTokenType.Null)
@@ -33,6 +36,9 @@ public override CustomKeyInformation Read(ref Utf8JsonReader reader, Type typeTo
throw new JsonException("Unexpected token parsing CustomKeyInformation.");
}
+ ///
+ /// Write implementation.
+ ///
public override void Write(Utf8JsonWriter writer, CustomKeyInformation value, JsonSerializerOptions options)
{
if(value != null)
diff --git a/Src/DSInternals.Common/Data/Hello/FidoAttestedCredentialData.cs b/Src/DSInternals.Common/Data/Hello/FidoAttestedCredentialData.cs
index daec664..ec0cf81 100644
--- a/Src/DSInternals.Common/Data/Hello/FidoAttestedCredentialData.cs
+++ b/Src/DSInternals.Common/Data/Hello/FidoAttestedCredentialData.cs
@@ -76,6 +76,9 @@ public AttestedCredentialData(BinaryReader reader)
this.CredentialPublicKey = new CredentialPublicKey(cpk);
}
+ ///
+ /// ToString implementation.
+ ///
public override string ToString()
{
return string.Format("AAGUID: {0}, CredentialID: {1}, CredentialPublicKey: {2}",
diff --git a/Src/DSInternals.Common/Data/Hello/FidoAuthenticatorData.cs b/Src/DSInternals.Common/Data/Hello/FidoAuthenticatorData.cs
index d452f36..d022861 100644
--- a/Src/DSInternals.Common/Data/Hello/FidoAuthenticatorData.cs
+++ b/Src/DSInternals.Common/Data/Hello/FidoAuthenticatorData.cs
@@ -4,6 +4,9 @@
namespace DSInternals.Common.Data.Fido
{
+ ///
+ /// Represents a AuthenticatorData.
+ ///
public class AuthenticatorData
{
///
diff --git a/Src/DSInternals.Common/Data/Hello/FidoAuthenticatorFlags.cs b/Src/DSInternals.Common/Data/Hello/FidoAuthenticatorFlags.cs
index 52586d0..7a4a4b9 100644
--- a/Src/DSInternals.Common/Data/Hello/FidoAuthenticatorFlags.cs
+++ b/Src/DSInternals.Common/Data/Hello/FidoAuthenticatorFlags.cs
@@ -8,6 +8,9 @@ namespace DSInternals.Common.Data.Fido
///
///
[Flags]
+ ///
+ /// Defines values for AuthenticatorFlags.
+ ///
public enum AuthenticatorFlags : byte
{
///
diff --git a/Src/DSInternals.Common/Data/Hello/FidoCredentialPublicKey.cs b/Src/DSInternals.Common/Data/Hello/FidoCredentialPublicKey.cs
index 781aab2..0e7dc26 100644
--- a/Src/DSInternals.Common/Data/Hello/FidoCredentialPublicKey.cs
+++ b/Src/DSInternals.Common/Data/Hello/FidoCredentialPublicKey.cs
@@ -4,6 +4,9 @@
using PeterO.Cbor;
using System.Security.Cryptography;
+ ///
+ /// Represents a CredentialPublicKey.
+ ///
public class CredentialPublicKey
{
public RSACng RSA
@@ -136,7 +139,13 @@ public byte[] EdDSAPublicKey
return null;
}
}
+ ///
+ /// The Type.
+ ///
public COSE.KeyType Type;
+ ///
+ /// The Algorithm.
+ ///
public COSE.Algorithm Algorithm;
internal CBORObject _cpk;
@@ -147,11 +156,17 @@ public CredentialPublicKey(CBORObject cpk)
this.Algorithm = (COSE.Algorithm) cpk[CBORObject.FromObject(COSE.KeyCommonParameter.Alg)].AsInt32();
}
+ ///
+ /// ToString implementation.
+ ///
public override string ToString()
{
return _cpk.ToString();
}
+ ///
+ /// GetBytes implementation.
+ ///
public byte[] GetBytes()
{
return _cpk.EncodeToBytes();
diff --git a/Src/DSInternals.Common/Data/Hello/KeyCredential.cs b/Src/DSInternals.Common/Data/Hello/KeyCredential.cs
index f580e10..a1987aa 100644
--- a/Src/DSInternals.Common/Data/Hello/KeyCredential.cs
+++ b/Src/DSInternals.Common/Data/Hello/KeyCredential.cs
@@ -442,6 +442,9 @@ private KeyCredential()
this.Version = KeyCredentialVersion.Version2;
}
+ ///
+ /// ToString implementation.
+ ///
public override string ToString()
{
return String.Format(
@@ -453,6 +456,9 @@ public override string ToString()
this.CreationTime);
}
+ ///
+ /// ToByteArray implementation.
+ ///
public byte[] ToByteArray()
{
// Note that we do not support the legacy V1 format.
@@ -543,14 +549,23 @@ public byte[] ToByteArray()
}
}
+ ///
+ /// ToDNWithBinary implementation.
+ ///
public string ToDNWithBinary()
{
// This method should only be used when the owner is in the form of a Distinguished Name.
return new DNWithBinary(this.Owner, this.ToByteArray()).ToString();
}
+ ///
+ /// ToJson implementation.
+ ///
public string ToJson() => JsonSerializer.Serialize(this, LenientJsonSerializer.Options);
+ ///
+ /// ParseDNBinary implementation.
+ ///
public static KeyCredential ParseDNBinary(string dnWithBinary)
{
Validator.AssertNotNullOrEmpty(dnWithBinary, nameof(dnWithBinary));
@@ -558,6 +573,9 @@ public static KeyCredential ParseDNBinary(string dnWithBinary)
return new KeyCredential(parsed.Binary, parsed.DistinguishedName);
}
+ ///
+ /// ParseJson implementation.
+ ///
public static KeyCredential ParseJson(string jsonData)
{
if (string.IsNullOrWhiteSpace(jsonData))
diff --git a/Src/DSInternals.Common/Data/Hello/KeyFlags.cs b/Src/DSInternals.Common/Data/Hello/KeyFlags.cs
index ff75566..ae1256c 100644
--- a/Src/DSInternals.Common/Data/Hello/KeyFlags.cs
+++ b/Src/DSInternals.Common/Data/Hello/KeyFlags.cs
@@ -7,6 +7,9 @@ namespace DSInternals.Common.Data
///
/// https://msdn.microsoft.com/en-us/library/mt220496.aspx
[Flags]
+ ///
+ /// Defines values for KeyFlags.
+ ///
public enum KeyFlags : byte
{
///
diff --git a/Src/DSInternals.Common/Data/Hello/KeyMaterialFido.cs b/Src/DSInternals.Common/Data/Hello/KeyMaterialFido.cs
index 0a8ba35..e9dde1a 100644
--- a/Src/DSInternals.Common/Data/Hello/KeyMaterialFido.cs
+++ b/Src/DSInternals.Common/Data/Hello/KeyMaterialFido.cs
@@ -4,6 +4,9 @@
namespace DSInternals.Common.Data
{
+ ///
+ /// Represents a KeyMaterialFido.
+ ///
public class KeyMaterialFido
{
// All PEM certificates that are less than 16,383B long start with MII.
diff --git a/Src/DSInternals.Common/Data/InstanceType.cs b/Src/DSInternals.Common/Data/InstanceType.cs
index 5669b01..03e2e92 100644
--- a/Src/DSInternals.Common/Data/InstanceType.cs
+++ b/Src/DSInternals.Common/Data/InstanceType.cs
@@ -9,6 +9,9 @@ namespace DSInternals.Common.Data
///
/// https://msdn.microsoft.com/en-us/library/cc219986.aspx
[Flags]
+ ///
+ /// Defines values for InstanceType.
+ ///
public enum InstanceType : uint
{
///
diff --git a/Src/DSInternals.Common/Data/LAPS/LapsClearTextPassword.cs b/Src/DSInternals.Common/Data/LAPS/LapsClearTextPassword.cs
index 09ccd22..e75b4a0 100644
--- a/Src/DSInternals.Common/Data/LAPS/LapsClearTextPassword.cs
+++ b/Src/DSInternals.Common/Data/LAPS/LapsClearTextPassword.cs
@@ -13,12 +13,21 @@ namespace DSInternals.Common.Data
public class LapsClearTextPassword
{
[JsonPropertyName("n")]
+ ///
+ /// The AccountName.
+ ///
public string AccountName;
[JsonPropertyName("t")]
+ ///
+ /// The UpdateTimestampString.
+ ///
public string UpdateTimestampString;
[JsonPropertyName("p")]
+ ///
+ /// The Password.
+ ///
public string Password;
[JsonIgnore]
@@ -46,12 +55,18 @@ public DateTime? UpdateTimestamp
}
}
+ ///
+ /// Parse implementation.
+ ///
public static LapsClearTextPassword Parse(string json)
{
Validator.AssertNotNull(json, nameof(json));
return LenientJsonSerializer.DeserializeLenient(json);
}
+ ///
+ /// Parse implementation.
+ ///
public static LapsClearTextPassword Parse(ReadOnlySpan binaryJson, bool utf16 = false)
{
return LenientJsonSerializer.DeserializeLenient(binaryJson, utf16);
diff --git a/Src/DSInternals.Common/Data/LAPS/LapsDecryptionStatus.cs b/Src/DSInternals.Common/Data/LAPS/LapsDecryptionStatus.cs
index 84df5be..753e551 100644
--- a/Src/DSInternals.Common/Data/LAPS/LapsDecryptionStatus.cs
+++ b/Src/DSInternals.Common/Data/LAPS/LapsDecryptionStatus.cs
@@ -1,5 +1,8 @@
namespace DSInternals.Common.Data
{
+ ///
+ /// Defines values for LapsDecryptionStatus.
+ ///
public enum LapsDecryptionStatus
{
NotApplicable,
diff --git a/Src/DSInternals.Common/Data/LAPS/LapsEncryptedPassword.cs b/Src/DSInternals.Common/Data/LAPS/LapsEncryptedPassword.cs
index b308632..cc50965 100644
--- a/Src/DSInternals.Common/Data/LAPS/LapsEncryptedPassword.cs
+++ b/Src/DSInternals.Common/Data/LAPS/LapsEncryptedPassword.cs
@@ -4,6 +4,9 @@
namespace DSInternals.Common.Data
{
+ ///
+ /// Represents a LapsEncryptedPassword.
+ ///
public class LapsEncryptedPassword
{
private static readonly int StructHeaderSize = Marshal.SizeOf();
@@ -26,7 +29,13 @@ public CngProtectedDataBlob EncryptedBlob
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct LapsEncryptedPasswordHeader
{
+ ///
+ /// The PasswordUpdateTimestampHigh.
+ ///
public uint PasswordUpdateTimestampHigh;
+ ///
+ /// The PasswordUpdateTimestampLow.
+ ///
public uint PasswordUpdateTimestampLow;
///
@@ -56,6 +65,9 @@ public LapsEncryptedPassword(ReadOnlyMemory buffer)
this.EncryptedBlob = CngProtectedDataBlob.Decode(encryptedPassword);
}
+ ///
+ /// Decrypt implementation.
+ ///
public LapsClearTextPassword Decrypt()
{
var binaryLapsPassword = EncryptedBlob.Decrypt();
@@ -69,6 +81,9 @@ public LapsClearTextPassword Decrypt()
return LapsClearTextPassword.Parse(binaryLapsPassword, utf16: true);
}
+ ///
+ /// TryDecrypt implementation.
+ ///
public bool TryDecrypt(out LapsClearTextPassword lapsPassword)
{
bool success = EncryptedBlob.TryDecrypt(out ReadOnlySpan binaryLapsPassword);
diff --git a/Src/DSInternals.Common/Data/LAPS/LapsPasswordInformation.cs b/Src/DSInternals.Common/Data/LAPS/LapsPasswordInformation.cs
index 1a97ea8..c8b9bb2 100644
--- a/Src/DSInternals.Common/Data/LAPS/LapsPasswordInformation.cs
+++ b/Src/DSInternals.Common/Data/LAPS/LapsPasswordInformation.cs
@@ -2,6 +2,9 @@
namespace DSInternals.Common.Data
{
+ ///
+ /// Represents a LapsPasswordInformation.
+ ///
public class LapsPasswordInformation
{
///
diff --git a/Src/DSInternals.Common/Data/LAPS/LapsPasswordSource.cs b/Src/DSInternals.Common/Data/LAPS/LapsPasswordSource.cs
index 8013acb..a1ef5d7 100644
--- a/Src/DSInternals.Common/Data/LAPS/LapsPasswordSource.cs
+++ b/Src/DSInternals.Common/Data/LAPS/LapsPasswordSource.cs
@@ -1,5 +1,8 @@
namespace DSInternals.Common.Data
{
+ ///
+ /// Defines values for LapsPasswordSource.
+ ///
public enum LapsPasswordSource
{
LegacyLapsCleartextPassword,
diff --git a/Src/DSInternals.Common/Data/Principals/AccountFactory.cs b/Src/DSInternals.Common/Data/Principals/AccountFactory.cs
index 97c8a3c..548d8de 100644
--- a/Src/DSInternals.Common/Data/Principals/AccountFactory.cs
+++ b/Src/DSInternals.Common/Data/Principals/AccountFactory.cs
@@ -5,6 +5,9 @@ namespace DSInternals.Common.Data
{
public static class AccountFactory
{
+ ///
+ /// CreateAccount implementation.
+ ///
public static DSAccount? CreateAccount(DirectoryObject dsObject, string netBIOSDomainName, DirectorySecretDecryptor pek, IKdsRootKeyResolver rootKeyResolver = null, AccountPropertySets propertySets = AccountPropertySets.All)
{
// Validate the input.
diff --git a/Src/DSInternals.Common/Data/Principals/AccountPropertySets.cs b/Src/DSInternals.Common/Data/Principals/AccountPropertySets.cs
index 2b436f8..ef9495d 100644
--- a/Src/DSInternals.Common/Data/Principals/AccountPropertySets.cs
+++ b/Src/DSInternals.Common/Data/Principals/AccountPropertySets.cs
@@ -3,6 +3,9 @@
namespace DSInternals.Common.Data
{
[Flags]
+ ///
+ /// Defines values for AccountPropertySets.
+ ///
public enum AccountPropertySets : int
{
None = 0,
diff --git a/Src/DSInternals.Common/Data/Principals/BitLockerRecoveryInformation.cs b/Src/DSInternals.Common/Data/Principals/BitLockerRecoveryInformation.cs
index 168aeff..912168d 100644
--- a/Src/DSInternals.Common/Data/Principals/BitLockerRecoveryInformation.cs
+++ b/Src/DSInternals.Common/Data/Principals/BitLockerRecoveryInformation.cs
@@ -3,6 +3,9 @@
namespace DSInternals.Common.Data
{
+ ///
+ /// Represents a BitLockerRecoveryInformation.
+ ///
public class BitLockerRecoveryInformation
{
public BitLockerRecoveryInformation(DirectoryObject dsObject)
@@ -91,6 +94,9 @@ public DateTime WhenCreated
private set;
}
+ ///
+ /// ToString implementation.
+ ///
public override string ToString()
{
return String.Format("Recovery ID: {0}, Key: {1}, Date: {2}", this.RecoveryGuid, this.RecoveryPassword, this.WhenCreated);
diff --git a/Src/DSInternals.Common/Data/Principals/DSAccount.cs b/Src/DSInternals.Common/Data/Principals/DSAccount.cs
index 03157b2..110f4d6 100644
--- a/Src/DSInternals.Common/Data/Principals/DSAccount.cs
+++ b/Src/DSInternals.Common/Data/Principals/DSAccount.cs
@@ -6,6 +6,9 @@
using DSInternals.Common.Cryptography;
using DSInternals.Common.Schema;
+ ///
+ /// Represents a DSAccount.
+ ///
public class DSAccount
{
public DSAccount(DirectoryObject dsObject, string netBIOSDomainName, DirectorySecretDecryptor pek, AccountPropertySets propertySets = AccountPropertySets.All)
diff --git a/Src/DSInternals.Common/Data/Principals/DSComputer.cs b/Src/DSInternals.Common/Data/Principals/DSComputer.cs
index a204774..b71eece 100644
--- a/Src/DSInternals.Common/Data/Principals/DSComputer.cs
+++ b/Src/DSInternals.Common/Data/Principals/DSComputer.cs
@@ -4,10 +4,16 @@
namespace DSInternals.Common.Data
{
+ ///
+ /// Represents a DSComputer.
+ ///
public class DSComputer : DSAccount
{
private List? _lapsPasswords;
+ ///
+ /// base implementation.
+ ///
public DSComputer(DirectoryObject dsObject, string netBIOSDomainName, DirectorySecretDecryptor pek, IKdsRootKeyResolver rootKeyResolver = null, AccountPropertySets propertySets = AccountPropertySets.All) : base(dsObject, netBIOSDomainName, pek, propertySets)
{
if (this.SamAccountType != SamAccountType.Computer)
diff --git a/Src/DSInternals.Common/Data/Principals/GroupManagedServiceAccount.cs b/Src/DSInternals.Common/Data/Principals/GroupManagedServiceAccount.cs
index 85c5beb..b3013e6 100644
--- a/Src/DSInternals.Common/Data/Principals/GroupManagedServiceAccount.cs
+++ b/Src/DSInternals.Common/Data/Principals/GroupManagedServiceAccount.cs
@@ -282,6 +282,9 @@ public GroupManagedServiceAccount(DirectoryObject dsObject)
this.WhenCreated = whenCreated ?? DateTime.MinValue;
}
+ ///
+ /// CalculatePassword implementation.
+ ///
public void CalculatePassword(KdsRootKey kdsRootKey, DateTime effectiveTime)
{
if (kdsRootKey == null)
@@ -310,6 +313,9 @@ public void CalculatePassword(KdsRootKey kdsRootKey, DateTime effectiveTime)
}
}
+ ///
+ /// CalculateManagedPassword implementation.
+ ///
public static byte[] CalculateManagedPassword(SecurityIdentifier gMsaSid, ProtectionKeyIdentifier keyIdentifier, KdsRootKey kdsRootKey)
{
if (gMsaSid == null)
@@ -366,6 +372,9 @@ out string invalidAttribute
return generatedPassword;
}
+ ///
+ /// GetIntervalId implementation.
+ ///
public static (int l0KeyId, int l1KeyId, int l2KeyId) GetIntervalId(
DateTime previousPasswordChange,
DateTime effectiveTime,
diff --git a/Src/DSInternals.Common/Data/Principals/KerberosCredential.cs b/Src/DSInternals.Common/Data/Principals/KerberosCredential.cs
index 9954bd0..4add19b 100644
--- a/Src/DSInternals.Common/Data/Principals/KerberosCredential.cs
+++ b/Src/DSInternals.Common/Data/Principals/KerberosCredential.cs
@@ -8,6 +8,9 @@
using System.Security;
using System.Text;
+ ///
+ /// Represents a KerberosCredential.
+ ///
public class KerberosCredential
{
private const short CurrentRevision = 3;
@@ -63,6 +66,9 @@ public string DefaultSalt
private set;
}
+ ///
+ /// ToByteArray implementation.
+ ///
public byte[] ToByteArray()
{
using (var stream = new MemoryStream())
diff --git a/Src/DSInternals.Common/Data/Principals/KerberosCredentialNew.cs b/Src/DSInternals.Common/Data/Principals/KerberosCredentialNew.cs
index 14be24b..afab66f 100644
--- a/Src/DSInternals.Common/Data/Principals/KerberosCredentialNew.cs
+++ b/Src/DSInternals.Common/Data/Principals/KerberosCredentialNew.cs
@@ -8,6 +8,9 @@
using System.Security;
using System.Text;
+ ///
+ /// Represents a KerberosCredentialNew.
+ ///
public class KerberosCredentialNew
{
// Header: Revision (2 bytes) + Flags (2 bytes) + CredentialCount (2 bytes) + ServiceCredentialCount (2 bytes) + OldCredentialCount (2 bytes) + OlderCredentialCount (2 bytes) + DefaultSaltLength (2 bytes) + DefaultSaltMaximumLength (2 bytes) + DefaultSaltOffset (4 bytes) + DefaultIterationCount (4 bytes):
@@ -147,6 +150,9 @@ public int DefaultIterationCount
private set;
}
+ ///
+ /// ToByteArray implementation.
+ ///
public byte[] ToByteArray()
{
using (var stream = new MemoryStream())
@@ -240,6 +246,9 @@ public byte[] ToByteArray()
}
}
+ ///
+ /// Derive implementation.
+ ///
public static KerberosCredentialNew Derive(ReadOnlyMemory currentPassword, ReadOnlyMemory previousPassword, string salt, bool includeDES = true)
{
var currentKeys = new KerberosCredentialNew(currentPassword, salt, includeDES);
diff --git a/Src/DSInternals.Common/Data/Principals/KerberosKeyData.cs b/Src/DSInternals.Common/Data/Principals/KerberosKeyData.cs
index cca166b..bdc0823 100644
--- a/Src/DSInternals.Common/Data/Principals/KerberosKeyData.cs
+++ b/Src/DSInternals.Common/Data/Principals/KerberosKeyData.cs
@@ -4,6 +4,9 @@
namespace DSInternals.Common.Data
{
// https://msdn.microsoft.com/en-us/library/cc941809.aspx
+ ///
+ /// Represents a KerberosKeyData.
+ ///
public class KerberosKeyData
{
// Size: Reserved1 (2 bytes) + Reserved2 (2 bytes) + Reserved3 (4 bytes) + KeyType (4 bytes) + KeyLength (4 bytes) + KeyOffset (4 bytes)
@@ -37,6 +40,9 @@ public byte[] Key
private set;
}
+ ///
+ /// ToString implementation.
+ ///
public override string ToString()
{
return string.Format("Type: {0}, Key: {1}", this.KeyType, this.Key.ToHex());
diff --git a/Src/DSInternals.Common/Data/Principals/KerberosKeyDataNew.cs b/Src/DSInternals.Common/Data/Principals/KerberosKeyDataNew.cs
index 55a174f..c0dd3c0 100644
--- a/Src/DSInternals.Common/Data/Principals/KerberosKeyDataNew.cs
+++ b/Src/DSInternals.Common/Data/Principals/KerberosKeyDataNew.cs
@@ -5,6 +5,9 @@
using System.Security;
// https://msdn.microsoft.com/en-us/library/cc941809.aspx
+ ///
+ /// Represents a KerberosKeyDataNew.
+ ///
public class KerberosKeyDataNew : KerberosKeyData
{
// Size: Reserved1 (2 bytes) + Reserved2 (2 bytes) + Reserved3 (4 bytes) + IterationCount (4 bytes) + KeyType (4 bytes) + KeyLength (4 bytes) + KeyOffset (4 bytes)
@@ -33,6 +36,9 @@ public int IterationCount
private set;
}
+ ///
+ /// ToString implementation.
+ ///
public override string ToString()
{
return string.Format("Type: {0}, Iterations: {1}, Key: {2}", base.KeyType, this.IterationCount, base.Key.ToHex());
diff --git a/Src/DSInternals.Common/Data/Principals/SupplementalCredentials.cs b/Src/DSInternals.Common/Data/Principals/SupplementalCredentials.cs
index 35bcaa0..fad4e32 100644
--- a/Src/DSInternals.Common/Data/Principals/SupplementalCredentials.cs
+++ b/Src/DSInternals.Common/Data/Principals/SupplementalCredentials.cs
@@ -158,6 +158,9 @@ public SupplementalCredentials(SecureString password, string samAccountName, str
// Note that we do not want to store the password in cleartext.
}
+ ///
+ /// ToByteArray implementation.
+ ///
public byte[] ToByteArray()
{
using (MemoryStream stream = new MemoryStream())
diff --git a/Src/DSInternals.Common/Data/Principals/SupportedEncryptionTypes.cs b/Src/DSInternals.Common/Data/Principals/SupportedEncryptionTypes.cs
index 0263ded..3c424b1 100644
--- a/Src/DSInternals.Common/Data/Principals/SupportedEncryptionTypes.cs
+++ b/Src/DSInternals.Common/Data/Principals/SupportedEncryptionTypes.cs
@@ -7,6 +7,9 @@ namespace DSInternals.Common.Data
///
/// https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-kile/6cfc7b50-11ed-4b4d-846d-6f08f0812919
[Flags]
+ ///
+ /// Defines values for SupportedEncryptionTypes.
+ ///
public enum SupportedEncryptionTypes : uint
{
Default = 0,
diff --git a/Src/DSInternals.Common/Data/Principals/UserAccountControl.cs b/Src/DSInternals.Common/Data/Principals/UserAccountControl.cs
index 5536578..44bf978 100644
--- a/Src/DSInternals.Common/Data/Principals/UserAccountControl.cs
+++ b/Src/DSInternals.Common/Data/Principals/UserAccountControl.cs
@@ -6,6 +6,9 @@
/// Flags that control the behavior of the user account.
///
[Flags]
+ ///
+ /// Defines values for UserAccountControl.
+ ///
public enum UserAccountControl : int
{
///
@@ -116,6 +119,9 @@ public enum UserAccountControl : int
public static class UserAccountControlExtensions
{
+ ///
+ /// SetFlags implementation.
+ ///
public static void SetFlags(ref this UserAccountControl uac, UserAccountControl flag, bool? status)
{
if(status == true)
diff --git a/Src/DSInternals.Common/Exceptions/DirectoryException.cs b/Src/DSInternals.Common/Exceptions/DirectoryException.cs
index 6228ec8..99bfbd2 100644
--- a/Src/DSInternals.Common/Exceptions/DirectoryException.cs
+++ b/Src/DSInternals.Common/Exceptions/DirectoryException.cs
@@ -5,6 +5,9 @@
[Serializable]
public abstract class DirectoryException : Exception
{
+ ///
+ /// base implementation.
+ ///
public DirectoryException(Exception innerException = null) : base(null, innerException)
{
}
diff --git a/Src/DSInternals.Common/Exceptions/DirectoryObjectException.cs b/Src/DSInternals.Common/Exceptions/DirectoryObjectException.cs
index 1199a9c..a86c81a 100644
--- a/Src/DSInternals.Common/Exceptions/DirectoryObjectException.cs
+++ b/Src/DSInternals.Common/Exceptions/DirectoryObjectException.cs
@@ -13,6 +13,9 @@ public object ObjectIdentifier
private set;
}
+ ///
+ /// base implementation.
+ ///
public DirectoryObjectException(object objectIdentifier, Exception innerException = null) : base(innerException)
{
this.ObjectIdentifier = objectIdentifier;
diff --git a/Src/DSInternals.Common/Exceptions/DirectoryObjectOperationException.cs b/Src/DSInternals.Common/Exceptions/DirectoryObjectOperationException.cs
index c2d338a..0bf72fd 100644
--- a/Src/DSInternals.Common/Exceptions/DirectoryObjectOperationException.cs
+++ b/Src/DSInternals.Common/Exceptions/DirectoryObjectOperationException.cs
@@ -1,6 +1,9 @@
namespace DSInternals.Common.Exceptions
{
[Serializable]
+ ///
+ /// Represents a DirectoryObjectOperationException.
+ ///
public class DirectoryObjectOperationException : DirectoryObjectException
{
public string Reason
diff --git a/Src/DSInternals.Common/Exceptions/SchemaAttributeNotFoundException.cs b/Src/DSInternals.Common/Exceptions/SchemaAttributeNotFoundException.cs
index 9a73001..f8ef080 100644
--- a/Src/DSInternals.Common/Exceptions/SchemaAttributeNotFoundException.cs
+++ b/Src/DSInternals.Common/Exceptions/SchemaAttributeNotFoundException.cs
@@ -11,6 +11,9 @@ public object AttributeIdentifier
get;
private set;
}
+ ///
+ /// base implementation.
+ ///
public SchemaAttributeNotFoundException(string attributeName) : base(null)
{
this.AttributeIdentifier = attributeName;
diff --git a/Src/DSInternals.Common/Extensions/ByteArrayExtensions.cs b/Src/DSInternals.Common/Extensions/ByteArrayExtensions.cs
index 0ef97bb..56840db 100644
--- a/Src/DSInternals.Common/Extensions/ByteArrayExtensions.cs
+++ b/Src/DSInternals.Common/Extensions/ByteArrayExtensions.cs
@@ -11,11 +11,17 @@ public static class ByteArrayExtensions
private const string HexDigitsUpper = "0123456789ABCDEF";
private const string HexDigitsLower = "0123456789abcdef";
+ ///
+ /// ZeroFill implementation.
+ ///
public static void ZeroFill(this byte[] array)
{
Array.Clear(array, 0, array.Length);
}
+ ///
+ /// HexToBinary implementation.
+ ///
public static byte[] HexToBinary(this string hex, int startIndex, int length)
{
// Input validation
@@ -71,6 +77,9 @@ public static byte[] HexToBinary(this string hex, int startIndex, int length)
return bytes;
}
+ ///
+ /// HexToBinary implementation.
+ ///
public static byte[] HexToBinary(this string hex)
{
// Trivial case
@@ -83,11 +92,17 @@ public static byte[] HexToBinary(this string hex)
}
[Obsolete("Use ReadOnlySpan instead on byte[].")]
+ ///
+ /// ToHex implementation.
+ ///
public static string ToHex(this byte[] bytes, bool caps = false)
{
return bytes == null ? null : ToHex(bytes.AsSpan(), caps);
}
+ ///
+ /// ToHex implementation.
+ ///
public static string ToHex(this Span bytes, bool caps = false)
{
// TODO: Migrate to .AsReadOnlySpan()
@@ -95,6 +110,9 @@ public static string ToHex(this Span bytes, bool caps = false)
return readOnly.ToHex(caps);
}
+ ///
+ /// ToHex implementation.
+ ///
public static string ToHex(this ReadOnlySpan bytes, bool caps = false)
{
if (bytes == null)
@@ -118,6 +136,9 @@ public static string ToHex(this ReadOnlySpan bytes, bool caps = false)
return hex.ToString();
}
+ ///
+ /// ReadSecureWString implementation.
+ ///
public static SecureString ReadSecureWString(this byte[] buffer, int startIndex)
{
Validator.AssertNotNull(buffer, nameof(buffer));
@@ -145,6 +166,9 @@ public static SecureString ReadSecureWString(this byte[] buffer, int startIndex)
return result;
}
+ ///
+ /// SwapBytes implementation.
+ ///
public static void SwapBytes(this byte[] bytes, int index1, int index2)
{
byte temp = bytes[index1];
@@ -158,6 +182,9 @@ public static void SwapBytes(this byte[] bytes, int index1, int index2)
/// The integer to encode.
/// Array of bytes, in big endian order.
[Obsolete("Use ReadOnlySpan instead on byte[].")]
+ ///
+ /// GetBigEndianBytes implementation.
+ ///
public static byte[] GetBigEndianBytes(this uint number)
{
byte[] bytes = BitConverter.GetBytes(number);
@@ -169,6 +196,9 @@ public static byte[] GetBigEndianBytes(this uint number)
}
[Obsolete("Use ReadOnlySpan instead on byte[].")]
+ ///
+ /// ToUInt32BigEndian implementation.
+ ///
public static uint ToUInt32BigEndian(this byte[] bytes, int startIndex = 0)
{
if(BitConverter.IsLittleEndian)
@@ -180,6 +210,9 @@ public static uint ToUInt32BigEndian(this byte[] bytes, int startIndex = 0)
}
[Obsolete("Use ReadOnlySpan instead on byte[].")]
+ ///
+ /// ToUInt16BigEndian implementation.
+ ///
public static ushort ToUInt16BigEndian(this byte[] bytes, int startIndex = 0)
{
if (BitConverter.IsLittleEndian)
@@ -190,6 +223,9 @@ public static ushort ToUInt16BigEndian(this byte[] bytes, int startIndex = 0)
return BitConverter.ToUInt16(bytes, startIndex);
}
+ ///
+ /// ToGuidBigEndian implementation.
+ ///
public static Guid ToGuidBigEndian(this byte[] bytes)
{
if (BitConverter.IsLittleEndian)
@@ -203,6 +239,9 @@ public static Guid ToGuidBigEndian(this byte[] bytes)
return new Guid(bytes);
}
+ ///
+ /// ToSecurityIdentifier implementation.
+ ///
public static SecurityIdentifier ToSecurityIdentifier(this byte[] binarySid, bool bigEndianRid = false)
{
if(binarySid == null)
@@ -224,6 +263,9 @@ public static SecurityIdentifier ToSecurityIdentifier(this byte[] binarySid, boo
}
[Obsolete("Use ReadOnlySpan instead on byte[].")]
+ ///
+ /// Cut implementation.
+ ///
public static byte[] Cut(this byte[] blob, int offset)
{
Validator.AssertNotNull(blob, "blob");
@@ -231,6 +273,9 @@ public static byte[] Cut(this byte[] blob, int offset)
}
[Obsolete("Use ReadOnlySpan instead on byte[].")]
+ ///
+ /// Cut implementation.
+ ///
public static byte[] Cut(this byte[] blob, int offset, int count)
{
Validator.AssertNotNull(blob, "blob");
@@ -241,6 +286,9 @@ public static byte[] Cut(this byte[] blob, int offset, int count)
return result;
}
+ ///
+ /// ReadToEnd implementation.
+ ///
public static byte[] ReadToEnd(this MemoryStream stream)
{
long remainingBytes = stream.Length - stream.Position;
diff --git a/Src/DSInternals.Common/Extensions/DateTimeExtensions.cs b/Src/DSInternals.Common/Extensions/DateTimeExtensions.cs
index 98f93e9..a7e9bd9 100644
--- a/Src/DSInternals.Common/Extensions/DateTimeExtensions.cs
+++ b/Src/DSInternals.Common/Extensions/DateTimeExtensions.cs
@@ -6,6 +6,9 @@ public static class DateTimeExtensions
{
private const int GeneralizedTimeCoefficient = 10000000;
+ ///
+ /// ToGeneralizedTime implementation.
+ ///
public static long ToGeneralizedTime(this DateTime time)
{
return time.ToFileTime() / GeneralizedTimeCoefficient;
diff --git a/Src/DSInternals.Common/Extensions/NTAccountExtensions.cs b/Src/DSInternals.Common/Extensions/NTAccountExtensions.cs
index 9a50add..d7efff8 100644
--- a/Src/DSInternals.Common/Extensions/NTAccountExtensions.cs
+++ b/Src/DSInternals.Common/Extensions/NTAccountExtensions.cs
@@ -7,6 +7,9 @@ public static class NTAccountExtensions
{
private static readonly char[] DomainNameSeparator = { '\\' };
+ ///
+ /// NetBIOSDomainName implementation.
+ ///
public static string NetBIOSDomainName(this NTAccount account)
{
string[] parts = account.Value.Split(DomainNameSeparator, 2);
diff --git a/Src/DSInternals.Common/Extensions/RegistryKeyExtensions.cs b/Src/DSInternals.Common/Extensions/RegistryKeyExtensions.cs
index fcc42d3..35d1d4b 100644
--- a/Src/DSInternals.Common/Extensions/RegistryKeyExtensions.cs
+++ b/Src/DSInternals.Common/Extensions/RegistryKeyExtensions.cs
@@ -6,6 +6,9 @@ namespace DSInternals.Common
{
public static class RegistryKeyExtensions
{
+ ///
+ /// GetClass implementation.
+ ///
public static string GetClass(this RegistryKey key)
{
string keyClass;
diff --git a/Src/DSInternals.Common/Extensions/SecurityIdentifierExtensions.cs b/Src/DSInternals.Common/Extensions/SecurityIdentifierExtensions.cs
index 651b020..8e7ccff 100644
--- a/Src/DSInternals.Common/Extensions/SecurityIdentifierExtensions.cs
+++ b/Src/DSInternals.Common/Extensions/SecurityIdentifierExtensions.cs
@@ -7,6 +7,9 @@ public static class SecurityIdentifierExtensions
{
private const int ridLength = 4;
+ ///
+ /// GetRid implementation.
+ ///
public static int GetRid(this SecurityIdentifier sid)
{
Validator.AssertNotNull(sid, "sid");
@@ -19,6 +22,9 @@ public static int GetRid(this SecurityIdentifier sid)
return BitConverter.ToInt32(binaryForm, domainSidLength);
}
+ ///
+ /// GetBinaryForm implementation.
+ ///
public static byte[] GetBinaryForm(this SecurityIdentifier sid, bool bigEndianRid = false)
{
Validator.AssertNotNull(sid, "sid");
diff --git a/Src/DSInternals.Common/Extensions/StringExtensions.cs b/Src/DSInternals.Common/Extensions/StringExtensions.cs
index 64eda98..d5ca618 100644
--- a/Src/DSInternals.Common/Extensions/StringExtensions.cs
+++ b/Src/DSInternals.Common/Extensions/StringExtensions.cs
@@ -6,6 +6,9 @@
public static class StringExtensions
{
+ ///
+ /// TrimEnd implementation.
+ ///
public static string TrimEnd(this string input, string suffix)
{
if(! string.IsNullOrEmpty(input) && ! string.IsNullOrEmpty(suffix) && input.EndsWith(suffix))
@@ -19,6 +22,9 @@ public static string TrimEnd(this string input, string suffix)
}
}
+ ///
+ /// ToSecureString implementation.
+ ///
public static SecureString ToSecureString(this string input)
{
if (input == null)
@@ -34,6 +40,9 @@ public static SecureString ToSecureString(this string input)
return output;
}
+ ///
+ /// SddlToBinary implementation.
+ ///
public static byte[] SddlToBinary(this string securityDescriptor)
{
Validator.AssertNotNullOrWhiteSpace(securityDescriptor, "securityDescriptor");
diff --git a/Src/DSInternals.Common/Interop/CryptoBuffer.cs b/Src/DSInternals.Common/Interop/CryptoBuffer.cs
index 10b753c..c282cb4 100644
--- a/Src/DSInternals.Common/Interop/CryptoBuffer.cs
+++ b/Src/DSInternals.Common/Interop/CryptoBuffer.cs
@@ -12,12 +12,24 @@ public CryptoBuffer(IntPtr buffer, uint length)
this.Length = length;
this.MaximumLength = length;
}
+ ///
+ /// this implementation.
+ ///
public CryptoBuffer(IntPtr buffer, int length) : this(buffer, (uint) length)
{
}
+ ///
+ /// The Length.
+ ///
public uint Length;
+ ///
+ /// The MaximumLength.
+ ///
public uint MaximumLength;
+ ///
+ /// The Buffer.
+ ///
public IntPtr Buffer;
}
}
diff --git a/Src/DSInternals.Common/Interop/Enums/RegistryKeyRights.cs b/Src/DSInternals.Common/Interop/Enums/RegistryKeyRights.cs
index 084dde3..5eee919 100644
--- a/Src/DSInternals.Common/Interop/Enums/RegistryKeyRights.cs
+++ b/Src/DSInternals.Common/Interop/Enums/RegistryKeyRights.cs
@@ -6,6 +6,9 @@
/// Access rights for registry key objects.
///
[Flags]
+ ///
+ /// Defines values for RegistryKeyRights.
+ ///
public enum RegistryKeyRights : int
{
///
diff --git a/Src/DSInternals.Common/Interop/NamedPipeConnection.cs b/Src/DSInternals.Common/Interop/NamedPipeConnection.cs
index b5077d6..3aa886e 100644
--- a/Src/DSInternals.Common/Interop/NamedPipeConnection.cs
+++ b/Src/DSInternals.Common/Interop/NamedPipeConnection.cs
@@ -7,6 +7,9 @@ namespace DSInternals.Common.Interop
using System.Runtime.ConstrainedExecution;
using System.Security;
+ ///
+ /// Represents a NamedPipeConnection.
+ ///
public class NamedPipeConnection : CriticalFinalizerObject, IDisposable
{
private const string IPCShareFormat = @"\\{0}\IPC$";
@@ -54,6 +57,9 @@ private Win32ErrorCode DoDisconnect()
}
+ ///
+ /// Dispose implementation.
+ ///
public void Dispose()
{
Dispose(true);
diff --git a/Src/DSInternals.Common/Interop/OemString.cs b/Src/DSInternals.Common/Interop/OemString.cs
index bfcc422..14047ff 100644
--- a/Src/DSInternals.Common/Interop/OemString.cs
+++ b/Src/DSInternals.Common/Interop/OemString.cs
@@ -4,6 +4,9 @@
namespace DSInternals.Common.Interop
{
[StructLayout(LayoutKind.Sequential)]
+ ///
+ /// Represents a OemString structure.
+ ///
public struct OemString
{
public OemString(SafeOemStringPointer oemStringPtr)
diff --git a/Src/DSInternals.Common/Interop/RegistryHiveFileMapping.cs b/Src/DSInternals.Common/Interop/RegistryHiveFileMapping.cs
index ffe3c89..d3a5b8f 100644
--- a/Src/DSInternals.Common/Interop/RegistryHiveFileMapping.cs
+++ b/Src/DSInternals.Common/Interop/RegistryHiveFileMapping.cs
@@ -6,6 +6,9 @@
using System.Reflection;
using System.ComponentModel;
+ ///
+ /// Represents a RegistryHiveFileMapping.
+ ///
public class RegistryHiveFileMapping : IDisposable
{
private const string SubKeyFormat = "DSInternals_{0}";
@@ -39,6 +42,9 @@ public string UsersSubKey
private set;
}
+ ///
+ /// Dispose implementation.
+ ///
public void Dispose()
{
this.Dispose(true);
diff --git a/Src/DSInternals.Common/Interop/SafeOemStringPointer.cs b/Src/DSInternals.Common/Interop/SafeOemStringPointer.cs
index 56ae2da..5f2df50 100644
--- a/Src/DSInternals.Common/Interop/SafeOemStringPointer.cs
+++ b/Src/DSInternals.Common/Interop/SafeOemStringPointer.cs
@@ -10,6 +10,9 @@ namespace DSInternals.Common.Interop
/// Represents a wrapper class for...
///
[SecurityCritical]
+ ///
+ /// Represents a SafeOemStringPointer.
+ ///
public class SafeOemStringPointer : SafeHandleZeroOrMinusOneIsInvalid
{
public int Length
@@ -18,6 +21,9 @@ public int Length
private set;
}
+ ///
+ /// Allocate implementation.
+ ///
public static SafeOemStringPointer Allocate(int length)
{
IntPtr nativeMemory = Marshal.AllocHGlobal(length);
@@ -59,6 +65,9 @@ protected void ZeroFill()
}
}
+ ///
+ /// ToString implementation.
+ ///
public override string ToString()
{
return Marshal.PtrToStringAnsi(this.handle);
diff --git a/Src/DSInternals.Common/Interop/SafeSidKeyProviderHandle.cs b/Src/DSInternals.Common/Interop/SafeSidKeyProviderHandle.cs
index 64299a3..f7c8abb 100644
--- a/Src/DSInternals.Common/Interop/SafeSidKeyProviderHandle.cs
+++ b/Src/DSInternals.Common/Interop/SafeSidKeyProviderHandle.cs
@@ -15,11 +15,17 @@ private SafeSidKeyProviderHandle() : base(true)
{
}
+ ///
+ /// base implementation.
+ ///
public SafeSidKeyProviderHandle(IntPtr preexistingHandle, bool ownsHandle) : base(ownsHandle)
{
this.SetHandle(preexistingHandle);
}
+ ///
+ /// ToArray implementation.
+ ///
public byte[] ToArray(int size)
{
if(this.IsInvalid)
diff --git a/Src/DSInternals.Common/Interop/SafeUnicodeSecureStringPointer.cs b/Src/DSInternals.Common/Interop/SafeUnicodeSecureStringPointer.cs
index 21deb1a..7d49ace 100644
--- a/Src/DSInternals.Common/Interop/SafeUnicodeSecureStringPointer.cs
+++ b/Src/DSInternals.Common/Interop/SafeUnicodeSecureStringPointer.cs
@@ -88,6 +88,9 @@ protected override bool ReleaseHandle()
return true;
}
+ ///
+ /// ToString implementation.
+ ///
public override string ToString()
{
return Marshal.PtrToStringUni(this.handle);
diff --git a/Src/DSInternals.Common/Interop/SecureUnicodeString.cs b/Src/DSInternals.Common/Interop/SecureUnicodeString.cs
index e8831c8..7e5caca 100644
--- a/Src/DSInternals.Common/Interop/SecureUnicodeString.cs
+++ b/Src/DSInternals.Common/Interop/SecureUnicodeString.cs
@@ -8,6 +8,9 @@ namespace DSInternals.Common.Interop
///
/// http://msdn.microsoft.com/library/windows/hardware/ff564879.aspx
[StructLayout(LayoutKind.Sequential)]
+ ///
+ /// Represents a SecureUnicodeString structure.
+ ///
public struct SecureUnicodeString
{
public SecureUnicodeString(SafeUnicodeSecureStringPointer passwordPtr)
diff --git a/Src/DSInternals.Common/Interop/UnicodeString.cs b/Src/DSInternals.Common/Interop/UnicodeString.cs
index 189029f..1cb3fb8 100644
--- a/Src/DSInternals.Common/Interop/UnicodeString.cs
+++ b/Src/DSInternals.Common/Interop/UnicodeString.cs
@@ -8,6 +8,9 @@ namespace DSInternals.Common.Interop
///
/// https://learn.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-_unicode_string
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
+ ///
+ /// Represents a UnicodeString structure.
+ ///
public struct UnicodeString
{
private const ushort UnicodeCharLength = 2;
@@ -58,6 +61,9 @@ public UnicodeString(string text)
/// Pointer to a buffer used to contain a string of wide characters.
///
[MarshalAs(UnmanagedType.LPWStr)]
+ ///
+ /// The Buffer.
+ ///
public string Buffer;
}
}
diff --git a/Src/DSInternals.Common/Kerberos/TrustAttributes.cs b/Src/DSInternals.Common/Kerberos/TrustAttributes.cs
index d4179e9..4966a39 100644
--- a/Src/DSInternals.Common/Kerberos/TrustAttributes.cs
+++ b/Src/DSInternals.Common/Kerberos/TrustAttributes.cs
@@ -8,6 +8,9 @@ namespace DSInternals.Common.Kerberos
///
/// https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/e9a2d23c-c31e-4a6f-88a0-6646fdb51a3c
[Flags]
+ ///
+ /// Defines values for TrustAttributes.
+ ///
public enum TrustAttributes : uint
{
None = 0,
diff --git a/Src/DSInternals.Common/Kerberos/TrustAuthInfos.cs b/Src/DSInternals.Common/Kerberos/TrustAuthInfos.cs
index abb98d6..ec413b7 100644
--- a/Src/DSInternals.Common/Kerberos/TrustAuthInfos.cs
+++ b/Src/DSInternals.Common/Kerberos/TrustAuthInfos.cs
@@ -46,6 +46,9 @@ private TrustAuthInfos(ReadOnlyMemory currentPasswordBytes, ReadOnlyMemory
this.PreviousNTHash = previousNTHash;
}
+ ///
+ /// Parse implementation.
+ ///
public static TrustAuthInfos Parse(ReadOnlyMemory blob)
{
if (blob.Length < StructHeaderSize)
@@ -154,6 +157,9 @@ public static TrustAuthInfos Parse(ReadOnlyMemory blob)
return new TrustAuthInfos(currentPasswordBytes, previousPasswordBytes, currentNTHash, previousNTHash);
}
+ ///
+ /// DeriveKerberosKeys implementation.
+ ///
public KerberosCredentialNew? DeriveKerberosKeys(string salt)
{
return this.CurrentPasswordBytes.IsEmpty ? null : KerberosCredentialNew.Derive(this.CurrentPasswordBytes, this.PreviousPasswordBytes, salt);
diff --git a/Src/DSInternals.Common/Kerberos/TrustAuthenticationInformation.cs b/Src/DSInternals.Common/Kerberos/TrustAuthenticationInformation.cs
index 0a48130..6bec09a 100644
--- a/Src/DSInternals.Common/Kerberos/TrustAuthenticationInformation.cs
+++ b/Src/DSInternals.Common/Kerberos/TrustAuthenticationInformation.cs
@@ -26,6 +26,9 @@ public struct TrustAuthenticationInformation
///
public ReadOnlyMemory AuthInfo { get; private set; }
+ ///
+ /// Parse implementation.
+ ///
public static (TrustAuthenticationInformation authInfo, int bytesRead) Parse(ReadOnlyMemory blob)
{
if (blob.Length < StructHeaderSize)
diff --git a/Src/DSInternals.Common/Schema/AttributeOmSyntax.cs b/Src/DSInternals.Common/Schema/AttributeOmSyntax.cs
index 2b1a54f..506a1d0 100644
--- a/Src/DSInternals.Common/Schema/AttributeOmSyntax.cs
+++ b/Src/DSInternals.Common/Schema/AttributeOmSyntax.cs
@@ -1,5 +1,8 @@
namespace DSInternals.Common.Schema
{
+ ///
+ /// Defines the OM-Syntax values for Active Directory attributes.
+ ///
public enum AttributeOmSyntax : int
{
Undefined = 0,
diff --git a/Src/DSInternals.Common/Schema/AttributeSchema.cs b/Src/DSInternals.Common/Schema/AttributeSchema.cs
index e651035..af685c4 100644
--- a/Src/DSInternals.Common/Schema/AttributeSchema.cs
+++ b/Src/DSInternals.Common/Schema/AttributeSchema.cs
@@ -53,6 +53,9 @@ public class AttributeSchema
///
public readonly int? RangeUpper;
+ ///
+ /// The IsDefunct.
+ ///
public readonly bool IsDefunct;
///
@@ -86,22 +89,49 @@ public class AttributeSchema
public readonly Guid SchemaGuid;
+ ///
+ /// The OmSyntax.
+ ///
public readonly AttributeOmSyntax OmSyntax;
+ ///
+ /// The ColumnName.
+ ///
public string? ColumnName;
+ ///
+ /// The IndexName.
+ ///
public string? IndexName;
+ ///
+ /// The ContainerizedIndexName.
+ ///
public string? ContainerizedIndexName;
+ ///
+ /// The TupleIndexName.
+ ///
public string? TupleIndexName;
+ ///
+ /// The null.
+ ///
public string? DerivedColumnName => (!IsConstructed && LinkType == LinkType.None) ? (InternalId ?? AttributeId).DeriveColumnName(Syntax) : null;
+ ///
+ /// The null.
+ ///
public string? DerivedIndexName => (IsIndexed && LinkType == LinkType.None) ? (InternalId ?? AttributeId).DeriveIndexName() : null;
+ ///
+ /// The null.
+ ///
public string? DerivedContainerizedIndexName => IsIndexedOverContainer ? (InternalId ?? AttributeId).DeriveContainerizedIndexName() : null;
+ ///
+ /// The null.
+ ///
public string? DerivedTupleIndexName => IsTupleIndexed ? (InternalId ?? AttributeId).DeriveTupleIndexName() : null;
///
@@ -170,6 +200,9 @@ public LinkType LinkType
///
public bool IsIndexed => SearchFlags.HasFlag(AttributeSearchFlags.AttributeIndex);
+ ///
+ /// ToString implementation.
+ ///
public override string ToString()
{
return String.Format("Att: {0}, Col: {1}", Name, ColumnName);
@@ -252,6 +285,9 @@ public AttributeSchema(
this.IsDefunct = isDefunct;
}
+ ///
+ /// Create implementation.
+ ///
public static AttributeSchema Create(string ldapDisplayName, PrefixTable prefixTable)
{
if (prefixTable == null)
@@ -279,6 +315,9 @@ public static AttributeSchema Create(string ldapDisplayName, PrefixTable prefixT
searchFlags);
}
+ ///
+ /// Create implementation.
+ ///
public static AttributeSchema Create(
string ldapDisplayName,
string attributeOid,
diff --git a/Src/DSInternals.Common/Schema/AttributeSearchFlags.cs b/Src/DSInternals.Common/Schema/AttributeSearchFlags.cs
index c2ea89e..b59315b 100644
--- a/Src/DSInternals.Common/Schema/AttributeSearchFlags.cs
+++ b/Src/DSInternals.Common/Schema/AttributeSearchFlags.cs
@@ -7,6 +7,9 @@ namespace DSInternals.Common.Schema
///
/// https://msdn.microsoft.com/en-us/library/cc223153.aspx
[Flags]
+ ///
+ /// Defines values for AttributeSearchFlags.
+ ///
public enum AttributeSearchFlags : int
{
///
diff --git a/Src/DSInternals.Common/Schema/AttributeSystemFlags.cs b/Src/DSInternals.Common/Schema/AttributeSystemFlags.cs
index a7a9ffc..76fbb69 100644
--- a/Src/DSInternals.Common/Schema/AttributeSystemFlags.cs
+++ b/Src/DSInternals.Common/Schema/AttributeSystemFlags.cs
@@ -7,6 +7,9 @@ namespace DSInternals.Common.Schema
///
/// https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/1e38247d-8234-4273-9de3-bbf313548631
[Flags]
+ ///
+ /// Defines values for AttributeSystemFlags.
+ ///
public enum AttributeSystemFlags
{
None = 0,
diff --git a/Src/DSInternals.Common/Schema/BaseSchema.cs b/Src/DSInternals.Common/Schema/BaseSchema.cs
index 1c5050a..090727f 100644
--- a/Src/DSInternals.Common/Schema/BaseSchema.cs
+++ b/Src/DSInternals.Common/Schema/BaseSchema.cs
@@ -3,6 +3,9 @@
namespace DSInternals.Common.Schema
{
+ ///
+ /// Represents a BaseSchema.
+ ///
public class BaseSchema
{
private const int InitialDictionaryCapacity = 150;
@@ -17,6 +20,9 @@ public BaseSchema()
_prefixTable = new PrefixTable();
}
+ ///
+ /// AddAttribute implementation.
+ ///
public void AddAttribute(AttributeSchema attribute)
{
if (attribute == null) throw new ArgumentNullException(nameof(attribute));
@@ -26,30 +32,45 @@ public void AddAttribute(AttributeSchema attribute)
_attributesById[attribute.AttributeId] = attribute;
}
+ ///
+ /// FindAttribute implementation.
+ ///
public AttributeSchema? FindAttribute(string attributeName)
{
_ = _attributesByName.TryGetValue(attributeName, out AttributeSchema attribute);
return attribute;
}
+ ///
+ /// FindAttributeId implementation.
+ ///
public AttributeType? FindAttributeId(string attributeName)
{
_ = _attributesByName.TryGetValue(attributeName, out AttributeSchema attribute);
return attribute?.AttributeId;
}
+ ///
+ /// FindAttributeInternalId implementation.
+ ///
public AttributeType? FindAttributeInternalId(string attributeName)
{
_ = _attributesByName.TryGetValue(attributeName, out AttributeSchema attribute);
return attribute?.InternalId;
}
+ ///
+ /// FindAttribute implementation.
+ ///
public AttributeSchema? FindAttribute(AttributeType attributeId)
{
_ = _attributesById.TryGetValue(attributeId, out AttributeSchema attribute);
return attribute;
}
+ ///
+ /// LoadPrefixTable implementation.
+ ///
public void LoadPrefixTable(byte[] blob)
{
_prefixTable.LoadFromBlob(blob);
@@ -58,6 +79,9 @@ public void LoadPrefixTable(byte[] blob)
AddNonDefaultAttributes();
}
+ ///
+ /// AddPrefix implementation.
+ ///
public void AddPrefix(ushort index, byte[] oidPrefix)
{
_prefixTable.Add(index, oidPrefix);
@@ -134,6 +158,9 @@ private void AddNonDefaultAttributes()
}
}
+ ///
+ /// Create implementation.
+ ///
public static BaseSchema Create()
{
var schema = new BaseSchema();
diff --git a/Src/DSInternals.Common/Schema/CommonDirectoryAttributes.cs b/Src/DSInternals.Common/Schema/CommonDirectoryAttributes.cs
index 705b1f8..6001908 100644
--- a/Src/DSInternals.Common/Schema/CommonDirectoryAttributes.cs
+++ b/Src/DSInternals.Common/Schema/CommonDirectoryAttributes.cs
@@ -4,165 +4,642 @@ namespace DSInternals.Common.Schema
{
public static class CommonDirectoryAttributes
{
+ ///
+ /// The AdminCount.
+ ///
public const string AdminCount = "adminCount";
+ ///
+ /// The AttributeId.
+ ///
public const string AttributeId = "attributeID";
+ ///
+ /// The AttributeOmSyntax.
+ ///
public const string AttributeOmSyntax = "oMSyntax";
+ ///
+ /// The AttributeSyntax.
+ ///
public const string AttributeSyntax = "attributeSyntax";
+ ///
+ /// The CommonName.
+ ///
public const string CommonName = "cn";
+ ///
+ /// The CurrentValue.
+ ///
public const string CurrentValue = "currentValue";
+ ///
+ /// The Description.
+ ///
public const string Description = "description";
+ ///
+ /// The DisplayName.
+ ///
public const string DisplayName = "displayName";
+ ///
+ /// The DistinguishedName.
+ ///
public const string DistinguishedName = "distinguishedName";
+ ///
+ /// The DnsHostName.
+ ///
public const string DnsHostName = "dNSHostName";
+ ///
+ /// The DnsRoot.
+ ///
public const string DnsRoot = "dnsRoot";
+ ///
+ /// The FunctionalLevel.
+ ///
public const string FunctionalLevel = "msDS-Behavior-Version";
+ ///
+ /// The NamingContextName.
+ ///
public const string NamingContextName = "nCName";
+ ///
+ /// The DomainComponent.
+ ///
public const string DomainComponent = "dc";
+ ///
+ /// The DomainNamingContexts.
+ ///
public const string DomainNamingContexts = "msDS-HasDomainNCs";
+ ///
+ /// The GivenName.
+ ///
public const string GivenName = "givenName";
+ ///
+ /// The GovernsId.
+ ///
public const string GovernsId = "governsID";
+ ///
+ /// The InstanceType.
+ ///
public const string InstanceType = "instanceType";
+ ///
+ /// The InternalId.
+ ///
public const string InternalId = "msDS-IntId";
+ ///
+ /// The InvocationId.
+ ///
public const string InvocationId = "invocationId";
+ ///
+ /// The IsDefunct.
+ ///
public const string IsDefunct = "isDefunct";
+ ///
+ /// The IsDeleted.
+ ///
public const string IsDeleted = "isDeleted";
+ ///
+ /// The IsInGlobalCatalog.
+ ///
public const string IsInGlobalCatalog = "isMemberOfPartialAttributeSet";
+ ///
+ /// The IsSingleValued.
+ ///
public const string IsSingleValued = "isSingleValued";
+ ///
+ /// The KdsCreationTime.
+ ///
public const string KdsCreationTime = "msKds-CreateTime";
+ ///
+ /// The KdsDomainController.
+ ///
public const string KdsDomainController = "msKds-DomainID";
+ ///
+ /// The KdsKdfAlgorithmId.
+ ///
public const string KdsKdfAlgorithmId = "msKds-KDFAlgorithmID";
+ ///
+ /// The KdsKdfParameters.
+ ///
public const string KdsKdfParameters = "msKds-KDFParam";
+ ///
+ /// The KdsSecretAgreementPrivateKeyLength.
+ ///
public const string KdsSecretAgreementPrivateKeyLength = "msKds-PrivateKeyLength";
+ ///
+ /// The KdsSecretAgreementPublicKeyLength.
+ ///
public const string KdsSecretAgreementPublicKeyLength = "msKds-PublicKeyLength";
+ ///
+ /// The KdsRootKeyData.
+ ///
public const string KdsRootKeyData = "msKds-RootKeyData";
+ ///
+ /// The KdsSecretAgreementAlgorithmId.
+ ///
public const string KdsSecretAgreementAlgorithmId = "msKds-SecretAgreementAlgorithmID";
+ ///
+ /// The KdsSecretAgreementParameters.
+ ///
public const string KdsSecretAgreementParameters = "msKds-SecretAgreementParam";
+ ///
+ /// The KdsEffectiveTime.
+ ///
public const string KdsEffectiveTime = "msKds-UseStartTime";
+ ///
+ /// The KdsVersion.
+ ///
public const string KdsVersion = "msKds-Version";
+ ///
+ /// The KeyCredentialLink.
+ ///
public const string KeyCredentialLink = "msDS-KeyCredentialLink";
+ ///
+ /// The LastLogon.
+ ///
public const string LastLogon = "lastLogon";
+ ///
+ /// The LastLogonTimestamp.
+ ///
public const string LastLogonTimestamp = "lastLogonTimestamp";
+ ///
+ /// The LdapDisplayName.
+ ///
public const string LdapDisplayName = "lDAPDisplayName";
+ ///
+ /// The LinkId.
+ ///
public const string LinkId = "linkID";
+ ///
+ /// The LMHash.
+ ///
public const string LMHash = "dBCSPwd";
+ ///
+ /// The LMHashHistory.
+ ///
public const string LMHashHistory = "lmPwdHistory";
+ ///
+ /// The LockoutTime.
+ ///
public const string LockoutTime = "lockoutTime";
+ ///
+ /// The ManagedPasswordId.
+ ///
public const string ManagedPasswordId = "msDS-ManagedPasswordId";
+ ///
+ /// The ManagedPasswordPreviousId.
+ ///
public const string ManagedPasswordPreviousId = "msDS-ManagedPasswordPreviousId";
+ ///
+ /// The ManagedPasswordInterval.
+ ///
public const string ManagedPasswordInterval = "msDS-ManagedPasswordInterval";
+ ///
+ /// The MasterNamingContexts.
+ ///
public const string MasterNamingContexts = "msDS-hasMasterNCs";
+ ///
+ /// The Member.
+ ///
public const string Member = "member";
+ ///
+ /// The NetBIOSName.
+ ///
public const string NetBIOSName = "nETBIOSName";
+ ///
+ /// The NTHash.
+ ///
public const string NTHash = "unicodePwd";
+ ///
+ /// The NTHashHistory.
+ ///
public const string NTHashHistory = "ntPwdHistory";
+ ///
+ /// The ObjectCategory.
+ ///
public const string ObjectCategory = "objectCategory";
+ ///
+ /// The ObjectClass.
+ ///
public const string ObjectClass = "objectClass";
+ ///
+ /// The ObjectGuid.
+ ///
public const string ObjectGuid = "objectGUID";
+ ///
+ /// The ObjectSid.
+ ///
public const string ObjectSid = "objectSid";
+ ///
+ /// The OperatingSystemName.
+ ///
public const string OperatingSystemName = "operatingSystem";
+ ///
+ /// The Options.
+ ///
public const string Options = "options";
+ ///
+ /// The OrganizationalUnitName.
+ ///
public const string OrganizationalUnitName = "ou";
+ ///
+ /// The PasswordLastSet.
+ ///
public const string PasswordLastSet = "pwdLastSet";
+ ///
+ /// The PEKList.
+ ///
public const string PEKList = "pekList";
+ ///
+ /// The PEKChangeInterval.
+ ///
public const string PEKChangeInterval = "pekKeyChangeInterval";
+ ///
+ /// The PKIRoamingTimeStamp.
+ ///
public const string PKIRoamingTimeStamp = "msPKIRoamingTimeStamp";
+ ///
+ /// The PKIDPAPIMasterKeys.
+ ///
public const string PKIDPAPIMasterKeys = "msPKIDPAPIMasterKeys";
+ ///
+ /// The PKIAccountCredentials.
+ ///
public const string PKIAccountCredentials = "msPKIAccountCredentials";
+ ///
+ /// The PrefixMap.
+ ///
public const string PrefixMap = "prefixMap";
+ ///
+ /// The PrimaryGroupId.
+ ///
public const string PrimaryGroupId = "primaryGroupID";
+ ///
+ /// The ReplicationPropertyMetaData.
+ ///
public const string ReplicationPropertyMetaData = "replPropertyMetaData";
+ ///
+ /// The RangeLower.
+ ///
public const string RangeLower = "rangeLower";
+ ///
+ /// The RangeUpper.
+ ///
public const string RangeUpper = "rangeUpper";
+ ///
+ /// The RDN.
+ ///
public const string RDN = "name";
+ ///
+ /// The SamAccountName.
+ ///
public const string SamAccountName = "sAMAccountName";
+ ///
+ /// The SamAccountType.
+ ///
public const string SamAccountType = "sAMAccountType";
+ ///
+ /// The SchemaLocation.
+ ///
public const string SchemaLocation = "dMDLocation";
+ ///
+ /// The SearchFlags.
+ ///
public const string SearchFlags = "searchFlags";
+ ///
+ /// The SecurityDescriptor.
+ ///
public const string SecurityDescriptor = "nTSecurityDescriptor";
+ ///
+ /// The SecurityIdentifier.
+ ///
public const string SecurityIdentifier = "securityIdentifier";
+ ///
+ /// The ServerReference.
+ ///
public const string ServerReference = "serverReference";
+ ///
+ /// The SchemaIdGuid.
+ ///
public const string SchemaIdGuid = "schemaIDGUID";
+ ///
+ /// The ServicePrincipalName.
+ ///
public const string ServicePrincipalName = "servicePrincipalName";
+ ///
+ /// The SidHistory.
+ ///
public const string SidHistory = "sIDHistory";
+ ///
+ /// The SupplementalCredentials.
+ ///
public const string SupplementalCredentials = "supplementalCredentials";
+ ///
+ /// The SupportedEncryptionTypes.
+ ///
public const string SupportedEncryptionTypes = "msDS-SupportedEncryptionTypes";
+ ///
+ /// The Surname.
+ ///
public const string Surname = "sn";
+ ///
+ /// The SystemFlags.
+ ///
public const string SystemFlags = "systemFlags";
+ ///
+ /// The SystemOnly.
+ ///
public const string SystemOnly = "systemOnly";
+ ///
+ /// The UnixUserPassword.
+ ///
public const string UnixUserPassword = "unixUserPassword";
+ ///
+ /// The UserAccountControl.
+ ///
public const string UserAccountControl = "userAccountControl";
+ ///
+ /// The UserPrincipalName.
+ ///
public const string UserPrincipalName = "userPrincipalName";
+ ///
+ /// The USNCreated.
+ ///
public const string USNCreated = "uSNCreated";
+ ///
+ /// The USNChanged.
+ ///
public const string USNChanged = "uSNChanged";
+ ///
+ /// The WhenCreated.
+ ///
public const string WhenCreated = "whenCreated";
+ ///
+ /// The WhenChanged.
+ ///
public const string WhenChanged = "whenChanged";
+ ///
+ /// The Initials.
+ ///
public const string Initials = "initials";
+ ///
+ /// The EmployeeId.
+ ///
public const string EmployeeId = "employeeID";
+ ///
+ /// The EmployeeNumber.
+ ///
public const string EmployeeNumber = "employeeNumber";
+ ///
+ /// The Office.
+ ///
public const string Office = "physicalDeliveryOfficeName";
+ ///
+ /// The TelephoneNumber.
+ ///
public const string TelephoneNumber = "telephoneNumber";
+ ///
+ /// The EmailAddress.
+ ///
public const string EmailAddress = "mail";
+ ///
+ /// The HomePhone.
+ ///
public const string HomePhone = "homePhone";
+ ///
+ /// The PagerNumber.
+ ///
public const string PagerNumber = "pager";
+ ///
+ /// The Mobile.
+ ///
public const string Mobile = "mobile";
+ ///
+ /// The IpPhone.
+ ///
public const string IpPhone = "ipPhone";
+ ///
+ /// The WebPage.
+ ///
public const string WebPage = "wWWHomePage";
+ ///
+ /// The JobTitle.
+ ///
public const string JobTitle = "title";
+ ///
+ /// The Department.
+ ///
public const string Department = "department";
+ ///
+ /// The Company.
+ ///
public const string Company = "company";
+ ///
+ /// The Manager.
+ ///
public const string Manager = "manager";
+ ///
+ /// The HomeDirectory.
+ ///
public const string HomeDirectory = "homeDirectory";
+ ///
+ /// The HomeDrive.
+ ///
public const string HomeDrive = "homeDrive";
+ ///
+ /// The UnixHomeDirectory.
+ ///
public const string UnixHomeDirectory = "unixHomeDirectory";
+ ///
+ /// The ProfilePath.
+ ///
public const string ProfilePath = "profilePath";
+ ///
+ /// The ScriptPath.
+ ///
public const string ScriptPath = "scriptPath";
+ ///
+ /// The State.
+ ///
public const string State = "st";
+ ///
+ /// The Street.
+ ///
public const string Street = "streetAddress";
+ ///
+ /// The PostOfficeBox.
+ ///
public const string PostOfficeBox = "postOfficeBox";
+ ///
+ /// The City.
+ ///
public const string City = "l";
+ ///
+ /// The Country.
+ ///
public const string Country = "c";
+ ///
+ /// The Comment.
+ ///
public const string Comment = "info";
+ ///
+ /// The PostalCode.
+ ///
public const string PostalCode = "postalCode";
+ ///
+ /// The ManagedBy.
+ ///
public const string ManagedBy = "managedBy";
+ ///
+ /// The Location.
+ ///
public const string Location = "location";
+ ///
+ /// The OperatingSystemVersion.
+ ///
public const string OperatingSystemVersion = "operatingSystemVersion";
+ ///
+ /// The OperatingSystemHotfix.
+ ///
public const string OperatingSystemHotfix = "operatingSystemHotfix";
+ ///
+ /// The OperatingSystemServicePack.
+ ///
public const string OperatingSystemServicePack = "operatingSystemServicePack";
+ ///
+ /// The TPMOwnerInformation.
+ ///
public const string TPMOwnerInformation = "msTPM-OwnerInformation";
+ ///
+ /// The TPMInformationForComputer.
+ ///
public const string TPMInformationForComputer = "msTPM-TpmInformationForComputer";
+ ///
+ /// The TrustAttributes.
+ ///
public const string TrustAttributes = "trustAttributes";
+ ///
+ /// The TrustAuthIncoming.
+ ///
public const string TrustAuthIncoming = "trustAuthIncoming";
+ ///
+ /// The TrustAuthOutgoing.
+ ///
public const string TrustAuthOutgoing = "trustAuthOutgoing";
+ ///
+ /// The TrustDirection.
+ ///
public const string TrustDirection = "trustDirection";
+ ///
+ /// The TrustPartner.
+ ///
public const string TrustPartner = "trustPartner";
+ ///
+ /// The TrustPartnerFlatName.
+ ///
public const string TrustPartnerFlatName = "flatName";
+ ///
+ /// The TrustPosixOffset.
+ ///
public const string TrustPosixOffset = "trustPosixOffset";
+ ///
+ /// The TrustType.
+ ///
public const string TrustType = "trustType";
+ ///
+ /// The FVEKeyPackage.
+ ///
public const string FVEKeyPackage = "msFVE-KeyPackage";
+ ///
+ /// The FVEVolumeGuid.
+ ///
public const string FVEVolumeGuid = "msFVE-VolumeGuid";
+ ///
+ /// The FVERecoveryGuid.
+ ///
public const string FVERecoveryGuid = "msFVE-RecoveryGuid";
+ ///
+ /// The FVERecoveryPassword.
+ ///
public const string FVERecoveryPassword = "msFVE-RecoveryPassword";
+ ///
+ /// The LAPSPassword.
+ ///
public const string LAPSPassword = "ms-Mcs-AdmPwd";
+ ///
+ /// The LAPSPasswordOid.
+ ///
public const string LAPSPasswordOid = "1.2.840.113556.1.8000.2554.50051.45980.28112.18903.35903.6685103.1224907.2.1";
+ ///
+ /// The LAPSPasswordExpirationTime.
+ ///
public const string LAPSPasswordExpirationTime = "ms-Mcs-AdmPwdExpirationTime";
+ ///
+ /// The LAPSPasswordExpirationTimeOid.
+ ///
public const string LAPSPasswordExpirationTimeOid = "1.2.840.113556.1.8000.2554.50051.45980.28112.18903.35903.6685103.1224907.2.2";
+ ///
+ /// The WindowsLapsPasswordExpirationTime.
+ ///
public const string WindowsLapsPasswordExpirationTime = "msLAPS-PasswordExpirationTime";
+ ///
+ /// The WindowsLapsPasswordExpirationTimeOid.
+ ///
public const string WindowsLapsPasswordExpirationTimeOid = "1.2.840.113556.1.6.44.1.1";
+ ///
+ /// The WindowsLapsPassword.
+ ///
public const string WindowsLapsPassword = "msLAPS-Password";
+ ///
+ /// The WindowsLapsPasswordOid.
+ ///
public const string WindowsLapsPasswordOid = "1.2.840.113556.1.6.44.1.2";
+ ///
+ /// The WindowsLapsEncryptedPassword.
+ ///
public const string WindowsLapsEncryptedPassword = "msLAPS-EncryptedPassword";
+ ///
+ /// The WindowsLapsEncryptedPasswordOid.
+ ///
public const string WindowsLapsEncryptedPasswordOid = "1.2.840.113556.1.6.44.1.3";
+ ///
+ /// The WindowsLapsEncryptedPasswordHistory.
+ ///
public const string WindowsLapsEncryptedPasswordHistory = "msLAPS-EncryptedPasswordHistory";
+ ///
+ /// The WindowsLapsEncryptedPasswordHistoryOid.
+ ///
public const string WindowsLapsEncryptedPasswordHistoryOid = "1.2.840.113556.1.6.44.1.4";
+ ///
+ /// The WindowsLapsEncryptedDsrmPassword.
+ ///
public const string WindowsLapsEncryptedDsrmPassword = "msLAPS-EncryptedDSRMPassword";
+ ///
+ /// The WindowsLapsEncryptedDsrmPasswordOid.
+ ///
public const string WindowsLapsEncryptedDsrmPasswordOid = "1.2.840.113556.1.6.44.1.5";
+ ///
+ /// The WindowsLapsEncryptedDsrmPasswordHistory.
+ ///
public const string WindowsLapsEncryptedDsrmPasswordHistory = "msLAPS-EncryptedDSRMPasswordHistory";
+ ///
+ /// The WindowsLapsEncryptedDsrmPasswordHistoryOid.
+ ///
public const string WindowsLapsEncryptedDsrmPasswordHistoryOid = "1.2.840.113556.1.6.44.1.6";
+ ///
+ /// The WindowsLapsCurrentPasswordVersion.
+ ///
public const string WindowsLapsCurrentPasswordVersion = "msLAPS-CurrentPasswordVersion";
+ ///
+ /// The WindowsLapsCurrentPasswordVersionOid.
+ ///
public const string WindowsLapsCurrentPasswordVersionOid = "1.2.840.113556.1.6.44.1.7";
+ ///
+ /// The DnsRecord.
+ ///
public const string DnsRecord = "dnsRecord";
+ ///
+ /// The DnsTombstoned.
+ ///
public const string DnsTombstoned = "dNSTombstoned";
+ ///
+ /// Translate implementation.
+ ///
public static AttributeType? Translate(string ldapDisplayName)
{
if (ldapDisplayName == null) throw new ArgumentNullException(nameof(ldapDisplayName));
diff --git a/Src/DSInternals.Common/Schema/CommonDirectoryClasses.cs b/Src/DSInternals.Common/Schema/CommonDirectoryClasses.cs
index 4fd80c9..462dafb 100644
--- a/Src/DSInternals.Common/Schema/CommonDirectoryClasses.cs
+++ b/Src/DSInternals.Common/Schema/CommonDirectoryClasses.cs
@@ -70,6 +70,9 @@ public static class CommonDirectoryClasses
///
public const string NtdsSettingsRO = "nTDSDSARO";
+ ///
+ /// Translate implementation.
+ ///
public static ClassType? Translate(string ldapDisplayName)
{
if (ldapDisplayName == null) throw new ArgumentNullException(nameof(ldapDisplayName));
diff --git a/Src/DSInternals.Common/Schema/LinkType.cs b/Src/DSInternals.Common/Schema/LinkType.cs
index 3d0603c..05a3a46 100644
--- a/Src/DSInternals.Common/Schema/LinkType.cs
+++ b/Src/DSInternals.Common/Schema/LinkType.cs
@@ -1,6 +1,9 @@
namespace DSInternals.Common.Schema
{
+ ///
+ /// Defines the type of link relationship for Active Directory attributes.
+ ///
public enum LinkType
{
None = 0,
diff --git a/Src/DSInternals.Common/Schema/PrefixTable.cs b/Src/DSInternals.Common/Schema/PrefixTable.cs
index e694331..990d0aa 100644
--- a/Src/DSInternals.Common/Schema/PrefixTable.cs
+++ b/Src/DSInternals.Common/Schema/PrefixTable.cs
@@ -18,6 +18,9 @@ namespace DSInternals.Common.Schema
///
public class PrefixTable
{
+ ///
+ /// The 38.
+ ///
public const int LastBuitlInPrefixIndex = 38;
private const int MinBlobLength = 2 * sizeof(uint);
private const long LongLimit = (long.MaxValue >> 7) - 0x7f;
@@ -131,6 +134,9 @@ public int Count
return upperWord * 0x10000u + lowerWord; // 65536
}
+ ///
+ /// Translate implementation.
+ ///
public string? Translate(AttributeType encodedOid)
{
if (!encodedOid.IsCompressedOid())
@@ -141,11 +147,17 @@ public int Count
return Translate((ATTRTYP)encodedOid);
}
+ ///
+ /// Translate implementation.
+ ///
public string? Translate(ClassType encodedOid)
{
return Translate((ATTRTYP)encodedOid);
}
+ ///
+ /// Translate implementation.
+ ///
public string? Translate(ATTRTYP encodedOid)
{
// Decode Oid from attribute id (:= prefixIndex + suffix)
diff --git a/Src/DSInternals.Common/packages.lock.json b/Src/DSInternals.Common/packages.lock.json
index 75a5f18..b74f1c7 100644
--- a/Src/DSInternals.Common/packages.lock.json
+++ b/Src/DSInternals.Common/packages.lock.json
@@ -2,6 +2,15 @@
"version": 1,
"dependencies": {
".NETFramework,Version=v4.8": {
+ "Microsoft.NETFramework.ReferenceAssemblies": {
+ "type": "Direct",
+ "requested": "[1.0.3, )",
+ "resolved": "1.0.3",
+ "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
+ "dependencies": {
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3"
+ }
+ },
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
@@ -96,6 +105,11 @@
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": {
+ "type": "Transitive",
+ "resolved": "1.0.3",
+ "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ=="
+ },
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
diff --git a/Src/DSInternals.DataStore/ADConstants.cs b/Src/DSInternals.DataStore/ADConstants.cs
index 75dddd2..37374f8 100644
--- a/Src/DSInternals.DataStore/ADConstants.cs
+++ b/Src/DSInternals.DataStore/ADConstants.cs
@@ -6,12 +6,33 @@ namespace DSInternals.DataStore
{
internal static class ADConstants
{
+ ///
+ /// The DataTableName.
+ ///
public const string DataTableName = "datatable";
+ ///
+ /// The SystemTableName.
+ ///
public const string SystemTableName = "hiddentable";
+ ///
+ /// The LinkTableName.
+ ///
public const string LinkTableName = "link_table";
+ ///
+ /// The SecurityDescriptorTableName.
+ ///
public const string SecurityDescriptorTableName = "sd_table";
+ ///
+ /// The EseBaseName.
+ ///
public const string EseBaseName = "edb";
+ ///
+ /// The EseTempDatabaseName.
+ ///
public const string EseTempDatabaseName = "temp.edb";
+ ///
+ /// The 10240.
+ ///
public const int EseLogFileSize = 10240; // 10MB
///
/// Corresponds to DS_DEFAULT_LOCALE
@@ -27,7 +48,13 @@ internal static class ADConstants
COMPARE_STRING_FLAGS.NORM_IGNOREWIDTH |
COMPARE_STRING_FLAGS.SORT_STRINGSORT) |
PInvoke.LCMAP_SORTKEY;
+ ///
+ /// The EseLegacyFileNames.
+ ///
public const LegacyFileNames EseLegacyFileNames = LegacyFileNames.EightDotThreeSoftCompat | LegacyFileNames.ESE98FileNames;
+ ///
+ /// The 1000.
+ ///
public const int EseMaxOpenTables = 1000;
}
}
diff --git a/Src/DSInternals.DataStore/AttributeMetadata.cs b/Src/DSInternals.DataStore/AttributeMetadata.cs
index dfd5e84..a3f911f 100644
--- a/Src/DSInternals.DataStore/AttributeMetadata.cs
+++ b/Src/DSInternals.DataStore/AttributeMetadata.cs
@@ -90,6 +90,9 @@ private set
}
}
+ ///
+ /// Update implementation.
+ ///
public void Update(Guid invocationId, DateTime time, long usn)
{
this.LastOriginatingInvocationId = invocationId;
@@ -99,6 +102,9 @@ public void Update(Guid invocationId, DateTime time, long usn)
this.Version++;
}
+ ///
+ /// ToString implementation.
+ ///
public override string ToString()
{
return String.Format("Ver: {0}, USN: {1}, Time: {2}, DSA: {3}", this.Version, this.OriginatingChangeUsn, this.LastOriginatingChangeTime, this.LastOriginatingInvocationId);
diff --git a/Src/DSInternals.DataStore/AttributeMetadataCollection.cs b/Src/DSInternals.DataStore/AttributeMetadataCollection.cs
index 79506c5..e63ece5 100644
--- a/Src/DSInternals.DataStore/AttributeMetadataCollection.cs
+++ b/Src/DSInternals.DataStore/AttributeMetadataCollection.cs
@@ -7,6 +7,9 @@
namespace DSInternals.DataStore
{
+ ///
+ /// Represents a AttributeMetadataCollection.
+ ///
public class AttributeMetadataCollection
{
private const int guidSize = 16;
@@ -45,6 +48,9 @@ protected SortedList InnerList
private set;
}
+ ///
+ /// this implementation.
+ ///
public AttributeMetadataCollection() : this(null) { }
public AttributeMetadataCollection(byte[] buffer)
@@ -94,6 +100,9 @@ public AttributeMetadataCollection(byte[] buffer)
}
}
+ ///
+ /// Update implementation.
+ ///
public void Update(AttributeType attributeId, Guid invocationId, DateTime time, long usn)
{
this.InnerList.TryGetValue(attributeId, out AttributeMetadata entry);
@@ -111,6 +120,9 @@ public void Update(AttributeType attributeId, Guid invocationId, DateTime time,
}
}
+ ///
+ /// ToByteArray implementation.
+ ///
public byte[] ToByteArray()
{
byte[] buffer = new byte[CalculateBinarySize(this.Count)];
@@ -137,6 +149,9 @@ public byte[] ToByteArray()
return buffer;
}
+ ///
+ /// ToString implementation.
+ ///
public override string ToString()
{
var text = new StringBuilder();
diff --git a/Src/DSInternals.DataStore/Cryptography/BootKeyRetriever.cs b/Src/DSInternals.DataStore/Cryptography/BootKeyRetriever.cs
index 4cb64f4..e77ecc5 100644
--- a/Src/DSInternals.DataStore/Cryptography/BootKeyRetriever.cs
+++ b/Src/DSInternals.DataStore/Cryptography/BootKeyRetriever.cs
@@ -8,6 +8,9 @@ namespace DSInternals.DataStore
{
public static class BootKeyRetriever
{
+ ///
+ /// The 16.
+ ///
public const int BootKeyLength = 16;
// AD DS Constants:
private const string CurrentControlSetKey = "Select";
diff --git a/Src/DSInternals.DataStore/Cryptography/DataStoreSecretDecryptor.cs b/Src/DSInternals.DataStore/Cryptography/DataStoreSecretDecryptor.cs
index 32000fd..c213151 100644
--- a/Src/DSInternals.DataStore/Cryptography/DataStoreSecretDecryptor.cs
+++ b/Src/DSInternals.DataStore/Cryptography/DataStoreSecretDecryptor.cs
@@ -7,6 +7,9 @@
namespace DSInternals.DataStore
{
+ ///
+ /// Represents a DataStoreSecretDecryptor.
+ ///
public class DataStoreSecretDecryptor : DirectorySecretDecryptor
{
private const int BootKeySaltHashRounds = 1000;
@@ -94,6 +97,9 @@ public DataStoreSecretDecryptor(byte[] cleartextPEKListBlob, PekListVersion vers
this.ParsePekList(cleartextPEKListBlob);
}
+ ///
+ /// DecryptSecret implementation.
+ ///
public override byte[] DecryptSecret(byte[] blob)
{
// Blob structure Win2k: Algorithm ID (2B), Flags (2B), PEK ID (4B), Salt (16B), Encrypted secret (rest)
@@ -152,6 +158,9 @@ public override byte[] DecryptSecret(byte[] blob)
return decryptedSecret;
}
+ ///
+ /// EncryptSecret implementation.
+ ///
public override byte[] EncryptSecret(byte[] secret)
{
using (var buffer = new MemoryStream())
diff --git a/Src/DSInternals.DataStore/DatastoreObject.cs b/Src/DSInternals.DataStore/DatastoreObject.cs
index 32da304..12667dc 100644
--- a/Src/DSInternals.DataStore/DatastoreObject.cs
+++ b/Src/DSInternals.DataStore/DatastoreObject.cs
@@ -75,6 +75,9 @@ protected override bool HasBigEndianRid
}
}
+ ///
+ /// AddAttribute implementation.
+ ///
public bool AddAttribute(string name, SecurityIdentifier[] valuesToAdd)
{
Columnid? columnId = this.context.Schema.FindColumnId(CommonDirectoryAttributes.SidHistory);
@@ -87,6 +90,9 @@ public bool AddAttribute(string name, SecurityIdentifier[] valuesToAdd)
return false;
}
+ ///
+ /// Delete implementation.
+ ///
public void Delete()
{
// TODO: Check if we are in a transaction
@@ -98,6 +104,9 @@ public void Delete()
this.cursor = null;
}
+ ///
+ /// HasAttribute implementation.
+ ///
public override bool HasAttribute(string name)
{
Columnid? columnId = this.context.Schema.FindColumnId(name);
@@ -115,48 +124,72 @@ public override bool HasAttribute(string name)
}
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out byte[] value)
{
Columnid? columnId = this.context.Schema.FindColumnId(name);
value = columnId != null ? this.cursor.RetrieveColumnAsByteArray(columnId) : null;
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out byte[][] value)
{
Columnid? columnId = this.context.Schema.FindColumnId(name);
value = columnId != null ? this.cursor.RetrieveColumnAsMultiByteArray(columnId) : null;
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out int? value)
{
Columnid? columnId = this.context.Schema.FindColumnId(name);
value = columnId != null ? this.cursor.RetrieveColumnAsInt(columnId) : null;
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public void ReadAttribute(string name, out DNTag? value)
{
Columnid? columnId = this.context.Schema.FindColumnId(name);
value = columnId != null ? (DNTag?)this.cursor.RetrieveColumnAsInt(columnId) : null;
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out string value, bool unicode = true)
{
Columnid? columnId = this.context.Schema.FindColumnId(name);
value = columnId != null ? this.cursor.RetrieveColumnAsString(columnId, unicode) : null;
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out string[] values, bool unicode = true)
{
Columnid? columnId = this.context.Schema.FindColumnId(name);
values = columnId != null ? this.cursor.RetrieveColumnAsStringArray(columnId, unicode) : null;
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out long? value)
{
Columnid? columnId = this.context.Schema.FindColumnId(name);
value = columnId != null ? this.cursor.RetrieveColumnAsLong(columnId) : null;
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out DistinguishedName? value)
{
Columnid? columnId = this.context.Schema.FindColumnId(name);
@@ -168,6 +201,9 @@ public override void ReadAttribute(string name, out DistinguishedName? value)
value = dnt.HasValue ? this.context.DistinguishedNameResolver.Resolve(dnt.Value) : null;
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out RawSecurityDescriptor value)
{
this.ReadAttribute(name, out byte[] binaryValue);
@@ -191,12 +227,18 @@ public override void ReadAttribute(string name, out RawSecurityDescriptor value)
}
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public void ReadAttribute(string name, out ClassType? value)
{
Columnid? columnId = this.context.Schema.FindColumnId(name);
value = columnId != null ? this.cursor.RetrieveColumnAsObjectCategory(columnId) : null;
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public void ReadAttribute(string name, out AttributeMetadataCollection value)
{
Columnid? columnId = this.context.Schema.FindColumnId(name);
@@ -212,6 +254,9 @@ public void ReadAttribute(string name, out AttributeMetadataCollection value)
}
}
+ ///
+ /// ReadLinkedValues implementation.
+ ///
public override void ReadLinkedValues(string attributeName, out byte[][] values)
{
// Cut off the first 4 bytes, which is the length of the entire structure.
@@ -233,6 +278,9 @@ public bool SetAttribute(string name, T? newValue) where T : struct
return hasChanged;
}
+ ///
+ /// SetAttribute implementation.
+ ///
public bool SetAttribute(string name, DateTime newValue)
{
if(newValue != DateTime.MinValue)
@@ -246,6 +294,9 @@ public bool SetAttribute(string name, DateTime newValue)
}
}
+ ///
+ /// SetAttribute implementation.
+ ///
public bool SetAttribute(string name, byte[] newValue)
{
Columnid columnId = this.context.Schema.FindColumnId(name);
@@ -253,12 +304,18 @@ public bool SetAttribute(string name, byte[] newValue)
return hasChanged;
}
+ ///
+ /// UpdateAttributeMeta implementation.
+ ///
public void UpdateAttributeMeta(string attributeName, long usn, DateTime time)
{
Validator.AssertNotNull(attributeName, "attributeName");
this.UpdateAttributeMeta(new string[] { attributeName }, usn, time);
}
+ ///
+ /// UpdateAttributeMeta implementation.
+ ///
public void UpdateAttributeMeta(string[] attributeNames, long usn, DateTime time)
{
Validator.AssertNotNull(attributeNames, nameof(attributeNames));
diff --git a/Src/DSInternals.DataStore/DatastoreRootKeyResolver.cs b/Src/DSInternals.DataStore/DatastoreRootKeyResolver.cs
index 58b47df..b5f63cf 100644
--- a/Src/DSInternals.DataStore/DatastoreRootKeyResolver.cs
+++ b/Src/DSInternals.DataStore/DatastoreRootKeyResolver.cs
@@ -32,6 +32,9 @@ public DatastoreRootKeyResolver(DirectoryContext context)
}
}
+ ///
+ /// GetKdsRootKeys implementation.
+ ///
public IEnumerable GetKdsRootKeys()
{
if (!_featureSupported)
@@ -62,6 +65,9 @@ public IEnumerable GetKdsRootKeys()
}
}
+ ///
+ /// GetKdsRootKey implementation.
+ ///
public KdsRootKey? GetKdsRootKey(Guid id)
{
if (!_featureSupported)
@@ -102,13 +108,22 @@ public IEnumerable GetKdsRootKeys()
return null;
}
+ ///
+ /// GetKdsRootKey implementation.
+ ///
public KdsRootKey GetKdsRootKey(DateTime effectiveTime)
{
throw new NotSupportedException("Direct search by effective time is not supported in DB. Use the caching resolver instead.");
}
+ ///
+ /// The true.
+ ///
public bool SupportsLookupAll => true;
+ ///
+ /// The false.
+ ///
public bool SupportsLookupByEffectiveTime => false;
}
}
diff --git a/Src/DSInternals.DataStore/DirectoryAgent.BitLocker.cs b/Src/DSInternals.DataStore/DirectoryAgent.BitLocker.cs
index 4bf3b50..3309476 100644
--- a/Src/DSInternals.DataStore/DirectoryAgent.BitLocker.cs
+++ b/Src/DSInternals.DataStore/DirectoryAgent.BitLocker.cs
@@ -12,6 +12,9 @@ public partial class DirectoryAgent : IDisposable
{
private const string ComputerNameSuffix = "$";
+ ///
+ /// GetBitLockerRecoveryInformation implementation.
+ ///
public IEnumerable GetBitLockerRecoveryInformation()
{
var recoveryGuidAttribute = this.context.Schema.FindAttribute(AttributeType.FVERecoveryGuid);
@@ -35,6 +38,9 @@ public IEnumerable GetBitLockerRecoveryInformation
}
}
+ ///
+ /// GetBitLockerRecoveryInformation implementation.
+ ///
public BitLockerRecoveryInformation GetBitLockerRecoveryInformation(DistinguishedName dn)
{
// Validate the input
@@ -71,6 +77,9 @@ public BitLockerRecoveryInformation GetBitLockerRecoveryInformation(Distinguishe
throw new DirectoryObjectNotFoundException(dn);
}
+ ///
+ /// GetBitLockerRecoveryInformation implementation.
+ ///
public BitLockerRecoveryInformation GetBitLockerRecoveryInformation(Guid objectId)
{
Columnid? recoveryGuidColumn = this.context.Schema.FindColumnId(CommonDirectoryAttributes.FVERecoveryGuid);
@@ -106,6 +115,9 @@ public BitLockerRecoveryInformation GetBitLockerRecoveryInformation(Guid objectI
throw new DirectoryObjectNotFoundException(objectId);
}
+ ///
+ /// GetBitLockerRecoveryInformationByRecoveryGuid implementation.
+ ///
public BitLockerRecoveryInformation GetBitLockerRecoveryInformationByRecoveryGuid(Guid recoveryGuid)
{
var recoveryGuidAttribute = this.context.Schema.FindAttribute(CommonDirectoryAttributes.FVERecoveryGuid);
@@ -132,6 +144,9 @@ public BitLockerRecoveryInformation GetBitLockerRecoveryInformationByRecoveryGui
throw new DirectoryObjectNotFoundException(recoveryGuid);
}
+ ///
+ /// GetBitLockerRecoveryInformation implementation.
+ ///
public IEnumerable GetBitLockerRecoveryInformation(string computerName)
{
var recoveryGuidAttribute = this.context.Schema.FindAttribute(CommonDirectoryAttributes.FVERecoveryGuid);
diff --git a/Src/DSInternals.DataStore/DirectoryAgent.DNS.cs b/Src/DSInternals.DataStore/DirectoryAgent.DNS.cs
index f9d957f..5b63105 100644
--- a/Src/DSInternals.DataStore/DirectoryAgent.DNS.cs
+++ b/Src/DSInternals.DataStore/DirectoryAgent.DNS.cs
@@ -10,6 +10,9 @@ public partial class DirectoryAgent : IDisposable
private const string RootHintsZoneName = "RootDNSServers";
private const string TrustAnchorsZoneName = "..TrustAnchors";
+ ///
+ /// GetDnsRecords implementation.
+ ///
public IEnumerable GetDnsRecords(bool skipRootHints = true, bool skipTombstoned = true, bool skipTrustAnchors = true)
{
DNTag? dnsNodeCategory = this.context.Schema.FindObjectCategory(CommonDirectoryClasses.DnsNode);
@@ -70,6 +73,9 @@ public IEnumerable GetDnsRecords(bool skipRootHints = true, b
}
}
+ ///
+ /// GetDnsZone implementation.
+ ///
public IEnumerable GetDnsZone()
{
DNTag? dnsZoneCategory = this.context.Schema.FindObjectCategory(CommonDirectoryClasses.DnsZone);
diff --git a/Src/DSInternals.DataStore/DirectoryAgent.DataProtection.cs b/Src/DSInternals.DataStore/DirectoryAgent.DataProtection.cs
index 46dfa48..c35b0ae 100644
--- a/Src/DSInternals.DataStore/DirectoryAgent.DataProtection.cs
+++ b/Src/DSInternals.DataStore/DirectoryAgent.DataProtection.cs
@@ -10,6 +10,9 @@
public partial class DirectoryAgent : IDisposable
{
#region Data Protection API (DPAPI)
+ ///
+ /// GetDPAPIBackupKeys implementation.
+ ///
public IEnumerable GetDPAPIBackupKeys(byte[] bootKey)
{
Validator.AssertNotNull(bootKey, "bootKey");
@@ -35,6 +38,9 @@ public IEnumerable GetDPAPIBackupKeys(byte[] bootKey)
#endregion Data Protection API (DPAPI)
#region DPAPI NG / Group Key Distribution Service
+ ///
+ /// GetGroupManagedServiceAccounts implementation.
+ ///
public IEnumerable GetGroupManagedServiceAccounts(DateTime effectiveTime)
{
// Support for gMSAs has been added in Windows Server 2012
diff --git a/Src/DSInternals.DataStore/DirectoryAgent.PasswordManagement.cs b/Src/DSInternals.DataStore/DirectoryAgent.PasswordManagement.cs
index 8d67337..3c043b7 100644
--- a/Src/DSInternals.DataStore/DirectoryAgent.PasswordManagement.cs
+++ b/Src/DSInternals.DataStore/DirectoryAgent.PasswordManagement.cs
@@ -14,6 +14,9 @@
public partial class DirectoryAgent : IDisposable
{
#region SetAccountPassword
+ ///
+ /// SetAccountPassword implementation.
+ ///
public bool SetAccountPassword(DistinguishedName dn, SecureString newPassword, byte[] bootKey, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -23,6 +26,9 @@ public bool SetAccountPassword(DistinguishedName dn, SecureString newPassword, b
}
}
+ ///
+ /// SetAccountPassword implementation.
+ ///
public bool SetAccountPassword(SecurityIdentifier objectSid, SecureString newPassword, byte[] bootKey, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -32,6 +38,9 @@ public bool SetAccountPassword(SecurityIdentifier objectSid, SecureString newPas
}
}
+ ///
+ /// SetAccountPassword implementation.
+ ///
public bool SetAccountPassword(string samAccountName, SecureString newPassword, byte[] bootKey, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -41,6 +50,9 @@ public bool SetAccountPassword(string samAccountName, SecureString newPassword,
}
}
+ ///
+ /// SetAccountPassword implementation.
+ ///
public bool SetAccountPassword(Guid objectGuid, SecureString newPassword, byte[] bootKey, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -84,24 +96,36 @@ protected bool SetAccountPassword(DatastoreObject targetObject, object targetObj
#endregion SetAccountPassword
#region SetAccountPasswordHash
+ ///
+ /// SetAccountPasswordHash implementation.
+ ///
public bool SetAccountPasswordHash(DistinguishedName dn, byte[] newNtHash, SupplementalCredentials newSupplementalCredentials, byte[] bootKey, bool skipMetaUpdate)
{
var obj = this.FindObject(dn);
return this.SetAccountPasswordHash(obj, dn, newNtHash, newSupplementalCredentials, bootKey, skipMetaUpdate);
}
+ ///
+ /// SetAccountPasswordHash implementation.
+ ///
public bool SetAccountPasswordHash(SecurityIdentifier objectSid, byte[] newNtHash, SupplementalCredentials newSupplementalCredentials, byte[] bootKey, bool skipMetaUpdate)
{
var obj = this.FindObject(objectSid);
return this.SetAccountPasswordHash(obj, objectSid, newNtHash, newSupplementalCredentials, bootKey, skipMetaUpdate);
}
+ ///
+ /// SetAccountPasswordHash implementation.
+ ///
public bool SetAccountPasswordHash(string samAccountName, byte[] newNtHash, SupplementalCredentials newSupplementalCredentials, byte[] bootKey, bool skipMetaUpdate)
{
var obj = this.FindObject(samAccountName);
return this.SetAccountPasswordHash(obj, samAccountName, newNtHash, newSupplementalCredentials, bootKey, skipMetaUpdate);
}
+ ///
+ /// SetAccountPasswordHash implementation.
+ ///
public bool SetAccountPasswordHash(Guid objectGuid, byte[] newNtHash, SupplementalCredentials newSupplementalCredentials, byte[] bootKey, bool skipMetaUpdate)
{
var obj = this.FindObject(objectGuid);
@@ -287,6 +311,9 @@ public bool CheckBootKey(byte[] bootKey)
}
}
+ ///
+ /// GetSecretDecryptor implementation.
+ ///
public DirectorySecretDecryptor GetSecretDecryptor(byte[] bootKey = null)
{
if (bootKey == null && !this.context.DomainController.IsADAM)
diff --git a/Src/DSInternals.DataStore/DirectoryAgent.cs b/Src/DSInternals.DataStore/DirectoryAgent.cs
index 9ac67b1..845fce1 100644
--- a/Src/DSInternals.DataStore/DirectoryAgent.cs
+++ b/Src/DSInternals.DataStore/DirectoryAgent.cs
@@ -13,10 +13,16 @@
public partial class DirectoryAgent : IDisposable
{
// 2^30
+ ///
+ /// The 30.
+ ///
public const int RidMax = 1 << 30;
// TODO: SidCompatibilityVersion?
// TODO: Add Rid range checks
+ ///
+ /// The 1.
+ ///
public const int RidMin = 1;
private DirectoryContext context;
@@ -30,6 +36,9 @@ public DirectoryAgent(DirectoryContext context, bool ownsContext = false)
this.dataTableCursor = context.OpenDataTable();
}
+ ///
+ /// SetDomainControllerEpoch implementation.
+ ///
public void SetDomainControllerEpoch(int epoch)
{
using (var transaction = this.context.BeginTransaction())
@@ -39,6 +48,9 @@ public void SetDomainControllerEpoch(int epoch)
}
}
+ ///
+ /// SetDomainControllerUsn implementation.
+ ///
public void SetDomainControllerUsn(long highestCommittedUsn)
{
using (var transaction = this.context.BeginTransaction())
@@ -48,6 +60,9 @@ public void SetDomainControllerUsn(long highestCommittedUsn)
}
}
+ ///
+ /// SetDomainControllerBackupExpiration implementation.
+ ///
public void SetDomainControllerBackupExpiration(DateTime expirationTime)
{
using (var transaction = this.context.BeginTransaction())
@@ -57,6 +72,9 @@ public void SetDomainControllerBackupExpiration(DateTime expirationTime)
}
}
+ ///
+ /// GetAccounts implementation.
+ ///
public IEnumerable GetAccounts(byte[] bootKey, AccountPropertySets propertySets = AccountPropertySets.All)
{
DNTag? domainNC = this.context.DomainController.DomainNamingContextDNT;
@@ -95,6 +113,9 @@ public IEnumerable GetAccounts(byte[] bootKey, AccountPropertySets pr
}
}
+ ///
+ /// GetAccount implementation.
+ ///
public DSAccount GetAccount(DistinguishedName dn, byte[] bootKey, AccountPropertySets propertySets = AccountPropertySets.All)
{
// This throws exception if the DN does not get resolved to DNT:
@@ -118,6 +139,9 @@ public DSAccount GetAccount(DistinguishedName dn, byte[] bootKey, AccountPropert
}
}
+ ///
+ /// GetAccount implementation.
+ ///
public DSAccount GetAccount(SecurityIdentifier objectSid, byte[] bootKey, AccountPropertySets propertySets = AccountPropertySets.All)
{
if (objectSid == null)
@@ -151,6 +175,9 @@ public DSAccount GetAccount(SecurityIdentifier objectSid, byte[] bootKey, Accoun
}
}
+ ///
+ /// GetAccount implementation.
+ ///
public DSAccount GetAccount(string samAccountName, byte[] bootKey, AccountPropertySets propertySets = AccountPropertySets.All)
{
if (samAccountName == null)
@@ -188,6 +215,9 @@ public DSAccount GetAccount(string samAccountName, byte[] bootKey, AccountProper
throw new DirectoryObjectNotFoundException(samAccountName);
}
+ ///
+ /// GetAccount implementation.
+ ///
public DSAccount GetAccount(Guid objectGuid, byte[] bootKey, AccountPropertySets propertySets = AccountPropertySets.All)
{
DNTag domainNC = this.context.DomainController.DomainNamingContextDNT ??
@@ -229,6 +259,9 @@ protected DSAccount GetAccount(DatastoreObject foundObject, object objectIdentif
return account;
}
+ ///
+ /// GetTrusts implementation.
+ ///
public IEnumerable GetTrusts(byte[]? bootKey)
{
var pek = this.GetSecretDecryptor(bootKey);
@@ -251,6 +284,9 @@ public IEnumerable GetTrusts(byte[]? bootKey)
}
}
+ ///
+ /// FindObjectsByCategory implementation.
+ ///
public IEnumerable FindObjectsByCategory(DNTag objectCategory, bool includeReadOnly = false, bool includeDeleted = false, bool includePhantoms = false)
{
using (var cursor = this.context.OpenDataTable())
@@ -287,6 +323,9 @@ public IEnumerable FindObjectsByCategory(DNTag objectCategory,
}
}
+ ///
+ /// AddSidHistory implementation.
+ ///
public bool AddSidHistory(DistinguishedName dn, SecurityIdentifier[] sidHistory, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -296,6 +335,9 @@ public bool AddSidHistory(DistinguishedName dn, SecurityIdentifier[] sidHistory,
}
}
+ ///
+ /// AddSidHistory implementation.
+ ///
public bool AddSidHistory(string samAccountName, SecurityIdentifier[] sidHistory, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -306,6 +348,9 @@ public bool AddSidHistory(string samAccountName, SecurityIdentifier[] sidHistory
}
}
+ ///
+ /// AddSidHistory implementation.
+ ///
public bool AddSidHistory(SecurityIdentifier objectSid, SecurityIdentifier[] sidHistory, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -315,6 +360,9 @@ public bool AddSidHistory(SecurityIdentifier objectSid, SecurityIdentifier[] sid
}
}
+ ///
+ /// AddSidHistory implementation.
+ ///
public bool AddSidHistory(Guid objectGuid, SecurityIdentifier[] sidHistory, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -324,6 +372,9 @@ public bool AddSidHistory(Guid objectGuid, SecurityIdentifier[] sidHistory, bool
}
}
+ ///
+ /// Dispose implementation.
+ ///
public void Dispose()
{
this.Dispose(true);
@@ -384,6 +435,9 @@ public DatastoreObject FindObject(DistinguishedName dn)
return this.FindObject(dnTag);
}
+ ///
+ /// FindObject implementation.
+ ///
public DatastoreObject FindObject(DNTag dnTag)
{
string dntIndex = DirectorySchema.DistinguishedNameTagIndex;
@@ -426,6 +480,9 @@ protected DatastoreObject FindObject(string attributeName, Guid attributeValue)
}
}
+ ///
+ /// RemoveObject implementation.
+ ///
public void RemoveObject(Guid objectGuid)
{
lock (this.dataTableCursor)
@@ -435,6 +492,9 @@ public void RemoveObject(Guid objectGuid)
}
}
+ ///
+ /// RemoveObject implementation.
+ ///
public void RemoveObject(DistinguishedName dn)
{
lock (this.dataTableCursor)
@@ -444,26 +504,41 @@ public void RemoveObject(DistinguishedName dn)
}
}
+ ///
+ /// SetAccountStatus implementation.
+ ///
public bool SetAccountStatus(DistinguishedName dn, bool enabled, bool skipMetaUpdate)
{
return this.SetAccountControl(dn, enabled, null, null, null, null, null, skipMetaUpdate);
}
+ ///
+ /// SetAccountStatus implementation.
+ ///
public bool SetAccountStatus(string samAccountName, bool enabled, bool skipMetaUpdate)
{
return this.SetAccountControl(samAccountName, enabled, null, null, null, null, null, skipMetaUpdate);
}
+ ///
+ /// SetAccountStatus implementation.
+ ///
public bool SetAccountStatus(SecurityIdentifier objectSid, bool enabled, bool skipMetaUpdate)
{
return this.SetAccountControl(objectSid, enabled, null, null, null, null, null, skipMetaUpdate);
}
+ ///
+ /// SetAccountStatus implementation.
+ ///
public bool SetAccountStatus(Guid objectGuid, bool enabled, bool skipMetaUpdate)
{
return this.SetAccountControl(objectGuid, enabled, null, null, null, null, null, skipMetaUpdate);
}
+ ///
+ /// SetAccountControl implementation.
+ ///
public bool SetAccountControl(DistinguishedName dn, bool? enabled, bool? cannotChangePassword, bool? passwordNeverExpires, bool? smartcardLogonRequired, bool? useDESKeyOnly, bool? homedirRequired, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -473,6 +548,9 @@ public bool SetAccountControl(DistinguishedName dn, bool? enabled, bool? cannotC
}
}
+ ///
+ /// SetAccountControl implementation.
+ ///
public bool SetAccountControl(string samAccountName, bool? enabled, bool? cannotChangePassword, bool? passwordNeverExpires, bool? smartcardLogonRequired, bool? useDESKeyOnly, bool? homedirRequired, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -482,6 +560,9 @@ public bool SetAccountControl(string samAccountName, bool? enabled, bool? cannot
}
}
+ ///
+ /// SetAccountControl implementation.
+ ///
public bool SetAccountControl(SecurityIdentifier objectSid, bool? enabled, bool? cannotChangePassword, bool? passwordNeverExpires, bool? smartcardLogonRequired, bool? useDESKeyOnly, bool? homedirRequired, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -491,6 +572,9 @@ public bool SetAccountControl(SecurityIdentifier objectSid, bool? enabled, bool?
}
}
+ ///
+ /// SetAccountControl implementation.
+ ///
public bool SetAccountControl(Guid objectGuid, bool? enabled, bool? cannotChangePassword, bool? passwordNeverExpires, bool? smartcardLogonRequired, bool? useDESKeyOnly, bool? homedirRequired, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -500,6 +584,9 @@ public bool SetAccountControl(Guid objectGuid, bool? enabled, bool? cannotChange
}
}
+ ///
+ /// UnlockAccount implementation.
+ ///
public bool UnlockAccount(DistinguishedName dn, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -509,6 +596,9 @@ public bool UnlockAccount(DistinguishedName dn, bool skipMetaUpdate)
}
}
+ ///
+ /// UnlockAccount implementation.
+ ///
public bool UnlockAccount(string samAccountName, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -518,6 +608,9 @@ public bool UnlockAccount(string samAccountName, bool skipMetaUpdate)
}
}
+ ///
+ /// UnlockAccount implementation.
+ ///
public bool UnlockAccount(SecurityIdentifier objectSid, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -527,6 +620,9 @@ public bool UnlockAccount(SecurityIdentifier objectSid, bool skipMetaUpdate)
}
}
+ ///
+ /// UnlockAccount implementation.
+ ///
public bool UnlockAccount(Guid objectGuid, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -536,6 +632,9 @@ public bool UnlockAccount(Guid objectGuid, bool skipMetaUpdate)
}
}
+ ///
+ /// SetPrimaryGroupId implementation.
+ ///
public bool SetPrimaryGroupId(DistinguishedName dn, int groupId, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -545,6 +644,9 @@ public bool SetPrimaryGroupId(DistinguishedName dn, int groupId, bool skipMetaUp
}
}
+ ///
+ /// SetPrimaryGroupId implementation.
+ ///
public bool SetPrimaryGroupId(string samAccountName, int groupId, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -554,6 +656,9 @@ public bool SetPrimaryGroupId(string samAccountName, int groupId, bool skipMetaU
}
}
+ ///
+ /// SetPrimaryGroupId implementation.
+ ///
public bool SetPrimaryGroupId(SecurityIdentifier objectSid, int groupId, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
@@ -564,6 +669,9 @@ public bool SetPrimaryGroupId(SecurityIdentifier objectSid, int groupId, bool sk
}
}
+ ///
+ /// SetPrimaryGroupId implementation.
+ ///
public bool SetPrimaryGroupId(Guid objectGuid, int groupId, bool skipMetaUpdate)
{
lock (this.dataTableCursor)
diff --git a/Src/DSInternals.DataStore/DirectoryContext.cs b/Src/DSInternals.DataStore/DirectoryContext.cs
index 8d65454..4955687 100644
--- a/Src/DSInternals.DataStore/DirectoryContext.cs
+++ b/Src/DSInternals.DataStore/DirectoryContext.cs
@@ -7,6 +7,9 @@
using NATIVE_UNICODEINDEX = Windows.Win32.Storage.Jet.JET_UNICODEINDEX;
+ ///
+ /// Represents a DirectoryContext.
+ ///
public class DirectoryContext : IDisposable
{
private const string JetInstanceNameFormat = "DSInternals-{0:D}";
@@ -221,26 +224,41 @@ public SecurityDescriptorRersolver SecurityDescriptorRersolver
private set;
}
+ ///
+ /// OpenDataTable implementation.
+ ///
public Cursor OpenDataTable()
{
return this.database.OpenCursor(ADConstants.DataTableName);
}
+ ///
+ /// OpenLinkTable implementation.
+ ///
public Cursor OpenLinkTable()
{
return this.database.OpenCursor(ADConstants.LinkTableName);
}
+ ///
+ /// OpenSystemTable implementation.
+ ///
public Cursor OpenSystemTable()
{
return this.database.OpenCursor(ADConstants.SystemTableName);
}
+ ///
+ /// BeginTransaction implementation.
+ ///
public IsamTransaction BeginTransaction()
{
return new IsamTransaction(this.session);
}
+ ///
+ /// Dispose implementation.
+ ///
public void Dispose()
{
this.Dispose(true);
diff --git a/Src/DSInternals.DataStore/DirectorySchema.cs b/Src/DSInternals.DataStore/DirectorySchema.cs
index 6240f44..e684f8a 100644
--- a/Src/DSInternals.DataStore/DirectorySchema.cs
+++ b/Src/DSInternals.DataStore/DirectorySchema.cs
@@ -19,17 +19,53 @@ public class DirectorySchema
private const int InitialClassDictionaryCapacity = 500;
private const string AttributeColumnPrefix = "ATT";
private const string AttributeIndexPrefix = "INDEX_";
+ ///
+ /// The DistinguishedNameTagColumn.
+ ///
public const string DistinguishedNameTagColumn = "DNT_col";
+ ///
+ /// The DistinguishedNameTagIndex.
+ ///
public const string DistinguishedNameTagIndex = "DNT_index";
+ ///
+ /// The ParentDistinguishedNameTagColumn.
+ ///
public const string ParentDistinguishedNameTagColumn = "PDNT_col";
+ ///
+ /// The ParentDistinguishedNameTagIndex.
+ ///
public const string ParentDistinguishedNameTagIndex = "PDNT_index";
+ ///
+ /// The NamingContextDistinguishedNameTagColumn.
+ ///
public const string NamingContextDistinguishedNameTagColumn = "NCDNT_col";
+ ///
+ /// The RelativeDistinguishedNameTypeColumn.
+ ///
public const string RelativeDistinguishedNameTypeColumn = "RDNtyp_col";
+ ///
+ /// The ObjectColumn.
+ ///
public const string ObjectColumn = "OBJ_col";
+ ///
+ /// The PartitionedAccountNameIndex.
+ ///
public const string PartitionedAccountNameIndex = "NC_Acc_Type_Name";
+ ///
+ /// The PartitionedAccountSidIndex.
+ ///
public const string PartitionedAccountSidIndex = "NC_Acc_Type_Sid";
+ ///
+ /// The PartitionedGuidIndex.
+ ///
public const string PartitionedGuidIndex = "nc_guid_Index";
+ ///
+ /// The AncestorsColumn.
+ ///
public const string AncestorsColumn = "Ancestors_col";
+ ///
+ /// The AncestorsIndex.
+ ///
public const string AncestorsIndex = "Ancestors_index";
private IDictionary _attributesById;
@@ -98,11 +134,17 @@ private DirectorySchema()
this.PrefixTable = new PrefixTable();
}
+ ///
+ /// FindAllAttributes implementation.
+ ///
public ICollection FindAllAttributes()
{
return _attributesByName.Values;
}
+ ///
+ /// FindAttribute implementation.
+ ///
public AttributeSchema? FindAttribute(string attributeName)
{
Validator.AssertNotNullOrWhiteSpace(attributeName, nameof(attributeName));
@@ -110,6 +152,9 @@ public ICollection FindAllAttributes()
return found ? attribute : null;
}
+ ///
+ /// FindAttribute implementation.
+ ///
public AttributeSchema? FindAttribute(AttributeType attributeId)
{
// Try to find the attribute either by attributeID or msDS-IntId.
@@ -118,35 +163,53 @@ public ICollection FindAllAttributes()
return attributeFound ? attribute : null;
}
+ ///
+ /// FindColumnId implementation.
+ ///
public Columnid? FindColumnId(string attributeName)
{
bool found = _columnsByAttributeName.TryGetValue(attributeName, out Columnid column);
return found ? column : null;
}
+ ///
+ /// FindIndexName implementation.
+ ///
public string? FindIndexName(string attributeName)
{
return this.FindAttribute(attributeName)?.IndexName;
}
+ ///
+ /// FindClass implementation.
+ ///
public ClassType? FindClass(string className)
{
bool found = _classesByName.TryGetValue(className, out ClassType classType);
return found ? classType : null;
}
+ ///
+ /// FindObjectCategory implementation.
+ ///
public DNTag? FindObjectCategory(string className)
{
bool found = _objectCategoriesByName.TryGetValue(className, out DNTag objectCategory);
return found ? objectCategory : null;
}
+ ///
+ /// FindObjectCategory implementation.
+ ///
public DNTag? FindObjectCategory(ClassType governsId)
{
bool found = _objectCategoriesByGovernsId.TryGetValue(governsId, out DNTag objectCategory);
return found ? objectCategory : null;
}
+ ///
+ /// Create implementation.
+ ///
public static DirectorySchema Create(IsamDatabase database)
{
// Create a hardcoded schema with base attribute set.
diff --git a/Src/DSInternals.DataStore/DomainController.cs b/Src/DSInternals.DataStore/DomainController.cs
index 47995c2..5708008 100644
--- a/Src/DSInternals.DataStore/DomainController.cs
+++ b/Src/DSInternals.DataStore/DomainController.cs
@@ -14,9 +14,21 @@
public class DomainController : IDisposable, IDomainController
{
// TODO: Refactor properties and add more of them to the IDomainController interface.
+ ///
+ /// The 1.
+ ///
public const long UsnMinValue = 1;
+ ///
+ /// The UsnMaxValue.
+ ///
public const long UsnMaxValue = long.MaxValue;
+ ///
+ /// The 1.
+ ///
public const long EpochMinValue = 1;
+ ///
+ /// The EpochMaxValue.
+ ///
public const long EpochMaxValue = int.MaxValue;
private const string CrossRefContainerRDN = "CN=Partitions";
private const char DnsNameSeparator = '.';
@@ -549,6 +561,9 @@ protected virtual void Dispose(bool disposing)
}
}
+ ///
+ /// Dispose implementation.
+ ///
public void Dispose()
{
Dispose(true);
@@ -603,6 +618,9 @@ public string OSName
private set;
}
+ ///
+ /// Gets or sets the IsADAM.
+ ///
public bool IsADAM {
get;
private set;
diff --git a/Src/DSInternals.DataStore/Enums/DatabaseState.cs b/Src/DSInternals.DataStore/Enums/DatabaseState.cs
index c42e978..c086518 100644
--- a/Src/DSInternals.DataStore/Enums/DatabaseState.cs
+++ b/Src/DSInternals.DataStore/Enums/DatabaseState.cs
@@ -1,5 +1,8 @@
namespace DSInternals.DataStore
{
+ ///
+ /// Defines values for DatabaseState.
+ ///
public enum DatabaseState
{
///
diff --git a/Src/DSInternals.DataStore/Enums/DomainControllerOptions.cs b/Src/DSInternals.DataStore/Enums/DomainControllerOptions.cs
index 9ca97c0..6411906 100644
--- a/Src/DSInternals.DataStore/Enums/DomainControllerOptions.cs
+++ b/Src/DSInternals.DataStore/Enums/DomainControllerOptions.cs
@@ -3,6 +3,9 @@
namespace DSInternals.DataStore
{
[Flags]
+ ///
+ /// Defines values for DomainControllerOptions.
+ ///
public enum DomainControllerOptions : int
{
None = 0,
diff --git a/Src/DSInternals.DataStore/Exceptions/InvalidDatabaseStateException.cs b/Src/DSInternals.DataStore/Exceptions/InvalidDatabaseStateException.cs
index f97f7a0..8f9e44e 100644
--- a/Src/DSInternals.DataStore/Exceptions/InvalidDatabaseStateException.cs
+++ b/Src/DSInternals.DataStore/Exceptions/InvalidDatabaseStateException.cs
@@ -2,14 +2,23 @@
namespace DSInternals.DataStore
{
+ ///
+ /// Represents a InvalidDatabaseStateException.
+ ///
public class InvalidDatabaseStateException : Exception
{
private const string FilePathDataKey = "FilePath";
+ ///
+ /// this implementation.
+ ///
public InvalidDatabaseStateException(string message, string filePath) : this(message, filePath, null)
{
}
+ ///
+ /// base implementation.
+ ///
public InvalidDatabaseStateException(string message, string filePath, Exception innerException) : base(message, innerException)
{
this.Data[FilePathDataKey] = filePath;
diff --git a/Src/DSInternals.DataStore/Extensions/CursorExtensions.cs b/Src/DSInternals.DataStore/Extensions/CursorExtensions.cs
index 996248f..d7cda59 100644
--- a/Src/DSInternals.DataStore/Extensions/CursorExtensions.cs
+++ b/Src/DSInternals.DataStore/Extensions/CursorExtensions.cs
@@ -15,32 +15,50 @@ public static class CursorExtensions
{
// TODO: Move some of these extensions to DirectoryObject
// TODO: Convert return value to out or template
+ ///
+ /// RetrieveColumnAsSearchFlags implementation.
+ ///
public static AttributeSearchFlags RetrieveColumnAsSearchFlags(this Cursor cursor, Columnid columnId)
{
return (AttributeSearchFlags)cursor.RetrieveColumnAsInt(columnId).GetValueOrDefault(0);
}
+ ///
+ /// RetrieveColumnAsAttributeSyntax implementation.
+ ///
public static AttributeSyntax RetrieveColumnAsAttributeSyntax(this Cursor cursor, Columnid columnId)
{
int? numericValue = cursor.RetrieveColumnAsInt(columnId);
return numericValue.HasValue ? (AttributeSyntax)numericValue.Value : AttributeSyntax.Undefined;
}
+ ///
+ /// RetrieveColumnAsAttributeSystemFlags implementation.
+ ///
public static AttributeSystemFlags RetrieveColumnAsAttributeSystemFlags(this Cursor cursor, Columnid columnId)
{
return (AttributeSystemFlags)cursor.RetrieveColumnAsInt(columnId).GetValueOrDefault(0);
}
+ ///
+ /// RetrieveColumnAsAttributeOmSyntax implementation.
+ ///
public static AttributeOmSyntax RetrieveColumnAsAttributeOmSyntax(this Cursor cursor, Columnid columnId)
{
return (AttributeOmSyntax)cursor.RetrieveColumnAsInt(columnId).GetValueOrDefault(0);
}
+ ///
+ /// RetrieveColumnAsFunctionalLevel implementation.
+ ///
public static FunctionalLevel RetrieveColumnAsFunctionalLevel(this Cursor cursor, Columnid columnId)
{
return (FunctionalLevel)cursor.RetrieveColumnAsInt(columnId).GetValueOrDefault(0);
}
+ ///
+ /// RetrieveColumnAsString implementation.
+ ///
public static string RetrieveColumnAsString(this Cursor cursor, Columnid columnId, bool unicode = true)
{
object value = cursor.Record[columnId];
@@ -67,6 +85,9 @@ public static string RetrieveColumnAsString(this Cursor cursor, Columnid columnI
return null;
}
+ ///
+ /// RetrieveColumnAsStringArray implementation.
+ ///
public static string[] RetrieveColumnAsStringArray(this Cursor cursor, Columnid columnId, bool unicode = true)
{
var record = cursor.Record;
@@ -97,6 +118,9 @@ public static string[] RetrieveColumnAsStringArray(this Cursor cursor, Columnid
return result.Count > 0 ? result.ToArray() : null;
}
+ ///
+ /// RetrieveColumnAsSid implementation.
+ ///
public static SecurityIdentifier RetrieveColumnAsSid(this Cursor cursor, Columnid columnId)
{
byte[] binarySid = cursor.RetrieveColumnAsByteArray(columnId);
@@ -110,6 +134,9 @@ public static SecurityIdentifier RetrieveColumnAsSid(this Cursor cursor, Columni
}
}
+ ///
+ /// RetrieveColumnAsByteArray implementation.
+ ///
public static byte[] RetrieveColumnAsByteArray(this Cursor cursor, Columnid columnId)
{
object value = cursor.Record[columnId];
@@ -123,12 +150,18 @@ public static byte[] RetrieveColumnAsByteArray(this Cursor cursor, Columnid colu
}
}
+ ///
+ /// RetrieveColumnAsByteArray implementation.
+ ///
public static byte[] RetrieveColumnAsByteArray(this Cursor cursor, string columnName)
{
var columnId = cursor.TableDefinition.Columns[columnName].Columnid;
return cursor.RetrieveColumnAsByteArray(columnId);
}
+ ///
+ /// RetrieveColumnAsMultiByteArray implementation.
+ ///
public static byte[][] RetrieveColumnAsMultiByteArray(this Cursor cursor, Columnid columnId)
{
var record = cursor.Record;
@@ -145,26 +178,41 @@ public static byte[][] RetrieveColumnAsMultiByteArray(this Cursor cursor, Column
return result.Count > 0 ? result.ToArray() : null;
}
+ ///
+ /// RetrieveColumnAsDNTag implementation.
+ ///
public static DNTag? RetrieveColumnAsDNTag(this Cursor cursor, string columnName)
{
return (DNTag?)cursor.RetrieveColumnAsInt(columnName);
}
+ ///
+ /// RetrieveColumnAsDNTag implementation.
+ ///
public static DNTag? RetrieveColumnAsDNTag(this Cursor cursor, Columnid columnId)
{
return (DNTag?)cursor.RetrieveColumnAsInt(columnId);
}
+ ///
+ /// RetrieveColumnAsAttributeType implementation.
+ ///
public static AttributeType? RetrieveColumnAsAttributeType(this Cursor cursor, Columnid columnId)
{
return (AttributeType?)unchecked((uint?)cursor.RetrieveColumnAsInt(columnId));
}
+ ///
+ /// RetrieveColumnAsObjectCategory implementation.
+ ///
public static ClassType? RetrieveColumnAsObjectCategory(this Cursor cursor, Columnid columnId)
{
return (ClassType?)unchecked((uint?)cursor.RetrieveColumnAsInt(columnId));
}
+ ///
+ /// RetrieveColumnAsInt implementation.
+ ///
public static int? RetrieveColumnAsInt(this Cursor cursor, Columnid columnId)
{
object value = cursor.Record[columnId];
@@ -178,12 +226,18 @@ public static byte[][] RetrieveColumnAsMultiByteArray(this Cursor cursor, Column
}
}
+ ///
+ /// RetrieveColumnAsInt implementation.
+ ///
public static int? RetrieveColumnAsInt(this Cursor cursor, string columnName)
{
var columnId = cursor.TableDefinition.Columns[columnName].Columnid;
return cursor.RetrieveColumnAsInt(columnId);
}
+ ///
+ /// RetrieveColumnAsUInt implementation.
+ ///
public static uint? RetrieveColumnAsUInt(this Cursor cursor, Columnid columnId)
{
object value = cursor.Record[columnId];
@@ -197,6 +251,9 @@ public static byte[][] RetrieveColumnAsMultiByteArray(this Cursor cursor, Column
}
}
+ ///
+ /// RetrieveColumnAsUInt implementation.
+ ///
public static uint? RetrieveColumnAsUInt(this Cursor cursor, string columnName)
{
var columnId = cursor.TableDefinition.Columns[columnName].Columnid;
@@ -204,6 +261,9 @@ public static byte[][] RetrieveColumnAsMultiByteArray(this Cursor cursor, Column
}
+ ///
+ /// RetrieveColumnAsLong implementation.
+ ///
public static long? RetrieveColumnAsLong(this Cursor cursor, Columnid columnId)
{
object value = cursor.Record[columnId];
@@ -217,12 +277,18 @@ public static byte[][] RetrieveColumnAsMultiByteArray(this Cursor cursor, Column
}
}
+ ///
+ /// RetrieveColumnAsLong implementation.
+ ///
public static long? RetrieveColumnAsLong(this Cursor cursor, string columnName)
{
var columnId = cursor.TableDefinition.Columns[columnName].Columnid;
return cursor.RetrieveColumnAsLong(columnId);
}
+ ///
+ /// RetrieveColumnAsBoolean implementation.
+ ///
public static bool RetrieveColumnAsBoolean(this Cursor cursor, Columnid columnId)
{
object value = cursor.Record[columnId];
@@ -236,6 +302,9 @@ public static bool RetrieveColumnAsBoolean(this Cursor cursor, Columnid columnId
}
}
+ ///
+ /// RetrieveColumnAsGuid implementation.
+ ///
public static Guid? RetrieveColumnAsGuid(this Cursor cursor, Columnid columnId)
{
object value = cursor.Record[columnId];
@@ -249,6 +318,9 @@ public static bool RetrieveColumnAsBoolean(this Cursor cursor, Columnid columnId
}
}
+ ///
+ /// RetrieveColumnAsTimestamp implementation.
+ ///
public static DateTime? RetrieveColumnAsTimestamp(this Cursor cursor, Columnid columnId, bool asGeneralizedTime)
{
long? timestamp = cursor.RetrieveColumnAsLong(columnId);
@@ -262,12 +334,18 @@ public static bool RetrieveColumnAsBoolean(this Cursor cursor, Columnid columnId
}
}
+ ///
+ /// RetrieveColumnAsTimestamp implementation.
+ ///
public static DateTime? RetrieveColumnAsTimestamp(this Cursor cursor, string columnName, bool asGeneralizedTime)
{
var columnId = cursor.TableDefinition.Columns[columnName].Columnid;
return cursor.RetrieveColumnAsTimestamp(columnId, asGeneralizedTime);
}
+ ///
+ /// RetrieveColumnAsDomainControllerOptions implementation.
+ ///
public static DomainControllerOptions RetrieveColumnAsDomainControllerOptions(this Cursor cursor, Columnid columnId)
{
int? numeric = cursor.RetrieveColumnAsInt(columnId);
@@ -281,12 +359,18 @@ public static DomainControllerOptions RetrieveColumnAsDomainControllerOptions(th
}
}
+ ///
+ /// ClearMultiValue implementation.
+ ///
public static bool ClearMultiValue(this Cursor cursor, Columnid column)
{
// TODO: implement ClearMultiValue
throw new NotImplementedException();
}
+ ///
+ /// AddMultiValue implementation.
+ ///
public static bool AddMultiValue(this Cursor cursor, Columnid columnId, SecurityIdentifier[] valuesToAdd)
{
//NOTE: Must be in transaction and record must be in editing state.
@@ -389,34 +473,52 @@ public static bool SetValue(this Cursor cursor, Columnid columnId, T newValue
return hasChanged;
}
+ ///
+ /// SetValue implementation.
+ ///
public static bool SetValue(this Cursor cursor, string columnName, byte[] newValue)
{
var columnId = cursor.TableDefinition.Columns[columnName].Columnid;
return cursor.SetValue(columnId, newValue);
}
+ ///
+ /// SetValue implementation.
+ ///
public static bool SetValue(this Cursor cursor, Columnid columnId, byte[] newValue)
{
return cursor.SetValue(columnId, newValue, HashEqualityComparer.GetInstance());
}
+ ///
+ /// SetValue implementation.
+ ///
public static bool SetValue(this Cursor cursor, string columnName, string newValue)
{
var columnId = cursor.TableDefinition.Columns[columnName].Columnid;
return cursor.SetValue(columnId, newValue);
}
+ ///
+ /// SetValue implementation.
+ ///
public static bool SetValue(this Cursor cursor, Columnid columnId, string newValue)
{
return cursor.SetValue(columnId, newValue, StringComparer.InvariantCulture);
}
+ ///
+ /// SetValue implementation.
+ ///
public static bool SetValue(this Cursor cursor, string columnName, DateTime? newValue, bool asGeneralizedTime)
{
var columnId = cursor.TableDefinition.Columns[columnName].Columnid;
return cursor.SetValue(columnId, newValue, asGeneralizedTime);
}
+ ///
+ /// SetValue implementation.
+ ///
public static bool SetValue(this Cursor cursor, Columnid columnId, DateTime? newValue, bool asGeneralizedTime)
{
long? newTimeStamp = null;
@@ -431,6 +533,9 @@ public static bool SetValue(this Cursor cursor, Columnid columnId, DateTime? new
return cursor.SetValue(columnId, newTimeStamp);
}
+ ///
+ /// GotoParentObject implementation.
+ ///
public static bool GotoParentObject(this Cursor dataTableCursor, DirectorySchema schema)
{
// TODO: Check if we are really dealing with the datatable.
@@ -444,6 +549,9 @@ public static bool GotoParentObject(this Cursor dataTableCursor, DirectorySchema
return dataTableCursor.GotoKey(Key.Compose(parentDNTag));
}
+ ///
+ /// FindChildren implementation.
+ ///
public static void FindChildren(this Cursor dataTableCursor, DirectorySchema schema)
{
// TODO: Check if we are really dealing with the datatable.
@@ -457,6 +565,9 @@ public static void FindChildren(this Cursor dataTableCursor, DirectorySchema sch
dataTableCursor.FindRecords(MatchCriteria.EqualTo, Key.ComposeWildcard(dnTag));
}
+ ///
+ /// MoveToFirst implementation.
+ ///
public static bool MoveToFirst(this Cursor cursor)
{
cursor.MoveBeforeFirst();
@@ -464,6 +575,9 @@ public static bool MoveToFirst(this Cursor cursor)
}
[Obsolete]
+ ///
+ /// SaveLocation implementation.
+ ///
public static Location SaveLocation(this Cursor cursor)
{
Location location;
@@ -480,6 +594,9 @@ public static Location SaveLocation(this Cursor cursor)
}
[Obsolete]
+ ///
+ /// RestoreLocation implementation.
+ ///
public static void RestoreLocation(this Cursor cursor, Location location)
{
if (location != null)
diff --git a/Src/DSInternals.DataStore/Extensions/IsamInstanceExtensions.cs b/Src/DSInternals.DataStore/Extensions/IsamInstanceExtensions.cs
index b18bf26..232879a 100644
--- a/Src/DSInternals.DataStore/Extensions/IsamInstanceExtensions.cs
+++ b/Src/DSInternals.DataStore/Extensions/IsamInstanceExtensions.cs
@@ -14,6 +14,9 @@ namespace DSInternals.DataStore
{
public static class IsamInstanceExtensions
{
+ ///
+ /// GetIsamSystemParametersExt implementation.
+ ///
public static IsamSystemParametersExt GetIsamSystemParametersExt(this IsamInstance managedInstance)
{
if (managedInstance == null)
diff --git a/Src/DSInternals.DataStore/Interfaces/IDomainController.cs b/Src/DSInternals.DataStore/Interfaces/IDomainController.cs
index 2d6d7c6..8919d74 100644
--- a/Src/DSInternals.DataStore/Interfaces/IDomainController.cs
+++ b/Src/DSInternals.DataStore/Interfaces/IDomainController.cs
@@ -4,6 +4,9 @@
using System;
using System.Security.Principal;
+ ///
+ /// Defines the contract for IDomainController.
+ ///
public interface IDomainController
{
DateTime? BackupExpiration { get; }
diff --git a/Src/DSInternals.DataStore/LinkResolver.cs b/Src/DSInternals.DataStore/LinkResolver.cs
index a166c4b..db52154 100644
--- a/Src/DSInternals.DataStore/LinkResolver.cs
+++ b/Src/DSInternals.DataStore/LinkResolver.cs
@@ -7,6 +7,9 @@
using System.Collections.Generic;
using System.Linq;
+ ///
+ /// Represents a LinkResolver.
+ ///
public class LinkResolver
{
// Column names:
@@ -54,6 +57,9 @@ public LinkResolver(IsamDatabase database, DirectorySchema schema)
_linkIndex = contains2008Index ? LinkIndex2008 : LinkIndex2003;
}
+ ///
+ /// GetLinkedDNTag implementation.
+ ///
public DNTag? GetLinkedDNTag(DNTag dnTag, string attributeName)
{
// Ignore the data and any additional links
@@ -61,12 +67,18 @@ public LinkResolver(IsamDatabase database, DirectorySchema schema)
return backlink > DNTag.NotAnObject ? backlink : null;
}
+ ///
+ /// GetLinkedDNTags implementation.
+ ///
public IEnumerable GetLinkedDNTags(DNTag dnTag, string attributeName)
{
// Ignore the data
return this.GetLinkedValues(dnTag, attributeName).Select(link => link.Backlink);
}
+ ///
+ /// GetLinkedValues implementation.
+ ///
public IEnumerable<(DNTag Backlink, byte[] LinkData)> GetLinkedValues(DNTag dnTag, string attributeName)
{
AttributeSchema? attribute = this._schema.FindAttribute(attributeName);
diff --git a/Src/DSInternals.DataStore/SecurityDescriptorResolver.cs b/Src/DSInternals.DataStore/SecurityDescriptorResolver.cs
index 0a2fc2c..4a539f1 100644
--- a/Src/DSInternals.DataStore/SecurityDescriptorResolver.cs
+++ b/Src/DSInternals.DataStore/SecurityDescriptorResolver.cs
@@ -9,6 +9,9 @@
using SecurityDescriptorIdentifier = long;
+ ///
+ /// Represents a SecurityDescriptorRersolver.
+ ///
public class SecurityDescriptorRersolver : IDisposable
{
private const string SecurityDescriptorIdentifierColumn = "sd_id";
@@ -44,6 +47,9 @@ public SecurityDescriptorRersolver(IsamDatabase database)
_hashFunction = MD5.Create();
}
+ ///
+ /// GetDescriptor implementation.
+ ///
public RawSecurityDescriptor? GetDescriptor(SecurityDescriptorIdentifier id)
{
RawSecurityDescriptor? result = null;
@@ -66,6 +72,9 @@ public SecurityDescriptorRersolver(IsamDatabase database)
return result;
}
+ ///
+ /// FindDescriptor implementation.
+ ///
public IEnumerable FindDescriptor(GenericSecurityDescriptor securityDescriptor)
{
byte[] sdHash = ComputeHash(_hashFunction, securityDescriptor);
@@ -73,6 +82,9 @@ public IEnumerable FindDescriptor(GenericSecurityD
return this.FindDescriptorHash(sdHash);
}
+ ///
+ /// FindDescriptor implementation.
+ ///
public IEnumerable FindDescriptor(string securityDescriptor)
{
byte[] sdHash = ComputeHash(_hashFunction, securityDescriptor);
@@ -80,6 +92,9 @@ public IEnumerable FindDescriptor(string securityD
return this.FindDescriptorHash(sdHash);
}
+ ///
+ /// FindDescriptorHash implementation.
+ ///
public IEnumerable FindDescriptorHash(byte[] sdHash)
{
if (sdHash == null)
@@ -99,6 +114,9 @@ public IEnumerable FindDescriptorHash(byte[] sdHas
}
}
+ ///
+ /// ComputeHash implementation.
+ ///
public static byte[] ComputeHash(GenericSecurityDescriptor securityDescriptor)
{
if (securityDescriptor == null)
@@ -120,6 +138,9 @@ private static byte[] ComputeHash(MD5 hashFunction, GenericSecurityDescriptor se
return hashFunction.ComputeHash(binaryDescriptor);
}
+ ///
+ /// ComputeHash implementation.
+ ///
public static byte[] ComputeHash(string securityDescriptor)
{
if (securityDescriptor == null)
@@ -139,6 +160,9 @@ private static byte[] ComputeHash(MD5 hashFunction, string securityDescriptor)
return hashFunction.ComputeHash(binaryDescriptor);
}
+ ///
+ /// Dispose implementation.
+ ///
public void Dispose()
{
this.Dispose(true);
diff --git a/Src/DSInternals.PowerShell/Commands/ADSI/GetADSIAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/ADSI/GetADSIAccountCommand.cs
index 125f857..bc0bcda 100644
--- a/Src/DSInternals.PowerShell/Commands/ADSI/GetADSIAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/ADSI/GetADSIAccountCommand.cs
@@ -5,6 +5,9 @@
[Cmdlet(VerbsCommon.Get, "ADSIAccount")]
[OutputType(typeof(DSAccount), typeof(DSUser), typeof(DSComputer))]
+ ///
+ /// Represents a GetADSIAccountCommand.
+ ///
public class GetADSIAccountCommand : ADSICommandBase
{
[Parameter(Mandatory = false)]
diff --git a/Src/DSInternals.PowerShell/Commands/AzureAD/GetAzureADUserExCommand.cs b/Src/DSInternals.PowerShell/Commands/AzureAD/GetAzureADUserExCommand.cs
index df20e7f..2595ada 100644
--- a/Src/DSInternals.PowerShell/Commands/AzureAD/GetAzureADUserExCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/AzureAD/GetAzureADUserExCommand.cs
@@ -7,6 +7,9 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsCommon.Get, "AzureADUserEx", DefaultParameterSetName = ParamSetAllUsers)]
[OutputType(typeof(AzureADUser))]
+ ///
+ /// Represents a GetAzureADUserExCommand.
+ ///
public class GetAzureADUserExCommand : AzureADCommandBase
{
private const string ParamSetAllUsers = "Multiple";
diff --git a/Src/DSInternals.PowerShell/Commands/AzureAD/SetAzureADUserExCommand.cs b/Src/DSInternals.PowerShell/Commands/AzureAD/SetAzureADUserExCommand.cs
index 89f261b..947b077 100644
--- a/Src/DSInternals.PowerShell/Commands/AzureAD/SetAzureADUserExCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/AzureAD/SetAzureADUserExCommand.cs
@@ -5,6 +5,9 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsCommon.Set, "AzureADUserEx", DefaultParameterSetName = ParamSetSingleUserUPN)]
[OutputType("None")]
+ ///
+ /// Represents a SetAzureADUserExCommand.
+ ///
public class SetAzureADUserExCommand : AzureADCommandBase
{
[Parameter(Mandatory = true)]
diff --git a/Src/DSInternals.PowerShell/Commands/Base/ADReplCommandBase.cs b/Src/DSInternals.PowerShell/Commands/Base/ADReplCommandBase.cs
index d45a50a..025058e 100644
--- a/Src/DSInternals.PowerShell/Commands/Base/ADReplCommandBase.cs
+++ b/Src/DSInternals.PowerShell/Commands/Base/ADReplCommandBase.cs
@@ -58,6 +58,9 @@ protected override void BeginProcessing()
#endregion Cmdlet Overrides
+ ///
+ /// Dispose implementation.
+ ///
public void Dispose()
{
this.Dispose(true);
diff --git a/Src/DSInternals.PowerShell/Commands/Base/ADSICommandBase.cs b/Src/DSInternals.PowerShell/Commands/Base/ADSICommandBase.cs
index 66a9c19..08ecc52 100644
--- a/Src/DSInternals.PowerShell/Commands/Base/ADSICommandBase.cs
+++ b/Src/DSInternals.PowerShell/Commands/Base/ADSICommandBase.cs
@@ -49,6 +49,9 @@ protected override void BeginProcessing()
#endregion Cmdlet Overrides
+ ///
+ /// Dispose implementation.
+ ///
public void Dispose()
{
this.Dispose(true);
diff --git a/Src/DSInternals.PowerShell/Commands/Base/AzureADCommandBase.cs b/Src/DSInternals.PowerShell/Commands/Base/AzureADCommandBase.cs
index 6337493..80a1d58 100644
--- a/Src/DSInternals.PowerShell/Commands/Base/AzureADCommandBase.cs
+++ b/Src/DSInternals.PowerShell/Commands/Base/AzureADCommandBase.cs
@@ -54,6 +54,9 @@ protected override void BeginProcessing()
}
#region IDisposable Support
+ ///
+ /// Dispose implementation.
+ ///
public virtual void Dispose()
{
if(Client != null)
diff --git a/Src/DSInternals.PowerShell/Commands/Base/LsaPolicyCommandBase.cs b/Src/DSInternals.PowerShell/Commands/Base/LsaPolicyCommandBase.cs
index 78ffee9..6cfae72 100644
--- a/Src/DSInternals.PowerShell/Commands/Base/LsaPolicyCommandBase.cs
+++ b/Src/DSInternals.PowerShell/Commands/Base/LsaPolicyCommandBase.cs
@@ -41,6 +41,9 @@ protected abstract LsaPolicyAccessMask RequiredAccessMask
get;
}
+ ///
+ /// Dispose implementation.
+ ///
public void Dispose()
{
this.Dispose(true);
diff --git a/Src/DSInternals.PowerShell/Commands/Base/SamCommandBase.cs b/Src/DSInternals.PowerShell/Commands/Base/SamCommandBase.cs
index c6d7f43..9177de0 100644
--- a/Src/DSInternals.PowerShell/Commands/Base/SamCommandBase.cs
+++ b/Src/DSInternals.PowerShell/Commands/Base/SamCommandBase.cs
@@ -82,6 +82,9 @@ protected override void BeginProcessing()
}
#endregion Cmdlet Overrides
+ ///
+ /// Dispose implementation.
+ ///
public void Dispose()
{
this.Dispose(true);
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/AddADDBSidHistoryCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/AddADDBSidHistoryCommand.cs
index ae2ecea..c6c9a03 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/AddADDBSidHistoryCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/AddADDBSidHistoryCommand.cs
@@ -7,6 +7,9 @@
[Cmdlet(VerbsCommon.Add, "ADDBSidHistory")]
[OutputType("None")]
+ ///
+ /// Represents a AddADDBSidHistoryCommand.
+ ///
public class AddADDBSidHistoryCommand : ADDBModifyPrincipalCommandBase
{
[Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true)]
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/DisableADDBAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/DisableADDBAccountCommand.cs
index 2314029..ca628b8 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/DisableADDBAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/DisableADDBAccountCommand.cs
@@ -5,6 +5,9 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsLifecycle.Disable, "ADDBAccount")]
[OutputType("None")]
+ ///
+ /// Represents a DisableADDBAccountCommand.
+ ///
public class DisableADDBAccountCommand : ADDBAccountStatusCommandBase
{
protected override bool Enabled
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/EnableADDBAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/EnableADDBAccountCommand.cs
index c82a47f..3663489 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/EnableADDBAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/EnableADDBAccountCommand.cs
@@ -4,6 +4,9 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsLifecycle.Enable, "ADDBAccount")]
[OutputType("None")]
+ ///
+ /// Represents a EnableADDBAccountCommand.
+ ///
public class EnableADDBAccountCommand : ADDBAccountStatusCommandBase
{
protected override bool Enabled
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBAccountCommand.cs
index d617254..54126f4 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBAccountCommand.cs
@@ -7,6 +7,9 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsCommon.Get, "ADDBAccount")]
[OutputType(typeof(DSAccount), typeof(DSUser), typeof(DSComputer))]
+ ///
+ /// Represents a GetADDBAccountCommand.
+ ///
public class GetADDBAccountCommand : ADDBPrincipalCommandBase
{
#region Constants
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBackupKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBackupKeyCommand.cs
index 3deddf5..c9d7627 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBackupKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBackupKeyCommand.cs
@@ -8,6 +8,9 @@
[Cmdlet(VerbsCommon.Get, "ADDBBackupKey")]
[OutputType(typeof(DSInternals.Common.Data.DPAPIBackupKey))]
+ ///
+ /// Represents a GetADDBBackupKeyCommand.
+ ///
public class GetADDBBackupKeyCommand : ADDBCommandBase
{
[Parameter(Mandatory = true)]
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBitlockerRecoveryInformationCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBitlockerRecoveryInformationCommand.cs
index 987c57a..3e2180f 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBitlockerRecoveryInformationCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBitlockerRecoveryInformationCommand.cs
@@ -7,6 +7,9 @@
[Cmdlet(VerbsCommon.Get, "ADDBBitLockerRecoveryInformation")]
[OutputType(typeof(DSInternals.Common.Data.BitLockerRecoveryInformation))]
+ ///
+ /// Represents a GetADDBBitLockerRecoveryInformationCommand.
+ ///
public class GetADDBBitLockerRecoveryInformationCommand : ADDBObjectCommandBase
{
#region Parameters
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsResourceRecordCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsResourceRecordCommand.cs
index 7ecdbec..9cf9087 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsResourceRecordCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsResourceRecordCommand.cs
@@ -5,6 +5,9 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsCommon.Get, "ADDBDnsResourceRecord")]
[OutputType(typeof(DSInternals.Common.Data.DnsResourceRecord))]
+ ///
+ /// Represents a GetADDBDnsResourceRecordCommand.
+ ///
public class GetADDBDnsResourceRecordCommand : ADDBCommandBase
{
[Parameter(Mandatory = false)]
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsZoneCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsZoneCommand.cs
index 0630981..9745ec3 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsZoneCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsZoneCommand.cs
@@ -5,6 +5,9 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsCommon.Get, "ADDBDnsZone")]
[OutputType(typeof(string))]
+ ///
+ /// Represents a GetADDBDnsZoneCommand.
+ ///
public class GetADDBDnsZoneCommand : ADDBCommandBase
{
protected override void BeginProcessing()
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDomainControllerCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDomainControllerCommand.cs
index 51b6ffd..125f709 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDomainControllerCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDomainControllerCommand.cs
@@ -4,6 +4,9 @@
[Cmdlet(VerbsCommon.Get, "ADDBDomainController")]
[OutputType(typeof(DSInternals.PowerShell.DomainController))]
+ ///
+ /// Represents a GetADDBDomainControllerCommand.
+ ///
public class GetADDBDomainControllerCommand : ADDBCommandBase
{
protected override void BeginProcessing()
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBIndexCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBIndexCommand.cs
index df02f6f..7e07c4e 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBIndexCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBIndexCommand.cs
@@ -6,6 +6,9 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Get, "ADDBIndex")]
// TODO: output type
[OutputType("None")]
+ ///
+ /// Represents a GetADDBIndexCommand.
+ ///
public class GetADDBIndexCommand : ADDBCommandBase
{
protected override void ProcessRecord()
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBKdsRootKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBKdsRootKeyCommand.cs
index e8be7c3..9aadbc2 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBKdsRootKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBKdsRootKeyCommand.cs
@@ -8,6 +8,9 @@
[Cmdlet(VerbsCommon.Get, "ADDBKdsRootKey", DefaultParameterSetName = GetADDBKdsRootKeyCommand.AllKeysParameterSet)]
[OutputType(typeof(DSInternals.Common.Data.KdsRootKey))]
+ ///
+ /// Represents a GetADDBKdsRootKeyCommand.
+ ///
public class GetADDBKdsRootKeyCommand : ADDBCommandBase
{
private const string AllKeysParameterSet = "All";
@@ -15,9 +18,15 @@ public class GetADDBKdsRootKeyCommand : ADDBCommandBase
[Parameter(Mandatory = true, ParameterSetName = ByGuidParameterSet, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, Position = 1)]
[Alias("Id", "KeyId")]
+ ///
+ /// Gets or sets the RootKeyId.
+ ///
public Guid RootKeyId { get; set; }
[Parameter(Mandatory = false, ParameterSetName = AllKeysParameterSet)]
+ ///
+ /// Gets or sets the All.
+ ///
public SwitchParameter All { get; set; }
protected override void ProcessRecord()
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBSchemaAttributeCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBSchemaAttributeCommand.cs
index cf03682..4db50cb 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBSchemaAttributeCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBSchemaAttributeCommand.cs
@@ -6,6 +6,9 @@
[Cmdlet(VerbsCommon.Get, "ADDBSchemaAttribute")]
[OutputType(typeof(AttributeSchema))]
+ ///
+ /// Represents a GetADDBSchemaAttributeCommand.
+ ///
public class GetADDBSchemaAttributeCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBServiceAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBServiceAccountCommand.cs
index 421269d..14b6dc5 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBServiceAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBServiceAccountCommand.cs
@@ -6,10 +6,16 @@
[Cmdlet(VerbsCommon.Get, "ADDBServiceAccount")]
[OutputType(typeof(DSInternals.Common.Data.GroupManagedServiceAccount))]
+ ///
+ /// Represents a GetADDBServiceAccountCommand.
+ ///
public class GetADDBServiceAccountCommand : ADDBCommandBase
{
[Parameter(Mandatory = false)]
[Alias("EffectiveDate", "PasswordLastSet", "PwdLastSet", "Date", "Time", "d", "t")]
+ ///
+ /// Gets or sets the EffectiveTime.
+ ///
public DateTime? EffectiveTime { get; set; }
// TODO: Implement gMSA filtering
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBTrust.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBTrust.cs
index 7859f9c..02559e7 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBTrust.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBTrust.cs
@@ -7,6 +7,9 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsCommon.Get, "ADDBTrust")]
[OutputType(typeof(TrustedDomain))]
+ ///
+ /// Represents a GetADDBTrustCommand.
+ ///
public class GetADDBTrustCommand : ADDBCommandBase
{
[Parameter(Mandatory = false)]
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetBootKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetBootKeyCommand.cs
index bf3a6b3..11d585c 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetBootKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetBootKeyCommand.cs
@@ -9,6 +9,9 @@
[Cmdlet(VerbsCommon.Get, "BootKey")]
[OutputType(typeof(string))]
+ ///
+ /// Represents a GetBootKeyCommand.
+ ///
public class GetBootKeyCommand : PSCmdletEx
{
private const string OnlineParameterSet = "Online";
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/NewADDBRestoreFromMediaScriptCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/NewADDBRestoreFromMediaScriptCommand.cs
index d3c42f8..de529bb 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/NewADDBRestoreFromMediaScriptCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/NewADDBRestoreFromMediaScriptCommand.cs
@@ -13,6 +13,9 @@
[Cmdlet(VerbsCommon.New, "ADDBRestoreFromMediaScript")]
[OutputType(typeof(string))]
+ ///
+ /// Represents a NewADDBRestoreFromMediaScriptCommand.
+ ///
public class NewADDBRestoreFromMediaScriptCommand : ADDBCommandBase
{
private const int DSRMPasswordMinLength = 7;
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/RemoveADDBObjectCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/RemoveADDBObjectCommand.cs
index bad11d6..6b332e3 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/RemoveADDBObjectCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/RemoveADDBObjectCommand.cs
@@ -11,6 +11,9 @@
SupportsShouldProcess = true
)]
[OutputType("None")]
+ ///
+ /// Represents a RemoveADDBObjectCommand.
+ ///
public class RemoveADDBObjectCommand : ADDBObjectCommandBase
{
[Parameter]
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/RestoreADDBAttributeCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/RestoreADDBAttributeCommand.cs
index 55e8a8d..1798935 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/RestoreADDBAttributeCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/RestoreADDBAttributeCommand.cs
@@ -5,6 +5,9 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsData.Restore, "ADDBAttribute")]
[OutputType("None")]
+ ///
+ /// Represents a RestoreADDBAttributeCommand.
+ ///
public class RestoreADDBAttributeCommand : ADDBObjectCommandBase
{
public string[] Property
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountControlCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountControlCommand.cs
index 9ff85a2..2a87393 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountControlCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountControlCommand.cs
@@ -9,42 +9,63 @@ namespace DSInternals.PowerShell.Commands
///
[Cmdlet(VerbsCommon.Set, "ADDBAccountControl")]
[OutputType("None")]
+ ///
+ /// Represents a SetADDBAccountControlCommand.
+ ///
public class SetADDBAccountControlCommand : ADDBModifyPrincipalCommandBase
{
///
/// Indicates whether an account is enabled.
///
[Parameter(Mandatory = false)]
+ ///
+ /// Gets or sets the Enabled.
+ ///
public bool? Enabled { get; set; }
///
/// Indicates whether an account can change its password.
///
[Parameter(Mandatory = false)]
+ ///
+ /// Gets or sets the CannotChangePassword.
+ ///
public bool? CannotChangePassword { get; set; }
///
/// Indicates whether the password of an account can expire.
///
[Parameter(Mandatory = false)]
+ ///
+ /// Gets or sets the PasswordNeverExpires.
+ ///
public bool? PasswordNeverExpires { get; set; }
///
/// Indicates whether a smart card is required to logon.
///
[Parameter(Mandatory = false)]
+ ///
+ /// Gets or sets the SmartcardLogonRequired.
+ ///
public bool? SmartcardLogonRequired { get; set; }
///
/// Indicates whether the account is restricted to use only Data Encryption Standard encryption types for keys.
///
[Parameter(Mandatory = false)]
+ ///
+ /// Gets or sets the UseDESKeyOnly.
+ ///
public bool? UseDESKeyOnly { get; set; }
///
/// Indicates whether a home directory is required for the account.
///
[Parameter(Mandatory = false)]
+ ///
+ /// Gets or sets the HomedirRequired.
+ ///
public bool? HomedirRequired { get; set; }
protected override void BeginProcessing()
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordCommand.cs
index 4641aee..6f2e6f5 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordCommand.cs
@@ -8,6 +8,9 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsCommon.Set, "ADDBAccountPassword")]
[OutputType("None")]
+ ///
+ /// Represents a SetADDBAccountPasswordCommand.
+ ///
public class SetADDBAccountPasswordCommand : ADDBModifyPrincipalCommandBase
{
[Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true)]
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordHashCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordHashCommand.cs
index 90932e0..70d040c 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordHashCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordHashCommand.cs
@@ -7,6 +7,9 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsCommon.Set, "ADDBAccountPasswordHash")]
[OutputType("None")]
+ ///
+ /// Represents a SetADDBAccountPasswordHashCommand.
+ ///
public class SetADDBAccountPasswordHashCommand : ADDBModifyPrincipalCommandBase
{
[Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true)]
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBBootKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBBootKeyCommand.cs
index 24492c7..1782a54 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBBootKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBBootKeyCommand.cs
@@ -6,6 +6,9 @@
[Cmdlet(VerbsCommon.Set, "ADDBBootKey")]
[OutputType("None")]
+ ///
+ /// Represents a SetADDBBootKeyCommand.
+ ///
public class SetADDBBootKeyCommand : ADDBCommandBase
{
[Parameter(Mandatory = true)]
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBDomainControllerCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBDomainControllerCommand.cs
index 92a9903..accc5b8 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBDomainControllerCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBDomainControllerCommand.cs
@@ -6,6 +6,9 @@
[Cmdlet(VerbsCommon.Set, "ADDBDomainController", ConfirmImpact = ConfirmImpact.High)]
[OutputType("None")]
+ ///
+ /// Represents a SetADDBDomainControllerCommand.
+ ///
public class SetADDBDomainControllerCommand : ADDBCommandBase
{
private const string EpochParameterSet = "Epoch";
@@ -15,15 +18,24 @@ public class SetADDBDomainControllerCommand : ADDBCommandBase
[ValidateRange(DSInternals.DataStore.DomainController.UsnMinValue, DSInternals.DataStore.DomainController.UsnMaxValue)]
[Parameter(Mandatory = true, ParameterSetName = UsnParameterSet)]
[Alias("USN")]
+ ///
+ /// The HighestCommittedUsn.
+ ///
public long HighestCommittedUsn;
[ValidateRange(DSInternals.DataStore.DomainController.EpochMinValue, DSInternals.DataStore.DomainController.EpochMaxValue)]
[Parameter(Mandatory = true, ParameterSetName = EpochParameterSet)]
[Alias("DSAEpoch")]
+ ///
+ /// The Epoch.
+ ///
public int Epoch;
[Parameter(Mandatory = true, ParameterSetName = ExpirationParameterSet)]
[Alias("Expiration", "Expire")]
+ ///
+ /// The BackupExpiration.
+ ///
public DateTime BackupExpiration;
[Parameter]
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBPrimaryGroupCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBPrimaryGroupCommand.cs
index cb2758c..875e2dc 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBPrimaryGroupCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBPrimaryGroupCommand.cs
@@ -7,6 +7,9 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsCommon.Set, "ADDBPrimaryGroup")]
[OutputType("None")]
+ ///
+ /// Represents a SetADDBPrimaryGroupCommand.
+ ///
public class SetADDBPrimaryGroupCommand : ADDBModifyPrincipalCommandBase
{
[Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true)]
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/UnlockADDBAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/UnlockADDBAccountCommand.cs
index cdd7956..0ec5648 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/UnlockADDBAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/UnlockADDBAccountCommand.cs
@@ -6,6 +6,9 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsCommon.Unlock, "ADDBAccount")]
[OutputType("None")]
+ ///
+ /// Represents a UnlockADDBAccountCommand.
+ ///
public class UnlockADDBAccountCommand : ADDBModifyPrincipalCommandBase
{
protected override void ProcessRecord()
diff --git a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromGPPrefPasswordCommand.cs b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromGPPrefPasswordCommand.cs
index 8bfa1f2..80028a9 100644
--- a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromGPPrefPasswordCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromGPPrefPasswordCommand.cs
@@ -6,6 +6,9 @@
[Cmdlet(VerbsData.ConvertFrom, "GPPrefPassword")]
[OutputType(new Type[] { typeof(string) })]
+ ///
+ /// Represents a ConvertFromGPPrefPasswordCommand.
+ ///
public class ConvertFromGPPrefPasswordCommand : PSCmdlet
{
#region Parameters
diff --git a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromUnicodePasswordCommand.cs b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromUnicodePasswordCommand.cs
index 72d80b3..e7ec569 100644
--- a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromUnicodePasswordCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromUnicodePasswordCommand.cs
@@ -7,6 +7,9 @@
[Cmdlet(VerbsData.ConvertFrom, "UnicodePassword")]
[OutputType(typeof(string))]
+ ///
+ /// Represents a ConvertFromUnicodePasswordCommand.
+ ///
public class ConvertFromUnicodePasswordCommand : PSCmdlet
{
// TODO: Extract this routine as a class in DSInternals.Cryptography?
diff --git a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToGPPrefPasswordCommand.cs b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToGPPrefPasswordCommand.cs
index d92cce5..78855cd 100644
--- a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToGPPrefPasswordCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToGPPrefPasswordCommand.cs
@@ -7,6 +7,9 @@
[Cmdlet(VerbsData.ConvertTo, "GPPrefPassword")]
[OutputType(new Type[] { typeof(string) })]
+ ///
+ /// Represents a ConvertToGPPrefPasswordCommand.
+ ///
public class ConvertToGPPrefPasswordCommand : PSCmdlet
{
#region Parameters
diff --git a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToUnicodePasswordCommand.cs b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToUnicodePasswordCommand.cs
index 904ed48..749d19f 100644
--- a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToUnicodePasswordCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToUnicodePasswordCommand.cs
@@ -7,6 +7,9 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsData.ConvertTo, "UnicodePassword")]
[OutputType(new Type[] { typeof(String) })]
+ ///
+ /// Represents a ConvertToUnicodePasswordCommand.
+ ///
public class ConvertToUnicodePasswordCommand : PSCmdlet
{
private const string passwordSuffix = "AdministratorPassword";
diff --git a/Src/DSInternals.PowerShell/Commands/Encryption/SaveDPAPIBlobCommand.cs b/Src/DSInternals.PowerShell/Commands/Encryption/SaveDPAPIBlobCommand.cs
index e0fd59b..a8eaabe 100644
--- a/Src/DSInternals.PowerShell/Commands/Encryption/SaveDPAPIBlobCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Encryption/SaveDPAPIBlobCommand.cs
@@ -8,6 +8,9 @@
[Cmdlet(VerbsData.Save, "DPAPIBlob")]
// TODO: Export None as resource.
[OutputType("None")]
+ ///
+ /// Represents a SaveDPAPIBlobCmdlet.
+ ///
public class SaveDPAPIBlobCmdlet : PSCmdletEx
{
private const string VerboseMessageFormat = "Creating DPAPI file {0}.";
diff --git a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToKerberosKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToKerberosKeyCommand.cs
index 28f1e17..f882048 100644
--- a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToKerberosKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToKerberosKeyCommand.cs
@@ -8,6 +8,9 @@
[Cmdlet(VerbsData.ConvertTo, "KerberosKey")]
[OutputType(new Type[] { typeof(KerberosKeyDataNew) })]
+ ///
+ /// Represents a ConvertToKerberosKeyCommand.
+ ///
public class ConvertToKerberosKeyCommand : PSCmdlet
{
#region Parameters
diff --git a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToLMHashCommand.cs b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToLMHashCommand.cs
index cae5b43..8c65b47 100644
--- a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToLMHashCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToLMHashCommand.cs
@@ -10,6 +10,9 @@
[Cmdlet(VerbsData.ConvertTo, "LMHash")]
[OutputType(new Type[] { typeof(string) })]
+ ///
+ /// Represents a ConvertToLMHashCommand.
+ ///
public class ConvertToLMHashCommand : PSCmdlet
{
#region Parameters
diff --git a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToNTHashCommand.cs b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToNTHashCommand.cs
index c3f6284..1f77cd1 100644
--- a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToNTHashCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToNTHashCommand.cs
@@ -10,6 +10,9 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsData.ConvertTo, "NTHash")]
[OutputType(new Type[] { typeof(string) })]
+ ///
+ /// Represents a ConvertToNTHashCommand.
+ ///
public class ConvertToNTHashCommand : PSCmdlet
{
#region Parameters
diff --git a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToOrgIdHashCommand.cs b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToOrgIdHashCommand.cs
index 3167820..75c87b6 100644
--- a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToOrgIdHashCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToOrgIdHashCommand.cs
@@ -8,6 +8,9 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsData.ConvertTo, "OrgIdHash", DefaultParameterSetName = "FromHash")]
[OutputType(new Type[] { typeof(string) })]
+ ///
+ /// Represents a ConvertToOrgIdHashCommand.
+ ///
public class ConvertToOrgIdHashCommand : PSCmdlet
{
#region Parameters
diff --git a/Src/DSInternals.PowerShell/Commands/Hash/SetSamAccountPasswordHashCommand.cs b/Src/DSInternals.PowerShell/Commands/Hash/SetSamAccountPasswordHashCommand.cs
index 5e5db51..67f99c1 100644
--- a/Src/DSInternals.PowerShell/Commands/Hash/SetSamAccountPasswordHashCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Hash/SetSamAccountPasswordHashCommand.cs
@@ -10,6 +10,9 @@
[Cmdlet(VerbsCommon.Set, "SamAccountPasswordHash")]
[OutputType("None")]
+ ///
+ /// Represents a SetSamAccountPasswordHashCommand.
+ ///
public class SetSamAccountPasswordHashCommand : SamCommandBase
{
private const string ParameterSetBySid = "BySid";
diff --git a/Src/DSInternals.PowerShell/Commands/LSA/GetLsaBackupKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/LSA/GetLsaBackupKeyCommand.cs
index e1e7f7e..0d7f351 100644
--- a/Src/DSInternals.PowerShell/Commands/LSA/GetLsaBackupKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/LSA/GetLsaBackupKeyCommand.cs
@@ -6,6 +6,9 @@
[Cmdlet(VerbsCommon.Get, "LsaBackupKey")]
[OutputType(typeof(DPAPIBackupKey))]
+ ///
+ /// Represents a GetLsaBackupKeyCommand.
+ ///
public class GetLsaBackupKeyCommand : LsaPolicyCommandBase
{
#region Cmdlet Overrides
diff --git a/Src/DSInternals.PowerShell/Commands/LSA/GetLsaPolicyInformationCommand.cs b/Src/DSInternals.PowerShell/Commands/LSA/GetLsaPolicyInformationCommand.cs
index 14c1da4..6c53151 100644
--- a/Src/DSInternals.PowerShell/Commands/LSA/GetLsaPolicyInformationCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/LSA/GetLsaPolicyInformationCommand.cs
@@ -5,6 +5,9 @@
[Cmdlet(VerbsCommon.Get, "LsaPolicyInformation")]
[OutputType(typeof(LsaPolicyInformation))]
+ ///
+ /// Represents a GetLsaPolicyInformationCommand.
+ ///
public class GetLsaPolicyInformationCommand : LsaPolicyCommandBase
{
#region Cmdlet Overrides
diff --git a/Src/DSInternals.PowerShell/Commands/LSA/GetSamPasswordPolicyCommand.cs b/Src/DSInternals.PowerShell/Commands/LSA/GetSamPasswordPolicyCommand.cs
index 209078e..189a8c1 100644
--- a/Src/DSInternals.PowerShell/Commands/LSA/GetSamPasswordPolicyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/LSA/GetSamPasswordPolicyCommand.cs
@@ -6,6 +6,9 @@
[Cmdlet(VerbsCommon.Get, "SamPasswordPolicy")]
[OutputType(typeof(SamDomainPasswordInformation))]
+ ///
+ /// Represents a GetSamPasswordPolicyCommand.
+ ///
public class GetSamPasswordPolicyCommand : SamCommandBase
{
#region Parameters
diff --git a/Src/DSInternals.PowerShell/Commands/LSA/SetLsaPolicyInformationCommand.cs b/Src/DSInternals.PowerShell/Commands/LSA/SetLsaPolicyInformationCommand.cs
index 50e1355..de12c47 100644
--- a/Src/DSInternals.PowerShell/Commands/LSA/SetLsaPolicyInformationCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/LSA/SetLsaPolicyInformationCommand.cs
@@ -8,6 +8,9 @@
[Cmdlet(VerbsCommon.Set, "LsaPolicyInformation")]
[OutputType("None")]
+ ///
+ /// Represents a SetLsaPolicyInformationCommand.
+ ///
public class SetLsaPolicyInformationCommand : LsaPolicyCommandBase
{
#region Parameters
diff --git a/Src/DSInternals.PowerShell/Commands/Misc/ConvertFromADManagedPasswordBlobCommand.cs b/Src/DSInternals.PowerShell/Commands/Misc/ConvertFromADManagedPasswordBlobCommand.cs
index abdc2f7..7234848 100644
--- a/Src/DSInternals.PowerShell/Commands/Misc/ConvertFromADManagedPasswordBlobCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Misc/ConvertFromADManagedPasswordBlobCommand.cs
@@ -6,6 +6,9 @@
[Cmdlet(VerbsData.ConvertFrom, "ADManagedPasswordBlob")]
[OutputType(typeof(ManagedPassword))]
+ ///
+ /// Represents a ConvertFromADManagedPasswordBlobCommand.
+ ///
public class ConvertFromADManagedPasswordBlobCommand : PSCmdlet
{
#region Parameters
diff --git a/Src/DSInternals.PowerShell/Commands/Misc/ConvertToHexCommand.cs b/Src/DSInternals.PowerShell/Commands/Misc/ConvertToHexCommand.cs
index 1a7efc6..39bdb17 100644
--- a/Src/DSInternals.PowerShell/Commands/Misc/ConvertToHexCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Misc/ConvertToHexCommand.cs
@@ -6,6 +6,9 @@
[Cmdlet(VerbsData.ConvertTo, "Hex")]
[OutputType(new Type[] { typeof(string) })]
+ ///
+ /// Represents a ConvertToHexCommand.
+ ///
public class ConvertToHexCommand : PSCmdlet
{
#region Parameters
diff --git a/Src/DSInternals.PowerShell/Commands/Misc/GetADKeyCredential.cs b/Src/DSInternals.PowerShell/Commands/Misc/GetADKeyCredential.cs
index 7575e78..6f5321c 100644
--- a/Src/DSInternals.PowerShell/Commands/Misc/GetADKeyCredential.cs
+++ b/Src/DSInternals.PowerShell/Commands/Misc/GetADKeyCredential.cs
@@ -7,6 +7,9 @@
[Cmdlet(VerbsCommon.Get, "ADKeyCredential", DefaultParameterSetName = ParamSetFromUserCertificate)]
[OutputType(new Type[] { typeof(KeyCredential) })]
+ ///
+ /// Represents a GetADKeyCredentialCommand.
+ ///
public class GetADKeyCredentialCommand : PSCmdlet
{
#region Parameters
diff --git a/Src/DSInternals.PowerShell/Commands/Misc/TestPasswordQualityCommand.cs b/Src/DSInternals.PowerShell/Commands/Misc/TestPasswordQualityCommand.cs
index 45ff93d..2c8c044 100644
--- a/Src/DSInternals.PowerShell/Commands/Misc/TestPasswordQualityCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Misc/TestPasswordQualityCommand.cs
@@ -12,6 +12,9 @@
[Cmdlet(VerbsDiagnostic.Test, "PasswordQuality", DefaultParameterSetName = ParamSetSingleSortedFile)]
[OutputType(new Type[] { typeof(PasswordQualityTestResult) })]
+ ///
+ /// Represents a TestPasswordQualityCommand.
+ ///
public class TestPasswordQualityCommand : PSCmdletEx, IDisposable
{
#region Constants
@@ -550,6 +553,9 @@ protected virtual void Dispose(bool disposing)
}
// This code added to correctly implement the disposable pattern.
+ ///
+ /// Dispose implementation.
+ ///
public void Dispose()
{
// Do not change this code. Put cleanup code in Dispose(bool disposing) above.
diff --git a/Src/DSInternals.PowerShell/Commands/Replication/AddADReplNgcKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Replication/AddADReplNgcKeyCommand.cs
index 6ace400..f4c3bf8 100644
--- a/Src/DSInternals.PowerShell/Commands/Replication/AddADReplNgcKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Replication/AddADReplNgcKeyCommand.cs
@@ -5,6 +5,9 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsCommon.Add, "ADReplNgcKey")]
[OutputType("None")]
+ ///
+ /// Represents a AddADReplNgcKeyCommand.
+ ///
public class AddADReplNgcKeyCommand : ADReplPrincipalCommandBase
{
// TODO: Change to X509Certificate2
diff --git a/Src/DSInternals.PowerShell/Commands/Replication/GetADReplAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/Replication/GetADReplAccountCommand.cs
index 814ec33..5b946f6 100644
--- a/Src/DSInternals.PowerShell/Commands/Replication/GetADReplAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Replication/GetADReplAccountCommand.cs
@@ -9,6 +9,9 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsCommon.Get, "ADReplAccount")]
[OutputType(typeof(DSAccount), typeof(DSUser), typeof(DSComputer))]
+ ///
+ /// Represents a GetADReplAccountCommand.
+ ///
public class GetADReplAccountCommand : ADReplPrincipalCommandBase
{
#region Constants
diff --git a/Src/DSInternals.PowerShell/Commands/Replication/GetADReplBackupKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Replication/GetADReplBackupKeyCommand.cs
index 3582a32..fd46a69 100644
--- a/Src/DSInternals.PowerShell/Commands/Replication/GetADReplBackupKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Replication/GetADReplBackupKeyCommand.cs
@@ -5,6 +5,9 @@
[Cmdlet(VerbsCommon.Get, "ADReplBackupKey")]
[OutputType(typeof(DPAPIBackupKey))]
+ ///
+ /// Represents a GetADReplBackupKeyCommand.
+ ///
public class GetADReplBackupKeyCommand : ADReplCommandBase
{
[Parameter(Mandatory = false)]
diff --git a/Src/DSInternals.PowerShell/Commands/Replication/GetADReplKdsRootKey.cs b/Src/DSInternals.PowerShell/Commands/Replication/GetADReplKdsRootKey.cs
index 594c1d4..c002295 100644
--- a/Src/DSInternals.PowerShell/Commands/Replication/GetADReplKdsRootKey.cs
+++ b/Src/DSInternals.PowerShell/Commands/Replication/GetADReplKdsRootKey.cs
@@ -6,10 +6,16 @@ namespace DSInternals.PowerShell.Commands
{
[Cmdlet(VerbsCommon.Get, "ADReplKdsRootKey")]
[OutputType(typeof(KdsRootKey))]
+ ///
+ /// Represents a GetADReplKdsRootKeyCommand.
+ ///
public class GetADReplKdsRootKeyCommand : ADReplCommandBase
{
[Parameter(Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, Position = 0)]
[Alias("Id", "KeyId")]
+ ///
+ /// Gets or sets the RootKeyId.
+ ///
public Guid RootKeyId { get; set; }
protected override void ProcessRecord()
diff --git a/Src/DSInternals.PowerShell/Types/AccountExportFormat.cs b/Src/DSInternals.PowerShell/Types/AccountExportFormat.cs
index 31a7c89..3d9a825 100644
--- a/Src/DSInternals.PowerShell/Types/AccountExportFormat.cs
+++ b/Src/DSInternals.PowerShell/Types/AccountExportFormat.cs
@@ -2,6 +2,9 @@
namespace DSInternals.PowerShell
{
+ ///
+ /// Defines values for AccountExportFormat.
+ ///
public enum AccountExportFormat : byte
{
JohnNT = 1,
@@ -23,6 +26,9 @@ public enum AccountExportFormat : byte
public static class AccountExportFormatExtensions
{
+ ///
+ /// GetRequiredProperties implementation.
+ ///
public static AccountPropertySets GetRequiredProperties(this AccountExportFormat? format)
{
switch (format)
diff --git a/Src/DSInternals.PowerShell/Types/DomainController.cs b/Src/DSInternals.PowerShell/Types/DomainController.cs
index ddbcb74..35e88c7 100644
--- a/Src/DSInternals.PowerShell/Types/DomainController.cs
+++ b/Src/DSInternals.PowerShell/Types/DomainController.cs
@@ -5,6 +5,9 @@
using System.Security.Principal;
using DSInternals.Common.Data;
// Transport object
+ ///
+ /// Represents a DomainController.
+ ///
public class DomainController : IDomainController
{
public string Name
diff --git a/Src/DSInternals.PowerShell/Types/LsaPolicyInformation.cs b/Src/DSInternals.PowerShell/Types/LsaPolicyInformation.cs
index f79dee5..8d5ba55 100644
--- a/Src/DSInternals.PowerShell/Types/LsaPolicyInformation.cs
+++ b/Src/DSInternals.PowerShell/Types/LsaPolicyInformation.cs
@@ -5,9 +5,21 @@
public sealed class LsaPolicyInformation
{
+ ///
+ /// Gets or sets the DnsDomain.
+ ///
public LsaDnsDomainInformation DnsDomain { get; set; }
+ ///
+ /// Gets or sets the Domain.
+ ///
public LsaDomainInformation Domain { get; set; }
+ ///
+ /// Gets or sets the LocalDomain.
+ ///
public LsaDomainInformation LocalDomain { get; set; }
+ ///
+ /// Gets or sets the MachineAccountSid.
+ ///
public SecurityIdentifier MachineAccountSid { get; set; }
}
}
\ No newline at end of file
diff --git a/Src/DSInternals.PowerShell/Types/SupplementalCredentialsDeserializer.cs b/Src/DSInternals.PowerShell/Types/SupplementalCredentialsDeserializer.cs
index 77df649..61a363f 100644
--- a/Src/DSInternals.PowerShell/Types/SupplementalCredentialsDeserializer.cs
+++ b/Src/DSInternals.PowerShell/Types/SupplementalCredentialsDeserializer.cs
@@ -4,11 +4,17 @@
namespace DSInternals.PowerShell
{
+ ///
+ /// Represents a SupplementalCredentialsDeserializer.
+ ///
public class SupplementalCredentialsDeserializer : PSTypeConverter
{
private const string SerializationPropertyName = "Base64Blob";
private static readonly string SerializationTypeName = "Deserialized." + typeof(SupplementalCredentials).FullName;
+ ///
+ /// CanConvertFrom implementation.
+ ///
public override bool CanConvertFrom(object sourceValue, Type destinationType)
{
bool sourceTypeIsValid = sourceValue is PSObject &&
@@ -17,11 +23,17 @@ public override bool CanConvertFrom(object sourceValue, Type destinationType)
return destinationTypeIsValid && sourceTypeIsValid;
}
+ ///
+ /// CanConvertTo implementation.
+ ///
public override bool CanConvertTo(object sourceValue, Type destinationType)
{
throw new NotImplementedException();
}
+ ///
+ /// ConvertFrom implementation.
+ ///
public override object ConvertFrom(object sourceValue, Type destinationType, IFormatProvider formatProvider, bool ignoreCase)
{
// We expect that CanConvertFrom has already been called and returned true.
@@ -31,6 +43,9 @@ public override object ConvertFrom(object sourceValue, Type destinationType, IFo
return new SupplementalCredentials(binaryCredentials);
}
+ ///
+ /// ConvertTo implementation.
+ ///
public override object ConvertTo(object sourceValue, Type destinationType, IFormatProvider formatProvider, bool ignoreCase)
{
throw new NotImplementedException();
diff --git a/Src/DSInternals.PowerShell/Utils/AcceptHexStringAttribute.cs b/Src/DSInternals.PowerShell/Utils/AcceptHexStringAttribute.cs
index b98ab46..605d36a 100644
--- a/Src/DSInternals.PowerShell/Utils/AcceptHexStringAttribute.cs
+++ b/Src/DSInternals.PowerShell/Utils/AcceptHexStringAttribute.cs
@@ -11,6 +11,9 @@ namespace DSInternals.PowerShell
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)]
public sealed class AcceptHexStringAttribute : ArgumentTransformationAttribute
{
+ ///
+ /// Transform implementation.
+ ///
public override object Transform(EngineIntrinsics engineIntrinsics, object inputData)
{
string hexString;
diff --git a/Src/DSInternals.Replication.Model/DSName.cs b/Src/DSInternals.Replication.Model/DSName.cs
index db0eb2e..91eb71c 100644
--- a/Src/DSInternals.Replication.Model/DSName.cs
+++ b/Src/DSInternals.Replication.Model/DSName.cs
@@ -42,6 +42,9 @@ private DSName()
// This constructor is only used by the static parse method.
}
+ ///
+ /// Parse implementation.
+ ///
public static DSName Parse(ReadOnlySpan buffer)
{
if (buffer.Length < DSNameHeaderSize)
diff --git a/Src/DSInternals.Replication.Model/ReplicaAttribute.cs b/Src/DSInternals.Replication.Model/ReplicaAttribute.cs
index 452c455..8a00eb1 100644
--- a/Src/DSInternals.Replication.Model/ReplicaAttribute.cs
+++ b/Src/DSInternals.Replication.Model/ReplicaAttribute.cs
@@ -1,6 +1,9 @@
using DSInternals.Common.Schema;
namespace DSInternals.Replication.Model
{
+ ///
+ /// Represents a ReplicaAttribute.
+ ///
public class ReplicaAttribute
{
public ReplicaAttribute(AttributeType id, byte[][] values)
diff --git a/Src/DSInternals.Replication.Model/ReplicaAttributeCollection.cs b/Src/DSInternals.Replication.Model/ReplicaAttributeCollection.cs
index ceef5f8..dbd5034 100644
--- a/Src/DSInternals.Replication.Model/ReplicaAttributeCollection.cs
+++ b/Src/DSInternals.Replication.Model/ReplicaAttributeCollection.cs
@@ -5,9 +5,15 @@
namespace DSInternals.Replication.Model
{
+ ///
+ /// Represents a ReplicaAttributeCollection.
+ ///
public class ReplicaAttributeCollection : Dictionary
{
// TODO: Move parent as member.
+ ///
+ /// base implementation.
+ ///
public ReplicaAttributeCollection() : base()
{
}
@@ -16,6 +22,9 @@ public ReplicaAttributeCollection(int numAttributes)
{
}
+ ///
+ /// Add implementation.
+ ///
public void Add(ReplicaAttribute attribute)
{
Validator.AssertNotNull(attribute, "attribute");
diff --git a/Src/DSInternals.Replication.Model/ReplicaObject.cs b/Src/DSInternals.Replication.Model/ReplicaObject.cs
index 2529c86..aa36842 100644
--- a/Src/DSInternals.Replication.Model/ReplicaObject.cs
+++ b/Src/DSInternals.Replication.Model/ReplicaObject.cs
@@ -8,6 +8,9 @@
namespace DSInternals.Replication.Model
{
+ ///
+ /// Represents a ReplicaObject.
+ ///
public class ReplicaObject : DirectoryObject
{
private string distinguishedName;
@@ -59,6 +62,9 @@ public ReplicaAttributeCollection Attributes
private set;
}
+ ///
+ /// LoadLinkedValues implementation.
+ ///
public void LoadLinkedValues(ReplicatedLinkedValueCollection linkedValueCollection)
{
var objectAttributes = linkedValueCollection.Get(this.Guid);
@@ -177,12 +183,18 @@ protected void ReadAttribute(AttributeType attributeId, out bool value)
value = numericValue.HasValue ? numericValue.Value != 0 : false;
}
+ ///
+ /// HasAttribute implementation.
+ ///
public override bool HasAttribute(string name)
{
AttributeType? attributeId = this.Schema.FindAttributeId(name);
return attributeId.HasValue && this.HasAttribute(attributeId.Value);
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out byte[] value)
{
AttributeType? attributeId = this.Schema.FindAttributeId(name);
@@ -197,6 +209,9 @@ public override void ReadAttribute(string name, out byte[] value)
}
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out byte[][] value)
{
AttributeType? attributeId = this.Schema.FindAttributeId(name);
@@ -211,6 +226,9 @@ public override void ReadAttribute(string name, out byte[][] value)
}
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out int? value)
{
AttributeType? attributeId = this.Schema.FindAttributeId(name);
@@ -225,6 +243,9 @@ public override void ReadAttribute(string name, out int? value)
}
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out long? value)
{
AttributeType? attributeId = this.Schema.FindAttributeId(name);
@@ -239,6 +260,9 @@ public override void ReadAttribute(string name, out long? value)
}
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out string? value, bool unicode = true)
{
AttributeType? attributeId = this.Schema.FindAttributeId(name);
@@ -253,6 +277,9 @@ public override void ReadAttribute(string name, out string? value, bool unicode
}
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out string[]? values, bool unicode = true)
{
AttributeType? attributeId = this.Schema.FindAttributeId(name);
@@ -267,6 +294,9 @@ public override void ReadAttribute(string name, out string[]? values, bool unico
}
}
+ ///
+ /// ReadAttribute implementation.
+ ///
public override void ReadAttribute(string name, out DistinguishedName? value)
{
AttributeType? attributeId = this.Schema.FindAttributeId(name);
@@ -281,6 +311,9 @@ public override void ReadAttribute(string name, out DistinguishedName? value)
}
}
+ ///
+ /// ReadLinkedValues implementation.
+ ///
public override void ReadLinkedValues(string attributeName, out byte[][]? values)
{
// The linked values have already been merged with regular attributes using LoadLinkedValues
diff --git a/Src/DSInternals.Replication.Model/ReplicaObjectCollection.cs b/Src/DSInternals.Replication.Model/ReplicaObjectCollection.cs
index 13e8eb7..20de771 100644
--- a/Src/DSInternals.Replication.Model/ReplicaObjectCollection.cs
+++ b/Src/DSInternals.Replication.Model/ReplicaObjectCollection.cs
@@ -2,9 +2,15 @@
namespace DSInternals.Replication.Model
{
+ ///
+ /// Represents a ReplicaObjectCollection.
+ ///
public class ReplicaObjectCollection : List
{
// TODO: Move parent as member.
+ ///
+ /// base implementation.
+ ///
public ReplicaObjectCollection() : base()
{
}
diff --git a/Src/DSInternals.Replication.Model/ReplicatedLinkedValueCollection.cs b/Src/DSInternals.Replication.Model/ReplicatedLinkedValueCollection.cs
index 9fd14ac..ba439f4 100644
--- a/Src/DSInternals.Replication.Model/ReplicatedLinkedValueCollection.cs
+++ b/Src/DSInternals.Replication.Model/ReplicatedLinkedValueCollection.cs
@@ -4,13 +4,22 @@
namespace DSInternals.Replication.Model
{
+ ///
+ /// Represents a ReplicatedLinkedValueCollection.
+ ///
public class ReplicatedLinkedValueCollection : Dictionary>
{
// TODO: Move parent as member.
+ ///
+ /// base implementation.
+ ///
public ReplicatedLinkedValueCollection() : base()
{
}
+ ///
+ /// Add implementation.
+ ///
public void Add(Guid objectId, ReplicaAttribute attribute)
{
if (this.ContainsKey(objectId))
@@ -25,6 +34,9 @@ public void Add(Guid objectId, ReplicaAttribute attribute)
}
}
+ ///
+ /// Get implementation.
+ ///
public IEnumerable Get(Guid objectId)
{
List attributes;
diff --git a/Src/DSInternals.Replication.Model/ReplicationCookie.cs b/Src/DSInternals.Replication.Model/ReplicationCookie.cs
index 232143b..4960cf0 100644
--- a/Src/DSInternals.Replication.Model/ReplicationCookie.cs
+++ b/Src/DSInternals.Replication.Model/ReplicationCookie.cs
@@ -69,6 +69,9 @@ public bool IsInitial
}
}
+ ///
+ /// GetHashCode implementation.
+ ///
public override int GetHashCode()
{
// We simply XOR the hash codes of all members
@@ -79,6 +82,9 @@ public override int GetHashCode()
this.Reserved.GetHashCode();
}
+ ///
+ /// Equals implementation.
+ ///
public override bool Equals(object obj)
{
// If parameter is null return false.
@@ -98,6 +104,9 @@ public override bool Equals(object obj)
return MemberwiseEquals(this, cookie);
}
+ ///
+ /// Equals implementation.
+ ///
public bool Equals(ReplicationCookie cookie)
{
// If parameter is null return false:
diff --git a/Src/DSInternals.Replication.Model/ReplicationCursor.cs b/Src/DSInternals.Replication.Model/ReplicationCursor.cs
index 975d9dc..f003548 100644
--- a/Src/DSInternals.Replication.Model/ReplicationCursor.cs
+++ b/Src/DSInternals.Replication.Model/ReplicationCursor.cs
@@ -36,6 +36,9 @@ public long UpToDatenessUsn
protected set;
}
+ ///
+ /// ToString implementation.
+ ///
public override string ToString()
{
return String.Format("{0}: {1}", this.SourceInvocationId, this.UpToDatenessUsn);
diff --git a/Src/DSInternals.Replication.Model/ReplicationResult.cs b/Src/DSInternals.Replication.Model/ReplicationResult.cs
index 9525e98..31f5c9e 100644
--- a/Src/DSInternals.Replication.Model/ReplicationResult.cs
+++ b/Src/DSInternals.Replication.Model/ReplicationResult.cs
@@ -5,6 +5,9 @@
namespace DSInternals.Replication.Model
{
+ ///
+ /// Represents a ReplicationResult.
+ ///
public class ReplicationResult
{
// TODO: AsReadOnly
diff --git a/Src/DSInternals.Replication/DirectoryReplicationClient.cs b/Src/DSInternals.Replication/DirectoryReplicationClient.cs
index 140255f..6539f96 100644
--- a/Src/DSInternals.Replication/DirectoryReplicationClient.cs
+++ b/Src/DSInternals.Replication/DirectoryReplicationClient.cs
@@ -17,6 +17,9 @@
namespace DSInternals.Replication
{
+ ///
+ /// Represents a DirectoryReplicationClient.
+ ///
public class DirectoryReplicationClient : IDisposable, IKdsRootKeyResolver
{
///
@@ -111,12 +114,18 @@ public DirectoryReplicationClient(string server, RpcProtocol protocol = RpcProto
this._rootKeyResolver = new KdsRootKeyCache(this);
}
+ ///
+ /// GetReplicationCursors implementation.
+ ///
public ReplicationCursor[] GetReplicationCursors(string namingContext)
{
Validator.AssertNotNullOrWhiteSpace(namingContext, nameof(namingContext));
return this._drsConnection.GetReplicationCursors(namingContext);
}
+ ///
+ /// GetAccounts implementation.
+ ///
public IEnumerable GetAccounts(string domainNamingContext, ReplicationProgressHandler progressReporter = null, AccountPropertySets propertySets = AccountPropertySets.All)
{
Validator.AssertNotNullOrWhiteSpace(domainNamingContext, nameof(domainNamingContext));
@@ -124,6 +133,9 @@ public IEnumerable GetAccounts(string domainNamingContext, Replicatio
return GetAccounts(cookie, progressReporter, propertySets);
}
+ ///
+ /// GetAccounts implementation.
+ ///
public IEnumerable GetAccounts(ReplicationCookie initialCookie, ReplicationProgressHandler progressReporter = null, AccountPropertySets propertySets = AccountPropertySets.All)
{
Validator.AssertNotNull(initialCookie, nameof(initialCookie));
@@ -161,6 +173,9 @@ public IEnumerable GetAccounts(ReplicationCookie initialCookie, Repli
} while (result.HasMoreData);
}
+ ///
+ /// GetAccount implementation.
+ ///
public DSAccount GetAccount(Guid objectGuid, AccountPropertySets propertySets = AccountPropertySets.All)
{
var obj = this._drsConnection.ReplicateSingleObject(objectGuid);
@@ -175,6 +190,9 @@ public DSAccount GetAccount(Guid objectGuid, AccountPropertySets propertySets =
return account;
}
+ ///
+ /// GetAccount implementation.
+ ///
public DSAccount GetAccount(string distinguishedName, AccountPropertySets propertySets = AccountPropertySets.All)
{
var obj = this._drsConnection.ReplicateSingleObject(distinguishedName);
@@ -189,18 +207,27 @@ public DSAccount GetAccount(string distinguishedName, AccountPropertySets proper
return account;
}
+ ///
+ /// GetAccount implementation.
+ ///
public DSAccount GetAccount(NTAccount accountName, AccountPropertySets propertySets = AccountPropertySets.All)
{
Guid objectGuid = this._drsConnection.ResolveGuid(accountName);
return this.GetAccount(objectGuid, propertySets);
}
+ ///
+ /// GetAccount implementation.
+ ///
public DSAccount GetAccount(SecurityIdentifier sid, AccountPropertySets propertySets = AccountPropertySets.All)
{
Guid objectGuid = this._drsConnection.ResolveGuid(sid);
return this.GetAccount(objectGuid, propertySets);
}
+ ///
+ /// GetKdsRootKey implementation.
+ ///
public KdsRootKey? GetKdsRootKey(Guid rootKeyId, bool suppressNotFoundException = false)
{
// Derive the full path to the object
@@ -225,6 +252,9 @@ public DSAccount GetAccount(SecurityIdentifier sid, AccountPropertySets property
}
}
+ ///
+ /// GetDPAPIBackupKeys implementation.
+ ///
public IEnumerable GetDPAPIBackupKeys(string domainNamingContext)
{
// TODO: Split this function into RSA and Legacy Part so that exception in one of them does not crash the whole process
@@ -253,24 +283,36 @@ private DPAPIBackupKey GetLSASecret(string distinguishedName)
return new DPAPIBackupKey(secretObj, this.SecretDecryptor);
}
+ ///
+ /// WriteNgcKey implementation.
+ ///
public void WriteNgcKey(Guid objectGuid, byte[] publicKey)
{
string distinguishedName = this._drsConnection.ResolveDistinguishedName(objectGuid);
this.WriteNgcKey(distinguishedName, publicKey);
}
+ ///
+ /// WriteNgcKey implementation.
+ ///
public void WriteNgcKey(NTAccount accountName, byte[] publicKey)
{
string distinguishedName = this._drsConnection.ResolveDistinguishedName(accountName);
this.WriteNgcKey(distinguishedName, publicKey);
}
+ ///
+ /// WriteNgcKey implementation.
+ ///
public void WriteNgcKey(SecurityIdentifier sid, byte[] publicKey)
{
string distinguishedName = this._drsConnection.ResolveDistinguishedName(sid);
this.WriteNgcKey(distinguishedName, publicKey);
}
+ ///
+ /// WriteNgcKey implementation.
+ ///
public void WriteNgcKey(string accountDN, byte[] publicKey)
{
this._drsConnection.WriteNgcKey(accountDN, publicKey);
@@ -311,6 +353,9 @@ private void CreateRpcConnection(string server, RpcProtocol protocol, NetworkCre
this._rpcConnection.AuthenticateAs(spn, rpcCredential, RPC_C_AUTHN_LEVEL.RPC_C_AUTHN_LEVEL_PKT_PRIVACY, RPC_C_AUTHN.RPC_C_AUTHN_GSS_NEGOTIATE);
}
+ ///
+ /// Dispose implementation.
+ ///
public void Dispose()
{
this.Dispose(true);
diff --git a/Src/DSInternals.Replication/NDceRpc.Microsoft/Client.cs b/Src/DSInternals.Replication/NDceRpc.Microsoft/Client.cs
index d6e05d5..bee98d4 100644
--- a/Src/DSInternals.Replication/NDceRpc.Microsoft/Client.cs
+++ b/Src/DSInternals.Replication/NDceRpc.Microsoft/Client.cs
@@ -9,6 +9,9 @@ namespace NDceRpc
/// Provides a connection-based wrapper around the RPC client
///
[System.Diagnostics.DebuggerDisplay("{_handle} @{_binding}")]
+ ///
+ /// Represents a Client.
+ ///
public class Client : IDisposable//TODO: make is serializabl to propagate throug app domains (use only ptr and methods to get all data from ptr)
{
@@ -202,6 +205,9 @@ protected bool Equals(Client other)
return Equals(_handle, other._handle);
}
+ ///
+ /// Equals implementation.
+ ///
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
@@ -210,6 +216,9 @@ public override bool Equals(object obj)
return Equals((Client) obj);
}
+ ///
+ /// GetHashCode implementation.
+ ///
public override int GetHashCode()
{
return (_handle != null ? _handle.GetHashCode() : 0);
diff --git a/Src/DSInternals.Replication/NDceRpc.Microsoft/EndpointBindingInfo.cs b/Src/DSInternals.Replication/NDceRpc.Microsoft/EndpointBindingInfo.cs
index 489eb6e..5056d30 100644
--- a/Src/DSInternals.Replication/NDceRpc.Microsoft/EndpointBindingInfo.cs
+++ b/Src/DSInternals.Replication/NDceRpc.Microsoft/EndpointBindingInfo.cs
@@ -11,10 +11,22 @@ namespace NDceRpc
///
[StructLayout(LayoutKind.Sequential)]
[System.Diagnostics.DebuggerDisplay("{Protseq} {NetworkAddr} {EndPoint}")]
+ ///
+ /// Represents a EndpointBindingInfo structure.
+ ///
public struct EndpointBindingInfo:ICloneable
{
+ ///
+ /// The Protseq.
+ ///
public RpcProtseq Protseq;
+ ///
+ /// The NetworkAddr.
+ ///
public string NetworkAddr;
+ ///
+ /// The EndPoint.
+ ///
public string EndPoint;
public EndpointBindingInfo(RpcProtseq protseq, string networkAddr, string endPoint)
@@ -24,6 +36,9 @@ public EndpointBindingInfo(RpcProtseq protseq, string networkAddr, string endPoi
EndPoint = endPoint;
}
+ ///
+ /// Clone implementation.
+ ///
public object Clone()
{
return new EndpointBindingInfo(Protseq, NetworkAddr, EndPoint);
diff --git a/Src/DSInternals.Replication/NDceRpc.Microsoft/Guard.cs b/Src/DSInternals.Replication/NDceRpc.Microsoft/Guard.cs
index 38e0e27..c940eec 100644
--- a/Src/DSInternals.Replication/NDceRpc.Microsoft/Guard.cs
+++ b/Src/DSInternals.Replication/NDceRpc.Microsoft/Guard.cs
@@ -64,6 +64,9 @@ internal static void Assert(int rawError)
/// Asserts that the argument is set to RPC_STATUS.RPC_S_OK or throws a new exception.
///
[System.Diagnostics.DebuggerNonUserCode]
+ ///
+ /// Assert implementation.
+ ///
public static void Assert(RPC_STATUS errorsCode)
{
if (errorsCode != RPC_STATUS.RPC_S_OK)
diff --git a/Src/DSInternals.Replication/NDceRpc.Microsoft/NativeClient.cs b/Src/DSInternals.Replication/NDceRpc.Microsoft/NativeClient.cs
index 49151b6..639b975 100644
--- a/Src/DSInternals.Replication/NDceRpc.Microsoft/NativeClient.cs
+++ b/Src/DSInternals.Replication/NDceRpc.Microsoft/NativeClient.cs
@@ -5,8 +5,14 @@
namespace NDceRpc.Native
{
+ ///
+ /// Represents a NativeClient.
+ ///
public class NativeClient:Client
{
+ ///
+ /// base implementation.
+ ///
public NativeClient(EndpointBindingInfo info) : base(info)
{
//string szStringBinding = Client.StringBindingCompose(clientInfo, null);
diff --git a/Src/DSInternals.Replication/NDceRpc.Microsoft/NativeMethods.cs b/Src/DSInternals.Replication/NDceRpc.Microsoft/NativeMethods.cs
index 3dabc20..5f139f2 100644
--- a/Src/DSInternals.Replication/NDceRpc.Microsoft/NativeMethods.cs
+++ b/Src/DSInternals.Replication/NDceRpc.Microsoft/NativeMethods.cs
@@ -12,6 +12,9 @@ public static class NativeMethods
/// Creates a string binding handle
///
[DllImport("Rpcrt4.dll", EntryPoint = "RpcStringBindingComposeW", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)]
+ ///
+ /// RpcStringBindingCompose implementation.
+ ///
public static extern RPC_STATUS RpcStringBindingCompose(
String ObjUuid,
String ProtSeq,
@@ -24,12 +27,18 @@ public static extern RPC_STATUS RpcStringBindingCompose(
/// Returns a binding handle from a string representation of a binding handle
///
[DllImport("Rpcrt4.dll", EntryPoint = "RpcBindingFromStringBindingW", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)]
+ ///
+ /// RpcBindingFromStringBinding implementation.
+ ///
public static extern RPC_STATUS RpcBindingFromStringBinding(String bindingString, out IntPtr lpBinding);
///
/// Sets authentication information for a binding handle
///
[DllImport("Rpcrt4.dll", EntryPoint = "RpcBindingSetAuthInfoW", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)]
+ ///
+ /// RpcBindingSetAuthInfo implementation.
+ ///
public static extern RPC_STATUS RpcBindingSetAuthInfo(IntPtr Binding, String ServerPrincName,
RPC_C_AUTHN_LEVEL AuthnLevel, RPC_C_AUTHN AuthnSvc,
[In] ref SEC_WINNT_AUTH_IDENTITY AuthIdentity,
@@ -39,6 +48,9 @@ public static extern RPC_STATUS RpcBindingSetAuthInfo(IntPtr Binding, String Ser
/// Sets authentication information for a binding handle (without identity)
///
[DllImport("Rpcrt4.dll", EntryPoint = "RpcBindingSetAuthInfoW", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)]
+ ///
+ /// RpcBindingSetAuthInfo2 implementation.
+ ///
public static extern RPC_STATUS RpcBindingSetAuthInfo2(IntPtr Binding, String ServerPrincName,
RPC_C_AUTHN_LEVEL AuthnLevel, RPC_C_AUTHN AuthnSvc,
IntPtr AuthIdentity,
@@ -48,12 +60,18 @@ public static extern RPC_STATUS RpcBindingSetAuthInfo2(IntPtr Binding, String Se
/// Frees a string allocated by RPC
///
[DllImport("Rpcrt4.dll", EntryPoint = "RpcStringFreeW", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)]
+ ///
+ /// RpcStringFree implementation.
+ ///
public static extern RPC_STATUS RpcStringFree(ref IntPtr lpString);
///
/// Releases binding handle resources
///
[DllImport("Rpcrt4.dll", EntryPoint = "RpcBindingFree", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)]
+ ///
+ /// RpcBindingFree implementation.
+ ///
public static extern RPC_STATUS RpcBindingFree(ref IntPtr lpString);
}
}
\ No newline at end of file
diff --git a/Src/DSInternals.Replication/NDceRpc.Microsoft/RpcException.cs b/Src/DSInternals.Replication/NDceRpc.Microsoft/RpcException.cs
index ce50ace..41bb329 100644
--- a/Src/DSInternals.Replication/NDceRpc.Microsoft/RpcException.cs
+++ b/Src/DSInternals.Replication/NDceRpc.Microsoft/RpcException.cs
@@ -8,6 +8,9 @@ namespace NDceRpc
/// Unspecified rpc error
///
[Serializable()]
+ ///
+ /// Represents a RpcException.
+ ///
public class RpcException : System.ComponentModel.Win32Exception
{
private const string DefaultError = "Unspecified RPC error";
diff --git a/Src/DSInternals.Replication/NDceRpc.Microsoft/RpcHandle.cs b/Src/DSInternals.Replication/NDceRpc.Microsoft/RpcHandle.cs
index 445dceb..f8822a6 100644
--- a/Src/DSInternals.Replication/NDceRpc.Microsoft/RpcHandle.cs
+++ b/Src/DSInternals.Replication/NDceRpc.Microsoft/RpcHandle.cs
@@ -15,11 +15,17 @@ public abstract class RpcHandle : IDisposable
Dispose(false);
}
+ ///
+ /// Dispose implementation.
+ ///
public void Dispose()
{
Dispose(true);
}
+ ///
+ /// Dispose implementation.
+ ///
public void Dispose(bool disposing)
{
try
@@ -48,6 +54,9 @@ protected bool Equals(RpcHandle other)
return Handle.Equals(other.Handle);
}
+ ///
+ /// Equals implementation.
+ ///
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
@@ -57,6 +66,9 @@ public override bool Equals(object obj)
return Equals((RpcHandle) obj);
}
+ ///
+ /// GetHashCode implementation.
+ ///
public override int GetHashCode()
{
return Handle.GetHashCode();
diff --git a/Src/DSInternals.Replication/NDceRpc.Microsoft/RpcTrace.cs b/Src/DSInternals.Replication/NDceRpc.Microsoft/RpcTrace.cs
index 5f9d9d4..5669254 100644
--- a/Src/DSInternals.Replication/NDceRpc.Microsoft/RpcTrace.cs
+++ b/Src/DSInternals.Replication/NDceRpc.Microsoft/RpcTrace.cs
@@ -4,30 +4,51 @@ namespace NDceRpc
{
internal static class RpcTrace
{
+ ///
+ /// Verbose implementation.
+ ///
public static void Verbose(string message)
{
}
+ ///
+ /// Verbose implementation.
+ ///
public static void Verbose(string message, params object[] arguments)
{
}
+ ///
+ /// Warning implementation.
+ ///
public static void Warning(string message)
{
}
+ ///
+ /// Warning implementation.
+ ///
public static void Warning(string message, params object[] arguments)
{
}
+ ///
+ /// Error implementation.
+ ///
public static void Error(string message)
{
}
+ ///
+ /// Error implementation.
+ ///
public static void Error(Exception error)
{
}
+ ///
+ /// Error implementation.
+ ///
public static void Error(string message, params object[] arguments)
{
}
diff --git a/Src/DSInternals.Replication/NDceRpc.Microsoft/SEC_WINNT_AUTH_IDENTITY.cs b/Src/DSInternals.Replication/NDceRpc.Microsoft/SEC_WINNT_AUTH_IDENTITY.cs
index 4f75f56..be49fc8 100644
--- a/Src/DSInternals.Replication/NDceRpc.Microsoft/SEC_WINNT_AUTH_IDENTITY.cs
+++ b/Src/DSInternals.Replication/NDceRpc.Microsoft/SEC_WINNT_AUTH_IDENTITY.cs
@@ -9,6 +9,9 @@ namespace NDceRpc.Microsoft.Interop
///
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
[System.Diagnostics.DebuggerDisplay("{Domain}\\{User}")]
+ ///
+ /// Represents a SEC_WINNT_AUTH_IDENTITY structure.
+ ///
public struct SEC_WINNT_AUTH_IDENTITY
{
public SEC_WINNT_AUTH_IDENTITY(NetworkCredential cred)
diff --git a/Src/DSInternals.Replication/ReplicationProgressHandler.cs b/Src/DSInternals.Replication/ReplicationProgressHandler.cs
index 1cb2c79..e5e5bb0 100644
--- a/Src/DSInternals.Replication/ReplicationProgressHandler.cs
+++ b/Src/DSInternals.Replication/ReplicationProgressHandler.cs
@@ -2,5 +2,8 @@
{
using DSInternals.Replication.Model;
+ ///
+ /// ReplicationProgressHandler implementation.
+ ///
public delegate void ReplicationProgressHandler(ReplicationCookie cookie, int processedObjectCount, int totalObjectCount);
}
\ No newline at end of file
diff --git a/Src/DSInternals.Replication/ReplicationSecretDecryptor.cs b/Src/DSInternals.Replication/ReplicationSecretDecryptor.cs
index 629f16e..4310ebc 100644
--- a/Src/DSInternals.Replication/ReplicationSecretDecryptor.cs
+++ b/Src/DSInternals.Replication/ReplicationSecretDecryptor.cs
@@ -4,6 +4,9 @@
namespace DSInternals.Replication
{
+ ///
+ /// Represents a ReplicationSecretDecryptor.
+ ///
public class ReplicationSecretDecryptor : DirectorySecretDecryptor
{
private const int SaltOffset = 0;
@@ -35,6 +38,9 @@ public ReplicationSecretDecryptor(byte[] key)
this.key = key;
}
+ ///
+ /// DecryptSecret implementation.
+ ///
public override byte[] DecryptSecret(byte[] blob)
{
// Blob structure: Salt (16B), Encrypted secret (rest)
@@ -56,6 +62,9 @@ public override byte[] DecryptSecret(byte[] blob)
return decryptedSecret;
}
+ ///
+ /// EncryptSecret implementation.
+ ///
public override byte[] EncryptSecret(byte[] secret)
{
throw new NotImplementedException("We will never act as a replication source so secret encryption is out of scope.");
diff --git a/Src/DSInternals.Replication/RpcProtocol.cs b/Src/DSInternals.Replication/RpcProtocol.cs
index 59e65ed..26e35df 100644
--- a/Src/DSInternals.Replication/RpcProtocol.cs
+++ b/Src/DSInternals.Replication/RpcProtocol.cs
@@ -1,6 +1,9 @@
namespace DSInternals.Replication
{
+ ///
+ /// Defines values for RpcProtocol.
+ ///
public enum RpcProtocol
{
TCP = 0,
diff --git a/Src/DSInternals.SAM/Interop/Enums/LsaPolicyAccessMask.cs b/Src/DSInternals.SAM/Interop/Enums/LsaPolicyAccessMask.cs
index c861c90..df3f37e 100644
--- a/Src/DSInternals.SAM/Interop/Enums/LsaPolicyAccessMask.cs
+++ b/Src/DSInternals.SAM/Interop/Enums/LsaPolicyAccessMask.cs
@@ -3,6 +3,9 @@
using System;
[Flags]
+ ///
+ /// Defines values for LsaPolicyAccessMask.
+ ///
public enum LsaPolicyAccessMask : int
{
///
diff --git a/Src/DSInternals.SAM/Interop/Enums/SamCommonAccessMask.cs b/Src/DSInternals.SAM/Interop/Enums/SamCommonAccessMask.cs
index bef212c..3827fc2 100644
--- a/Src/DSInternals.SAM/Interop/Enums/SamCommonAccessMask.cs
+++ b/Src/DSInternals.SAM/Interop/Enums/SamCommonAccessMask.cs
@@ -8,6 +8,9 @@ namespace DSInternals.SAM.Interop
/// http://msdn.microsoft.com/en-us/library/cc245511.aspx
///
[Flags]
+ ///
+ /// Defines values for SamCommonAccessMask.
+ ///
public enum SamCommonAccessMask : uint
{
///
diff --git a/Src/DSInternals.SAM/Interop/Enums/SamDomainAccessMask.cs b/Src/DSInternals.SAM/Interop/Enums/SamDomainAccessMask.cs
index 9c23dfd..ceffe24 100644
--- a/Src/DSInternals.SAM/Interop/Enums/SamDomainAccessMask.cs
+++ b/Src/DSInternals.SAM/Interop/Enums/SamDomainAccessMask.cs
@@ -8,6 +8,9 @@ namespace DSInternals.SAM.Interop
/// http://msdn.microsoft.com/en-us/library/cc245522.aspx
///
[Flags]
+ ///
+ /// Defines values for SamDomainAccessMask.
+ ///
public enum SamDomainAccessMask : uint
{
///
diff --git a/Src/DSInternals.SAM/Interop/Enums/SamDomainPasswordProperties.cs b/Src/DSInternals.SAM/Interop/Enums/SamDomainPasswordProperties.cs
index faff983..10436e9 100644
--- a/Src/DSInternals.SAM/Interop/Enums/SamDomainPasswordProperties.cs
+++ b/Src/DSInternals.SAM/Interop/Enums/SamDomainPasswordProperties.cs
@@ -6,6 +6,9 @@ namespace DSInternals.SAM.Interop
/// Flags that describe the password properties.
///
[Flags]
+ ///
+ /// Defines values for SamDomainPasswordProperties.
+ ///
public enum SamDomainPasswordProperties : uint
{
///
diff --git a/Src/DSInternals.SAM/Interop/Enums/SamServerAccessMask.cs b/Src/DSInternals.SAM/Interop/Enums/SamServerAccessMask.cs
index 69e1a8a..df5c0e2 100644
--- a/Src/DSInternals.SAM/Interop/Enums/SamServerAccessMask.cs
+++ b/Src/DSInternals.SAM/Interop/Enums/SamServerAccessMask.cs
@@ -8,6 +8,9 @@ namespace DSInternals.SAM.Interop
/// http://msdn.microsoft.com/en-us/library/cc245521.aspx
///
[Flags]
+ ///
+ /// Defines values for SamServerAccessMask.
+ ///
public enum SamServerAccessMask : uint
{
///
diff --git a/Src/DSInternals.SAM/Interop/Enums/SamSidType.cs b/Src/DSInternals.SAM/Interop/Enums/SamSidType.cs
index f9dc983..3b29892 100644
--- a/Src/DSInternals.SAM/Interop/Enums/SamSidType.cs
+++ b/Src/DSInternals.SAM/Interop/Enums/SamSidType.cs
@@ -3,6 +3,9 @@
namespace DSInternals.SAM.Interop
{
// http://msdn.microsoft.com/en-us/library/windows/desktop/aa379601%28v=vs.85%29.aspx
+ ///
+ /// Defines values for SamSidType.
+ ///
public enum SamSidType : int
{
User = 1,
diff --git a/Src/DSInternals.SAM/Interop/Enums/SamUserAccessMask.cs b/Src/DSInternals.SAM/Interop/Enums/SamUserAccessMask.cs
index 727292c..1e94db7 100644
--- a/Src/DSInternals.SAM/Interop/Enums/SamUserAccessMask.cs
+++ b/Src/DSInternals.SAM/Interop/Enums/SamUserAccessMask.cs
@@ -8,6 +8,9 @@ namespace DSInternals.SAM.Interop
/// http://msdn.microsoft.com/en-us/library/cc245525.aspx
///
[Flags]
+ ///
+ /// Defines values for SamUserAccessMask.
+ ///
public enum SamUserAccessMask : uint
{
///
diff --git a/Src/DSInternals.SAM/Interop/SafeHandles/SafeLsaPolicyHandle.cs b/Src/DSInternals.SAM/Interop/SafeHandles/SafeLsaPolicyHandle.cs
index 83fd1c3..2e63ffb 100644
--- a/Src/DSInternals.SAM/Interop/SafeHandles/SafeLsaPolicyHandle.cs
+++ b/Src/DSInternals.SAM/Interop/SafeHandles/SafeLsaPolicyHandle.cs
@@ -6,10 +6,16 @@
internal sealed class SafeLsaPolicyHandle : SafeHandleZeroOrMinusOneIsInvalid
{
+ ///
+ /// base implementation.
+ ///
public SafeLsaPolicyHandle() : base(true)
{
}
+ ///
+ /// base implementation.
+ ///
public SafeLsaPolicyHandle(IntPtr preexistingHandle, bool ownsHandle) : base(ownsHandle)
{
this.SetHandle(preexistingHandle);
diff --git a/Src/DSInternals.SAM/Interop/SafeHandles/SafeRpcAuthIdentityHandle.cs b/Src/DSInternals.SAM/Interop/SafeHandles/SafeRpcAuthIdentityHandle.cs
index 4497bd2..3137a22 100644
--- a/Src/DSInternals.SAM/Interop/SafeHandles/SafeRpcAuthIdentityHandle.cs
+++ b/Src/DSInternals.SAM/Interop/SafeHandles/SafeRpcAuthIdentityHandle.cs
@@ -15,6 +15,9 @@ namespace DSInternals.SAM.Interop
///
/// https://msdn.microsoft.com/en-us/library/windows/desktop/aa378492(v=vs.85).aspx
[SecurityCritical]
+ ///
+ /// Represents a SafeRpcAuthIdentityHandle.
+ ///
public class SafeRpcAuthIdentityHandle : SafeHandleZeroOrMinusOneIsInvalid
{
private SafeRpcAuthIdentityHandle()
diff --git a/Src/DSInternals.SAM/Interop/SafeHandles/SafeSamHandle.cs b/Src/DSInternals.SAM/Interop/SafeHandles/SafeSamHandle.cs
index ee82ce4..af92c89 100644
--- a/Src/DSInternals.SAM/Interop/SafeHandles/SafeSamHandle.cs
+++ b/Src/DSInternals.SAM/Interop/SafeHandles/SafeSamHandle.cs
@@ -9,11 +9,17 @@ namespace DSInternals.SAM.Interop
/// Represents a wrapper class for a SAM object handle.
///
[SecurityCritical]
+ ///
+ /// Represents a SafeSamHandle.
+ ///
public class SafeSamHandle : SafeHandleZeroOrMinusOneIsInvalid
{
private SafeSamHandle() : base(true)
{
}
+ ///
+ /// base implementation.
+ ///
public SafeSamHandle(IntPtr preexistingHandle, bool ownsHandle) : base(ownsHandle)
{
this.SetHandle(preexistingHandle);
diff --git a/Src/DSInternals.SAM/Interop/SafeHandles/SafeSamPointer.cs b/Src/DSInternals.SAM/Interop/SafeHandles/SafeSamPointer.cs
index 20cbf39..b0746e4 100644
--- a/Src/DSInternals.SAM/Interop/SafeHandles/SafeSamPointer.cs
+++ b/Src/DSInternals.SAM/Interop/SafeHandles/SafeSamPointer.cs
@@ -9,6 +9,9 @@ namespace DSInternals.SAM.Interop
/// Represents a wrapper class for buffers allocated by SAM RPC.
///
[SecurityCritical]
+ ///
+ /// Represents a SafeSamPointer.
+ ///
public class SafeSamPointer : SafeHandleZeroOrMinusOneIsInvalid
{
private SafeSamPointer() : base(true)
diff --git a/Src/DSInternals.SAM/Interop/Structs/LsaBuffer.cs b/Src/DSInternals.SAM/Interop/Structs/LsaBuffer.cs
index 9b0028f..7e33a17 100644
--- a/Src/DSInternals.SAM/Interop/Structs/LsaBuffer.cs
+++ b/Src/DSInternals.SAM/Interop/Structs/LsaBuffer.cs
@@ -7,6 +7,9 @@
/// Used by various Local Security Authority (LSA) functions to specify a Unicode string.
///
[StructLayout(LayoutKind.Sequential)]
+ ///
+ /// Represents a LsaBuffer structure.
+ ///
public struct LsaBuffer
{
///
@@ -24,6 +27,9 @@ public struct LsaBuffer
///
public IntPtr Buffer;
+ ///
+ /// GetBytes implementation.
+ ///
public byte[] GetBytes()
{
byte[] binaryBuffer = new byte[this.Length];
diff --git a/Src/DSInternals.SAM/Interop/Structs/SamRidEnumeration.cs b/Src/DSInternals.SAM/Interop/Structs/SamRidEnumeration.cs
index e414fe6..0e14e1d 100644
--- a/Src/DSInternals.SAM/Interop/Structs/SamRidEnumeration.cs
+++ b/Src/DSInternals.SAM/Interop/Structs/SamRidEnumeration.cs
@@ -8,6 +8,9 @@ namespace DSInternals.SAM.Interop
/// The SAMPR_RID_ENUMERATION structure holds the name and RID information about an account.
///
[StructLayout(LayoutKind.Sequential)]
+ ///
+ /// Represents a SamRidEnumeration structure.
+ ///
public struct SamRidEnumeration
{
///
diff --git a/Src/DSInternals.SAM/Wrappers/LsaDnsDomainInformation.cs b/Src/DSInternals.SAM/Wrappers/LsaDnsDomainInformation.cs
index a5a4723..da6a642 100644
--- a/Src/DSInternals.SAM/Wrappers/LsaDnsDomainInformation.cs
+++ b/Src/DSInternals.SAM/Wrappers/LsaDnsDomainInformation.cs
@@ -4,6 +4,9 @@
using System;
using System.Security.Principal;
+ ///
+ /// Represents a LsaDnsDomainInformation.
+ ///
public class LsaDnsDomainInformation
{
public LsaDnsDomainInformation() { }
diff --git a/Src/DSInternals.SAM/Wrappers/LsaDomainInformation.cs b/Src/DSInternals.SAM/Wrappers/LsaDomainInformation.cs
index 9ec49e7..ec99bc0 100644
--- a/Src/DSInternals.SAM/Wrappers/LsaDomainInformation.cs
+++ b/Src/DSInternals.SAM/Wrappers/LsaDomainInformation.cs
@@ -4,6 +4,9 @@
using System;
using System.Security.Principal;
+ ///
+ /// Represents a LsaDomainInformation.
+ ///
public class LsaDomainInformation
{
public LsaDomainInformation() { }
diff --git a/Src/DSInternals.SAM/Wrappers/LsaPolicy.cs b/Src/DSInternals.SAM/Wrappers/LsaPolicy.cs
index 51aec10..4a7f917 100644
--- a/Src/DSInternals.SAM/Wrappers/LsaPolicy.cs
+++ b/Src/DSInternals.SAM/Wrappers/LsaPolicy.cs
@@ -9,10 +9,16 @@
using DSInternals.Common.Interop;
using DSInternals.SAM.Interop;
+ ///
+ /// Represents a LsaPolicy.
+ ///
public class LsaPolicy : IDisposable
{
private SafeLsaPolicyHandle policyHandle;
+ ///
+ /// this implementation.
+ ///
public LsaPolicy(LsaPolicyAccessMask accessMask) : this(null, accessMask) { }
public LsaPolicy(string systemName, LsaPolicyAccessMask accessMask)
@@ -21,6 +27,9 @@ public LsaPolicy(string systemName, LsaPolicyAccessMask accessMask)
Validator.AssertSuccess(status);
}
+ ///
+ /// QueryDnsDomainInformation implementation.
+ ///
public LsaDnsDomainInformation QueryDnsDomainInformation()
{
IntPtr buffer;
@@ -40,6 +49,9 @@ public LsaDnsDomainInformation QueryDnsDomainInformation()
}
}
+ ///
+ /// QueryMachineAccountInformation implementation.
+ ///
public SecurityIdentifier QueryMachineAccountInformation()
{
IntPtr buffer;
@@ -66,16 +78,25 @@ public SecurityIdentifier QueryMachineAccountInformation()
}
}
+ ///
+ /// QueryAccountDomainInformation implementation.
+ ///
public LsaDomainInformation QueryAccountDomainInformation()
{
return this.QueryDomainInformation(LsaPolicyInformationClass.AccountDomainInformation);
}
+ ///
+ /// QueryLocalAccountDomainInformation implementation.
+ ///
public LsaDomainInformation QueryLocalAccountDomainInformation()
{
return this.QueryDomainInformation(LsaPolicyInformationClass.LocalAccountDomainInformation);
}
+ ///
+ /// SetDnsDomainInformation implementation.
+ ///
public void SetDnsDomainInformation(LsaDnsDomainInformation newDomainInfo)
{
// TODO: Validation
@@ -104,6 +125,9 @@ public void SetDnsDomainInformation(LsaDnsDomainInformation newDomainInfo)
}
}
+ ///
+ /// RetrievePrivateData implementation.
+ ///
public byte[] RetrievePrivateData(string keyName)
{
Validator.AssertNotNullOrWhiteSpace(keyName, "keyName");
@@ -113,6 +137,9 @@ public byte[] RetrievePrivateData(string keyName)
return privateData;
}
+ ///
+ /// GetDPAPIBackupKeys implementation.
+ ///
public DPAPIBackupKey[] GetDPAPIBackupKeys()
{
byte[] rsaKeyIdBinary = this.RetrievePrivateData(DPAPIBackupKey.PreferredRSAKeyName);
@@ -170,6 +197,9 @@ protected virtual void Dispose(bool disposing)
}
}
+ ///
+ /// Dispose implementation.
+ ///
public void Dispose()
{
this.Dispose(true);
diff --git a/Src/DSInternals.SAM/Wrappers/SamDomain.cs b/Src/DSInternals.SAM/Wrappers/SamDomain.cs
index 15236c8..49bef94 100644
--- a/Src/DSInternals.SAM/Wrappers/SamDomain.cs
+++ b/Src/DSInternals.SAM/Wrappers/SamDomain.cs
@@ -7,12 +7,18 @@
namespace DSInternals.SAM
{
+ ///
+ /// Represents a SamDomain.
+ ///
public class SamDomain : SamObject
{
internal SamDomain(SafeSamHandle handle) : base(handle)
{
}
+ ///
+ /// LookupUser implementation.
+ ///
public int LookupUser(string name)
{
int rid;
@@ -38,18 +44,27 @@ public int LookupUser(string name)
}
return rid;
}
+ ///
+ /// OpenUser implementation.
+ ///
public SamUser OpenUser(string name, SamUserAccessMask desiredAccess)
{
int rid = this.LookupUser(name);
return this.OpenUser(rid, desiredAccess);
}
+ ///
+ /// OpenUser implementation.
+ ///
public SamUser OpenUser(SecurityIdentifier sid, SamUserAccessMask desiredAccess)
{
int rid = sid.GetRid();
return this.OpenUser(rid, desiredAccess);
}
+ ///
+ /// OpenUser implementation.
+ ///
public SamUser OpenUser(int rid, SamUserAccessMask desiredAccess)
{
SafeSamHandle userHandle;
@@ -58,6 +73,9 @@ public SamUser OpenUser(int rid, SamUserAccessMask desiredAccess)
return new SamUser(userHandle);
}
+ ///
+ /// GetPasswordPolicy implementation.
+ ///
public SamDomainPasswordInformation GetPasswordPolicy()
{
SamDomainPasswordInformation passwordInfo;
diff --git a/Src/DSInternals.SAM/Wrappers/SamDomainPasswordInformation.cs b/Src/DSInternals.SAM/Wrappers/SamDomainPasswordInformation.cs
index a1cc89a..f3191cc 100644
--- a/Src/DSInternals.SAM/Wrappers/SamDomainPasswordInformation.cs
+++ b/Src/DSInternals.SAM/Wrappers/SamDomainPasswordInformation.cs
@@ -11,6 +11,9 @@
///
/// https://msdn.microsoft.com/en-us/library/windows/desktop/aa375371%28v=vs.85%29.aspx
[StructLayout(LayoutKind.Sequential)]
+ ///
+ /// Represents a SamDomainPasswordInformation structure.
+ ///
public struct SamDomainPasswordInformation
{
///
diff --git a/Src/DSInternals.SAM/Wrappers/SamObject.cs b/Src/DSInternals.SAM/Wrappers/SamObject.cs
index 19d32b8..036dcbe 100644
--- a/Src/DSInternals.SAM/Wrappers/SamObject.cs
+++ b/Src/DSInternals.SAM/Wrappers/SamObject.cs
@@ -17,6 +17,9 @@ protected SamObject(SafeSamHandle handle)
this.Handle = handle;
}
+ ///
+ /// ReleaseHandle implementation.
+ ///
public void ReleaseHandle()
{
if (this.Handle != null)
@@ -25,6 +28,9 @@ public void ReleaseHandle()
this.Handle = null;
}
}
+ ///
+ /// Dispose implementation.
+ ///
public void Dispose()
{
Dispose(true);
diff --git a/Src/DSInternals.SAM/Wrappers/SamServer.cs b/Src/DSInternals.SAM/Wrappers/SamServer.cs
index f002b99..8d94581 100644
--- a/Src/DSInternals.SAM/Wrappers/SamServer.cs
+++ b/Src/DSInternals.SAM/Wrappers/SamServer.cs
@@ -13,6 +13,9 @@
public sealed class SamServer : SamObject
{
+ ///
+ /// The BuiltinDomainName.
+ ///
public const string BuiltinDomainName = "Builtin";
private const uint PreferedMaximumBufferLength = 1000;
private const uint InitialEnumerationContext = 0;
@@ -29,16 +32,25 @@ public string Name
private set;
}
+ ///
+ /// base implementation.
+ ///
public SamServer(string serverName, NetworkCredential credential, SamServerAccessMask accessMask) : base(null)
{
this.Connect(serverName, accessMask, credential);
}
+ ///
+ /// base implementation.
+ ///
public SamServer(string serverName, SamServerAccessMask accessMask) : base(null)
{
this.Connect(serverName, accessMask);
}
+ ///
+ /// EnumerateDomains implementation.
+ ///
public string[] EnumerateDomains()
{
uint enumerationContext = InitialEnumerationContext;
@@ -57,6 +69,9 @@ public string[] EnumerateDomains()
return domains.ToArray();
}
+ ///
+ /// LookupDomain implementation.
+ ///
public SecurityIdentifier LookupDomain(string domainName)
{
SecurityIdentifier domainSid;
@@ -65,12 +80,18 @@ public SecurityIdentifier LookupDomain(string domainName)
return domainSid;
}
+ ///
+ /// OpenDomain implementation.
+ ///
public SamDomain OpenDomain(string domainName, SamDomainAccessMask accessMask)
{
SecurityIdentifier domainSid = this.LookupDomain(domainName);
return this.OpenDomain(domainSid, accessMask);
}
+ ///
+ /// OpenDomain implementation.
+ ///
public SamDomain OpenDomain(SecurityIdentifier domainSid, SamDomainAccessMask accessMask)
{
SafeSamHandle domainHandle;
diff --git a/Src/DSInternals.SAM/Wrappers/SamUser.cs b/Src/DSInternals.SAM/Wrappers/SamUser.cs
index 9de2a7c..b062c4d 100644
--- a/Src/DSInternals.SAM/Wrappers/SamUser.cs
+++ b/Src/DSInternals.SAM/Wrappers/SamUser.cs
@@ -7,12 +7,18 @@
namespace DSInternals.SAM
{
+ ///
+ /// Represents a SamUser.
+ ///
public class SamUser : SamObject
{
internal SamUser(SafeSamHandle handle) : base(handle)
{
}
+ ///
+ /// SetPasswordHash implementation.
+ ///
public void SetPasswordHash(string ntHash, string lmHash = null)
{
byte[] binaryNTHash = ntHash.HexToBinary();
@@ -20,6 +26,9 @@ public void SetPasswordHash(string ntHash, string lmHash = null)
this.SetPasswordHash(binaryNTHash, binaryLMHash);
}
+ ///
+ /// SetPasswordHash implementation.
+ ///
public void SetPasswordHash(byte[] ntHash, byte[] lmHash = null)
{
Validator.AssertNotNull(ntHash, "ntHash");
From 3f42f98e94d69c982a5fa96c049e433aa3dd8048 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 3 Sep 2025 19:00:26 +0000
Subject: [PATCH 09/22] Fix XML documentation for core classes:
DirectoryObject, NTHash, LMHash, OrgIdHash, AdsiClient
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
Src/DSInternals.Common/ADSI/AdsiClient.cs | 2 +-
Src/DSInternals.Common/Cryptography/LMHash.cs | 11 ++-
Src/DSInternals.Common/Cryptography/NTHash.cs | 23 +++--
.../Cryptography/OrgIdHash.cs | 13 ++-
.../Data/DirectoryObject.cs | 84 ++++++++++++++-----
5 files changed, 101 insertions(+), 32 deletions(-)
diff --git a/Src/DSInternals.Common/ADSI/AdsiClient.cs b/Src/DSInternals.Common/ADSI/AdsiClient.cs
index cf78ff5..5b1feb9 100644
--- a/Src/DSInternals.Common/ADSI/AdsiClient.cs
+++ b/Src/DSInternals.Common/ADSI/AdsiClient.cs
@@ -10,7 +10,7 @@
using DSInternals.Common.Schema;
///
- /// Represents a AdsiClient.
+ /// Provides functionality for accessing Active Directory through ADSI (Active Directory Service Interfaces).
///
public class AdsiClient : IDisposable
{
diff --git a/Src/DSInternals.Common/Cryptography/LMHash.cs b/Src/DSInternals.Common/Cryptography/LMHash.cs
index 94393aa..6127c44 100644
--- a/Src/DSInternals.Common/Cryptography/LMHash.cs
+++ b/Src/DSInternals.Common/Cryptography/LMHash.cs
@@ -7,21 +7,26 @@
namespace DSInternals.Common.Cryptography
{
+ ///
+ /// Provides methods for computing LM (LAN Manager) password hashes used in legacy Windows authentication.
+ ///
public static class LMHash
{
///
- /// The size, in bits, of the computed hash code.
+ /// The size, in bytes, of the computed hash code.
///
public const int HashSize = NativeMethods.LMHashNumBytes;
///
- /// The MaxChars.
+ /// The maximum number of characters that can be hashed.
///
public const int MaxChars = NativeMethods.LMPasswordMaxChars;
///
- /// ComputeHash implementation.
+ /// Computes the LM hash of the specified password.
///
+ /// The password to hash.
+ /// The LM hash of the password.
public static byte[] ComputeHash(SecureString password)
{
Validator.AssertNotNull(password, "password");
diff --git a/Src/DSInternals.Common/Cryptography/NTHash.cs b/Src/DSInternals.Common/Cryptography/NTHash.cs
index feb966b..28ca665 100644
--- a/Src/DSInternals.Common/Cryptography/NTHash.cs
+++ b/Src/DSInternals.Common/Cryptography/NTHash.cs
@@ -7,6 +7,9 @@ namespace DSInternals.Common.Cryptography
{
// See http://msdn.microsoft.com/en-us/library/system.security.cryptography.hashalgorithm%28v=vs.110%29.aspx
+ ///
+ /// Provides methods for computing NT (NTLM) password hashes used in Windows authentication.
+ ///
public static class NTHash
{
///
@@ -14,11 +17,11 @@ public static class NTHash
///
public const int HashSize = NativeMethods.NTHashNumBytes;
///
- /// The MaxInputLength.
+ /// The maximum length of a password that can be hashed.
///
public const int MaxInputLength = NativeMethods.NTPasswordMaxChars;
///
- /// sizeof implementation.
+ /// The maximum binary length of a password in bytes.
///
public const int MaxBinaryLength = MaxInputLength * sizeof(char);
@@ -28,8 +31,10 @@ public static class NTHash
public static readonly byte[] Empty = ComputeHash(string.Empty);
///
- /// ComputeHash implementation.
+ /// Computes the NT hash of the specified password stored in a SecureString.
///
+ /// The password to hash.
+ /// The NT hash of the password.
public static byte[] ComputeHash(SecureString password)
{
Validator.AssertMaxLength(password, MaxInputLength, nameof(password));
@@ -44,8 +49,10 @@ public static byte[] ComputeHash(SecureString password)
}
///
- /// ComputeHash implementation.
+ /// Computes the NT hash of the specified password provided as binary data.
///
+ /// The password to hash as binary data.
+ /// The NT hash of the password.
public static byte[] ComputeHash(ReadOnlyMemory password)
{
NtStatus result = NativeMethods.RtlCalculateNtOwfPassword(password, out byte[] hash);
@@ -55,8 +62,10 @@ public static byte[] ComputeHash(ReadOnlyMemory password)
}
///
- /// ComputeHash implementation.
+ /// Computes the NT hash of the specified password provided as a byte array.
///
+ /// The password to hash as a byte array.
+ /// The NT hash of the password.
public static byte[] ComputeHash(byte[] password)
{
Validator.AssertMaxLength(password, MaxInputLength*sizeof(char), nameof(password));
@@ -71,8 +80,10 @@ public static byte[] ComputeHash(byte[] password)
}
///
- /// ComputeHash implementation.
+ /// Computes the NT hash of the specified password string.
///
+ /// The password to hash.
+ /// The NT hash of the password.
public static byte[] ComputeHash(string password)
{
Validator.AssertMaxLength(password, MaxInputLength, nameof(password));
diff --git a/Src/DSInternals.Common/Cryptography/OrgIdHash.cs b/Src/DSInternals.Common/Cryptography/OrgIdHash.cs
index 390e3f1..9198e6e 100644
--- a/Src/DSInternals.Common/Cryptography/OrgIdHash.cs
+++ b/Src/DSInternals.Common/Cryptography/OrgIdHash.cs
@@ -6,10 +6,13 @@
namespace DSInternals.Common.Cryptography
{
+ ///
+ /// Provides methods for computing Microsoft Org ID password hashes used in cloud authentication.
+ ///
public static class OrgIdHash
{
///
- /// The 10.
+ /// The size of the salt in bytes.
///
public const int SaltSize = 10;
///
@@ -21,8 +24,9 @@ public static class OrgIdHash
private const string InternalHashFunction = "HMACSHA256";
///
- /// GenerateSalt implementation.
+ /// Generates a random salt for password hashing.
///
+ /// A randomly generated salt.
public static byte[] GenerateSalt()
{
using(var rng = new RNGCryptoServiceProvider())
@@ -34,8 +38,11 @@ public static byte[] GenerateSalt()
}
///
- /// ComputeHash implementation.
+ /// Computes the Org ID hash of the specified password using the provided salt.
///
+ /// The password to hash.
+ /// The salt to use for hashing.
+ /// The Org ID hash of the password.
public static byte[] ComputeHash(SecureString password, byte[] salt)
{
byte[] ntHash = NTHash.ComputeHash(password);
diff --git a/Src/DSInternals.Common/Data/DirectoryObject.cs b/Src/DSInternals.Common/Data/DirectoryObject.cs
index ef495d9..afb7ad4 100644
--- a/Src/DSInternals.Common/Data/DirectoryObject.cs
+++ b/Src/DSInternals.Common/Data/DirectoryObject.cs
@@ -7,6 +7,9 @@
using DSInternals.Common.Kerberos;
using DSInternals.Common.Schema;
+ ///
+ /// Represents an abstract base class for objects stored in a directory service.
+ ///
public abstract class DirectoryObject
{
protected abstract bool HasBigEndianRid
@@ -15,21 +18,31 @@ protected abstract bool HasBigEndianRid
}
///
- /// HasAttribute implementation.
+ /// Determines whether the directory object has the specified attribute.
///
+ /// The name of the attribute to check.
+ /// true if the attribute exists; otherwise, false.
public abstract bool HasAttribute(string name);
+
///
- /// ReadAttribute implementation.
+ /// Reads the value of an attribute as a byte array.
///
+ /// The name of the attribute to read.
+ /// When this method returns, contains the attribute value or null if the attribute does not exist.
public abstract void ReadAttribute(string name, out byte[] value);
+
///
- /// ReadAttribute implementation.
+ /// Reads the values of a multi-valued attribute as an array of byte arrays.
///
+ /// The name of the attribute to read.
+ /// When this method returns, contains the attribute values or null if the attribute does not exist.
public abstract void ReadAttribute(string name, out byte[][] value);
///
- /// ReadAttribute implementation.
+ /// Reads the value of an attribute as a GUID.
///
+ /// The name of the attribute to read.
+ /// When this method returns, contains the attribute value as a GUID or null if the attribute does not exist.
public void ReadAttribute(string name, out Guid? value)
{
byte[] binaryValue;
@@ -37,8 +50,10 @@ public void ReadAttribute(string name, out Guid? value)
value = (binaryValue != null) ? new Guid(binaryValue) : (Guid?)null;
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of an attribute as a boolean.
///
+ /// The name of the attribute to read.
+ /// When this method returns, contains the attribute value as a boolean.
public void ReadAttribute(string name, out bool value)
{
int? numericValue;
@@ -46,25 +61,39 @@ public void ReadAttribute(string name, out bool value)
value = numericValue.HasValue ? (numericValue.Value != 0) : false;
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of an attribute as a nullable integer.
///
+ /// The name of the attribute to read.
+ /// When this method returns, contains the attribute value as an integer or null if the attribute does not exist.
public abstract void ReadAttribute(string name, out int? value);
+
///
- /// ReadAttribute implementation.
+ /// Reads the value of an attribute as a nullable long integer.
///
+ /// The name of the attribute to read.
+ /// When this method returns, contains the attribute value as a long integer or null if the attribute does not exist.
public abstract void ReadAttribute(string name, out long? value);
///
- /// ReadAttribute implementation.
+ /// Reads the value of an attribute as a string.
///
+ /// The name of the attribute to read.
+ /// When this method returns, contains the attribute value as a string or null if the attribute does not exist.
+ /// Indicates whether to use Unicode encoding for the string.
public abstract void ReadAttribute(string name, out string value, bool unicode = true);
+
///
- /// ReadAttribute implementation.
+ /// Reads the values of a multi-valued attribute as an array of strings.
///
+ /// The name of the attribute to read.
+ /// When this method returns, contains the attribute values as an array of strings or null if the attribute does not exist.
+ /// Indicates whether to use Unicode encoding for the strings.
public abstract void ReadAttribute(string name, out string[] values, bool unicode = true);
///
- /// ReadAttribute implementation.
+ /// Reads the value of an attribute as a security descriptor.
///
+ /// The name of the attribute to read.
+ /// When this method returns, contains the attribute value as a security descriptor or null if the attribute does not exist.
public virtual void ReadAttribute(string name, out RawSecurityDescriptor value)
{
byte[] binarySecurityDescriptor;
@@ -73,28 +102,41 @@ public virtual void ReadAttribute(string name, out RawSecurityDescriptor value)
}
///
- /// ReadLinkedValues implementation.
+ /// Reads the linked values of an attribute.
///
+ /// The name of the attribute to read.
+ /// When this method returns, contains the linked values as an array of byte arrays.
public abstract void ReadLinkedValues(string attributeName, out byte[][] values);
+ ///
+ /// Gets the distinguished name of the directory object.
+ ///
public abstract string DistinguishedName
{
get;
}
+ ///
+ /// Gets the GUID of the directory object.
+ ///
public abstract Guid Guid
{
get;
}
+ ///
+ /// Gets the security identifier (SID) of the directory object.
+ ///
public abstract SecurityIdentifier Sid
{
get;
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of an attribute as a security identifier.
///
+ /// The name of the attribute to read.
+ /// When this method returns, contains the attribute value as a security identifier.
public void ReadAttribute(string name, out SecurityIdentifier value)
{
byte[] binarySid;
@@ -103,13 +145,17 @@ public void ReadAttribute(string name, out SecurityIdentifier value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of an attribute as a distinguished name.
///
+ /// The name of the attribute to read.
+ /// When this method returns, contains the attribute value as a distinguished name.
public abstract void ReadAttribute(string name, out DistinguishedName value);
///
- /// ReadAttribute implementation.
+ /// Reads the values of a multi-valued attribute as an array of security identifiers.
///
+ /// The name of the attribute to read.
+ /// When this method returns, contains the attribute values as an array of security identifiers.
public void ReadAttribute(string name, out SecurityIdentifier[] value)
{
value = null;
@@ -122,7 +168,7 @@ public void ReadAttribute(string name, out SecurityIdentifier[] value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of an attribute as a SecurityIdentifier.
///
public void ReadAttribute(string name, out SamAccountType? value)
{
@@ -131,7 +177,7 @@ public void ReadAttribute(string name, out SamAccountType? value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of an attribute as a SecurityIdentifier.
///
public void ReadAttribute(string name, out TrustDirection? value)
{
@@ -140,7 +186,7 @@ public void ReadAttribute(string name, out TrustDirection? value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of an attribute as a SecurityIdentifier.
///
public void ReadAttribute(string name, out TrustAttributes? value)
{
@@ -149,7 +195,7 @@ public void ReadAttribute(string name, out TrustAttributes? value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of an attribute as a SecurityIdentifier.
///
public void ReadAttribute(string name, out TrustType? value)
{
@@ -158,7 +204,7 @@ public void ReadAttribute(string name, out TrustType? value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of an attribute as a SecurityIdentifier.
///
public void ReadAttribute(string name, out DateTime? value, bool asGeneralizedTime)
{
From acafd449ac57406a58c24efdc185c489edb7b79c Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 3 Sep 2025 19:06:54 +0000
Subject: [PATCH 10/22] Major improvement to XML documentation: replace 186
generic "implementation" comments with meaningful descriptions
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
Src/DSInternals.Common/ADSI/AdsiClient.cs | 4 +-
.../ADSI/AdsiObjectAdapter.cs | 16 +++---
.../Asn1/DpapiNg/CngProtectedDataBlob.cs | 2 +-
.../Asn1/DpapiNg/ProtectionKeyDescriptor.cs | 4 +-
.../Cryptography/Asn1/Pkcs12/Pfx.cs | 4 +-
.../Cryptography/HashEqualityComparer.cs | 4 +-
.../Cryptography/OrgIdHash.cs | 2 +-
.../Cryptography/SecureStringExtensions.cs | 2 +-
.../Cryptography/SortedFileSearcher.cs | 2 +-
.../Data/DNS/DnsResourceRecord.cs | 2 +-
Src/DSInternals.Common/Data/DNWithBinary.cs | 4 +-
.../Data/DPAPI/DPAPIBackupKey.cs | 2 +-
.../Data/DPAPI/GroupKeyEnvelope.cs | 8 +--
.../Data/DPAPI/IKdsRootKeyResolver.cs | 6 +--
.../Data/DPAPI/KdsRootKeyCache.cs | 6 +--
.../Data/DPAPI/ProtectionKeyIdentifier.cs | 2 +-
.../Data/DPAPI/RoamedCredential.cs | 4 +-
.../Data/DPAPI/StaticKdsRootKeyResolver.cs | 6 +--
.../Data/DistinguishedName.cs | 6 +--
.../Data/DistinguishedNameComponent.cs | 2 +-
.../Data/Hello/CustomKeyInformation.cs | 2 +-
.../Data/Hello/FidoAttestedCredentialData.cs | 2 +-
.../Data/Hello/FidoCredentialPublicKey.cs | 4 +-
.../Data/Hello/KeyCredential.cs | 4 +-
.../Data/LAPS/LapsClearTextPassword.cs | 4 +-
.../BitLockerRecoveryInformation.cs | 2 +-
.../Data/Principals/DSAccount.cs | 2 +-
.../Data/Principals/KerberosCredential.cs | 2 +-
.../Data/Principals/KerberosCredentialNew.cs | 2 +-
.../Data/Principals/KerberosKeyData.cs | 2 +-
.../Data/Principals/KerberosKeyDataNew.cs | 2 +-
.../Principals/SupplementalCredentials.cs | 2 +-
.../Interop/NamedPipeConnection.cs | 2 +-
.../Interop/RegistryHiveFileMapping.cs | 2 +-
.../Interop/SafeOemStringPointer.cs | 2 +-
.../Interop/SafeUnicodeSecureStringPointer.cs | 2 +-
.../Kerberos/TrustAuthInfos.cs | 2 +-
.../TrustAuthenticationInformation.cs | 2 +-
.../Schema/AttributeSchema.cs | 6 +--
Src/DSInternals.Common/Schema/BaseSchema.cs | 12 +++--
.../Schema/CommonDirectoryAttributes.cs | 2 +-
.../Schema/CommonDirectoryClasses.cs | 2 +-
Src/DSInternals.Common/Schema/PrefixTable.cs | 6 +--
.../AttributeMetadata.cs | 2 +-
.../AttributeMetadataCollection.cs | 4 +-
Src/DSInternals.DataStore/DatastoreObject.cs | 22 ++++----
.../DatastoreRootKeyResolver.cs | 6 +--
.../DirectoryAgent.BitLocker.cs | 8 +--
.../DirectoryAgent.PasswordManagement.cs | 16 +++---
Src/DSInternals.DataStore/DirectoryAgent.cs | 52 +++++++++----------
Src/DSInternals.DataStore/DirectoryContext.cs | 2 +-
Src/DSInternals.DataStore/DirectorySchema.cs | 6 +--
Src/DSInternals.DataStore/DomainController.cs | 2 +-
.../Extensions/CursorExtensions.cs | 12 ++---
.../SecurityDescriptorResolver.cs | 6 +--
.../Commands/ADSI/GetADSIAccountCommand.cs | 2 +-
.../AzureAD/GetAzureADUserExCommand.cs | 2 +-
.../AzureAD/SetAzureADUserExCommand.cs | 2 +-
.../Commands/Base/ADReplCommandBase.cs | 2 +-
.../Commands/Base/ADSICommandBase.cs | 2 +-
.../Commands/Base/AzureADCommandBase.cs | 2 +-
.../Commands/Base/LsaPolicyCommandBase.cs | 2 +-
.../Commands/Base/SamCommandBase.cs | 2 +-
.../Datastore/AddADDBSidHistoryCommand.cs | 2 +-
.../Datastore/DisableADDBAccountCommand.cs | 2 +-
.../Datastore/EnableADDBAccountCommand.cs | 2 +-
.../Datastore/GetADDBAccountCommand.cs | 2 +-
.../Datastore/GetADDBBackupKeyCommand.cs | 2 +-
...ADDBBitlockerRecoveryInformationCommand.cs | 2 +-
.../GetADDBDnsResourceRecordCommand.cs | 2 +-
.../Datastore/GetADDBDnsZoneCommand.cs | 2 +-
.../GetADDBDomainControllerCommand.cs | 2 +-
.../Commands/Datastore/GetADDBIndexCommand.cs | 2 +-
.../Datastore/GetADDBKdsRootKeyCommand.cs | 2 +-
.../GetADDBSchemaAttributeCommand.cs | 2 +-
.../Datastore/GetADDBServiceAccountCommand.cs | 2 +-
.../Commands/Datastore/GetADDBTrust.cs | 2 +-
.../Commands/Datastore/GetBootKeyCommand.cs | 2 +-
.../NewADDBRestoreFromMediaScriptCommand.cs | 2 +-
.../Datastore/RemoveADDBObjectCommand.cs | 2 +-
.../Datastore/RestoreADDBAttributeCommand.cs | 2 +-
.../Datastore/SetADDBAccountControlCommand.cs | 2 +-
.../SetADDBAccountPasswordCommand.cs | 2 +-
.../SetADDBAccountPasswordHashCommand.cs | 2 +-
.../Datastore/SetADDBBootKeyCommand.cs | 2 +-
.../SetADDBDomainControllerCommand.cs | 2 +-
.../Datastore/SetADDBPrimaryGroupCommand.cs | 2 +-
.../Datastore/UnlockADDBAccountCommand.cs | 2 +-
.../ConvertFromGPPrefPasswordCommand.cs | 2 +-
.../ConvertFromUnicodePasswordCommand.cs | 2 +-
.../ConvertToGPPrefPasswordCommand.cs | 2 +-
.../ConvertToUnicodePasswordCommand.cs | 2 +-
.../Hash/ConvertToKerberosKeyCommand.cs | 2 +-
.../Commands/Hash/ConvertToLMHashCommand.cs | 2 +-
.../Commands/Hash/ConvertToNTHashCommand.cs | 2 +-
.../Hash/ConvertToOrgIdHashCommand.cs | 2 +-
.../Hash/SetSamAccountPasswordHashCommand.cs | 2 +-
.../Commands/LSA/GetLsaBackupKeyCommand.cs | 2 +-
.../LSA/GetLsaPolicyInformationCommand.cs | 2 +-
.../LSA/GetSamPasswordPolicyCommand.cs | 2 +-
.../LSA/SetLsaPolicyInformationCommand.cs | 2 +-
...ConvertFromADManagedPasswordBlobCommand.cs | 2 +-
.../Commands/Misc/ConvertToHexCommand.cs | 2 +-
.../Commands/Misc/GetADKeyCredential.cs | 2 +-
.../Misc/TestPasswordQualityCommand.cs | 4 +-
.../Replication/AddADReplNgcKeyCommand.cs | 2 +-
.../Replication/GetADReplAccountCommand.cs | 2 +-
.../Replication/GetADReplBackupKeyCommand.cs | 2 +-
.../Replication/GetADReplKdsRootKey.cs | 2 +-
Src/DSInternals.Replication.Model/DSName.cs | 2 +-
.../ReplicaObject.cs | 14 ++---
.../ReplicationCookie.cs | 6 +--
.../ReplicationCursor.cs | 2 +-
.../DirectoryReplicationClient.cs | 24 ++++-----
.../NDceRpc.Microsoft/Client.cs | 4 +-
.../NDceRpc.Microsoft/EndpointBindingInfo.cs | 2 +-
.../NDceRpc.Microsoft/RpcHandle.cs | 8 +--
.../Interop/Structs/LsaBuffer.cs | 2 +-
Src/DSInternals.SAM/Wrappers/LsaPolicy.cs | 2 +-
Src/DSInternals.SAM/Wrappers/SamObject.cs | 2 +-
120 files changed, 238 insertions(+), 236 deletions(-)
diff --git a/Src/DSInternals.Common/ADSI/AdsiClient.cs b/Src/DSInternals.Common/ADSI/AdsiClient.cs
index 5b1feb9..a7fa598 100644
--- a/Src/DSInternals.Common/ADSI/AdsiClient.cs
+++ b/Src/DSInternals.Common/ADSI/AdsiClient.cs
@@ -92,7 +92,7 @@ public string NetBIOSDomainName
}
///
- /// GetAccounts implementation.
+ /// Gets account information from the data store.
///
public IEnumerable GetAccounts(AccountPropertySets propertySets = AccountPropertySets.All)
{
@@ -248,7 +248,7 @@ protected virtual void Dispose(bool disposing)
// This code added to correctly implement the disposable pattern.
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public void Dispose()
{
diff --git a/Src/DSInternals.Common/ADSI/AdsiObjectAdapter.cs b/Src/DSInternals.Common/ADSI/AdsiObjectAdapter.cs
index ef8c2c4..5d5a38b 100644
--- a/Src/DSInternals.Common/ADSI/AdsiObjectAdapter.cs
+++ b/Src/DSInternals.Common/ADSI/AdsiObjectAdapter.cs
@@ -8,7 +8,7 @@
using System.Security.Principal;
///
- /// Represents a AdsiObjectAdapter.
+ /// Provides an adapter for accessing Active Directory objects through ADSI SearchResult objects.
///
public class AdsiObjectAdapter : DirectoryObject
{
@@ -65,7 +65,7 @@ public override bool HasAttribute(string name)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out byte[] value)
{
@@ -73,7 +73,7 @@ public override void ReadAttribute(string name, out byte[] value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out byte[][] value)
{
@@ -81,7 +81,7 @@ public override void ReadAttribute(string name, out byte[][] value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out int? value)
{
@@ -89,7 +89,7 @@ public override void ReadAttribute(string name, out int? value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out long? value)
{
@@ -97,7 +97,7 @@ public override void ReadAttribute(string name, out long? value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out string value, bool unicode = true)
{
@@ -106,7 +106,7 @@ public override void ReadAttribute(string name, out string value, bool unicode =
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out string[] values, bool unicode = true)
{
@@ -115,7 +115,7 @@ public override void ReadAttribute(string name, out string[] values, bool unicod
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out DistinguishedName value)
{
diff --git a/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/CngProtectedDataBlob.cs b/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/CngProtectedDataBlob.cs
index 45737a4..02896e4 100644
--- a/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/CngProtectedDataBlob.cs
+++ b/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/CngProtectedDataBlob.cs
@@ -56,7 +56,7 @@ public bool TryDecrypt(out ReadOnlySpan cleartext)
}
///
- /// Decode implementation.
+ /// Decodes the specified input.
///
public static CngProtectedDataBlob Decode(ReadOnlyMemory blob)
{
diff --git a/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/ProtectionKeyDescriptor.cs b/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/ProtectionKeyDescriptor.cs
index 87ed5b5..ffaf6fb 100644
--- a/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/ProtectionKeyDescriptor.cs
+++ b/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/ProtectionKeyDescriptor.cs
@@ -27,7 +27,7 @@ public SecurityIdentifier Sid
}
///
- /// Decode implementation.
+ /// Decodes the specified input.
///
public static ProtectionKeyDescriptor Decode(ReadOnlyMemory encoded)
{
@@ -38,7 +38,7 @@ public static ProtectionKeyDescriptor Decode(ReadOnlyMemory encoded)
}
///
- /// Decode implementation.
+ /// Decodes the specified input.
///
public static ProtectionKeyDescriptor Decode(AsnReader reader)
{
diff --git a/Src/DSInternals.Common/Cryptography/Asn1/Pkcs12/Pfx.cs b/Src/DSInternals.Common/Cryptography/Asn1/Pkcs12/Pfx.cs
index 389ccb9..c133f86 100644
--- a/Src/DSInternals.Common/Cryptography/Asn1/Pkcs12/Pfx.cs
+++ b/Src/DSInternals.Common/Cryptography/Asn1/Pkcs12/Pfx.cs
@@ -49,7 +49,7 @@ public IList AuthSafeData
}
*/
///
- /// Decode implementation.
+ /// Decodes the specified input.
///
public static Pfx Decode(ReadOnlyMemory encoded)
{
@@ -60,7 +60,7 @@ public static Pfx Decode(ReadOnlyMemory encoded)
}
///
- /// Decode implementation.
+ /// Decodes the specified input.
///
public static Pfx Decode(AsnReader reader)
{
diff --git a/Src/DSInternals.Common/Cryptography/HashEqualityComparer.cs b/Src/DSInternals.Common/Cryptography/HashEqualityComparer.cs
index a830fa0..de6caa6 100644
--- a/Src/DSInternals.Common/Cryptography/HashEqualityComparer.cs
+++ b/Src/DSInternals.Common/Cryptography/HashEqualityComparer.cs
@@ -28,7 +28,7 @@ public static HashEqualityComparer GetInstance()
private HashEqualityComparer() {}
///
- /// Equals implementation.
+ /// Determines whether the specified object is equal to this instance.
///
public bool Equals(byte[] x, byte[] y)
{
@@ -44,7 +44,7 @@ public bool Equals(byte[] x, byte[] y)
}
///
- /// GetHashCode implementation.
+ /// Returns a hash code for this instance.
///
public int GetHashCode(byte[] obj)
{
diff --git a/Src/DSInternals.Common/Cryptography/OrgIdHash.cs b/Src/DSInternals.Common/Cryptography/OrgIdHash.cs
index 9198e6e..6936808 100644
--- a/Src/DSInternals.Common/Cryptography/OrgIdHash.cs
+++ b/Src/DSInternals.Common/Cryptography/OrgIdHash.cs
@@ -50,7 +50,7 @@ public static byte[] ComputeHash(SecureString password, byte[] salt)
}
///
- /// ComputeHash implementation.
+ /// Computes the hash of the specified input.
///
public static byte[] ComputeHash(byte[] ntHash, byte[] salt)
{
diff --git a/Src/DSInternals.Common/Cryptography/SecureStringExtensions.cs b/Src/DSInternals.Common/Cryptography/SecureStringExtensions.cs
index cfc224c..fd5a0e7 100644
--- a/Src/DSInternals.Common/Cryptography/SecureStringExtensions.cs
+++ b/Src/DSInternals.Common/Cryptography/SecureStringExtensions.cs
@@ -21,7 +21,7 @@ public static string ToUnicodeString(this SecureString input)
}
}
///
- /// ToByteArray implementation.
+ /// Returns the byte array representation of the data.
///
public static byte[] ToByteArray(this SecureString input)
{
diff --git a/Src/DSInternals.Common/Cryptography/SortedFileSearcher.cs b/Src/DSInternals.Common/Cryptography/SortedFileSearcher.cs
index 9e8c731..e17d77e 100644
--- a/Src/DSInternals.Common/Cryptography/SortedFileSearcher.cs
+++ b/Src/DSInternals.Common/Cryptography/SortedFileSearcher.cs
@@ -118,7 +118,7 @@ protected virtual void Dispose(bool disposing)
}
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public void Dispose()
{
diff --git a/Src/DSInternals.Common/Data/DNS/DnsResourceRecord.cs b/Src/DSInternals.Common/Data/DNS/DnsResourceRecord.cs
index bf12919..f87802d 100644
--- a/Src/DSInternals.Common/Data/DNS/DnsResourceRecord.cs
+++ b/Src/DSInternals.Common/Data/DNS/DnsResourceRecord.cs
@@ -308,7 +308,7 @@ private struct SoaResourceRecordHeader
}
///
- /// Create implementation.
+ /// Creates a new instance.
///
public static DnsResourceRecord Create(string zone, string name, ReadOnlySpan binaryRecordData)
{
diff --git a/Src/DSInternals.Common/Data/DNWithBinary.cs b/Src/DSInternals.Common/Data/DNWithBinary.cs
index 3c03273..8324426 100644
--- a/Src/DSInternals.Common/Data/DNWithBinary.cs
+++ b/Src/DSInternals.Common/Data/DNWithBinary.cs
@@ -34,7 +34,7 @@ public DNWithBinary(string dn, byte[] binary)
}
///
- /// Parse implementation.
+ /// Parses the specified input.
///
public static DNWithBinary Parse(string dnWithBinary)
{
@@ -57,7 +57,7 @@ public static DNWithBinary Parse(string dnWithBinary)
}
///
- /// ToString implementation.
+ /// Returns a string representation of the object.
///
public override string ToString()
{
diff --git a/Src/DSInternals.Common/Data/DPAPI/DPAPIBackupKey.cs b/Src/DSInternals.Common/Data/DPAPI/DPAPIBackupKey.cs
index c5b0a8c..84d16d5 100644
--- a/Src/DSInternals.Common/Data/DPAPI/DPAPIBackupKey.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/DPAPIBackupKey.cs
@@ -122,7 +122,7 @@ public Guid KeyId
}
///
- /// Save implementation.
+ /// Saves data to the specified destination.
///
public override void Save(string directoryPath)
{
diff --git a/Src/DSInternals.Common/Data/DPAPI/GroupKeyEnvelope.cs b/Src/DSInternals.Common/Data/DPAPI/GroupKeyEnvelope.cs
index bc9cbb2..d1c0b32 100644
--- a/Src/DSInternals.Common/Data/DPAPI/GroupKeyEnvelope.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/GroupKeyEnvelope.cs
@@ -273,7 +273,7 @@ public GroupKeyEnvelope(byte[] blob)
}
///
- /// Create implementation.
+ /// Creates a new instance.
///
public static GroupKeyEnvelope Create(KdsRootKey rootKey, ProtectionKeyIdentifier keyIdentifier, SecurityIdentifier targetSID)
{
@@ -299,7 +299,7 @@ public static GroupKeyEnvelope Create(KdsRootKey rootKey, ProtectionKeyIdentifie
}
///
- /// Create implementation.
+ /// Creates a new instance.
///
public static GroupKeyEnvelope Create(KdsRootKey rootKey, int l0KeyId, int l1KeyId, int l2KeyId, SecurityIdentifier targetSID, string domain, string forest)
{
@@ -313,7 +313,7 @@ public static GroupKeyEnvelope Create(KdsRootKey rootKey, int l0KeyId, int l1Key
}
///
- /// Create implementation.
+ /// Creates a new instance.
///
public static GroupKeyEnvelope Create(KdsRootKey rootKey, int l0KeyId, int l1KeyId, int l2KeyId, byte[] targetSecurityDescriptor, string domainName, string forestName)
{
@@ -367,7 +367,7 @@ public void WriteToCache()
}
///
- /// ToByteArray implementation.
+ /// Returns the byte array representation of the data.
///
public byte[] ToByteArray()
{
diff --git a/Src/DSInternals.Common/Data/DPAPI/IKdsRootKeyResolver.cs b/Src/DSInternals.Common/Data/DPAPI/IKdsRootKeyResolver.cs
index da79c24..9a04fa8 100644
--- a/Src/DSInternals.Common/Data/DPAPI/IKdsRootKeyResolver.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/IKdsRootKeyResolver.cs
@@ -9,15 +9,15 @@ namespace DSInternals.Common.Data
public interface IKdsRootKeyResolver
{
///
- /// GetKdsRootKey implementation.
+ /// Gets the KDS root key from the directory store.
///
public KdsRootKey? GetKdsRootKey(Guid id);
///
- /// GetKdsRootKey implementation.
+ /// Gets the KDS root key from the directory store.
///
public KdsRootKey? GetKdsRootKey(DateTime effectiveTime);
///
- /// GetKdsRootKeys implementation.
+ /// Gets all KDS root keys from the directory store.
///
public IEnumerable GetKdsRootKeys();
///
diff --git a/Src/DSInternals.Common/Data/DPAPI/KdsRootKeyCache.cs b/Src/DSInternals.Common/Data/DPAPI/KdsRootKeyCache.cs
index e98094a..4e7d7cf 100644
--- a/Src/DSInternals.Common/Data/DPAPI/KdsRootKeyCache.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/KdsRootKeyCache.cs
@@ -55,7 +55,7 @@ public KdsRootKeyCache(IKdsRootKeyResolver resolver, bool preloadCache = false)
public bool SupportsLookupByEffectiveTime => _innerResolver.SupportsLookupAll || _innerResolver.SupportsLookupByEffectiveTime;
///
- /// GetKdsRootKey implementation.
+ /// Gets the KDS root key from the directory store.
///
public KdsRootKey? GetKdsRootKey(Guid id)
{
@@ -89,7 +89,7 @@ public KdsRootKeyCache(IKdsRootKeyResolver resolver, bool preloadCache = false)
}
///
- /// GetKdsRootKey implementation.
+ /// Gets the KDS root key from the directory store.
///
public KdsRootKey? GetKdsRootKey(DateTime effectiveTime)
{
@@ -128,7 +128,7 @@ public KdsRootKeyCache(IKdsRootKeyResolver resolver, bool preloadCache = false)
}
///
- /// GetKdsRootKeys implementation.
+ /// Gets all KDS root keys from the directory store.
///
public IEnumerable GetKdsRootKeys()
{
diff --git a/Src/DSInternals.Common/Data/DPAPI/ProtectionKeyIdentifier.cs b/Src/DSInternals.Common/Data/DPAPI/ProtectionKeyIdentifier.cs
index 546a288..c73868d 100644
--- a/Src/DSInternals.Common/Data/DPAPI/ProtectionKeyIdentifier.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/ProtectionKeyIdentifier.cs
@@ -203,7 +203,7 @@ public ProtectionKeyIdentifier(Guid rootKeyId, int l0KeyId, int l1KeyId, int l2K
}
///
- /// ToString implementation.
+ /// Returns a string representation of the object.
///
public override string ToString()
{
diff --git a/Src/DSInternals.Common/Data/DPAPI/RoamedCredential.cs b/Src/DSInternals.Common/Data/DPAPI/RoamedCredential.cs
index a571bb2..fd73970 100644
--- a/Src/DSInternals.Common/Data/DPAPI/RoamedCredential.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/RoamedCredential.cs
@@ -141,7 +141,7 @@ public SecurityIdentifier AccountSid
}
///
- /// Save implementation.
+ /// Saves data to the specified destination.
///
public override void Save(string directoryPath)
{
@@ -231,7 +231,7 @@ public override string KiwiCommand
}
///
- /// ToString implementation.
+ /// Returns a string representation of the object.
///
public override string ToString()
{
diff --git a/Src/DSInternals.Common/Data/DPAPI/StaticKdsRootKeyResolver.cs b/Src/DSInternals.Common/Data/DPAPI/StaticKdsRootKeyResolver.cs
index e84384b..8cf6356 100644
--- a/Src/DSInternals.Common/Data/DPAPI/StaticKdsRootKeyResolver.cs
+++ b/Src/DSInternals.Common/Data/DPAPI/StaticKdsRootKeyResolver.cs
@@ -28,7 +28,7 @@ public StaticKdsRootKeyResolver(KdsRootKey rootKey)
public bool SupportsLookupAll => true;
///
- /// GetKdsRootKey implementation.
+ /// Gets the KDS root key from the directory store.
///
public KdsRootKey? GetKdsRootKey(Guid id)
{
@@ -36,7 +36,7 @@ public StaticKdsRootKeyResolver(KdsRootKey rootKey)
}
///
- /// GetKdsRootKey implementation.
+ /// Gets the KDS root key from the directory store.
///
public KdsRootKey? GetKdsRootKey(DateTime effectiveTime)
{
@@ -44,7 +44,7 @@ public StaticKdsRootKeyResolver(KdsRootKey rootKey)
}
///
- /// GetKdsRootKeys implementation.
+ /// Gets all KDS root keys from the directory store.
///
public IEnumerable GetKdsRootKeys()
{
diff --git a/Src/DSInternals.Common/Data/DistinguishedName.cs b/Src/DSInternals.Common/Data/DistinguishedName.cs
index 53c8de5..4a0aa2b 100644
--- a/Src/DSInternals.Common/Data/DistinguishedName.cs
+++ b/Src/DSInternals.Common/Data/DistinguishedName.cs
@@ -189,7 +189,7 @@ public void AddChild(DistinguishedNameComponent component)
}
///
- /// ToString implementation.
+ /// Returns a string representation of the object.
///
public override string ToString()
{
@@ -302,7 +302,7 @@ public static DistinguishedName GetDNFromDNSName(string domainName)
}
///
- /// Equals implementation.
+ /// Determines whether the specified object is equal to this instance.
///
public override bool Equals(object obj)
{
@@ -315,7 +315,7 @@ public override bool Equals(object obj)
}
///
- /// GetHashCode implementation.
+ /// Returns a hash code for this instance.
///
public override int GetHashCode()
{
diff --git a/Src/DSInternals.Common/Data/DistinguishedNameComponent.cs b/Src/DSInternals.Common/Data/DistinguishedNameComponent.cs
index c6ae6cd..a1dd569 100644
--- a/Src/DSInternals.Common/Data/DistinguishedNameComponent.cs
+++ b/Src/DSInternals.Common/Data/DistinguishedNameComponent.cs
@@ -30,7 +30,7 @@ public DistinguishedNameComponent(string name, string value)
}
///
- /// ToString implementation.
+ /// Returns a string representation of the object.
///
public override string ToString()
{
diff --git a/Src/DSInternals.Common/Data/Hello/CustomKeyInformation.cs b/Src/DSInternals.Common/Data/Hello/CustomKeyInformation.cs
index 5985259..ba945e2 100644
--- a/Src/DSInternals.Common/Data/Hello/CustomKeyInformation.cs
+++ b/Src/DSInternals.Common/Data/Hello/CustomKeyInformation.cs
@@ -146,7 +146,7 @@ public CustomKeyInformation(byte[] blob)
}
///
- /// ToByteArray implementation.
+ /// Returns the byte array representation of the data.
///
public byte[] ToByteArray()
{
diff --git a/Src/DSInternals.Common/Data/Hello/FidoAttestedCredentialData.cs b/Src/DSInternals.Common/Data/Hello/FidoAttestedCredentialData.cs
index ec0cf81..08ef5b3 100644
--- a/Src/DSInternals.Common/Data/Hello/FidoAttestedCredentialData.cs
+++ b/Src/DSInternals.Common/Data/Hello/FidoAttestedCredentialData.cs
@@ -77,7 +77,7 @@ public AttestedCredentialData(BinaryReader reader)
}
///
- /// ToString implementation.
+ /// Returns a string representation of the object.
///
public override string ToString()
{
diff --git a/Src/DSInternals.Common/Data/Hello/FidoCredentialPublicKey.cs b/Src/DSInternals.Common/Data/Hello/FidoCredentialPublicKey.cs
index 0e7dc26..f5870a3 100644
--- a/Src/DSInternals.Common/Data/Hello/FidoCredentialPublicKey.cs
+++ b/Src/DSInternals.Common/Data/Hello/FidoCredentialPublicKey.cs
@@ -157,7 +157,7 @@ public CredentialPublicKey(CBORObject cpk)
}
///
- /// ToString implementation.
+ /// Returns a string representation of the object.
///
public override string ToString()
{
@@ -165,7 +165,7 @@ public override string ToString()
}
///
- /// GetBytes implementation.
+ /// Gets the byte representation of the data.
///
public byte[] GetBytes()
{
diff --git a/Src/DSInternals.Common/Data/Hello/KeyCredential.cs b/Src/DSInternals.Common/Data/Hello/KeyCredential.cs
index a1987aa..d25cd5e 100644
--- a/Src/DSInternals.Common/Data/Hello/KeyCredential.cs
+++ b/Src/DSInternals.Common/Data/Hello/KeyCredential.cs
@@ -443,7 +443,7 @@ private KeyCredential()
}
///
- /// ToString implementation.
+ /// Returns a string representation of the object.
///
public override string ToString()
{
@@ -457,7 +457,7 @@ public override string ToString()
}
///
- /// ToByteArray implementation.
+ /// Returns the byte array representation of the data.
///
public byte[] ToByteArray()
{
diff --git a/Src/DSInternals.Common/Data/LAPS/LapsClearTextPassword.cs b/Src/DSInternals.Common/Data/LAPS/LapsClearTextPassword.cs
index e75b4a0..8bf9fd0 100644
--- a/Src/DSInternals.Common/Data/LAPS/LapsClearTextPassword.cs
+++ b/Src/DSInternals.Common/Data/LAPS/LapsClearTextPassword.cs
@@ -56,7 +56,7 @@ public DateTime? UpdateTimestamp
}
///
- /// Parse implementation.
+ /// Parses the specified input.
///
public static LapsClearTextPassword Parse(string json)
{
@@ -65,7 +65,7 @@ public static LapsClearTextPassword Parse(string json)
}
///
- /// Parse implementation.
+ /// Parses the specified input.
///
public static LapsClearTextPassword Parse(ReadOnlySpan binaryJson, bool utf16 = false)
{
diff --git a/Src/DSInternals.Common/Data/Principals/BitLockerRecoveryInformation.cs b/Src/DSInternals.Common/Data/Principals/BitLockerRecoveryInformation.cs
index 912168d..6f41370 100644
--- a/Src/DSInternals.Common/Data/Principals/BitLockerRecoveryInformation.cs
+++ b/Src/DSInternals.Common/Data/Principals/BitLockerRecoveryInformation.cs
@@ -95,7 +95,7 @@ public DateTime WhenCreated
}
///
- /// ToString implementation.
+ /// Returns a string representation of the object.
///
public override string ToString()
{
diff --git a/Src/DSInternals.Common/Data/Principals/DSAccount.cs b/Src/DSInternals.Common/Data/Principals/DSAccount.cs
index 110f4d6..f155943 100644
--- a/Src/DSInternals.Common/Data/Principals/DSAccount.cs
+++ b/Src/DSInternals.Common/Data/Principals/DSAccount.cs
@@ -7,7 +7,7 @@
using DSInternals.Common.Schema;
///
- /// Represents a DSAccount.
+ /// Represents a user, computer, or trust account object from Active Directory.
///
public class DSAccount
{
diff --git a/Src/DSInternals.Common/Data/Principals/KerberosCredential.cs b/Src/DSInternals.Common/Data/Principals/KerberosCredential.cs
index 4add19b..5b00874 100644
--- a/Src/DSInternals.Common/Data/Principals/KerberosCredential.cs
+++ b/Src/DSInternals.Common/Data/Principals/KerberosCredential.cs
@@ -67,7 +67,7 @@ public string DefaultSalt
}
///
- /// ToByteArray implementation.
+ /// Returns the byte array representation of the data.
///
public byte[] ToByteArray()
{
diff --git a/Src/DSInternals.Common/Data/Principals/KerberosCredentialNew.cs b/Src/DSInternals.Common/Data/Principals/KerberosCredentialNew.cs
index afab66f..2718005 100644
--- a/Src/DSInternals.Common/Data/Principals/KerberosCredentialNew.cs
+++ b/Src/DSInternals.Common/Data/Principals/KerberosCredentialNew.cs
@@ -151,7 +151,7 @@ public int DefaultIterationCount
}
///
- /// ToByteArray implementation.
+ /// Returns the byte array representation of the data.
///
public byte[] ToByteArray()
{
diff --git a/Src/DSInternals.Common/Data/Principals/KerberosKeyData.cs b/Src/DSInternals.Common/Data/Principals/KerberosKeyData.cs
index bdc0823..ca621e1 100644
--- a/Src/DSInternals.Common/Data/Principals/KerberosKeyData.cs
+++ b/Src/DSInternals.Common/Data/Principals/KerberosKeyData.cs
@@ -41,7 +41,7 @@ public byte[] Key
}
///
- /// ToString implementation.
+ /// Returns a string representation of the object.
///
public override string ToString()
{
diff --git a/Src/DSInternals.Common/Data/Principals/KerberosKeyDataNew.cs b/Src/DSInternals.Common/Data/Principals/KerberosKeyDataNew.cs
index c0dd3c0..50074e0 100644
--- a/Src/DSInternals.Common/Data/Principals/KerberosKeyDataNew.cs
+++ b/Src/DSInternals.Common/Data/Principals/KerberosKeyDataNew.cs
@@ -37,7 +37,7 @@ public int IterationCount
}
///
- /// ToString implementation.
+ /// Returns a string representation of the object.
///
public override string ToString()
{
diff --git a/Src/DSInternals.Common/Data/Principals/SupplementalCredentials.cs b/Src/DSInternals.Common/Data/Principals/SupplementalCredentials.cs
index fad4e32..ad0b39c 100644
--- a/Src/DSInternals.Common/Data/Principals/SupplementalCredentials.cs
+++ b/Src/DSInternals.Common/Data/Principals/SupplementalCredentials.cs
@@ -159,7 +159,7 @@ public SupplementalCredentials(SecureString password, string samAccountName, str
}
///
- /// ToByteArray implementation.
+ /// Returns the byte array representation of the data.
///
public byte[] ToByteArray()
{
diff --git a/Src/DSInternals.Common/Interop/NamedPipeConnection.cs b/Src/DSInternals.Common/Interop/NamedPipeConnection.cs
index 3aa886e..9f6ecdd 100644
--- a/Src/DSInternals.Common/Interop/NamedPipeConnection.cs
+++ b/Src/DSInternals.Common/Interop/NamedPipeConnection.cs
@@ -58,7 +58,7 @@ private Win32ErrorCode DoDisconnect()
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public void Dispose()
{
diff --git a/Src/DSInternals.Common/Interop/RegistryHiveFileMapping.cs b/Src/DSInternals.Common/Interop/RegistryHiveFileMapping.cs
index d3a5b8f..eacf88f 100644
--- a/Src/DSInternals.Common/Interop/RegistryHiveFileMapping.cs
+++ b/Src/DSInternals.Common/Interop/RegistryHiveFileMapping.cs
@@ -43,7 +43,7 @@ public string UsersSubKey
}
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public void Dispose()
{
diff --git a/Src/DSInternals.Common/Interop/SafeOemStringPointer.cs b/Src/DSInternals.Common/Interop/SafeOemStringPointer.cs
index 5f2df50..8ea85c2 100644
--- a/Src/DSInternals.Common/Interop/SafeOemStringPointer.cs
+++ b/Src/DSInternals.Common/Interop/SafeOemStringPointer.cs
@@ -66,7 +66,7 @@ protected void ZeroFill()
}
///
- /// ToString implementation.
+ /// Returns a string representation of the object.
///
public override string ToString()
{
diff --git a/Src/DSInternals.Common/Interop/SafeUnicodeSecureStringPointer.cs b/Src/DSInternals.Common/Interop/SafeUnicodeSecureStringPointer.cs
index 7d49ace..ea7173b 100644
--- a/Src/DSInternals.Common/Interop/SafeUnicodeSecureStringPointer.cs
+++ b/Src/DSInternals.Common/Interop/SafeUnicodeSecureStringPointer.cs
@@ -89,7 +89,7 @@ protected override bool ReleaseHandle()
}
///
- /// ToString implementation.
+ /// Returns a string representation of the object.
///
public override string ToString()
{
diff --git a/Src/DSInternals.Common/Kerberos/TrustAuthInfos.cs b/Src/DSInternals.Common/Kerberos/TrustAuthInfos.cs
index ec413b7..13f1ff7 100644
--- a/Src/DSInternals.Common/Kerberos/TrustAuthInfos.cs
+++ b/Src/DSInternals.Common/Kerberos/TrustAuthInfos.cs
@@ -47,7 +47,7 @@ private TrustAuthInfos(ReadOnlyMemory currentPasswordBytes, ReadOnlyMemory
}
///
- /// Parse implementation.
+ /// Parses the specified input.
///
public static TrustAuthInfos Parse(ReadOnlyMemory blob)
{
diff --git a/Src/DSInternals.Common/Kerberos/TrustAuthenticationInformation.cs b/Src/DSInternals.Common/Kerberos/TrustAuthenticationInformation.cs
index 6bec09a..1821e1e 100644
--- a/Src/DSInternals.Common/Kerberos/TrustAuthenticationInformation.cs
+++ b/Src/DSInternals.Common/Kerberos/TrustAuthenticationInformation.cs
@@ -27,7 +27,7 @@ public struct TrustAuthenticationInformation
public ReadOnlyMemory AuthInfo { get; private set; }
///
- /// Parse implementation.
+ /// Parses the specified input.
///
public static (TrustAuthenticationInformation authInfo, int bytesRead) Parse(ReadOnlyMemory blob)
{
diff --git a/Src/DSInternals.Common/Schema/AttributeSchema.cs b/Src/DSInternals.Common/Schema/AttributeSchema.cs
index af685c4..26931c9 100644
--- a/Src/DSInternals.Common/Schema/AttributeSchema.cs
+++ b/Src/DSInternals.Common/Schema/AttributeSchema.cs
@@ -201,7 +201,7 @@ public LinkType LinkType
public bool IsIndexed => SearchFlags.HasFlag(AttributeSearchFlags.AttributeIndex);
///
- /// ToString implementation.
+ /// Returns a string representation of the object.
///
public override string ToString()
{
@@ -286,7 +286,7 @@ public AttributeSchema(
}
///
- /// Create implementation.
+ /// Creates a new instance.
///
public static AttributeSchema Create(string ldapDisplayName, PrefixTable prefixTable)
{
@@ -316,7 +316,7 @@ public static AttributeSchema Create(string ldapDisplayName, PrefixTable prefixT
}
///
- /// Create implementation.
+ /// Creates a new instance.
///
public static AttributeSchema Create(
string ldapDisplayName,
diff --git a/Src/DSInternals.Common/Schema/BaseSchema.cs b/Src/DSInternals.Common/Schema/BaseSchema.cs
index 090727f..ba9d0aa 100644
--- a/Src/DSInternals.Common/Schema/BaseSchema.cs
+++ b/Src/DSInternals.Common/Schema/BaseSchema.cs
@@ -4,7 +4,7 @@
namespace DSInternals.Common.Schema
{
///
- /// Represents a BaseSchema.
+ /// Represents the base schema containing attribute definitions and prefix table mappings for Active Directory.
///
public class BaseSchema
{
@@ -21,8 +21,10 @@ public BaseSchema()
}
///
- /// AddAttribute implementation.
+ /// Adds an attribute definition to the schema.
///
+ /// The attribute schema to add.
+ /// Thrown when attribute is null.
public void AddAttribute(AttributeSchema attribute)
{
if (attribute == null) throw new ArgumentNullException(nameof(attribute));
@@ -33,7 +35,7 @@ public void AddAttribute(AttributeSchema attribute)
}
///
- /// FindAttribute implementation.
+ /// Finds the specified attribute in the schema.
///
public AttributeSchema? FindAttribute(string attributeName)
{
@@ -60,7 +62,7 @@ public void AddAttribute(AttributeSchema attribute)
}
///
- /// FindAttribute implementation.
+ /// Finds the specified attribute in the schema.
///
public AttributeSchema? FindAttribute(AttributeType attributeId)
{
@@ -159,7 +161,7 @@ private void AddNonDefaultAttributes()
}
///
- /// Create implementation.
+ /// Creates a new instance.
///
public static BaseSchema Create()
{
diff --git a/Src/DSInternals.Common/Schema/CommonDirectoryAttributes.cs b/Src/DSInternals.Common/Schema/CommonDirectoryAttributes.cs
index 6001908..5710320 100644
--- a/Src/DSInternals.Common/Schema/CommonDirectoryAttributes.cs
+++ b/Src/DSInternals.Common/Schema/CommonDirectoryAttributes.cs
@@ -638,7 +638,7 @@ public static class CommonDirectoryAttributes
public const string DnsTombstoned = "dNSTombstoned";
///
- /// Translate implementation.
+ /// Translates the input to the target format.
///
public static AttributeType? Translate(string ldapDisplayName)
{
diff --git a/Src/DSInternals.Common/Schema/CommonDirectoryClasses.cs b/Src/DSInternals.Common/Schema/CommonDirectoryClasses.cs
index 462dafb..9b5162e 100644
--- a/Src/DSInternals.Common/Schema/CommonDirectoryClasses.cs
+++ b/Src/DSInternals.Common/Schema/CommonDirectoryClasses.cs
@@ -71,7 +71,7 @@ public static class CommonDirectoryClasses
public const string NtdsSettingsRO = "nTDSDSARO";
///
- /// Translate implementation.
+ /// Translates the input to the target format.
///
public static ClassType? Translate(string ldapDisplayName)
{
diff --git a/Src/DSInternals.Common/Schema/PrefixTable.cs b/Src/DSInternals.Common/Schema/PrefixTable.cs
index 990d0aa..a5097fb 100644
--- a/Src/DSInternals.Common/Schema/PrefixTable.cs
+++ b/Src/DSInternals.Common/Schema/PrefixTable.cs
@@ -135,7 +135,7 @@ public int Count
}
///
- /// Translate implementation.
+ /// Translates the input to the target format.
///
public string? Translate(AttributeType encodedOid)
{
@@ -148,7 +148,7 @@ public int Count
}
///
- /// Translate implementation.
+ /// Translates the input to the target format.
///
public string? Translate(ClassType encodedOid)
{
@@ -156,7 +156,7 @@ public int Count
}
///
- /// Translate implementation.
+ /// Translates the input to the target format.
///
public string? Translate(ATTRTYP encodedOid)
{
diff --git a/Src/DSInternals.DataStore/AttributeMetadata.cs b/Src/DSInternals.DataStore/AttributeMetadata.cs
index a3f911f..b135327 100644
--- a/Src/DSInternals.DataStore/AttributeMetadata.cs
+++ b/Src/DSInternals.DataStore/AttributeMetadata.cs
@@ -103,7 +103,7 @@ public void Update(Guid invocationId, DateTime time, long usn)
}
///
- /// ToString implementation.
+ /// Returns a string representation of the object.
///
public override string ToString()
{
diff --git a/Src/DSInternals.DataStore/AttributeMetadataCollection.cs b/Src/DSInternals.DataStore/AttributeMetadataCollection.cs
index e63ece5..21c2229 100644
--- a/Src/DSInternals.DataStore/AttributeMetadataCollection.cs
+++ b/Src/DSInternals.DataStore/AttributeMetadataCollection.cs
@@ -121,7 +121,7 @@ public void Update(AttributeType attributeId, Guid invocationId, DateTime time,
}
///
- /// ToByteArray implementation.
+ /// Returns the byte array representation of the data.
///
public byte[] ToByteArray()
{
@@ -150,7 +150,7 @@ public byte[] ToByteArray()
}
///
- /// ToString implementation.
+ /// Returns a string representation of the object.
///
public override string ToString()
{
diff --git a/Src/DSInternals.DataStore/DatastoreObject.cs b/Src/DSInternals.DataStore/DatastoreObject.cs
index 12667dc..db43b3d 100644
--- a/Src/DSInternals.DataStore/DatastoreObject.cs
+++ b/Src/DSInternals.DataStore/DatastoreObject.cs
@@ -125,7 +125,7 @@ public override bool HasAttribute(string name)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out byte[] value)
{
@@ -134,7 +134,7 @@ public override void ReadAttribute(string name, out byte[] value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out byte[][] value)
{
@@ -143,7 +143,7 @@ public override void ReadAttribute(string name, out byte[][] value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out int? value)
{
@@ -152,7 +152,7 @@ public override void ReadAttribute(string name, out int? value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public void ReadAttribute(string name, out DNTag? value)
{
@@ -161,7 +161,7 @@ public void ReadAttribute(string name, out DNTag? value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out string value, bool unicode = true)
{
@@ -170,7 +170,7 @@ public override void ReadAttribute(string name, out string value, bool unicode =
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out string[] values, bool unicode = true)
{
@@ -179,7 +179,7 @@ public override void ReadAttribute(string name, out string[] values, bool unicod
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out long? value)
{
@@ -188,7 +188,7 @@ public override void ReadAttribute(string name, out long? value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out DistinguishedName? value)
{
@@ -202,7 +202,7 @@ public override void ReadAttribute(string name, out DistinguishedName? value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out RawSecurityDescriptor value)
{
@@ -228,7 +228,7 @@ public override void ReadAttribute(string name, out RawSecurityDescriptor value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public void ReadAttribute(string name, out ClassType? value)
{
@@ -237,7 +237,7 @@ public void ReadAttribute(string name, out ClassType? value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public void ReadAttribute(string name, out AttributeMetadataCollection value)
{
diff --git a/Src/DSInternals.DataStore/DatastoreRootKeyResolver.cs b/Src/DSInternals.DataStore/DatastoreRootKeyResolver.cs
index b5f63cf..383629a 100644
--- a/Src/DSInternals.DataStore/DatastoreRootKeyResolver.cs
+++ b/Src/DSInternals.DataStore/DatastoreRootKeyResolver.cs
@@ -33,7 +33,7 @@ public DatastoreRootKeyResolver(DirectoryContext context)
}
///
- /// GetKdsRootKeys implementation.
+ /// Gets all KDS root keys from the directory store.
///
public IEnumerable GetKdsRootKeys()
{
@@ -66,7 +66,7 @@ public IEnumerable GetKdsRootKeys()
}
///
- /// GetKdsRootKey implementation.
+ /// Gets the KDS root key from the directory store.
///
public KdsRootKey? GetKdsRootKey(Guid id)
{
@@ -109,7 +109,7 @@ public IEnumerable GetKdsRootKeys()
}
///
- /// GetKdsRootKey implementation.
+ /// Gets the KDS root key from the directory store.
///
public KdsRootKey GetKdsRootKey(DateTime effectiveTime)
{
diff --git a/Src/DSInternals.DataStore/DirectoryAgent.BitLocker.cs b/Src/DSInternals.DataStore/DirectoryAgent.BitLocker.cs
index 3309476..8644489 100644
--- a/Src/DSInternals.DataStore/DirectoryAgent.BitLocker.cs
+++ b/Src/DSInternals.DataStore/DirectoryAgent.BitLocker.cs
@@ -13,7 +13,7 @@ public partial class DirectoryAgent : IDisposable
private const string ComputerNameSuffix = "$";
///
- /// GetBitLockerRecoveryInformation implementation.
+ /// Gets BitLocker recovery information from the directory.
///
public IEnumerable GetBitLockerRecoveryInformation()
{
@@ -39,7 +39,7 @@ public IEnumerable GetBitLockerRecoveryInformation
}
///
- /// GetBitLockerRecoveryInformation implementation.
+ /// Gets BitLocker recovery information from the directory.
///
public BitLockerRecoveryInformation GetBitLockerRecoveryInformation(DistinguishedName dn)
{
@@ -78,7 +78,7 @@ public BitLockerRecoveryInformation GetBitLockerRecoveryInformation(Distinguishe
}
///
- /// GetBitLockerRecoveryInformation implementation.
+ /// Gets BitLocker recovery information from the directory.
///
public BitLockerRecoveryInformation GetBitLockerRecoveryInformation(Guid objectId)
{
@@ -145,7 +145,7 @@ public BitLockerRecoveryInformation GetBitLockerRecoveryInformationByRecoveryGui
}
///
- /// GetBitLockerRecoveryInformation implementation.
+ /// Gets BitLocker recovery information from the directory.
///
public IEnumerable GetBitLockerRecoveryInformation(string computerName)
{
diff --git a/Src/DSInternals.DataStore/DirectoryAgent.PasswordManagement.cs b/Src/DSInternals.DataStore/DirectoryAgent.PasswordManagement.cs
index 3c043b7..360d7af 100644
--- a/Src/DSInternals.DataStore/DirectoryAgent.PasswordManagement.cs
+++ b/Src/DSInternals.DataStore/DirectoryAgent.PasswordManagement.cs
@@ -15,7 +15,7 @@ public partial class DirectoryAgent : IDisposable
{
#region SetAccountPassword
///
- /// SetAccountPassword implementation.
+ /// Sets the password for the specified account.
///
public bool SetAccountPassword(DistinguishedName dn, SecureString newPassword, byte[] bootKey, bool skipMetaUpdate)
{
@@ -27,7 +27,7 @@ public bool SetAccountPassword(DistinguishedName dn, SecureString newPassword, b
}
///
- /// SetAccountPassword implementation.
+ /// Sets the password for the specified account.
///
public bool SetAccountPassword(SecurityIdentifier objectSid, SecureString newPassword, byte[] bootKey, bool skipMetaUpdate)
{
@@ -39,7 +39,7 @@ public bool SetAccountPassword(SecurityIdentifier objectSid, SecureString newPas
}
///
- /// SetAccountPassword implementation.
+ /// Sets the password for the specified account.
///
public bool SetAccountPassword(string samAccountName, SecureString newPassword, byte[] bootKey, bool skipMetaUpdate)
{
@@ -51,7 +51,7 @@ public bool SetAccountPassword(string samAccountName, SecureString newPassword,
}
///
- /// SetAccountPassword implementation.
+ /// Sets the password for the specified account.
///
public bool SetAccountPassword(Guid objectGuid, SecureString newPassword, byte[] bootKey, bool skipMetaUpdate)
{
@@ -97,7 +97,7 @@ protected bool SetAccountPassword(DatastoreObject targetObject, object targetObj
#region SetAccountPasswordHash
///
- /// SetAccountPasswordHash implementation.
+ /// Sets the password hash for the specified account.
///
public bool SetAccountPasswordHash(DistinguishedName dn, byte[] newNtHash, SupplementalCredentials newSupplementalCredentials, byte[] bootKey, bool skipMetaUpdate)
{
@@ -106,7 +106,7 @@ public bool SetAccountPasswordHash(DistinguishedName dn, byte[] newNtHash, Suppl
}
///
- /// SetAccountPasswordHash implementation.
+ /// Sets the password hash for the specified account.
///
public bool SetAccountPasswordHash(SecurityIdentifier objectSid, byte[] newNtHash, SupplementalCredentials newSupplementalCredentials, byte[] bootKey, bool skipMetaUpdate)
{
@@ -115,7 +115,7 @@ public bool SetAccountPasswordHash(SecurityIdentifier objectSid, byte[] newNtHas
}
///
- /// SetAccountPasswordHash implementation.
+ /// Sets the password hash for the specified account.
///
public bool SetAccountPasswordHash(string samAccountName, byte[] newNtHash, SupplementalCredentials newSupplementalCredentials, byte[] bootKey, bool skipMetaUpdate)
{
@@ -124,7 +124,7 @@ public bool SetAccountPasswordHash(string samAccountName, byte[] newNtHash, Supp
}
///
- /// SetAccountPasswordHash implementation.
+ /// Sets the password hash for the specified account.
///
public bool SetAccountPasswordHash(Guid objectGuid, byte[] newNtHash, SupplementalCredentials newSupplementalCredentials, byte[] bootKey, bool skipMetaUpdate)
{
diff --git a/Src/DSInternals.DataStore/DirectoryAgent.cs b/Src/DSInternals.DataStore/DirectoryAgent.cs
index 845fce1..073e385 100644
--- a/Src/DSInternals.DataStore/DirectoryAgent.cs
+++ b/Src/DSInternals.DataStore/DirectoryAgent.cs
@@ -73,7 +73,7 @@ public void SetDomainControllerBackupExpiration(DateTime expirationTime)
}
///
- /// GetAccounts implementation.
+ /// Gets account information from the data store.
///
public IEnumerable GetAccounts(byte[] bootKey, AccountPropertySets propertySets = AccountPropertySets.All)
{
@@ -114,7 +114,7 @@ public IEnumerable GetAccounts(byte[] bootKey, AccountPropertySets pr
}
///
- /// GetAccount implementation.
+ /// Gets account information from the data store.
///
public DSAccount GetAccount(DistinguishedName dn, byte[] bootKey, AccountPropertySets propertySets = AccountPropertySets.All)
{
@@ -140,7 +140,7 @@ public DSAccount GetAccount(DistinguishedName dn, byte[] bootKey, AccountPropert
}
///
- /// GetAccount implementation.
+ /// Gets account information from the data store.
///
public DSAccount GetAccount(SecurityIdentifier objectSid, byte[] bootKey, AccountPropertySets propertySets = AccountPropertySets.All)
{
@@ -176,7 +176,7 @@ public DSAccount GetAccount(SecurityIdentifier objectSid, byte[] bootKey, Accoun
}
///
- /// GetAccount implementation.
+ /// Gets account information from the data store.
///
public DSAccount GetAccount(string samAccountName, byte[] bootKey, AccountPropertySets propertySets = AccountPropertySets.All)
{
@@ -216,7 +216,7 @@ public DSAccount GetAccount(string samAccountName, byte[] bootKey, AccountProper
}
///
- /// GetAccount implementation.
+ /// Gets account information from the data store.
///
public DSAccount GetAccount(Guid objectGuid, byte[] bootKey, AccountPropertySets propertySets = AccountPropertySets.All)
{
@@ -324,7 +324,7 @@ public IEnumerable FindObjectsByCategory(DNTag objectCategory,
}
///
- /// AddSidHistory implementation.
+ /// Adds a SID to the SID history of the specified account.
///
public bool AddSidHistory(DistinguishedName dn, SecurityIdentifier[] sidHistory, bool skipMetaUpdate)
{
@@ -336,7 +336,7 @@ public bool AddSidHistory(DistinguishedName dn, SecurityIdentifier[] sidHistory,
}
///
- /// AddSidHistory implementation.
+ /// Adds a SID to the SID history of the specified account.
///
public bool AddSidHistory(string samAccountName, SecurityIdentifier[] sidHistory, bool skipMetaUpdate)
{
@@ -349,7 +349,7 @@ public bool AddSidHistory(string samAccountName, SecurityIdentifier[] sidHistory
}
///
- /// AddSidHistory implementation.
+ /// Adds a SID to the SID history of the specified account.
///
public bool AddSidHistory(SecurityIdentifier objectSid, SecurityIdentifier[] sidHistory, bool skipMetaUpdate)
{
@@ -361,7 +361,7 @@ public bool AddSidHistory(SecurityIdentifier objectSid, SecurityIdentifier[] sid
}
///
- /// AddSidHistory implementation.
+ /// Adds a SID to the SID history of the specified account.
///
public bool AddSidHistory(Guid objectGuid, SecurityIdentifier[] sidHistory, bool skipMetaUpdate)
{
@@ -373,7 +373,7 @@ public bool AddSidHistory(Guid objectGuid, SecurityIdentifier[] sidHistory, bool
}
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public void Dispose()
{
@@ -505,7 +505,7 @@ public void RemoveObject(DistinguishedName dn)
}
///
- /// SetAccountStatus implementation.
+ /// Sets the status of the specified account.
///
public bool SetAccountStatus(DistinguishedName dn, bool enabled, bool skipMetaUpdate)
{
@@ -513,7 +513,7 @@ public bool SetAccountStatus(DistinguishedName dn, bool enabled, bool skipMetaUp
}
///
- /// SetAccountStatus implementation.
+ /// Sets the status of the specified account.
///
public bool SetAccountStatus(string samAccountName, bool enabled, bool skipMetaUpdate)
{
@@ -521,7 +521,7 @@ public bool SetAccountStatus(string samAccountName, bool enabled, bool skipMetaU
}
///
- /// SetAccountStatus implementation.
+ /// Sets the status of the specified account.
///
public bool SetAccountStatus(SecurityIdentifier objectSid, bool enabled, bool skipMetaUpdate)
{
@@ -529,7 +529,7 @@ public bool SetAccountStatus(SecurityIdentifier objectSid, bool enabled, bool sk
}
///
- /// SetAccountStatus implementation.
+ /// Sets the status of the specified account.
///
public bool SetAccountStatus(Guid objectGuid, bool enabled, bool skipMetaUpdate)
{
@@ -537,7 +537,7 @@ public bool SetAccountStatus(Guid objectGuid, bool enabled, bool skipMetaUpdate)
}
///
- /// SetAccountControl implementation.
+ /// Sets the account control flags for the specified account.
///
public bool SetAccountControl(DistinguishedName dn, bool? enabled, bool? cannotChangePassword, bool? passwordNeverExpires, bool? smartcardLogonRequired, bool? useDESKeyOnly, bool? homedirRequired, bool skipMetaUpdate)
{
@@ -549,7 +549,7 @@ public bool SetAccountControl(DistinguishedName dn, bool? enabled, bool? cannotC
}
///
- /// SetAccountControl implementation.
+ /// Sets the account control flags for the specified account.
///
public bool SetAccountControl(string samAccountName, bool? enabled, bool? cannotChangePassword, bool? passwordNeverExpires, bool? smartcardLogonRequired, bool? useDESKeyOnly, bool? homedirRequired, bool skipMetaUpdate)
{
@@ -561,7 +561,7 @@ public bool SetAccountControl(string samAccountName, bool? enabled, bool? cannot
}
///
- /// SetAccountControl implementation.
+ /// Sets the account control flags for the specified account.
///
public bool SetAccountControl(SecurityIdentifier objectSid, bool? enabled, bool? cannotChangePassword, bool? passwordNeverExpires, bool? smartcardLogonRequired, bool? useDESKeyOnly, bool? homedirRequired, bool skipMetaUpdate)
{
@@ -573,7 +573,7 @@ public bool SetAccountControl(SecurityIdentifier objectSid, bool? enabled, bool?
}
///
- /// SetAccountControl implementation.
+ /// Sets the account control flags for the specified account.
///
public bool SetAccountControl(Guid objectGuid, bool? enabled, bool? cannotChangePassword, bool? passwordNeverExpires, bool? smartcardLogonRequired, bool? useDESKeyOnly, bool? homedirRequired, bool skipMetaUpdate)
{
@@ -585,7 +585,7 @@ public bool SetAccountControl(Guid objectGuid, bool? enabled, bool? cannotChange
}
///
- /// UnlockAccount implementation.
+ /// Unlocks the specified user account.
///
public bool UnlockAccount(DistinguishedName dn, bool skipMetaUpdate)
{
@@ -597,7 +597,7 @@ public bool UnlockAccount(DistinguishedName dn, bool skipMetaUpdate)
}
///
- /// UnlockAccount implementation.
+ /// Unlocks the specified user account.
///
public bool UnlockAccount(string samAccountName, bool skipMetaUpdate)
{
@@ -609,7 +609,7 @@ public bool UnlockAccount(string samAccountName, bool skipMetaUpdate)
}
///
- /// UnlockAccount implementation.
+ /// Unlocks the specified user account.
///
public bool UnlockAccount(SecurityIdentifier objectSid, bool skipMetaUpdate)
{
@@ -621,7 +621,7 @@ public bool UnlockAccount(SecurityIdentifier objectSid, bool skipMetaUpdate)
}
///
- /// UnlockAccount implementation.
+ /// Unlocks the specified user account.
///
public bool UnlockAccount(Guid objectGuid, bool skipMetaUpdate)
{
@@ -633,7 +633,7 @@ public bool UnlockAccount(Guid objectGuid, bool skipMetaUpdate)
}
///
- /// SetPrimaryGroupId implementation.
+ /// Sets the primary group ID for the specified account.
///
public bool SetPrimaryGroupId(DistinguishedName dn, int groupId, bool skipMetaUpdate)
{
@@ -645,7 +645,7 @@ public bool SetPrimaryGroupId(DistinguishedName dn, int groupId, bool skipMetaUp
}
///
- /// SetPrimaryGroupId implementation.
+ /// Sets the primary group ID for the specified account.
///
public bool SetPrimaryGroupId(string samAccountName, int groupId, bool skipMetaUpdate)
{
@@ -657,7 +657,7 @@ public bool SetPrimaryGroupId(string samAccountName, int groupId, bool skipMetaU
}
///
- /// SetPrimaryGroupId implementation.
+ /// Sets the primary group ID for the specified account.
///
public bool SetPrimaryGroupId(SecurityIdentifier objectSid, int groupId, bool skipMetaUpdate)
{
@@ -670,7 +670,7 @@ public bool SetPrimaryGroupId(SecurityIdentifier objectSid, int groupId, bool sk
}
///
- /// SetPrimaryGroupId implementation.
+ /// Sets the primary group ID for the specified account.
///
public bool SetPrimaryGroupId(Guid objectGuid, int groupId, bool skipMetaUpdate)
{
diff --git a/Src/DSInternals.DataStore/DirectoryContext.cs b/Src/DSInternals.DataStore/DirectoryContext.cs
index 4955687..f292dc3 100644
--- a/Src/DSInternals.DataStore/DirectoryContext.cs
+++ b/Src/DSInternals.DataStore/DirectoryContext.cs
@@ -257,7 +257,7 @@ public IsamTransaction BeginTransaction()
}
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public void Dispose()
{
diff --git a/Src/DSInternals.DataStore/DirectorySchema.cs b/Src/DSInternals.DataStore/DirectorySchema.cs
index e684f8a..9f27509 100644
--- a/Src/DSInternals.DataStore/DirectorySchema.cs
+++ b/Src/DSInternals.DataStore/DirectorySchema.cs
@@ -143,7 +143,7 @@ public ICollection FindAllAttributes()
}
///
- /// FindAttribute implementation.
+ /// Finds the specified attribute in the schema.
///
public AttributeSchema? FindAttribute(string attributeName)
{
@@ -153,7 +153,7 @@ public ICollection FindAllAttributes()
}
///
- /// FindAttribute implementation.
+ /// Finds the specified attribute in the schema.
///
public AttributeSchema? FindAttribute(AttributeType attributeId)
{
@@ -208,7 +208,7 @@ public ICollection FindAllAttributes()
}
///
- /// Create implementation.
+ /// Creates a new instance.
///
public static DirectorySchema Create(IsamDatabase database)
{
diff --git a/Src/DSInternals.DataStore/DomainController.cs b/Src/DSInternals.DataStore/DomainController.cs
index 5708008..b93b68e 100644
--- a/Src/DSInternals.DataStore/DomainController.cs
+++ b/Src/DSInternals.DataStore/DomainController.cs
@@ -562,7 +562,7 @@ protected virtual void Dispose(bool disposing)
}
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public void Dispose()
{
diff --git a/Src/DSInternals.DataStore/Extensions/CursorExtensions.cs b/Src/DSInternals.DataStore/Extensions/CursorExtensions.cs
index d7cda59..c87a03c 100644
--- a/Src/DSInternals.DataStore/Extensions/CursorExtensions.cs
+++ b/Src/DSInternals.DataStore/Extensions/CursorExtensions.cs
@@ -474,7 +474,7 @@ public static bool SetValue(this Cursor cursor, Columnid columnId, T newValue
}
///
- /// SetValue implementation.
+ /// Sets the value of the specified property.
///
public static bool SetValue(this Cursor cursor, string columnName, byte[] newValue)
{
@@ -483,7 +483,7 @@ public static bool SetValue(this Cursor cursor, string columnName, byte[] newVal
}
///
- /// SetValue implementation.
+ /// Sets the value of the specified property.
///
public static bool SetValue(this Cursor cursor, Columnid columnId, byte[] newValue)
{
@@ -491,7 +491,7 @@ public static bool SetValue(this Cursor cursor, Columnid columnId, byte[] newVal
}
///
- /// SetValue implementation.
+ /// Sets the value of the specified property.
///
public static bool SetValue(this Cursor cursor, string columnName, string newValue)
{
@@ -500,7 +500,7 @@ public static bool SetValue(this Cursor cursor, string columnName, string newVal
}
///
- /// SetValue implementation.
+ /// Sets the value of the specified property.
///
public static bool SetValue(this Cursor cursor, Columnid columnId, string newValue)
{
@@ -508,7 +508,7 @@ public static bool SetValue(this Cursor cursor, Columnid columnId, string newVal
}
///
- /// SetValue implementation.
+ /// Sets the value of the specified property.
///
public static bool SetValue(this Cursor cursor, string columnName, DateTime? newValue, bool asGeneralizedTime)
{
@@ -517,7 +517,7 @@ public static bool SetValue(this Cursor cursor, string columnName, DateTime? new
}
///
- /// SetValue implementation.
+ /// Sets the value of the specified property.
///
public static bool SetValue(this Cursor cursor, Columnid columnId, DateTime? newValue, bool asGeneralizedTime)
{
diff --git a/Src/DSInternals.DataStore/SecurityDescriptorResolver.cs b/Src/DSInternals.DataStore/SecurityDescriptorResolver.cs
index 4a539f1..5359b49 100644
--- a/Src/DSInternals.DataStore/SecurityDescriptorResolver.cs
+++ b/Src/DSInternals.DataStore/SecurityDescriptorResolver.cs
@@ -115,7 +115,7 @@ public IEnumerable FindDescriptorHash(byte[] sdHas
}
///
- /// ComputeHash implementation.
+ /// Computes the hash of the specified input.
///
public static byte[] ComputeHash(GenericSecurityDescriptor securityDescriptor)
{
@@ -139,7 +139,7 @@ private static byte[] ComputeHash(MD5 hashFunction, GenericSecurityDescriptor se
}
///
- /// ComputeHash implementation.
+ /// Computes the hash of the specified input.
///
public static byte[] ComputeHash(string securityDescriptor)
{
@@ -161,7 +161,7 @@ private static byte[] ComputeHash(MD5 hashFunction, string securityDescriptor)
}
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public void Dispose()
{
diff --git a/Src/DSInternals.PowerShell/Commands/ADSI/GetADSIAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/ADSI/GetADSIAccountCommand.cs
index bc0bcda..5274ab7 100644
--- a/Src/DSInternals.PowerShell/Commands/ADSI/GetADSIAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/ADSI/GetADSIAccountCommand.cs
@@ -6,7 +6,7 @@
[Cmdlet(VerbsCommon.Get, "ADSIAccount")]
[OutputType(typeof(DSAccount), typeof(DSUser), typeof(DSComputer))]
///
- /// Represents a GetADSIAccountCommand.
+ /// Implements the GetADSIAccountCommand PowerShell cmdlet.
///
public class GetADSIAccountCommand : ADSICommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/AzureAD/GetAzureADUserExCommand.cs b/Src/DSInternals.PowerShell/Commands/AzureAD/GetAzureADUserExCommand.cs
index 2595ada..e9d1b55 100644
--- a/Src/DSInternals.PowerShell/Commands/AzureAD/GetAzureADUserExCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/AzureAD/GetAzureADUserExCommand.cs
@@ -8,7 +8,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Get, "AzureADUserEx", DefaultParameterSetName = ParamSetAllUsers)]
[OutputType(typeof(AzureADUser))]
///
- /// Represents a GetAzureADUserExCommand.
+ /// Implements the GetAzureADUserExCommand PowerShell cmdlet.
///
public class GetAzureADUserExCommand : AzureADCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/AzureAD/SetAzureADUserExCommand.cs b/Src/DSInternals.PowerShell/Commands/AzureAD/SetAzureADUserExCommand.cs
index 947b077..eed8aa7 100644
--- a/Src/DSInternals.PowerShell/Commands/AzureAD/SetAzureADUserExCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/AzureAD/SetAzureADUserExCommand.cs
@@ -6,7 +6,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Set, "AzureADUserEx", DefaultParameterSetName = ParamSetSingleUserUPN)]
[OutputType("None")]
///
- /// Represents a SetAzureADUserExCommand.
+ /// Implements the SetAzureADUserExCommand PowerShell cmdlet.
///
public class SetAzureADUserExCommand : AzureADCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Base/ADReplCommandBase.cs b/Src/DSInternals.PowerShell/Commands/Base/ADReplCommandBase.cs
index 025058e..96a22f3 100644
--- a/Src/DSInternals.PowerShell/Commands/Base/ADReplCommandBase.cs
+++ b/Src/DSInternals.PowerShell/Commands/Base/ADReplCommandBase.cs
@@ -59,7 +59,7 @@ protected override void BeginProcessing()
#endregion Cmdlet Overrides
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public void Dispose()
{
diff --git a/Src/DSInternals.PowerShell/Commands/Base/ADSICommandBase.cs b/Src/DSInternals.PowerShell/Commands/Base/ADSICommandBase.cs
index 08ecc52..611faaf 100644
--- a/Src/DSInternals.PowerShell/Commands/Base/ADSICommandBase.cs
+++ b/Src/DSInternals.PowerShell/Commands/Base/ADSICommandBase.cs
@@ -50,7 +50,7 @@ protected override void BeginProcessing()
#endregion Cmdlet Overrides
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public void Dispose()
{
diff --git a/Src/DSInternals.PowerShell/Commands/Base/AzureADCommandBase.cs b/Src/DSInternals.PowerShell/Commands/Base/AzureADCommandBase.cs
index 80a1d58..b4df281 100644
--- a/Src/DSInternals.PowerShell/Commands/Base/AzureADCommandBase.cs
+++ b/Src/DSInternals.PowerShell/Commands/Base/AzureADCommandBase.cs
@@ -55,7 +55,7 @@ protected override void BeginProcessing()
#region IDisposable Support
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public virtual void Dispose()
{
diff --git a/Src/DSInternals.PowerShell/Commands/Base/LsaPolicyCommandBase.cs b/Src/DSInternals.PowerShell/Commands/Base/LsaPolicyCommandBase.cs
index 6cfae72..ad8997f 100644
--- a/Src/DSInternals.PowerShell/Commands/Base/LsaPolicyCommandBase.cs
+++ b/Src/DSInternals.PowerShell/Commands/Base/LsaPolicyCommandBase.cs
@@ -42,7 +42,7 @@ protected abstract LsaPolicyAccessMask RequiredAccessMask
}
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public void Dispose()
{
diff --git a/Src/DSInternals.PowerShell/Commands/Base/SamCommandBase.cs b/Src/DSInternals.PowerShell/Commands/Base/SamCommandBase.cs
index 9177de0..63dd0f1 100644
--- a/Src/DSInternals.PowerShell/Commands/Base/SamCommandBase.cs
+++ b/Src/DSInternals.PowerShell/Commands/Base/SamCommandBase.cs
@@ -83,7 +83,7 @@ protected override void BeginProcessing()
#endregion Cmdlet Overrides
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public void Dispose()
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/AddADDBSidHistoryCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/AddADDBSidHistoryCommand.cs
index c6c9a03..85cb6a1 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/AddADDBSidHistoryCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/AddADDBSidHistoryCommand.cs
@@ -8,7 +8,7 @@
[Cmdlet(VerbsCommon.Add, "ADDBSidHistory")]
[OutputType("None")]
///
- /// Represents a AddADDBSidHistoryCommand.
+ /// Implements the AddADDBSidHistoryCommand PowerShell cmdlet.
///
public class AddADDBSidHistoryCommand : ADDBModifyPrincipalCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/DisableADDBAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/DisableADDBAccountCommand.cs
index ca628b8..715d691 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/DisableADDBAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/DisableADDBAccountCommand.cs
@@ -6,7 +6,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsLifecycle.Disable, "ADDBAccount")]
[OutputType("None")]
///
- /// Represents a DisableADDBAccountCommand.
+ /// Implements the DisableADDBAccountCommand PowerShell cmdlet.
///
public class DisableADDBAccountCommand : ADDBAccountStatusCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/EnableADDBAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/EnableADDBAccountCommand.cs
index 3663489..094a5ca 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/EnableADDBAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/EnableADDBAccountCommand.cs
@@ -5,7 +5,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsLifecycle.Enable, "ADDBAccount")]
[OutputType("None")]
///
- /// Represents a EnableADDBAccountCommand.
+ /// Implements the EnableADDBAccountCommand PowerShell cmdlet.
///
public class EnableADDBAccountCommand : ADDBAccountStatusCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBAccountCommand.cs
index 54126f4..b80e4b9 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBAccountCommand.cs
@@ -8,7 +8,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Get, "ADDBAccount")]
[OutputType(typeof(DSAccount), typeof(DSUser), typeof(DSComputer))]
///
- /// Represents a GetADDBAccountCommand.
+ /// Implements the GetADDBAccountCommand PowerShell cmdlet.
///
public class GetADDBAccountCommand : ADDBPrincipalCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBackupKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBackupKeyCommand.cs
index c9d7627..5fe5815 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBackupKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBackupKeyCommand.cs
@@ -9,7 +9,7 @@
[Cmdlet(VerbsCommon.Get, "ADDBBackupKey")]
[OutputType(typeof(DSInternals.Common.Data.DPAPIBackupKey))]
///
- /// Represents a GetADDBBackupKeyCommand.
+ /// Implements the GetADDBBackupKeyCommand PowerShell cmdlet.
///
public class GetADDBBackupKeyCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBitlockerRecoveryInformationCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBitlockerRecoveryInformationCommand.cs
index 3e2180f..b7f1dec 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBitlockerRecoveryInformationCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBitlockerRecoveryInformationCommand.cs
@@ -8,7 +8,7 @@
[Cmdlet(VerbsCommon.Get, "ADDBBitLockerRecoveryInformation")]
[OutputType(typeof(DSInternals.Common.Data.BitLockerRecoveryInformation))]
///
- /// Represents a GetADDBBitLockerRecoveryInformationCommand.
+ /// Implements the GetADDBBitLockerRecoveryInformationCommand PowerShell cmdlet.
///
public class GetADDBBitLockerRecoveryInformationCommand : ADDBObjectCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsResourceRecordCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsResourceRecordCommand.cs
index 9cf9087..b995804 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsResourceRecordCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsResourceRecordCommand.cs
@@ -6,7 +6,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Get, "ADDBDnsResourceRecord")]
[OutputType(typeof(DSInternals.Common.Data.DnsResourceRecord))]
///
- /// Represents a GetADDBDnsResourceRecordCommand.
+ /// Implements the GetADDBDnsResourceRecordCommand PowerShell cmdlet.
///
public class GetADDBDnsResourceRecordCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsZoneCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsZoneCommand.cs
index 9745ec3..448970f 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsZoneCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsZoneCommand.cs
@@ -6,7 +6,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Get, "ADDBDnsZone")]
[OutputType(typeof(string))]
///
- /// Represents a GetADDBDnsZoneCommand.
+ /// Implements the GetADDBDnsZoneCommand PowerShell cmdlet.
///
public class GetADDBDnsZoneCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDomainControllerCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDomainControllerCommand.cs
index 125f709..11b7868 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDomainControllerCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDomainControllerCommand.cs
@@ -5,7 +5,7 @@
[Cmdlet(VerbsCommon.Get, "ADDBDomainController")]
[OutputType(typeof(DSInternals.PowerShell.DomainController))]
///
- /// Represents a GetADDBDomainControllerCommand.
+ /// Implements the GetADDBDomainControllerCommand PowerShell cmdlet.
///
public class GetADDBDomainControllerCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBIndexCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBIndexCommand.cs
index 7e07c4e..34f23e4 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBIndexCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBIndexCommand.cs
@@ -7,7 +7,7 @@ namespace DSInternals.PowerShell.Commands
// TODO: output type
[OutputType("None")]
///
- /// Represents a GetADDBIndexCommand.
+ /// Implements the GetADDBIndexCommand PowerShell cmdlet.
///
public class GetADDBIndexCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBKdsRootKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBKdsRootKeyCommand.cs
index 9aadbc2..3485d86 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBKdsRootKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBKdsRootKeyCommand.cs
@@ -9,7 +9,7 @@
[Cmdlet(VerbsCommon.Get, "ADDBKdsRootKey", DefaultParameterSetName = GetADDBKdsRootKeyCommand.AllKeysParameterSet)]
[OutputType(typeof(DSInternals.Common.Data.KdsRootKey))]
///
- /// Represents a GetADDBKdsRootKeyCommand.
+ /// Implements the GetADDBKdsRootKeyCommand PowerShell cmdlet.
///
public class GetADDBKdsRootKeyCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBSchemaAttributeCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBSchemaAttributeCommand.cs
index 4db50cb..1fcd217 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBSchemaAttributeCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBSchemaAttributeCommand.cs
@@ -7,7 +7,7 @@
[Cmdlet(VerbsCommon.Get, "ADDBSchemaAttribute")]
[OutputType(typeof(AttributeSchema))]
///
- /// Represents a GetADDBSchemaAttributeCommand.
+ /// Implements the GetADDBSchemaAttributeCommand PowerShell cmdlet.
///
public class GetADDBSchemaAttributeCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBServiceAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBServiceAccountCommand.cs
index 14b6dc5..e7637ff 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBServiceAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBServiceAccountCommand.cs
@@ -7,7 +7,7 @@
[Cmdlet(VerbsCommon.Get, "ADDBServiceAccount")]
[OutputType(typeof(DSInternals.Common.Data.GroupManagedServiceAccount))]
///
- /// Represents a GetADDBServiceAccountCommand.
+ /// Implements the GetADDBServiceAccountCommand PowerShell cmdlet.
///
public class GetADDBServiceAccountCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBTrust.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBTrust.cs
index 02559e7..58d5bc2 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBTrust.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBTrust.cs
@@ -8,7 +8,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Get, "ADDBTrust")]
[OutputType(typeof(TrustedDomain))]
///
- /// Represents a GetADDBTrustCommand.
+ /// Implements the GetADDBTrustCommand PowerShell cmdlet.
///
public class GetADDBTrustCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetBootKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetBootKeyCommand.cs
index 11d585c..394adf5 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetBootKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetBootKeyCommand.cs
@@ -10,7 +10,7 @@
[Cmdlet(VerbsCommon.Get, "BootKey")]
[OutputType(typeof(string))]
///
- /// Represents a GetBootKeyCommand.
+ /// Implements the GetBootKeyCommand PowerShell cmdlet.
///
public class GetBootKeyCommand : PSCmdletEx
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/NewADDBRestoreFromMediaScriptCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/NewADDBRestoreFromMediaScriptCommand.cs
index de529bb..ea2dc72 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/NewADDBRestoreFromMediaScriptCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/NewADDBRestoreFromMediaScriptCommand.cs
@@ -14,7 +14,7 @@
[Cmdlet(VerbsCommon.New, "ADDBRestoreFromMediaScript")]
[OutputType(typeof(string))]
///
- /// Represents a NewADDBRestoreFromMediaScriptCommand.
+ /// Implements the NewADDBRestoreFromMediaScriptCommand PowerShell cmdlet.
///
public class NewADDBRestoreFromMediaScriptCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/RemoveADDBObjectCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/RemoveADDBObjectCommand.cs
index 6b332e3..711cf48 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/RemoveADDBObjectCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/RemoveADDBObjectCommand.cs
@@ -12,7 +12,7 @@
)]
[OutputType("None")]
///
- /// Represents a RemoveADDBObjectCommand.
+ /// Implements the RemoveADDBObjectCommand PowerShell cmdlet.
///
public class RemoveADDBObjectCommand : ADDBObjectCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/RestoreADDBAttributeCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/RestoreADDBAttributeCommand.cs
index 1798935..035073e 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/RestoreADDBAttributeCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/RestoreADDBAttributeCommand.cs
@@ -6,7 +6,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsData.Restore, "ADDBAttribute")]
[OutputType("None")]
///
- /// Represents a RestoreADDBAttributeCommand.
+ /// Implements the RestoreADDBAttributeCommand PowerShell cmdlet.
///
public class RestoreADDBAttributeCommand : ADDBObjectCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountControlCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountControlCommand.cs
index 2a87393..117fe4d 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountControlCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountControlCommand.cs
@@ -10,7 +10,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Set, "ADDBAccountControl")]
[OutputType("None")]
///
- /// Represents a SetADDBAccountControlCommand.
+ /// Implements the SetADDBAccountControlCommand PowerShell cmdlet.
///
public class SetADDBAccountControlCommand : ADDBModifyPrincipalCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordCommand.cs
index 6f2e6f5..8aced15 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordCommand.cs
@@ -9,7 +9,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Set, "ADDBAccountPassword")]
[OutputType("None")]
///
- /// Represents a SetADDBAccountPasswordCommand.
+ /// Implements the SetADDBAccountPasswordCommand PowerShell cmdlet.
///
public class SetADDBAccountPasswordCommand : ADDBModifyPrincipalCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordHashCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordHashCommand.cs
index 70d040c..34521a3 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordHashCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordHashCommand.cs
@@ -8,7 +8,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Set, "ADDBAccountPasswordHash")]
[OutputType("None")]
///
- /// Represents a SetADDBAccountPasswordHashCommand.
+ /// Implements the SetADDBAccountPasswordHashCommand PowerShell cmdlet.
///
public class SetADDBAccountPasswordHashCommand : ADDBModifyPrincipalCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBBootKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBBootKeyCommand.cs
index 1782a54..7ddcfe6 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBBootKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBBootKeyCommand.cs
@@ -7,7 +7,7 @@
[Cmdlet(VerbsCommon.Set, "ADDBBootKey")]
[OutputType("None")]
///
- /// Represents a SetADDBBootKeyCommand.
+ /// Implements the SetADDBBootKeyCommand PowerShell cmdlet.
///
public class SetADDBBootKeyCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBDomainControllerCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBDomainControllerCommand.cs
index accc5b8..118bbcc 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBDomainControllerCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBDomainControllerCommand.cs
@@ -7,7 +7,7 @@
[Cmdlet(VerbsCommon.Set, "ADDBDomainController", ConfirmImpact = ConfirmImpact.High)]
[OutputType("None")]
///
- /// Represents a SetADDBDomainControllerCommand.
+ /// Implements the SetADDBDomainControllerCommand PowerShell cmdlet.
///
public class SetADDBDomainControllerCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBPrimaryGroupCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBPrimaryGroupCommand.cs
index 875e2dc..c54a547 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBPrimaryGroupCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBPrimaryGroupCommand.cs
@@ -8,7 +8,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Set, "ADDBPrimaryGroup")]
[OutputType("None")]
///
- /// Represents a SetADDBPrimaryGroupCommand.
+ /// Implements the SetADDBPrimaryGroupCommand PowerShell cmdlet.
///
public class SetADDBPrimaryGroupCommand : ADDBModifyPrincipalCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/UnlockADDBAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/UnlockADDBAccountCommand.cs
index 0ec5648..23be962 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/UnlockADDBAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/UnlockADDBAccountCommand.cs
@@ -7,7 +7,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Unlock, "ADDBAccount")]
[OutputType("None")]
///
- /// Represents a UnlockADDBAccountCommand.
+ /// Implements the UnlockADDBAccountCommand PowerShell cmdlet.
///
public class UnlockADDBAccountCommand : ADDBModifyPrincipalCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromGPPrefPasswordCommand.cs b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromGPPrefPasswordCommand.cs
index 80028a9..5a60127 100644
--- a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromGPPrefPasswordCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromGPPrefPasswordCommand.cs
@@ -7,7 +7,7 @@
[Cmdlet(VerbsData.ConvertFrom, "GPPrefPassword")]
[OutputType(new Type[] { typeof(string) })]
///
- /// Represents a ConvertFromGPPrefPasswordCommand.
+ /// Implements the ConvertFromGPPrefPasswordCommand PowerShell cmdlet.
///
public class ConvertFromGPPrefPasswordCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromUnicodePasswordCommand.cs b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromUnicodePasswordCommand.cs
index e7ec569..246db54 100644
--- a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromUnicodePasswordCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromUnicodePasswordCommand.cs
@@ -8,7 +8,7 @@
[Cmdlet(VerbsData.ConvertFrom, "UnicodePassword")]
[OutputType(typeof(string))]
///
- /// Represents a ConvertFromUnicodePasswordCommand.
+ /// Implements the ConvertFromUnicodePasswordCommand PowerShell cmdlet.
///
public class ConvertFromUnicodePasswordCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToGPPrefPasswordCommand.cs b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToGPPrefPasswordCommand.cs
index 78855cd..e2009bd 100644
--- a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToGPPrefPasswordCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToGPPrefPasswordCommand.cs
@@ -8,7 +8,7 @@
[Cmdlet(VerbsData.ConvertTo, "GPPrefPassword")]
[OutputType(new Type[] { typeof(string) })]
///
- /// Represents a ConvertToGPPrefPasswordCommand.
+ /// Implements the ConvertToGPPrefPasswordCommand PowerShell cmdlet.
///
public class ConvertToGPPrefPasswordCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToUnicodePasswordCommand.cs b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToUnicodePasswordCommand.cs
index 749d19f..03449ca 100644
--- a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToUnicodePasswordCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToUnicodePasswordCommand.cs
@@ -8,7 +8,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsData.ConvertTo, "UnicodePassword")]
[OutputType(new Type[] { typeof(String) })]
///
- /// Represents a ConvertToUnicodePasswordCommand.
+ /// Implements the ConvertToUnicodePasswordCommand PowerShell cmdlet.
///
public class ConvertToUnicodePasswordCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToKerberosKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToKerberosKeyCommand.cs
index f882048..e35b5cf 100644
--- a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToKerberosKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToKerberosKeyCommand.cs
@@ -9,7 +9,7 @@
[Cmdlet(VerbsData.ConvertTo, "KerberosKey")]
[OutputType(new Type[] { typeof(KerberosKeyDataNew) })]
///
- /// Represents a ConvertToKerberosKeyCommand.
+ /// Implements the ConvertToKerberosKeyCommand PowerShell cmdlet.
///
public class ConvertToKerberosKeyCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToLMHashCommand.cs b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToLMHashCommand.cs
index 8c65b47..cbfc7fd 100644
--- a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToLMHashCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToLMHashCommand.cs
@@ -11,7 +11,7 @@
[Cmdlet(VerbsData.ConvertTo, "LMHash")]
[OutputType(new Type[] { typeof(string) })]
///
- /// Represents a ConvertToLMHashCommand.
+ /// Converts a password to its LM hash representation.
///
public class ConvertToLMHashCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToNTHashCommand.cs b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToNTHashCommand.cs
index 1f77cd1..bc46a9c 100644
--- a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToNTHashCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToNTHashCommand.cs
@@ -11,7 +11,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsData.ConvertTo, "NTHash")]
[OutputType(new Type[] { typeof(string) })]
///
- /// Represents a ConvertToNTHashCommand.
+ /// Converts a password to its NT hash representation.
///
public class ConvertToNTHashCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToOrgIdHashCommand.cs b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToOrgIdHashCommand.cs
index 75c87b6..8b1c94b 100644
--- a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToOrgIdHashCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToOrgIdHashCommand.cs
@@ -9,7 +9,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsData.ConvertTo, "OrgIdHash", DefaultParameterSetName = "FromHash")]
[OutputType(new Type[] { typeof(string) })]
///
- /// Represents a ConvertToOrgIdHashCommand.
+ /// Implements the ConvertToOrgIdHashCommand PowerShell cmdlet.
///
public class ConvertToOrgIdHashCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Hash/SetSamAccountPasswordHashCommand.cs b/Src/DSInternals.PowerShell/Commands/Hash/SetSamAccountPasswordHashCommand.cs
index 67f99c1..d78e45b 100644
--- a/Src/DSInternals.PowerShell/Commands/Hash/SetSamAccountPasswordHashCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Hash/SetSamAccountPasswordHashCommand.cs
@@ -11,7 +11,7 @@
[Cmdlet(VerbsCommon.Set, "SamAccountPasswordHash")]
[OutputType("None")]
///
- /// Represents a SetSamAccountPasswordHashCommand.
+ /// Implements the SetSamAccountPasswordHashCommand PowerShell cmdlet.
///
public class SetSamAccountPasswordHashCommand : SamCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/LSA/GetLsaBackupKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/LSA/GetLsaBackupKeyCommand.cs
index 0d7f351..039242f 100644
--- a/Src/DSInternals.PowerShell/Commands/LSA/GetLsaBackupKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/LSA/GetLsaBackupKeyCommand.cs
@@ -7,7 +7,7 @@
[Cmdlet(VerbsCommon.Get, "LsaBackupKey")]
[OutputType(typeof(DPAPIBackupKey))]
///
- /// Represents a GetLsaBackupKeyCommand.
+ /// Implements the GetLsaBackupKeyCommand PowerShell cmdlet.
///
public class GetLsaBackupKeyCommand : LsaPolicyCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/LSA/GetLsaPolicyInformationCommand.cs b/Src/DSInternals.PowerShell/Commands/LSA/GetLsaPolicyInformationCommand.cs
index 6c53151..6c859d9 100644
--- a/Src/DSInternals.PowerShell/Commands/LSA/GetLsaPolicyInformationCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/LSA/GetLsaPolicyInformationCommand.cs
@@ -6,7 +6,7 @@
[Cmdlet(VerbsCommon.Get, "LsaPolicyInformation")]
[OutputType(typeof(LsaPolicyInformation))]
///
- /// Represents a GetLsaPolicyInformationCommand.
+ /// Implements the GetLsaPolicyInformationCommand PowerShell cmdlet.
///
public class GetLsaPolicyInformationCommand : LsaPolicyCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/LSA/GetSamPasswordPolicyCommand.cs b/Src/DSInternals.PowerShell/Commands/LSA/GetSamPasswordPolicyCommand.cs
index 189a8c1..769f7c3 100644
--- a/Src/DSInternals.PowerShell/Commands/LSA/GetSamPasswordPolicyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/LSA/GetSamPasswordPolicyCommand.cs
@@ -7,7 +7,7 @@
[Cmdlet(VerbsCommon.Get, "SamPasswordPolicy")]
[OutputType(typeof(SamDomainPasswordInformation))]
///
- /// Represents a GetSamPasswordPolicyCommand.
+ /// Implements the GetSamPasswordPolicyCommand PowerShell cmdlet.
///
public class GetSamPasswordPolicyCommand : SamCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/LSA/SetLsaPolicyInformationCommand.cs b/Src/DSInternals.PowerShell/Commands/LSA/SetLsaPolicyInformationCommand.cs
index de12c47..d47cc31 100644
--- a/Src/DSInternals.PowerShell/Commands/LSA/SetLsaPolicyInformationCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/LSA/SetLsaPolicyInformationCommand.cs
@@ -9,7 +9,7 @@
[Cmdlet(VerbsCommon.Set, "LsaPolicyInformation")]
[OutputType("None")]
///
- /// Represents a SetLsaPolicyInformationCommand.
+ /// Implements the SetLsaPolicyInformationCommand PowerShell cmdlet.
///
public class SetLsaPolicyInformationCommand : LsaPolicyCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Misc/ConvertFromADManagedPasswordBlobCommand.cs b/Src/DSInternals.PowerShell/Commands/Misc/ConvertFromADManagedPasswordBlobCommand.cs
index 7234848..c283337 100644
--- a/Src/DSInternals.PowerShell/Commands/Misc/ConvertFromADManagedPasswordBlobCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Misc/ConvertFromADManagedPasswordBlobCommand.cs
@@ -7,7 +7,7 @@
[Cmdlet(VerbsData.ConvertFrom, "ADManagedPasswordBlob")]
[OutputType(typeof(ManagedPassword))]
///
- /// Represents a ConvertFromADManagedPasswordBlobCommand.
+ /// Implements the ConvertFromADManagedPasswordBlobCommand PowerShell cmdlet.
///
public class ConvertFromADManagedPasswordBlobCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Misc/ConvertToHexCommand.cs b/Src/DSInternals.PowerShell/Commands/Misc/ConvertToHexCommand.cs
index 39bdb17..f7552da 100644
--- a/Src/DSInternals.PowerShell/Commands/Misc/ConvertToHexCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Misc/ConvertToHexCommand.cs
@@ -7,7 +7,7 @@
[Cmdlet(VerbsData.ConvertTo, "Hex")]
[OutputType(new Type[] { typeof(string) })]
///
- /// Represents a ConvertToHexCommand.
+ /// Implements the ConvertToHexCommand PowerShell cmdlet.
///
public class ConvertToHexCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Misc/GetADKeyCredential.cs b/Src/DSInternals.PowerShell/Commands/Misc/GetADKeyCredential.cs
index 6f5321c..ae11e78 100644
--- a/Src/DSInternals.PowerShell/Commands/Misc/GetADKeyCredential.cs
+++ b/Src/DSInternals.PowerShell/Commands/Misc/GetADKeyCredential.cs
@@ -8,7 +8,7 @@
[Cmdlet(VerbsCommon.Get, "ADKeyCredential", DefaultParameterSetName = ParamSetFromUserCertificate)]
[OutputType(new Type[] { typeof(KeyCredential) })]
///
- /// Represents a GetADKeyCredentialCommand.
+ /// Implements the GetADKeyCredentialCommand PowerShell cmdlet.
///
public class GetADKeyCredentialCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Misc/TestPasswordQualityCommand.cs b/Src/DSInternals.PowerShell/Commands/Misc/TestPasswordQualityCommand.cs
index 2c8c044..3d66b49 100644
--- a/Src/DSInternals.PowerShell/Commands/Misc/TestPasswordQualityCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Misc/TestPasswordQualityCommand.cs
@@ -13,7 +13,7 @@
[Cmdlet(VerbsDiagnostic.Test, "PasswordQuality", DefaultParameterSetName = ParamSetSingleSortedFile)]
[OutputType(new Type[] { typeof(PasswordQualityTestResult) })]
///
- /// Represents a TestPasswordQualityCommand.
+ /// Implements the TestPasswordQualityCommand PowerShell cmdlet.
///
public class TestPasswordQualityCommand : PSCmdletEx, IDisposable
{
@@ -554,7 +554,7 @@ protected virtual void Dispose(bool disposing)
// This code added to correctly implement the disposable pattern.
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public void Dispose()
{
diff --git a/Src/DSInternals.PowerShell/Commands/Replication/AddADReplNgcKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Replication/AddADReplNgcKeyCommand.cs
index f4c3bf8..0ee100c 100644
--- a/Src/DSInternals.PowerShell/Commands/Replication/AddADReplNgcKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Replication/AddADReplNgcKeyCommand.cs
@@ -6,7 +6,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Add, "ADReplNgcKey")]
[OutputType("None")]
///
- /// Represents a AddADReplNgcKeyCommand.
+ /// Implements the AddADReplNgcKeyCommand PowerShell cmdlet.
///
public class AddADReplNgcKeyCommand : ADReplPrincipalCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Replication/GetADReplAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/Replication/GetADReplAccountCommand.cs
index 5b946f6..1e8f794 100644
--- a/Src/DSInternals.PowerShell/Commands/Replication/GetADReplAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Replication/GetADReplAccountCommand.cs
@@ -10,7 +10,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Get, "ADReplAccount")]
[OutputType(typeof(DSAccount), typeof(DSUser), typeof(DSComputer))]
///
- /// Represents a GetADReplAccountCommand.
+ /// Implements the GetADReplAccountCommand PowerShell cmdlet.
///
public class GetADReplAccountCommand : ADReplPrincipalCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Replication/GetADReplBackupKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Replication/GetADReplBackupKeyCommand.cs
index fd46a69..6bf7746 100644
--- a/Src/DSInternals.PowerShell/Commands/Replication/GetADReplBackupKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Replication/GetADReplBackupKeyCommand.cs
@@ -6,7 +6,7 @@
[Cmdlet(VerbsCommon.Get, "ADReplBackupKey")]
[OutputType(typeof(DPAPIBackupKey))]
///
- /// Represents a GetADReplBackupKeyCommand.
+ /// Implements the GetADReplBackupKeyCommand PowerShell cmdlet.
///
public class GetADReplBackupKeyCommand : ADReplCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Replication/GetADReplKdsRootKey.cs b/Src/DSInternals.PowerShell/Commands/Replication/GetADReplKdsRootKey.cs
index c002295..26e9174 100644
--- a/Src/DSInternals.PowerShell/Commands/Replication/GetADReplKdsRootKey.cs
+++ b/Src/DSInternals.PowerShell/Commands/Replication/GetADReplKdsRootKey.cs
@@ -7,7 +7,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Get, "ADReplKdsRootKey")]
[OutputType(typeof(KdsRootKey))]
///
- /// Represents a GetADReplKdsRootKeyCommand.
+ /// Implements the GetADReplKdsRootKeyCommand PowerShell cmdlet.
///
public class GetADReplKdsRootKeyCommand : ADReplCommandBase
{
diff --git a/Src/DSInternals.Replication.Model/DSName.cs b/Src/DSInternals.Replication.Model/DSName.cs
index 91eb71c..aa7586b 100644
--- a/Src/DSInternals.Replication.Model/DSName.cs
+++ b/Src/DSInternals.Replication.Model/DSName.cs
@@ -43,7 +43,7 @@ private DSName()
}
///
- /// Parse implementation.
+ /// Parses the specified input.
///
public static DSName Parse(ReadOnlySpan buffer)
{
diff --git a/Src/DSInternals.Replication.Model/ReplicaObject.cs b/Src/DSInternals.Replication.Model/ReplicaObject.cs
index aa36842..b92702b 100644
--- a/Src/DSInternals.Replication.Model/ReplicaObject.cs
+++ b/Src/DSInternals.Replication.Model/ReplicaObject.cs
@@ -193,7 +193,7 @@ public override bool HasAttribute(string name)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out byte[] value)
{
@@ -210,7 +210,7 @@ public override void ReadAttribute(string name, out byte[] value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out byte[][] value)
{
@@ -227,7 +227,7 @@ public override void ReadAttribute(string name, out byte[][] value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out int? value)
{
@@ -244,7 +244,7 @@ public override void ReadAttribute(string name, out int? value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out long? value)
{
@@ -261,7 +261,7 @@ public override void ReadAttribute(string name, out long? value)
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out string? value, bool unicode = true)
{
@@ -278,7 +278,7 @@ public override void ReadAttribute(string name, out string? value, bool unicode
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out string[]? values, bool unicode = true)
{
@@ -295,7 +295,7 @@ public override void ReadAttribute(string name, out string[]? values, bool unico
}
///
- /// ReadAttribute implementation.
+ /// Reads the value of the specified attribute.
///
public override void ReadAttribute(string name, out DistinguishedName? value)
{
diff --git a/Src/DSInternals.Replication.Model/ReplicationCookie.cs b/Src/DSInternals.Replication.Model/ReplicationCookie.cs
index 4960cf0..98dffcc 100644
--- a/Src/DSInternals.Replication.Model/ReplicationCookie.cs
+++ b/Src/DSInternals.Replication.Model/ReplicationCookie.cs
@@ -70,7 +70,7 @@ public bool IsInitial
}
///
- /// GetHashCode implementation.
+ /// Returns a hash code for this instance.
///
public override int GetHashCode()
{
@@ -83,7 +83,7 @@ public override int GetHashCode()
}
///
- /// Equals implementation.
+ /// Determines whether the specified object is equal to this instance.
///
public override bool Equals(object obj)
{
@@ -105,7 +105,7 @@ public override bool Equals(object obj)
}
///
- /// Equals implementation.
+ /// Determines whether the specified object is equal to this instance.
///
public bool Equals(ReplicationCookie cookie)
{
diff --git a/Src/DSInternals.Replication.Model/ReplicationCursor.cs b/Src/DSInternals.Replication.Model/ReplicationCursor.cs
index f003548..cf159c0 100644
--- a/Src/DSInternals.Replication.Model/ReplicationCursor.cs
+++ b/Src/DSInternals.Replication.Model/ReplicationCursor.cs
@@ -37,7 +37,7 @@ public long UpToDatenessUsn
}
///
- /// ToString implementation.
+ /// Returns a string representation of the object.
///
public override string ToString()
{
diff --git a/Src/DSInternals.Replication/DirectoryReplicationClient.cs b/Src/DSInternals.Replication/DirectoryReplicationClient.cs
index 6539f96..4c7be77 100644
--- a/Src/DSInternals.Replication/DirectoryReplicationClient.cs
+++ b/Src/DSInternals.Replication/DirectoryReplicationClient.cs
@@ -124,7 +124,7 @@ public ReplicationCursor[] GetReplicationCursors(string namingContext)
}
///
- /// GetAccounts implementation.
+ /// Gets account information from the data store.
///
public IEnumerable GetAccounts(string domainNamingContext, ReplicationProgressHandler progressReporter = null, AccountPropertySets propertySets = AccountPropertySets.All)
{
@@ -134,7 +134,7 @@ public IEnumerable GetAccounts(string domainNamingContext, Replicatio
}
///
- /// GetAccounts implementation.
+ /// Gets account information from the data store.
///
public IEnumerable GetAccounts(ReplicationCookie initialCookie, ReplicationProgressHandler progressReporter = null, AccountPropertySets propertySets = AccountPropertySets.All)
{
@@ -174,7 +174,7 @@ public IEnumerable GetAccounts(ReplicationCookie initialCookie, Repli
}
///
- /// GetAccount implementation.
+ /// Gets account information from the data store.
///
public DSAccount GetAccount(Guid objectGuid, AccountPropertySets propertySets = AccountPropertySets.All)
{
@@ -191,7 +191,7 @@ public DSAccount GetAccount(Guid objectGuid, AccountPropertySets propertySets =
}
///
- /// GetAccount implementation.
+ /// Gets account information from the data store.
///
public DSAccount GetAccount(string distinguishedName, AccountPropertySets propertySets = AccountPropertySets.All)
{
@@ -208,7 +208,7 @@ public DSAccount GetAccount(string distinguishedName, AccountPropertySets proper
}
///
- /// GetAccount implementation.
+ /// Gets account information from the data store.
///
public DSAccount GetAccount(NTAccount accountName, AccountPropertySets propertySets = AccountPropertySets.All)
{
@@ -217,7 +217,7 @@ public DSAccount GetAccount(NTAccount accountName, AccountPropertySets propertyS
}
///
- /// GetAccount implementation.
+ /// Gets account information from the data store.
///
public DSAccount GetAccount(SecurityIdentifier sid, AccountPropertySets propertySets = AccountPropertySets.All)
{
@@ -226,7 +226,7 @@ public DSAccount GetAccount(SecurityIdentifier sid, AccountPropertySets property
}
///
- /// GetKdsRootKey implementation.
+ /// Gets the KDS root key from the directory store.
///
public KdsRootKey? GetKdsRootKey(Guid rootKeyId, bool suppressNotFoundException = false)
{
@@ -284,7 +284,7 @@ private DPAPIBackupKey GetLSASecret(string distinguishedName)
}
///
- /// WriteNgcKey implementation.
+ /// Writes the NGC key to the specified location.
///
public void WriteNgcKey(Guid objectGuid, byte[] publicKey)
{
@@ -293,7 +293,7 @@ public void WriteNgcKey(Guid objectGuid, byte[] publicKey)
}
///
- /// WriteNgcKey implementation.
+ /// Writes the NGC key to the specified location.
///
public void WriteNgcKey(NTAccount accountName, byte[] publicKey)
{
@@ -302,7 +302,7 @@ public void WriteNgcKey(NTAccount accountName, byte[] publicKey)
}
///
- /// WriteNgcKey implementation.
+ /// Writes the NGC key to the specified location.
///
public void WriteNgcKey(SecurityIdentifier sid, byte[] publicKey)
{
@@ -311,7 +311,7 @@ public void WriteNgcKey(SecurityIdentifier sid, byte[] publicKey)
}
///
- /// WriteNgcKey implementation.
+ /// Writes the NGC key to the specified location.
///
public void WriteNgcKey(string accountDN, byte[] publicKey)
{
@@ -354,7 +354,7 @@ private void CreateRpcConnection(string server, RpcProtocol protocol, NetworkCre
}
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public void Dispose()
{
diff --git a/Src/DSInternals.Replication/NDceRpc.Microsoft/Client.cs b/Src/DSInternals.Replication/NDceRpc.Microsoft/Client.cs
index bee98d4..0f6481f 100644
--- a/Src/DSInternals.Replication/NDceRpc.Microsoft/Client.cs
+++ b/Src/DSInternals.Replication/NDceRpc.Microsoft/Client.cs
@@ -206,7 +206,7 @@ protected bool Equals(Client other)
}
///
- /// Equals implementation.
+ /// Determines whether the specified object is equal to this instance.
///
public override bool Equals(object obj)
{
@@ -217,7 +217,7 @@ public override bool Equals(object obj)
}
///
- /// GetHashCode implementation.
+ /// Returns a hash code for this instance.
///
public override int GetHashCode()
{
diff --git a/Src/DSInternals.Replication/NDceRpc.Microsoft/EndpointBindingInfo.cs b/Src/DSInternals.Replication/NDceRpc.Microsoft/EndpointBindingInfo.cs
index 5056d30..8192faa 100644
--- a/Src/DSInternals.Replication/NDceRpc.Microsoft/EndpointBindingInfo.cs
+++ b/Src/DSInternals.Replication/NDceRpc.Microsoft/EndpointBindingInfo.cs
@@ -37,7 +37,7 @@ public EndpointBindingInfo(RpcProtseq protseq, string networkAddr, string endPoi
}
///
- /// Clone implementation.
+ /// Creates a copy of this instance.
///
public object Clone()
{
diff --git a/Src/DSInternals.Replication/NDceRpc.Microsoft/RpcHandle.cs b/Src/DSInternals.Replication/NDceRpc.Microsoft/RpcHandle.cs
index f8822a6..52934be 100644
--- a/Src/DSInternals.Replication/NDceRpc.Microsoft/RpcHandle.cs
+++ b/Src/DSInternals.Replication/NDceRpc.Microsoft/RpcHandle.cs
@@ -16,7 +16,7 @@ public abstract class RpcHandle : IDisposable
}
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public void Dispose()
{
@@ -24,7 +24,7 @@ public void Dispose()
}
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public void Dispose(bool disposing)
{
@@ -55,7 +55,7 @@ protected bool Equals(RpcHandle other)
}
///
- /// Equals implementation.
+ /// Determines whether the specified object is equal to this instance.
///
public override bool Equals(object obj)
{
@@ -67,7 +67,7 @@ public override bool Equals(object obj)
}
///
- /// GetHashCode implementation.
+ /// Returns a hash code for this instance.
///
public override int GetHashCode()
{
diff --git a/Src/DSInternals.SAM/Interop/Structs/LsaBuffer.cs b/Src/DSInternals.SAM/Interop/Structs/LsaBuffer.cs
index 7e33a17..2278817 100644
--- a/Src/DSInternals.SAM/Interop/Structs/LsaBuffer.cs
+++ b/Src/DSInternals.SAM/Interop/Structs/LsaBuffer.cs
@@ -28,7 +28,7 @@ public struct LsaBuffer
public IntPtr Buffer;
///
- /// GetBytes implementation.
+ /// Gets the byte representation of the data.
///
public byte[] GetBytes()
{
diff --git a/Src/DSInternals.SAM/Wrappers/LsaPolicy.cs b/Src/DSInternals.SAM/Wrappers/LsaPolicy.cs
index 4a7f917..dc0267f 100644
--- a/Src/DSInternals.SAM/Wrappers/LsaPolicy.cs
+++ b/Src/DSInternals.SAM/Wrappers/LsaPolicy.cs
@@ -198,7 +198,7 @@ protected virtual void Dispose(bool disposing)
}
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public void Dispose()
{
diff --git a/Src/DSInternals.SAM/Wrappers/SamObject.cs b/Src/DSInternals.SAM/Wrappers/SamObject.cs
index 036dcbe..7fce1c9 100644
--- a/Src/DSInternals.SAM/Wrappers/SamObject.cs
+++ b/Src/DSInternals.SAM/Wrappers/SamObject.cs
@@ -29,7 +29,7 @@ public void ReleaseHandle()
}
}
///
- /// Dispose implementation.
+ /// Releases all resources used by this instance.
///
public void Dispose()
{
From 6fa9e4b228f9b41dde7461b338a71cc73dd2c51f Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 3 Sep 2025 19:42:13 +0000
Subject: [PATCH 11/22] Improve XML documentation: Replace generic comments
with meaningful descriptions in 25+ files
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
.../ADSI/AdsiObjectAdapter.cs | 4 ++-
.../Asn1/DpapiNg/CngProtectedDataBlob.cs | 11 +++++---
.../Asn1/DpapiNg/ProtectionKeyDescriptor.cs | 10 ++++---
.../Cryptography/Asn1/Pkcs12/Pfx.cs | 8 ++++--
Src/DSInternals.Common/Cryptography/Crc32.cs | 4 ++-
.../Cryptography/DirectorySecretDecryptor.cs | 20 +++++++++++---
.../Cryptography/GPPrefPwdObfuscator.cs | 8 ++++--
.../Cryptography/HashEqualityComparer.cs | 5 ++--
.../Cryptography/PrivateKeyEncryptionType.cs | 2 +-
.../Cryptography/SecretEncryptionType.cs | 2 +-
.../Cryptography/SecureStringExtensions.cs | 8 ++++--
.../Cryptography/SortedFileSearcher.cs | 6 +++--
.../Interop/Structs/LsaBuffer.cs | 3 ---
.../Interop/Structs/SamRidEnumeration.cs | 3 ---
.../Wrappers/LsaDomainInformation.cs | 2 +-
Src/DSInternals.SAM/Wrappers/LsaPolicy.cs | 11 +++++---
Src/DSInternals.SAM/Wrappers/SamDomain.cs | 24 ++++++++++++-----
Src/DSInternals.SAM/Wrappers/SamObject.cs | 2 +-
Src/DSInternals.SAM/Wrappers/SamServer.cs | 26 ++++++++++++++-----
Src/DSInternals.SAM/Wrappers/SamUser.cs | 10 ++++---
20 files changed, 118 insertions(+), 51 deletions(-)
diff --git a/Src/DSInternals.Common/ADSI/AdsiObjectAdapter.cs b/Src/DSInternals.Common/ADSI/AdsiObjectAdapter.cs
index 5d5a38b..d24ddca 100644
--- a/Src/DSInternals.Common/ADSI/AdsiObjectAdapter.cs
+++ b/Src/DSInternals.Common/ADSI/AdsiObjectAdapter.cs
@@ -124,8 +124,10 @@ public override void ReadAttribute(string name, out DistinguishedName value)
}
///
- /// ReadLinkedValues implementation.
+ /// Reads linked attribute values that contain DN with binary data.
///
+ /// The name of the linked attribute to read.
+ /// When this method returns, contains the binary values from the linked attribute, or null if the attribute is not present.
public override void ReadLinkedValues(string attributeName, out byte[][] values)
{
// Parse the DN with binary value
diff --git a/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/CngProtectedDataBlob.cs b/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/CngProtectedDataBlob.cs
index 02896e4..616e831 100644
--- a/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/CngProtectedDataBlob.cs
+++ b/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/CngProtectedDataBlob.cs
@@ -22,8 +22,9 @@ public class CngProtectedDataBlob
///
- /// Decrypt implementation.
+ /// Decrypts the DPAPI-NG protected data using the Windows CNG API.
///
+ /// A read-only span containing the decrypted data.
public ReadOnlySpan Decrypt()
{
if (this.RawData.Length == 0)
@@ -38,8 +39,10 @@ public ReadOnlySpan Decrypt()
}
///
- /// TryDecrypt implementation.
+ /// Attempts to decrypt the DPAPI-NG protected data without throwing exceptions on failure.
///
+ /// When this method returns, contains the decrypted data if successful, or an empty span if decryption fails.
+ /// true if decryption was successful; otherwise, false.
public bool TryDecrypt(out ReadOnlySpan cleartext)
{
if (this.RawData.Length == 0)
@@ -56,8 +59,10 @@ public bool TryDecrypt(out ReadOnlySpan cleartext)
}
///
- /// Decodes the specified input.
+ /// Decodes a binary blob containing DPAPI-NG protected data in CMS enveloped format.
///
+ /// The binary data to decode.
+ /// A CngProtectedDataBlob object containing the parsed protection metadata and encrypted content.
public static CngProtectedDataBlob Decode(ReadOnlyMemory blob)
{
var cms = Cryptography.Asn1.Pkcs7.ContentInfo.Decode(blob);
diff --git a/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/ProtectionKeyDescriptor.cs b/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/ProtectionKeyDescriptor.cs
index ffaf6fb..7cb3740 100644
--- a/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/ProtectionKeyDescriptor.cs
+++ b/Src/DSInternals.Common/Cryptography/Asn1/DpapiNg/ProtectionKeyDescriptor.cs
@@ -7,7 +7,7 @@
namespace DSInternals.Common.Cryptography.Asn1.DpapiNg
{
///
- /// Represents a ProtectionKeyDescriptor structure.
+ /// Represents a DPAPI-NG protection key descriptor that contains information about how data is protected, including security identifiers and protection methods.
///
public struct ProtectionKeyDescriptor
{
@@ -27,8 +27,10 @@ public SecurityIdentifier Sid
}
///
- /// Decodes the specified input.
+ /// Decodes a protection key descriptor from the specified ASN.1 encoded binary data.
///
+ /// The ASN.1 encoded binary data containing the protection key descriptor.
+ /// A decoded ProtectionKeyDescriptor structure.
public static ProtectionKeyDescriptor Decode(ReadOnlyMemory encoded)
{
var reader = new AsnReader(encoded, AsnEncodingRules.DER);
@@ -38,8 +40,10 @@ public static ProtectionKeyDescriptor Decode(ReadOnlyMemory encoded)
}
///
- /// Decodes the specified input.
+ /// Decodes a protection key descriptor from the specified ASN.1 reader.
///
+ /// The ASN.1 reader positioned at the protection key descriptor data.
+ /// A decoded ProtectionKeyDescriptor structure.
public static ProtectionKeyDescriptor Decode(AsnReader reader)
{
/*
diff --git a/Src/DSInternals.Common/Cryptography/Asn1/Pkcs12/Pfx.cs b/Src/DSInternals.Common/Cryptography/Asn1/Pkcs12/Pfx.cs
index c133f86..7ddac2d 100644
--- a/Src/DSInternals.Common/Cryptography/Asn1/Pkcs12/Pfx.cs
+++ b/Src/DSInternals.Common/Cryptography/Asn1/Pkcs12/Pfx.cs
@@ -49,8 +49,10 @@ public IList AuthSafeData
}
*/
///
- /// Decodes the specified input.
+ /// Decodes a PFX structure from the specified ASN.1 encoded binary data.
///
+ /// The ASN.1 encoded binary data containing the PFX structure.
+ /// A decoded Pfx structure containing the AuthSafe content and optional MAC data.
public static Pfx Decode(ReadOnlyMemory encoded)
{
AsnReader reader = new AsnReader(encoded, AsnEncodingRules.DER);
@@ -60,8 +62,10 @@ public static Pfx Decode(ReadOnlyMemory encoded)
}
///
- /// Decodes the specified input.
+ /// Decodes a PFX structure from the specified ASN.1 reader.
///
+ /// The ASN.1 reader positioned at the PFX structure data.
+ /// A decoded Pfx structure containing the AuthSafe content and optional MAC data.
public static Pfx Decode(AsnReader reader)
{
/*
diff --git a/Src/DSInternals.Common/Cryptography/Crc32.cs b/Src/DSInternals.Common/Cryptography/Crc32.cs
index fbed73e..769113d 100644
--- a/Src/DSInternals.Common/Cryptography/Crc32.cs
+++ b/Src/DSInternals.Common/Cryptography/Crc32.cs
@@ -74,8 +74,10 @@ public static class Crc32
};
///
- /// Calculate implementation.
+ /// Calculates the CRC32 checksum for the specified byte array.
///
+ /// The byte array to calculate the checksum for.
+ /// The CRC32 checksum as an unsigned 32-bit integer.
public static uint Calculate(byte[] buffer)
{
Validator.AssertNotNull(buffer, "buffer");
diff --git a/Src/DSInternals.Common/Cryptography/DirectorySecretDecryptor.cs b/Src/DSInternals.Common/Cryptography/DirectorySecretDecryptor.cs
index a34c31a..87e6232 100644
--- a/Src/DSInternals.Common/Cryptography/DirectorySecretDecryptor.cs
+++ b/Src/DSInternals.Common/Cryptography/DirectorySecretDecryptor.cs
@@ -39,8 +39,11 @@ public abstract SecretEncryptionType EncryptionType
}
///
- /// DecryptHash implementation.
+ /// Decrypts a password hash that is encrypted using both secret encryption and RID-based DES encryption.
///
+ /// The encrypted hash blob.
+ /// The relative identifier (RID) used for the DES decryption layer.
+ /// The decrypted password hash.
public byte[] DecryptHash(byte[] blob, int rid)
{
// Decrypt layer 1:
@@ -52,8 +55,11 @@ public byte[] DecryptHash(byte[] blob, int rid)
}
///
- /// EncryptHash implementation.
+ /// Encrypts a password hash using both RID-based DES encryption and secret encryption.
///
+ /// The password hash to encrypt.
+ /// The relative identifier (RID) used for the DES encryption layer.
+ /// The encrypted hash blob.
public byte[] EncryptHash(byte[] hash, int rid)
{
// Encryption layer 1
@@ -64,8 +70,11 @@ public byte[] EncryptHash(byte[] hash, int rid)
}
///
- /// DecryptHashHistory implementation.
+ /// Decrypts a password hash history that contains multiple historical password hashes.
///
+ /// The encrypted hash history blob.
+ /// The relative identifier (RID) used for the DES decryption layer.
+ /// An array of decrypted password hashes from the history.
public byte[][] DecryptHashHistory(byte[] blob, int rid)
{
// Decrypt layer 1:
@@ -86,8 +95,11 @@ public byte[][] DecryptHashHistory(byte[] blob, int rid)
}
///
- /// EncryptHashHistory implementation.
+ /// Encrypts an array of password hashes to create an encrypted hash history blob.
///
+ /// The array of password hashes to encrypt.
+ /// The relative identifier (RID) used for the DES encryption layer.
+ /// The encrypted hash history blob.
public byte[] EncryptHashHistory(byte[][] hashHistory, int rid)
{
Validator.AssertNotNull(hashHistory, "hashHistory");
diff --git a/Src/DSInternals.Common/Cryptography/GPPrefPwdObfuscator.cs b/Src/DSInternals.Common/Cryptography/GPPrefPwdObfuscator.cs
index 52b6564..7769480 100644
--- a/Src/DSInternals.Common/Cryptography/GPPrefPwdObfuscator.cs
+++ b/Src/DSInternals.Common/Cryptography/GPPrefPwdObfuscator.cs
@@ -16,8 +16,10 @@ public static class GPPrefPwdObfuscator
0xf4, 0x96, 0xe8, 0x06, 0xcc, 0x05, 0x79, 0x90,
0x20, 0x9b, 0x09, 0xa4, 0x33, 0xb6, 0x6c, 0x1b };
///
- /// Decrypt implementation.
+ /// Decrypts a Group Policy Preferences password that was obfuscated using Microsoft's known AES key.
///
+ /// The Base64-encoded encrypted password.
+ /// The decrypted plaintext password.
public static string Decrypt(string input)
{
Validator.AssertNotNullOrWhiteSpace(input, "input");
@@ -39,8 +41,10 @@ public static string Decrypt(string input)
}
///
- /// Encrypt implementation.
+ /// Encrypts a password using the same AES key that Group Policy Preferences uses for password obfuscation.
///
+ /// The secure string containing the password to encrypt.
+ /// A Base64-encoded encrypted password that can be used in Group Policy Preferences.
public static string Encrypt(SecureString input)
{
Validator.AssertNotNull(input, "input");
diff --git a/Src/DSInternals.Common/Cryptography/HashEqualityComparer.cs b/Src/DSInternals.Common/Cryptography/HashEqualityComparer.cs
index de6caa6..70314c7 100644
--- a/Src/DSInternals.Common/Cryptography/HashEqualityComparer.cs
+++ b/Src/DSInternals.Common/Cryptography/HashEqualityComparer.cs
@@ -6,7 +6,7 @@
// TODO: Rename HashEqualityComparer to ByteArrayEqualityComparer
///
- /// Represents a HashEqualityComparer.
+ /// Provides equality comparison for byte arrays (such as password hashes) that compares their contents rather than reference equality.
///
public class HashEqualityComparer : IEqualityComparer
{
@@ -14,8 +14,9 @@ public class HashEqualityComparer : IEqualityComparer
private static HashEqualityComparer instance;
///
- /// GetInstance implementation.
+ /// Gets the singleton instance of the HashEqualityComparer.
///
+ /// The singleton HashEqualityComparer instance.
public static HashEqualityComparer GetInstance()
{
if(instance == null)
diff --git a/Src/DSInternals.Common/Cryptography/PrivateKeyEncryptionType.cs b/Src/DSInternals.Common/Cryptography/PrivateKeyEncryptionType.cs
index a6e267d..adca7e9 100644
--- a/Src/DSInternals.Common/Cryptography/PrivateKeyEncryptionType.cs
+++ b/Src/DSInternals.Common/Cryptography/PrivateKeyEncryptionType.cs
@@ -1,7 +1,7 @@
namespace DSInternals.Common.Cryptography
{
///
- /// Defines values for PrivateKeyEncryptionType.
+ /// Specifies the encryption method used to protect private keys in the Active Directory database.
///
public enum PrivateKeyEncryptionType : int
{
diff --git a/Src/DSInternals.Common/Cryptography/SecretEncryptionType.cs b/Src/DSInternals.Common/Cryptography/SecretEncryptionType.cs
index c850a0e..904790e 100644
--- a/Src/DSInternals.Common/Cryptography/SecretEncryptionType.cs
+++ b/Src/DSInternals.Common/Cryptography/SecretEncryptionType.cs
@@ -1,7 +1,7 @@
namespace DSInternals.Common.Cryptography
{
///
- /// Defines values for SecretEncryptionType.
+ /// Specifies the encryption algorithm and method used to protect secrets in the Active Directory database and during replication.
///
public enum SecretEncryptionType : ushort
{
diff --git a/Src/DSInternals.Common/Cryptography/SecureStringExtensions.cs b/Src/DSInternals.Common/Cryptography/SecureStringExtensions.cs
index fd5a0e7..9b3c2ec 100644
--- a/Src/DSInternals.Common/Cryptography/SecureStringExtensions.cs
+++ b/Src/DSInternals.Common/Cryptography/SecureStringExtensions.cs
@@ -6,8 +6,10 @@ namespace DSInternals.Common
{ public static class SecureStringExtensions
{
///
- /// ToUnicodeString implementation.
+ /// Converts a SecureString to its Unicode string representation.
///
+ /// The SecureString to convert.
+ /// The Unicode string representation of the SecureString contents.
public static string ToUnicodeString(this SecureString input)
{
IntPtr ptr = Marshal.SecureStringToBSTR(input);
@@ -39,8 +41,10 @@ public static byte[] ToByteArray(this SecureString input)
return byteArray;
}
///
- /// Append implementation.
+ /// Appends a string to the end of a SecureString.
///
+ /// The SecureString to append to.
+ /// The string to append to the SecureString.
public static void Append(this SecureString input, string suffix)
{
if(suffix != null)
diff --git a/Src/DSInternals.Common/Cryptography/SortedFileSearcher.cs b/Src/DSInternals.Common/Cryptography/SortedFileSearcher.cs
index e17d77e..b598e0f 100644
--- a/Src/DSInternals.Common/Cryptography/SortedFileSearcher.cs
+++ b/Src/DSInternals.Common/Cryptography/SortedFileSearcher.cs
@@ -5,7 +5,7 @@
using System.Text;
///
- /// Represents a SortedFileSearcher.
+ /// Provides efficient binary search functionality for text files with sorted content, such as wordlists or dictionary files.
///
public class SortedFileSearcher : IDisposable
{
@@ -31,8 +31,10 @@ public SortedFileSearcher(Stream inputStream)
}
///
- /// FindString implementation.
+ /// Searches for a string in the sorted file using binary search algorithm.
///
+ /// The string to search for in the file.
+ /// true if the string is found; otherwise, false.
public bool FindString(string query)
{
Validator.AssertNotNullOrWhiteSpace(query, nameof(query));
diff --git a/Src/DSInternals.SAM/Interop/Structs/LsaBuffer.cs b/Src/DSInternals.SAM/Interop/Structs/LsaBuffer.cs
index 2278817..3074023 100644
--- a/Src/DSInternals.SAM/Interop/Structs/LsaBuffer.cs
+++ b/Src/DSInternals.SAM/Interop/Structs/LsaBuffer.cs
@@ -7,9 +7,6 @@
/// Used by various Local Security Authority (LSA) functions to specify a Unicode string.
///
[StructLayout(LayoutKind.Sequential)]
- ///
- /// Represents a LsaBuffer structure.
- ///
public struct LsaBuffer
{
///
diff --git a/Src/DSInternals.SAM/Interop/Structs/SamRidEnumeration.cs b/Src/DSInternals.SAM/Interop/Structs/SamRidEnumeration.cs
index 0e14e1d..e414fe6 100644
--- a/Src/DSInternals.SAM/Interop/Structs/SamRidEnumeration.cs
+++ b/Src/DSInternals.SAM/Interop/Structs/SamRidEnumeration.cs
@@ -8,9 +8,6 @@ namespace DSInternals.SAM.Interop
/// The SAMPR_RID_ENUMERATION structure holds the name and RID information about an account.
///
[StructLayout(LayoutKind.Sequential)]
- ///
- /// Represents a SamRidEnumeration structure.
- ///
public struct SamRidEnumeration
{
///
diff --git a/Src/DSInternals.SAM/Wrappers/LsaDomainInformation.cs b/Src/DSInternals.SAM/Wrappers/LsaDomainInformation.cs
index ec99bc0..436190f 100644
--- a/Src/DSInternals.SAM/Wrappers/LsaDomainInformation.cs
+++ b/Src/DSInternals.SAM/Wrappers/LsaDomainInformation.cs
@@ -5,7 +5,7 @@
using System.Security.Principal;
///
- /// Represents a LsaDomainInformation.
+ /// Represents domain information retrieved from the Local Security Authority (LSA) containing domain name and security identifier.
///
public class LsaDomainInformation
{
diff --git a/Src/DSInternals.SAM/Wrappers/LsaPolicy.cs b/Src/DSInternals.SAM/Wrappers/LsaPolicy.cs
index dc0267f..b4b6988 100644
--- a/Src/DSInternals.SAM/Wrappers/LsaPolicy.cs
+++ b/Src/DSInternals.SAM/Wrappers/LsaPolicy.cs
@@ -10,15 +10,16 @@
using DSInternals.SAM.Interop;
///
- /// Represents a LsaPolicy.
+ /// Represents a Local Security Authority (LSA) policy handle used for querying system security information.
///
public class LsaPolicy : IDisposable
{
private SafeLsaPolicyHandle policyHandle;
///
- /// this implementation.
+ /// Initializes a new instance of the LsaPolicy class on the local system with the specified access rights.
///
+ /// The access rights to request on the LSA policy.
public LsaPolicy(LsaPolicyAccessMask accessMask) : this(null, accessMask) { }
public LsaPolicy(string systemName, LsaPolicyAccessMask accessMask)
@@ -28,8 +29,9 @@ public LsaPolicy(string systemName, LsaPolicyAccessMask accessMask)
}
///
- /// QueryDnsDomainInformation implementation.
+ /// Queries DNS domain information from the Local Security Authority.
///
+ /// A LsaDnsDomainInformation object containing the DNS domain information.
public LsaDnsDomainInformation QueryDnsDomainInformation()
{
IntPtr buffer;
@@ -50,8 +52,9 @@ public LsaDnsDomainInformation QueryDnsDomainInformation()
}
///
- /// QueryMachineAccountInformation implementation.
+ /// Queries machine account information from the Local Security Authority.
///
+ /// The security identifier (SID) of the machine account, or null if not available.
public SecurityIdentifier QueryMachineAccountInformation()
{
IntPtr buffer;
diff --git a/Src/DSInternals.SAM/Wrappers/SamDomain.cs b/Src/DSInternals.SAM/Wrappers/SamDomain.cs
index 49bef94..b7d207a 100644
--- a/Src/DSInternals.SAM/Wrappers/SamDomain.cs
+++ b/Src/DSInternals.SAM/Wrappers/SamDomain.cs
@@ -8,7 +8,7 @@
namespace DSInternals.SAM
{
///
- /// Represents a SamDomain.
+ /// Represents a domain in the Windows Security Account Manager (SAM) database.
///
public class SamDomain : SamObject
{
@@ -17,8 +17,10 @@ internal SamDomain(SafeSamHandle handle) : base(handle)
}
///
- /// LookupUser implementation.
+ /// Looks up a user account by name and returns the relative identifier (RID).
///
+ /// The name of the user to look up.
+ /// The relative identifier (RID) of the user account.
public int LookupUser(string name)
{
int rid;
@@ -45,8 +47,11 @@ public int LookupUser(string name)
return rid;
}
///
- /// OpenUser implementation.
+ /// Opens a user account by name for the specified access rights.
///
+ /// The name of the user to open.
+ /// The access rights to request on the user account.
+ /// A SamUser object representing the opened user account.
public SamUser OpenUser(string name, SamUserAccessMask desiredAccess)
{
int rid = this.LookupUser(name);
@@ -54,8 +59,11 @@ public SamUser OpenUser(string name, SamUserAccessMask desiredAccess)
}
///
- /// OpenUser implementation.
+ /// Opens a user account by security identifier (SID) for the specified access rights.
///
+ /// The security identifier (SID) of the user to open.
+ /// The access rights to request on the user account.
+ /// A SamUser object representing the opened user account.
public SamUser OpenUser(SecurityIdentifier sid, SamUserAccessMask desiredAccess)
{
int rid = sid.GetRid();
@@ -63,8 +71,11 @@ public SamUser OpenUser(SecurityIdentifier sid, SamUserAccessMask desiredAccess
}
///
- /// OpenUser implementation.
+ /// Opens a user account by relative identifier (RID) for the specified access rights.
///
+ /// The relative identifier (RID) of the user to open.
+ /// The access rights to request on the user account.
+ /// A SamUser object representing the opened user account.
public SamUser OpenUser(int rid, SamUserAccessMask desiredAccess)
{
SafeSamHandle userHandle;
@@ -74,8 +85,9 @@ public SamUser OpenUser(int rid, SamUserAccessMask desiredAccess)
}
///
- /// GetPasswordPolicy implementation.
+ /// Retrieves the password policy settings for this domain.
///
+ /// A SamDomainPasswordInformation structure containing the domain's password policy.
public SamDomainPasswordInformation GetPasswordPolicy()
{
SamDomainPasswordInformation passwordInfo;
diff --git a/Src/DSInternals.SAM/Wrappers/SamObject.cs b/Src/DSInternals.SAM/Wrappers/SamObject.cs
index 7fce1c9..7fecdfd 100644
--- a/Src/DSInternals.SAM/Wrappers/SamObject.cs
+++ b/Src/DSInternals.SAM/Wrappers/SamObject.cs
@@ -18,7 +18,7 @@ protected SamObject(SafeSamHandle handle)
}
///
- /// ReleaseHandle implementation.
+ /// Releases the underlying SAM handle and frees associated resources.
///
public void ReleaseHandle()
{
diff --git a/Src/DSInternals.SAM/Wrappers/SamServer.cs b/Src/DSInternals.SAM/Wrappers/SamServer.cs
index 8d94581..cec0c1a 100644
--- a/Src/DSInternals.SAM/Wrappers/SamServer.cs
+++ b/Src/DSInternals.SAM/Wrappers/SamServer.cs
@@ -33,24 +33,30 @@ public string Name
}
///
- /// base implementation.
+ /// Initializes a new instance of the SamServer class and connects to the specified server using the provided credentials.
///
+ /// The name of the server to connect to.
+ /// The network credentials to use for authentication.
+ /// The access rights to request on the SAM server.
public SamServer(string serverName, NetworkCredential credential, SamServerAccessMask accessMask) : base(null)
{
this.Connect(serverName, accessMask, credential);
}
///
- /// base implementation.
+ /// Initializes a new instance of the SamServer class and connects to the specified server using the current user's credentials.
///
+ /// The name of the server to connect to.
+ /// The access rights to request on the SAM server.
public SamServer(string serverName, SamServerAccessMask accessMask) : base(null)
{
this.Connect(serverName, accessMask);
}
///
- /// EnumerateDomains implementation.
+ /// Enumerates all domains managed by this SAM server.
///
+ /// An array of domain names.
public string[] EnumerateDomains()
{
uint enumerationContext = InitialEnumerationContext;
@@ -70,8 +76,10 @@ public string[] EnumerateDomains()
}
///
- /// LookupDomain implementation.
+ /// Looks up the security identifier (SID) for the specified domain name.
///
+ /// The name of the domain to look up.
+ /// The security identifier (SID) of the domain.
public SecurityIdentifier LookupDomain(string domainName)
{
SecurityIdentifier domainSid;
@@ -81,8 +89,11 @@ public SecurityIdentifier LookupDomain(string domainName)
}
///
- /// OpenDomain implementation.
+ /// Opens a domain by name for the specified access rights.
///
+ /// The name of the domain to open.
+ /// The access rights to request on the domain.
+ /// A SamDomain object representing the opened domain.
public SamDomain OpenDomain(string domainName, SamDomainAccessMask accessMask)
{
SecurityIdentifier domainSid = this.LookupDomain(domainName);
@@ -90,8 +101,11 @@ public SamDomain OpenDomain(string domainName, SamDomainAccessMask accessMask)
}
///
- /// OpenDomain implementation.
+ /// Opens a domain by security identifier (SID) for the specified access rights.
///
+ /// The security identifier (SID) of the domain to open.
+ /// The access rights to request on the domain.
+ /// A SamDomain object representing the opened domain.
public SamDomain OpenDomain(SecurityIdentifier domainSid, SamDomainAccessMask accessMask)
{
SafeSamHandle domainHandle;
diff --git a/Src/DSInternals.SAM/Wrappers/SamUser.cs b/Src/DSInternals.SAM/Wrappers/SamUser.cs
index b062c4d..22248d3 100644
--- a/Src/DSInternals.SAM/Wrappers/SamUser.cs
+++ b/Src/DSInternals.SAM/Wrappers/SamUser.cs
@@ -8,7 +8,7 @@
namespace DSInternals.SAM
{
///
- /// Represents a SamUser.
+ /// Represents a user account in the Windows Security Account Manager (SAM) database.
///
public class SamUser : SamObject
{
@@ -17,8 +17,10 @@ internal SamUser(SafeSamHandle handle) : base(handle)
}
///
- /// SetPasswordHash implementation.
+ /// Sets the password hashes for this user account using hexadecimal string representations.
///
+ /// The NT hash as a hexadecimal string.
+ /// The LM hash as a hexadecimal string, or null if not provided.
public void SetPasswordHash(string ntHash, string lmHash = null)
{
byte[] binaryNTHash = ntHash.HexToBinary();
@@ -27,8 +29,10 @@ public void SetPasswordHash(string ntHash, string lmHash = null)
}
///
- /// SetPasswordHash implementation.
+ /// Sets the password hashes for this user account using byte arrays.
///
+ /// The NT hash as a byte array.
+ /// The LM hash as a byte array, or null if not provided.
public void SetPasswordHash(byte[] ntHash, byte[] lmHash = null)
{
Validator.AssertNotNull(ntHash, "ntHash");
From ba049a458695fbdf2d6c0ad6c608e625e81812b3 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 3 Sep 2025 19:50:39 +0000
Subject: [PATCH 12/22] Continue improving XML documentation: Fix 10+
additional files with meaningful descriptions
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
Src/DSInternals.Common/Cryptography/NTHash.cs | 3 ++-
Src/DSInternals.Common/Data/DistinguishedName.cs | 5 +++--
.../Data/Principals/DSComputer.cs | 9 +++++++--
.../Extensions/ByteArrayExtensions.cs | 14 +++++++++++---
.../Extensions/StringExtensions.cs | 13 ++++++++++---
Src/DSInternals.DataStore/DirectoryAgent.cs | 3 ++-
6 files changed, 35 insertions(+), 12 deletions(-)
diff --git a/Src/DSInternals.Common/Cryptography/NTHash.cs b/Src/DSInternals.Common/Cryptography/NTHash.cs
index 28ca665..b064c97 100644
--- a/Src/DSInternals.Common/Cryptography/NTHash.cs
+++ b/Src/DSInternals.Common/Cryptography/NTHash.cs
@@ -95,8 +95,9 @@ public static byte[] ComputeHash(string password)
}
///
- /// GetRandom implementation.
+ /// Generates a random byte array with the same length as an NT hash.
///
+ /// A random byte array that can be used as a placeholder or test hash.
public static byte[] GetRandom()
{
using (var rng = RandomNumberGenerator.Create())
diff --git a/Src/DSInternals.Common/Data/DistinguishedName.cs b/Src/DSInternals.Common/Data/DistinguishedName.cs
index 4a0aa2b..e37b615 100644
--- a/Src/DSInternals.Common/Data/DistinguishedName.cs
+++ b/Src/DSInternals.Common/Data/DistinguishedName.cs
@@ -7,7 +7,7 @@
using DSInternals.Common.Schema;
///
- /// Represents a DistinguishedName.
+ /// Represents an LDAP distinguished name (DN) that uniquely identifies an object in a directory hierarchy.
///
public class DistinguishedName
{
@@ -65,8 +65,9 @@ public DistinguishedName(string dn)
}
///
- /// GetDnsName implementation.
+ /// Converts the distinguished name to a DNS hostname by extracting CN and DC components.
///
+ /// A DNS hostname representation of the distinguished name.
public string GetDnsName()
{
if (Components.Count == 0)
diff --git a/Src/DSInternals.Common/Data/Principals/DSComputer.cs b/Src/DSInternals.Common/Data/Principals/DSComputer.cs
index b71eece..2c719f3 100644
--- a/Src/DSInternals.Common/Data/Principals/DSComputer.cs
+++ b/Src/DSInternals.Common/Data/Principals/DSComputer.cs
@@ -5,15 +5,20 @@
namespace DSInternals.Common.Data
{
///
- /// Represents a DSComputer.
+ /// Represents a computer account object from Active Directory, extending DSAccount with computer-specific properties and functionality.
///
public class DSComputer : DSAccount
{
private List? _lapsPasswords;
///
- /// base implementation.
+ /// Initializes a new instance of the DSComputer class from a directory object with computer-specific functionality.
///
+ /// The directory object containing the computer account data.
+ /// The NetBIOS domain name for the computer account.
+ /// The password encryption key used to decrypt password hashes.
+ /// Optional resolver for KDS root keys used in group managed service accounts.
+ /// Specifies which property sets to load from the directory object.
public DSComputer(DirectoryObject dsObject, string netBIOSDomainName, DirectorySecretDecryptor pek, IKdsRootKeyResolver rootKeyResolver = null, AccountPropertySets propertySets = AccountPropertySets.All) : base(dsObject, netBIOSDomainName, pek, propertySets)
{
if (this.SamAccountType != SamAccountType.Computer)
diff --git a/Src/DSInternals.Common/Extensions/ByteArrayExtensions.cs b/Src/DSInternals.Common/Extensions/ByteArrayExtensions.cs
index 56840db..8b03108 100644
--- a/Src/DSInternals.Common/Extensions/ByteArrayExtensions.cs
+++ b/Src/DSInternals.Common/Extensions/ByteArrayExtensions.cs
@@ -12,16 +12,21 @@ public static class ByteArrayExtensions
private const string HexDigitsLower = "0123456789abcdef";
///
- /// ZeroFill implementation.
+ /// Fills the entire byte array with zeros to securely clear sensitive data.
///
+ /// The byte array to clear.
public static void ZeroFill(this byte[] array)
{
Array.Clear(array, 0, array.Length);
}
///
- /// HexToBinary implementation.
+ /// Converts a portion of a hexadecimal string to a byte array.
///
+ /// The hexadecimal string to convert.
+ /// The starting position in the hexadecimal string.
+ /// The number of characters to convert.
+ /// A byte array containing the converted hexadecimal data.
public static byte[] HexToBinary(this string hex, int startIndex, int length)
{
// Input validation
@@ -93,8 +98,11 @@ public static byte[] HexToBinary(this string hex)
[Obsolete("Use ReadOnlySpan instead on byte[].")]
///
- /// ToHex implementation.
+ /// Converts a byte array to its hexadecimal string representation.
///
+ /// The byte array to convert.
+ /// If true, uses uppercase hexadecimal digits; otherwise, uses lowercase.
+ /// A hexadecimal string representation of the byte array.
public static string ToHex(this byte[] bytes, bool caps = false)
{
return bytes == null ? null : ToHex(bytes.AsSpan(), caps);
diff --git a/Src/DSInternals.Common/Extensions/StringExtensions.cs b/Src/DSInternals.Common/Extensions/StringExtensions.cs
index d5ca618..599bce4 100644
--- a/Src/DSInternals.Common/Extensions/StringExtensions.cs
+++ b/Src/DSInternals.Common/Extensions/StringExtensions.cs
@@ -7,8 +7,11 @@
public static class StringExtensions
{
///
- /// TrimEnd implementation.
+ /// Removes the specified suffix from the end of a string if it exists.
///
+ /// The string to trim.
+ /// The suffix to remove from the end of the string.
+ /// The string with the suffix removed, or the original string if the suffix is not found.
public static string TrimEnd(this string input, string suffix)
{
if(! string.IsNullOrEmpty(input) && ! string.IsNullOrEmpty(suffix) && input.EndsWith(suffix))
@@ -23,8 +26,10 @@ public static string TrimEnd(this string input, string suffix)
}
///
- /// ToSecureString implementation.
+ /// Converts a string to a SecureString for secure handling of sensitive data.
///
+ /// The string to convert to a SecureString.
+ /// A SecureString containing the input string, or null if the input is null.
public static SecureString ToSecureString(this string input)
{
if (input == null)
@@ -41,8 +46,10 @@ public static SecureString ToSecureString(this string input)
}
///
- /// SddlToBinary implementation.
+ /// Converts a Security Descriptor Definition Language (SDDL) string to its binary representation.
///
+ /// The SDDL string to convert.
+ /// A byte array containing the binary security descriptor.
public static byte[] SddlToBinary(this string securityDescriptor)
{
Validator.AssertNotNullOrWhiteSpace(securityDescriptor, "securityDescriptor");
diff --git a/Src/DSInternals.DataStore/DirectoryAgent.cs b/Src/DSInternals.DataStore/DirectoryAgent.cs
index 073e385..1dc1e48 100644
--- a/Src/DSInternals.DataStore/DirectoryAgent.cs
+++ b/Src/DSInternals.DataStore/DirectoryAgent.cs
@@ -37,8 +37,9 @@ public DirectoryAgent(DirectoryContext context, bool ownsContext = false)
}
///
- /// SetDomainControllerEpoch implementation.
+ /// Sets the domain controller epoch value for replication consistency tracking.
///
+ /// The epoch value to set for the domain controller.
public void SetDomainControllerEpoch(int epoch)
{
using (var transaction = this.context.BeginTransaction())
From 113148da146126f5fd5a22a486521003350e279a Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 3 Sep 2025 20:33:00 +0000
Subject: [PATCH 13/22] Fix XML documentation in Replication.Model and
Common.Data LAPS/Principals classes
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
.../Data/LAPS/LapsClearTextPassword.cs | 18 +++++++++++++-----
.../Data/LAPS/LapsDecryptionStatus.cs | 2 +-
.../Data/LAPS/LapsEncryptedPassword.cs | 2 +-
.../Data/LAPS/LapsPasswordInformation.cs | 2 +-
.../Data/LAPS/LapsPasswordSource.cs | 2 +-
.../Data/Principals/AccountFactory.cs | 11 ++++++++++-
.../Data/Principals/AccountPropertySets.cs | 2 +-
.../Principals/BitLockerRecoveryInformation.cs | 2 +-
.../ReplicaAttribute.cs | 2 +-
.../ReplicaAttributeCollection.cs | 4 ++--
.../ReplicaObject.cs | 2 +-
.../ReplicaObjectCollection.cs | 9 ++++++---
.../ReplicatedLinkedValueCollection.cs | 12 ++++++++----
.../ReplicationResult.cs | 2 +-
.../NDceRpc.Microsoft/Client.cs | 5 +----
15 files changed, 49 insertions(+), 28 deletions(-)
diff --git a/Src/DSInternals.Common/Data/LAPS/LapsClearTextPassword.cs b/Src/DSInternals.Common/Data/LAPS/LapsClearTextPassword.cs
index 8bf9fd0..37ccb4c 100644
--- a/Src/DSInternals.Common/Data/LAPS/LapsClearTextPassword.cs
+++ b/Src/DSInternals.Common/Data/LAPS/LapsClearTextPassword.cs
@@ -6,6 +6,9 @@
namespace DSInternals.Common.Data
{
+ ///
+ /// Represents a LAPS (Local Administrator Password Solution) clear text password with account name, timestamp, and password value.
+ ///
///
/// {"n":"Administrator","t":"1d8161b41c41cde","p":"A6a3#7%eb!57be4a4B95Z43394ba956de69e5d8975#$8a6d)4f82da6ad500HGx"}
///
@@ -14,19 +17,19 @@ public class LapsClearTextPassword
{
[JsonPropertyName("n")]
///
- /// The AccountName.
+ /// Gets or sets the name of the account whose password is stored.
///
public string AccountName;
[JsonPropertyName("t")]
///
- /// The UpdateTimestampString.
+ /// Gets or sets the update timestamp as a hexadecimal string representation of file time.
///
public string UpdateTimestampString;
[JsonPropertyName("p")]
///
- /// The Password.
+ /// Gets or sets the clear text password value.
///
public string Password;
@@ -56,8 +59,10 @@ public DateTime? UpdateTimestamp
}
///
- /// Parses the specified input.
+ /// Parses LAPS password data from a JSON string.
///
+ /// The JSON string containing LAPS password data.
+ /// A LapsClearTextPassword object parsed from the JSON.
public static LapsClearTextPassword Parse(string json)
{
Validator.AssertNotNull(json, nameof(json));
@@ -65,8 +70,11 @@ public static LapsClearTextPassword Parse(string json)
}
///
- /// Parses the specified input.
+ /// Parses LAPS password data from binary JSON data.
///
+ /// The binary JSON data containing LAPS password information.
+ /// True if the binary data is UTF-16 encoded; otherwise, false for UTF-8.
+ /// A LapsClearTextPassword object parsed from the binary JSON.
public static LapsClearTextPassword Parse(ReadOnlySpan binaryJson, bool utf16 = false)
{
return LenientJsonSerializer.DeserializeLenient(binaryJson, utf16);
diff --git a/Src/DSInternals.Common/Data/LAPS/LapsDecryptionStatus.cs b/Src/DSInternals.Common/Data/LAPS/LapsDecryptionStatus.cs
index 753e551..cd8a4bd 100644
--- a/Src/DSInternals.Common/Data/LAPS/LapsDecryptionStatus.cs
+++ b/Src/DSInternals.Common/Data/LAPS/LapsDecryptionStatus.cs
@@ -1,7 +1,7 @@
namespace DSInternals.Common.Data
{
///
- /// Defines values for LapsDecryptionStatus.
+ /// Specifies the status of LAPS password decryption operations.
///
public enum LapsDecryptionStatus
{
diff --git a/Src/DSInternals.Common/Data/LAPS/LapsEncryptedPassword.cs b/Src/DSInternals.Common/Data/LAPS/LapsEncryptedPassword.cs
index cc50965..1e2e12e 100644
--- a/Src/DSInternals.Common/Data/LAPS/LapsEncryptedPassword.cs
+++ b/Src/DSInternals.Common/Data/LAPS/LapsEncryptedPassword.cs
@@ -5,7 +5,7 @@
namespace DSInternals.Common.Data
{
///
- /// Represents a LapsEncryptedPassword.
+ /// Represents an encrypted LAPS password stored in Active Directory with encryption metadata.
///
public class LapsEncryptedPassword
{
diff --git a/Src/DSInternals.Common/Data/LAPS/LapsPasswordInformation.cs b/Src/DSInternals.Common/Data/LAPS/LapsPasswordInformation.cs
index c8b9bb2..4e873a2 100644
--- a/Src/DSInternals.Common/Data/LAPS/LapsPasswordInformation.cs
+++ b/Src/DSInternals.Common/Data/LAPS/LapsPasswordInformation.cs
@@ -3,7 +3,7 @@
namespace DSInternals.Common.Data
{
///
- /// Represents a LapsPasswordInformation.
+ /// Contains comprehensive information about a LAPS password including decryption status, source, and metadata.
///
public class LapsPasswordInformation
{
diff --git a/Src/DSInternals.Common/Data/LAPS/LapsPasswordSource.cs b/Src/DSInternals.Common/Data/LAPS/LapsPasswordSource.cs
index a1ef5d7..81ec4a3 100644
--- a/Src/DSInternals.Common/Data/LAPS/LapsPasswordSource.cs
+++ b/Src/DSInternals.Common/Data/LAPS/LapsPasswordSource.cs
@@ -1,7 +1,7 @@
namespace DSInternals.Common.Data
{
///
- /// Defines values for LapsPasswordSource.
+ /// Specifies the source and type of a LAPS password (legacy, encrypted, DSRM, etc.).
///
public enum LapsPasswordSource
{
diff --git a/Src/DSInternals.Common/Data/Principals/AccountFactory.cs b/Src/DSInternals.Common/Data/Principals/AccountFactory.cs
index 548d8de..eb560db 100644
--- a/Src/DSInternals.Common/Data/Principals/AccountFactory.cs
+++ b/Src/DSInternals.Common/Data/Principals/AccountFactory.cs
@@ -3,11 +3,20 @@
namespace DSInternals.Common.Data
{
+ ///
+ /// Factory class for creating appropriate DSAccount-derived objects (users, computers, trusts) from directory objects.
+ ///
public static class AccountFactory
{
///
- /// CreateAccount implementation.
+ /// Creates the appropriate account object (DSUser, DSComputer, or DSAccount) based on the object's SAM account type.
///
+ /// The directory object to convert.
+ /// The NetBIOS domain name.
+ /// The password encryption key for decrypting secrets.
+ /// Optional KDS root key resolver for Group Managed Service Accounts.
+ /// The property sets to load for the account.
+ /// A DSAccount-derived object, or null if the object is not an account.
public static DSAccount? CreateAccount(DirectoryObject dsObject, string netBIOSDomainName, DirectorySecretDecryptor pek, IKdsRootKeyResolver rootKeyResolver = null, AccountPropertySets propertySets = AccountPropertySets.All)
{
// Validate the input.
diff --git a/Src/DSInternals.Common/Data/Principals/AccountPropertySets.cs b/Src/DSInternals.Common/Data/Principals/AccountPropertySets.cs
index ef9495d..4e585eb 100644
--- a/Src/DSInternals.Common/Data/Principals/AccountPropertySets.cs
+++ b/Src/DSInternals.Common/Data/Principals/AccountPropertySets.cs
@@ -4,7 +4,7 @@ namespace DSInternals.Common.Data
{
[Flags]
///
- /// Defines values for AccountPropertySets.
+ /// Specifies which property sets to load when creating account objects from directory data.
///
public enum AccountPropertySets : int
{
diff --git a/Src/DSInternals.Common/Data/Principals/BitLockerRecoveryInformation.cs b/Src/DSInternals.Common/Data/Principals/BitLockerRecoveryInformation.cs
index 6f41370..536a0ab 100644
--- a/Src/DSInternals.Common/Data/Principals/BitLockerRecoveryInformation.cs
+++ b/Src/DSInternals.Common/Data/Principals/BitLockerRecoveryInformation.cs
@@ -4,7 +4,7 @@
namespace DSInternals.Common.Data
{
///
- /// Represents a BitLockerRecoveryInformation.
+ /// Represents BitLocker recovery information stored in Active Directory for encrypted volumes.
///
public class BitLockerRecoveryInformation
{
diff --git a/Src/DSInternals.Replication.Model/ReplicaAttribute.cs b/Src/DSInternals.Replication.Model/ReplicaAttribute.cs
index 8a00eb1..88b2c36 100644
--- a/Src/DSInternals.Replication.Model/ReplicaAttribute.cs
+++ b/Src/DSInternals.Replication.Model/ReplicaAttribute.cs
@@ -2,7 +2,7 @@
namespace DSInternals.Replication.Model
{
///
- /// Represents a ReplicaAttribute.
+ /// Represents a replicated Active Directory attribute with its type and values.
///
public class ReplicaAttribute
{
diff --git a/Src/DSInternals.Replication.Model/ReplicaAttributeCollection.cs b/Src/DSInternals.Replication.Model/ReplicaAttributeCollection.cs
index dbd5034..0778847 100644
--- a/Src/DSInternals.Replication.Model/ReplicaAttributeCollection.cs
+++ b/Src/DSInternals.Replication.Model/ReplicaAttributeCollection.cs
@@ -6,13 +6,13 @@
namespace DSInternals.Replication.Model
{
///
- /// Represents a ReplicaAttributeCollection.
+ /// A collection of replica attributes indexed by attribute type for Active Directory objects.
///
public class ReplicaAttributeCollection : Dictionary
{
// TODO: Move parent as member.
///
- /// base implementation.
+ /// Initializes a new instance of the ReplicaAttributeCollection class.
///
public ReplicaAttributeCollection() : base()
{
diff --git a/Src/DSInternals.Replication.Model/ReplicaObject.cs b/Src/DSInternals.Replication.Model/ReplicaObject.cs
index b92702b..9ffb177 100644
--- a/Src/DSInternals.Replication.Model/ReplicaObject.cs
+++ b/Src/DSInternals.Replication.Model/ReplicaObject.cs
@@ -9,7 +9,7 @@
namespace DSInternals.Replication.Model
{
///
- /// Represents a ReplicaObject.
+ /// Represents a replicated Active Directory object with its attributes, GUID, and distinguished name.
///
public class ReplicaObject : DirectoryObject
{
diff --git a/Src/DSInternals.Replication.Model/ReplicaObjectCollection.cs b/Src/DSInternals.Replication.Model/ReplicaObjectCollection.cs
index 20de771..62a4144 100644
--- a/Src/DSInternals.Replication.Model/ReplicaObjectCollection.cs
+++ b/Src/DSInternals.Replication.Model/ReplicaObjectCollection.cs
@@ -3,18 +3,21 @@
namespace DSInternals.Replication.Model
{
///
- /// Represents a ReplicaObjectCollection.
+ /// A collection of replica objects returned from Active Directory replication operations.
///
public class ReplicaObjectCollection : List
{
// TODO: Move parent as member.
///
- /// base implementation.
+ /// Initializes a new instance of the ReplicaObjectCollection class.
///
public ReplicaObjectCollection() : base()
{
}
- public ReplicaObjectCollection(int numObjects)
+ ///
+ /// Initializes a new instance of the ReplicaObjectCollection class with the specified capacity.
+ ///
+ /// The number of objects that the collection can initially store.
: base(numObjects)
{
}
diff --git a/Src/DSInternals.Replication.Model/ReplicatedLinkedValueCollection.cs b/Src/DSInternals.Replication.Model/ReplicatedLinkedValueCollection.cs
index ba439f4..a36a893 100644
--- a/Src/DSInternals.Replication.Model/ReplicatedLinkedValueCollection.cs
+++ b/Src/DSInternals.Replication.Model/ReplicatedLinkedValueCollection.cs
@@ -5,21 +5,23 @@
namespace DSInternals.Replication.Model
{
///
- /// Represents a ReplicatedLinkedValueCollection.
+ /// A collection that stores replicated linked attributes grouped by object GUID for Active Directory replication.
///
public class ReplicatedLinkedValueCollection : Dictionary>
{
// TODO: Move parent as member.
///
- /// base implementation.
+ /// Initializes a new instance of the ReplicatedLinkedValueCollection class.
///
public ReplicatedLinkedValueCollection() : base()
{
}
///
- /// Add implementation.
+ /// Adds a replicated attribute to the collection for the specified object.
///
+ /// The GUID of the object to add the attribute to.
+ /// The replicated attribute to add.
public void Add(Guid objectId, ReplicaAttribute attribute)
{
if (this.ContainsKey(objectId))
@@ -35,8 +37,10 @@ public void Add(Guid objectId, ReplicaAttribute attribute)
}
///
- /// Get implementation.
+ /// Retrieves and consolidates all replicated attributes for the specified object.
///
+ /// The GUID of the object to retrieve attributes for.
+ /// A collection of consolidated replica attributes, or null if the object is not found.
public IEnumerable Get(Guid objectId)
{
List attributes;
diff --git a/Src/DSInternals.Replication.Model/ReplicationResult.cs b/Src/DSInternals.Replication.Model/ReplicationResult.cs
index 31f5c9e..11821d4 100644
--- a/Src/DSInternals.Replication.Model/ReplicationResult.cs
+++ b/Src/DSInternals.Replication.Model/ReplicationResult.cs
@@ -6,7 +6,7 @@
namespace DSInternals.Replication.Model
{
///
- /// Represents a ReplicationResult.
+ /// Contains the results of an Active Directory replication operation, including replicated objects and metadata.
///
public class ReplicationResult
{
diff --git a/Src/DSInternals.Replication/NDceRpc.Microsoft/Client.cs b/Src/DSInternals.Replication/NDceRpc.Microsoft/Client.cs
index 0f6481f..a311fdb 100644
--- a/Src/DSInternals.Replication/NDceRpc.Microsoft/Client.cs
+++ b/Src/DSInternals.Replication/NDceRpc.Microsoft/Client.cs
@@ -6,12 +6,9 @@
namespace NDceRpc
{
///
- /// Provides a connection-based wrapper around the RPC client
+ /// Provides a connection-based wrapper around the RPC client for remote procedure calls.
///
[System.Diagnostics.DebuggerDisplay("{_handle} @{_binding}")]
- ///
- /// Represents a Client.
- ///
public class Client : IDisposable//TODO: make is serializabl to propagate throug app domains (use only ptr and methods to get all data from ptr)
{
From 1ed0054a91b5133d04aa7d09853d5c1425117dfc Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 3 Sep 2025 20:36:46 +0000
Subject: [PATCH 14/22] Fix XML documentation in more Common/Data classes,
exceptions, and SecurityDescriptorResolver
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
.../Data/DistinguishedNameComponent.cs | 2 +-
Src/DSInternals.Common/Data/InstanceType.cs | 7 +------
.../Data/Principals/GroupManagedServiceAccount.cs | 2 +-
.../Data/Principals/KerberosCredential.cs | 2 +-
.../Data/Principals/KerberosCredentialNew.cs | 2 +-
.../Data/Principals/KerberosKeyData.cs | 2 +-
.../Data/Principals/KerberosKeyDataNew.cs | 2 +-
.../Data/Principals/SupportedEncryptionTypes.cs | 5 +----
.../Data/Principals/UserAccountControl.cs | 5 +----
.../Exceptions/DirectoryException.cs | 6 +++++-
.../Exceptions/DirectoryObjectException.cs | 10 +++++++++-
.../SecurityDescriptorResolver.cs | 2 +-
.../Commands/Replication/GetADReplKdsRootKey.cs | 2 +-
13 files changed, 25 insertions(+), 24 deletions(-)
diff --git a/Src/DSInternals.Common/Data/DistinguishedNameComponent.cs b/Src/DSInternals.Common/Data/DistinguishedNameComponent.cs
index a1dd569..a0f4684 100644
--- a/Src/DSInternals.Common/Data/DistinguishedNameComponent.cs
+++ b/Src/DSInternals.Common/Data/DistinguishedNameComponent.cs
@@ -5,7 +5,7 @@
using System.Text;
///
- /// Represents a DistinguishedNameComponent.
+ /// Represents a single component (name-value pair) of an LDAP distinguished name.
///
public class DistinguishedNameComponent
{
diff --git a/Src/DSInternals.Common/Data/InstanceType.cs b/Src/DSInternals.Common/Data/InstanceType.cs
index 03e2e92..4c85af0 100644
--- a/Src/DSInternals.Common/Data/InstanceType.cs
+++ b/Src/DSInternals.Common/Data/InstanceType.cs
@@ -3,15 +3,10 @@
namespace DSInternals.Common.Data
{
///
- /// A bit field that dictates how the object is instantiated on a particular domain controller.
- /// The value of this attribute can differ on different replicas even if the replicas are in sync.
- /// This attribute can be zero or a combination of one or more of the following bit flags.
+ /// Specifies how a directory object is instantiated on domain controllers and controls object behavior during replication.
///
/// https://msdn.microsoft.com/en-us/library/cc219986.aspx
[Flags]
- ///
- /// Defines values for InstanceType.
- ///
public enum InstanceType : uint
{
///
diff --git a/Src/DSInternals.Common/Data/Principals/GroupManagedServiceAccount.cs b/Src/DSInternals.Common/Data/Principals/GroupManagedServiceAccount.cs
index b3013e6..63714e2 100644
--- a/Src/DSInternals.Common/Data/Principals/GroupManagedServiceAccount.cs
+++ b/Src/DSInternals.Common/Data/Principals/GroupManagedServiceAccount.cs
@@ -7,7 +7,7 @@
namespace DSInternals.Common.Data
{
///
- /// Group Managed Service Account.
+ /// Represents a Group Managed Service Account (gMSA) which provides automatic password management for service accounts.
///
/// https://learn.microsoft.com/en-us/windows/win32/adschema/c-msds-groupmanagedserviceaccount
public class GroupManagedServiceAccount
diff --git a/Src/DSInternals.Common/Data/Principals/KerberosCredential.cs b/Src/DSInternals.Common/Data/Principals/KerberosCredential.cs
index 5b00874..a07b1c8 100644
--- a/Src/DSInternals.Common/Data/Principals/KerberosCredential.cs
+++ b/Src/DSInternals.Common/Data/Principals/KerberosCredential.cs
@@ -9,7 +9,7 @@
using System.Text;
///
- /// Represents a KerberosCredential.
+ /// Represents Kerberos credentials containing encryption keys and salt information for authentication.
///
public class KerberosCredential
{
diff --git a/Src/DSInternals.Common/Data/Principals/KerberosCredentialNew.cs b/Src/DSInternals.Common/Data/Principals/KerberosCredentialNew.cs
index 2718005..669e846 100644
--- a/Src/DSInternals.Common/Data/Principals/KerberosCredentialNew.cs
+++ b/Src/DSInternals.Common/Data/Principals/KerberosCredentialNew.cs
@@ -9,7 +9,7 @@
using System.Text;
///
- /// Represents a KerberosCredentialNew.
+ /// Represents newer format Kerberos credentials with enhanced encryption key data structures.
///
public class KerberosCredentialNew
{
diff --git a/Src/DSInternals.Common/Data/Principals/KerberosKeyData.cs b/Src/DSInternals.Common/Data/Principals/KerberosKeyData.cs
index ca621e1..d1d96e8 100644
--- a/Src/DSInternals.Common/Data/Principals/KerberosKeyData.cs
+++ b/Src/DSInternals.Common/Data/Principals/KerberosKeyData.cs
@@ -5,7 +5,7 @@ namespace DSInternals.Common.Data
{
// https://msdn.microsoft.com/en-us/library/cc941809.aspx
///
- /// Represents a KerberosKeyData.
+ /// Represents Kerberos encryption key data including key type, length, and the actual key bytes.
///
public class KerberosKeyData
{
diff --git a/Src/DSInternals.Common/Data/Principals/KerberosKeyDataNew.cs b/Src/DSInternals.Common/Data/Principals/KerberosKeyDataNew.cs
index 50074e0..638b4bc 100644
--- a/Src/DSInternals.Common/Data/Principals/KerberosKeyDataNew.cs
+++ b/Src/DSInternals.Common/Data/Principals/KerberosKeyDataNew.cs
@@ -6,7 +6,7 @@
// https://msdn.microsoft.com/en-us/library/cc941809.aspx
///
- /// Represents a KerberosKeyDataNew.
+ /// Represents newer format Kerberos key data that includes iteration count for enhanced security.
///
public class KerberosKeyDataNew : KerberosKeyData
{
diff --git a/Src/DSInternals.Common/Data/Principals/SupportedEncryptionTypes.cs b/Src/DSInternals.Common/Data/Principals/SupportedEncryptionTypes.cs
index 3c424b1..436e4a7 100644
--- a/Src/DSInternals.Common/Data/Principals/SupportedEncryptionTypes.cs
+++ b/Src/DSInternals.Common/Data/Principals/SupportedEncryptionTypes.cs
@@ -3,13 +3,10 @@
namespace DSInternals.Common.Data
{
///
- /// Supported Encryption Types Bit Flags
+ /// Specifies the encryption types supported by a Kerberos principal for authentication.
///
/// https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-kile/6cfc7b50-11ed-4b4d-846d-6f08f0812919
[Flags]
- ///
- /// Defines values for SupportedEncryptionTypes.
- ///
public enum SupportedEncryptionTypes : uint
{
Default = 0,
diff --git a/Src/DSInternals.Common/Data/Principals/UserAccountControl.cs b/Src/DSInternals.Common/Data/Principals/UserAccountControl.cs
index 44bf978..54d6692 100644
--- a/Src/DSInternals.Common/Data/Principals/UserAccountControl.cs
+++ b/Src/DSInternals.Common/Data/Principals/UserAccountControl.cs
@@ -3,12 +3,9 @@
using System;
///
- /// Flags that control the behavior of the user account.
+ /// Specifies flags that control the behavior and properties of user and computer accounts in Active Directory.
///
[Flags]
- ///
- /// Defines values for UserAccountControl.
- ///
public enum UserAccountControl : int
{
///
diff --git a/Src/DSInternals.Common/Exceptions/DirectoryException.cs b/Src/DSInternals.Common/Exceptions/DirectoryException.cs
index 99bfbd2..ec740cd 100644
--- a/Src/DSInternals.Common/Exceptions/DirectoryException.cs
+++ b/Src/DSInternals.Common/Exceptions/DirectoryException.cs
@@ -2,12 +2,16 @@
{
using System;
+ ///
+ /// Abstract base class for exceptions related to Active Directory operations and data processing.
+ ///
[Serializable]
public abstract class DirectoryException : Exception
{
///
- /// base implementation.
+ /// Initializes a new instance of the DirectoryException class with an optional inner exception.
///
+ /// The exception that is the cause of the current exception.
public DirectoryException(Exception innerException = null) : base(null, innerException)
{
}
diff --git a/Src/DSInternals.Common/Exceptions/DirectoryObjectException.cs b/Src/DSInternals.Common/Exceptions/DirectoryObjectException.cs
index a86c81a..4716224 100644
--- a/Src/DSInternals.Common/Exceptions/DirectoryObjectException.cs
+++ b/Src/DSInternals.Common/Exceptions/DirectoryObjectException.cs
@@ -4,9 +4,15 @@
namespace DSInternals.Common.Exceptions
{
+ ///
+ /// Abstract base class for exceptions related to specific Active Directory objects.
+ ///
[Serializable]
public abstract class DirectoryObjectException : DirectoryException
{
+ ///
+ /// Gets the identifier of the directory object that caused the exception.
+ ///
public object ObjectIdentifier
{
get;
@@ -14,8 +20,10 @@ public object ObjectIdentifier
}
///
- /// base implementation.
+ /// Initializes a new instance of the DirectoryObjectException class with the specified object identifier.
///
+ /// The identifier of the directory object that caused the exception.
+ /// The exception that is the cause of the current exception.
public DirectoryObjectException(object objectIdentifier, Exception innerException = null) : base(innerException)
{
this.ObjectIdentifier = objectIdentifier;
diff --git a/Src/DSInternals.DataStore/SecurityDescriptorResolver.cs b/Src/DSInternals.DataStore/SecurityDescriptorResolver.cs
index 5359b49..3a8e70e 100644
--- a/Src/DSInternals.DataStore/SecurityDescriptorResolver.cs
+++ b/Src/DSInternals.DataStore/SecurityDescriptorResolver.cs
@@ -10,7 +10,7 @@
using SecurityDescriptorIdentifier = long;
///
- /// Represents a SecurityDescriptorRersolver.
+ /// Resolves and caches security descriptors from the Active Directory database to improve performance.
///
public class SecurityDescriptorRersolver : IDisposable
{
diff --git a/Src/DSInternals.PowerShell/Commands/Replication/GetADReplKdsRootKey.cs b/Src/DSInternals.PowerShell/Commands/Replication/GetADReplKdsRootKey.cs
index 26e9174..f507205 100644
--- a/Src/DSInternals.PowerShell/Commands/Replication/GetADReplKdsRootKey.cs
+++ b/Src/DSInternals.PowerShell/Commands/Replication/GetADReplKdsRootKey.cs
@@ -7,7 +7,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Get, "ADReplKdsRootKey")]
[OutputType(typeof(KdsRootKey))]
///
- /// Implements the GetADReplKdsRootKeyCommand PowerShell cmdlet.
+ /// Implements the Get-ADReplKdsRootKey PowerShell cmdlet for retrieving KDS root keys from Active Directory replication data.
///
public class GetADReplKdsRootKeyCommand : ADReplCommandBase
{
From 1d4d3e12997bbc38ba047476f5570fa6c0341107 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 3 Sep 2025 20:39:26 +0000
Subject: [PATCH 15/22] Fix XML documentation in Extensions, DataStore
DirectoryAgent, and PowerShell Types
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
.../Extensions/DateTimeExtensions.cs | 7 ++++++-
.../Extensions/NTAccountExtensions.cs | 7 ++++++-
.../Extensions/SecurityIdentifierExtensions.cs | 12 ++++++++++--
Src/DSInternals.DataStore/DirectoryAgent.cs | 3 +++
.../Types/AccountExportFormat.cs | 9 +++++++--
Src/DSInternals.PowerShell/Types/DomainController.cs | 2 +-
.../Types/LsaPolicyInformation.cs | 11 +++++++----
7 files changed, 40 insertions(+), 11 deletions(-)
diff --git a/Src/DSInternals.Common/Extensions/DateTimeExtensions.cs b/Src/DSInternals.Common/Extensions/DateTimeExtensions.cs
index a7e9bd9..c67dca4 100644
--- a/Src/DSInternals.Common/Extensions/DateTimeExtensions.cs
+++ b/Src/DSInternals.Common/Extensions/DateTimeExtensions.cs
@@ -2,13 +2,18 @@
namespace DSInternals.Common
{
+ ///
+ /// Provides extension methods for DateTime objects to convert to and from Active Directory generalized time format.
+ ///
public static class DateTimeExtensions
{
private const int GeneralizedTimeCoefficient = 10000000;
///
- /// ToGeneralizedTime implementation.
+ /// Converts a DateTime to Active Directory generalized time format.
///
+ /// The DateTime to convert.
+ /// The generalized time representation as a long value.
public static long ToGeneralizedTime(this DateTime time)
{
return time.ToFileTime() / GeneralizedTimeCoefficient;
diff --git a/Src/DSInternals.Common/Extensions/NTAccountExtensions.cs b/Src/DSInternals.Common/Extensions/NTAccountExtensions.cs
index d7efff8..f35023f 100644
--- a/Src/DSInternals.Common/Extensions/NTAccountExtensions.cs
+++ b/Src/DSInternals.Common/Extensions/NTAccountExtensions.cs
@@ -3,13 +3,18 @@
namespace DSInternals.Common
{
+ ///
+ /// Provides extension methods for NTAccount objects to extract domain and account information.
+ ///
public static class NTAccountExtensions
{
private static readonly char[] DomainNameSeparator = { '\\' };
///
- /// NetBIOSDomainName implementation.
+ /// Extracts the NetBIOS domain name from an NT account name.
///
+ /// The NT account to extract the domain name from.
+ /// The NetBIOS domain name, or an empty string if no domain is specified.
public static string NetBIOSDomainName(this NTAccount account)
{
string[] parts = account.Value.Split(DomainNameSeparator, 2);
diff --git a/Src/DSInternals.Common/Extensions/SecurityIdentifierExtensions.cs b/Src/DSInternals.Common/Extensions/SecurityIdentifierExtensions.cs
index 8e7ccff..b3e6850 100644
--- a/Src/DSInternals.Common/Extensions/SecurityIdentifierExtensions.cs
+++ b/Src/DSInternals.Common/Extensions/SecurityIdentifierExtensions.cs
@@ -3,13 +3,18 @@
using System;
using System.Security.Principal;
+ ///
+ /// Provides extension methods for SecurityIdentifier objects to extract RID and convert to binary form.
+ ///
public static class SecurityIdentifierExtensions
{
private const int ridLength = 4;
///
- /// GetRid implementation.
+ /// Extracts the Relative Identifier (RID) from the security identifier.
///
+ /// The security identifier to extract the RID from.
+ /// The RID as an integer value.
public static int GetRid(this SecurityIdentifier sid)
{
Validator.AssertNotNull(sid, "sid");
@@ -23,8 +28,11 @@ public static int GetRid(this SecurityIdentifier sid)
}
///
- /// GetBinaryForm implementation.
+ /// Converts the security identifier to its binary representation with optional RID endianness conversion.
///
+ /// The security identifier to convert.
+ /// True to convert the RID to big-endian format; otherwise, false for little-endian.
+ /// The binary representation of the security identifier.
public static byte[] GetBinaryForm(this SecurityIdentifier sid, bool bigEndianRid = false)
{
Validator.AssertNotNull(sid, "sid");
diff --git a/Src/DSInternals.DataStore/DirectoryAgent.cs b/Src/DSInternals.DataStore/DirectoryAgent.cs
index 1dc1e48..fb71b9d 100644
--- a/Src/DSInternals.DataStore/DirectoryAgent.cs
+++ b/Src/DSInternals.DataStore/DirectoryAgent.cs
@@ -10,6 +10,9 @@
using DSInternals.Common.Schema;
using Microsoft.Database.Isam;
+ ///
+ /// Provides high-level operations for interacting with Active Directory database objects and managing directory services.
+ ///
public partial class DirectoryAgent : IDisposable
{
// 2^30
diff --git a/Src/DSInternals.PowerShell/Types/AccountExportFormat.cs b/Src/DSInternals.PowerShell/Types/AccountExportFormat.cs
index 3d9a825..e231720 100644
--- a/Src/DSInternals.PowerShell/Types/AccountExportFormat.cs
+++ b/Src/DSInternals.PowerShell/Types/AccountExportFormat.cs
@@ -3,7 +3,7 @@
namespace DSInternals.PowerShell
{
///
- /// Defines values for AccountExportFormat.
+ /// Specifies the format for exporting account password hashes and credentials for password cracking tools.
///
public enum AccountExportFormat : byte
{
@@ -24,11 +24,16 @@ public enum AccountExportFormat : byte
PWDumpHistory
}
+ ///
+ /// Provides extension methods for AccountExportFormat to determine required property sets for different export formats.
+ ///
public static class AccountExportFormatExtensions
{
///
- /// GetRequiredProperties implementation.
+ /// Determines the required account property sets for the specified export format.
///
+ /// The account export format.
+ /// The property sets required for the export format.
public static AccountPropertySets GetRequiredProperties(this AccountExportFormat? format)
{
switch (format)
diff --git a/Src/DSInternals.PowerShell/Types/DomainController.cs b/Src/DSInternals.PowerShell/Types/DomainController.cs
index 35e88c7..0897be9 100644
--- a/Src/DSInternals.PowerShell/Types/DomainController.cs
+++ b/Src/DSInternals.PowerShell/Types/DomainController.cs
@@ -6,7 +6,7 @@
using DSInternals.Common.Data;
// Transport object
///
- /// Represents a DomainController.
+ /// Represents information about an Active Directory domain controller including its name, capabilities, and system settings.
///
public class DomainController : IDomainController
{
diff --git a/Src/DSInternals.PowerShell/Types/LsaPolicyInformation.cs b/Src/DSInternals.PowerShell/Types/LsaPolicyInformation.cs
index 8d5ba55..b89f728 100644
--- a/Src/DSInternals.PowerShell/Types/LsaPolicyInformation.cs
+++ b/Src/DSInternals.PowerShell/Types/LsaPolicyInformation.cs
@@ -3,22 +3,25 @@
using System.Security.Principal;
using DSInternals.SAM;
+ ///
+ /// Contains comprehensive Local Security Authority (LSA) policy information including domain details and security identifiers.
+ ///
public sealed class LsaPolicyInformation
{
///
- /// Gets or sets the DnsDomain.
+ /// Gets or sets the DNS domain information from LSA policy.
///
public LsaDnsDomainInformation DnsDomain { get; set; }
///
- /// Gets or sets the Domain.
+ /// Gets or sets the primary domain information from LSA policy.
///
public LsaDomainInformation Domain { get; set; }
///
- /// Gets or sets the LocalDomain.
+ /// Gets or sets the local domain information from LSA policy.
///
public LsaDomainInformation LocalDomain { get; set; }
///
- /// Gets or sets the MachineAccountSid.
+ /// Gets or sets the security identifier of the machine account.
///
public SecurityIdentifier MachineAccountSid { get; set; }
}
From e12211ffafbe914e9fcd9ead3a5fe284b4f13c1e Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 3 Sep 2025 20:43:03 +0000
Subject: [PATCH 16/22] Fix XML documentation across all PowerShell cmdlets to
include dashes in names
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
Src/DSInternals.Common/Interop/CryptoBuffer.cs | 18 ++++++++++++++----
.../Interop/UnicodeString.cs | 5 +----
.../Kerberos/TrustAttributes.cs | 5 +----
Src/DSInternals.DataStore/DirectoryContext.cs | 2 +-
.../Commands/ADSI/GetADSIAccountCommand.cs | 2 +-
.../AzureAD/GetAzureADUserExCommand.cs | 2 +-
.../AzureAD/SetAzureADUserExCommand.cs | 2 +-
.../Datastore/AddADDBSidHistoryCommand.cs | 2 +-
.../Datastore/DisableADDBAccountCommand.cs | 2 +-
.../Datastore/EnableADDBAccountCommand.cs | 2 +-
.../Datastore/GetADDBAccountCommand.cs | 2 +-
.../Datastore/GetADDBBackupKeyCommand.cs | 2 +-
...tADDBBitlockerRecoveryInformationCommand.cs | 2 +-
.../GetADDBDnsResourceRecordCommand.cs | 2 +-
.../Datastore/GetADDBDnsZoneCommand.cs | 2 +-
.../GetADDBDomainControllerCommand.cs | 2 +-
.../Commands/Datastore/GetADDBIndexCommand.cs | 2 +-
.../Datastore/GetADDBKdsRootKeyCommand.cs | 2 +-
.../Datastore/GetADDBSchemaAttributeCommand.cs | 2 +-
.../Datastore/GetADDBServiceAccountCommand.cs | 2 +-
.../Commands/Datastore/GetADDBTrust.cs | 2 +-
.../Commands/Datastore/GetBootKeyCommand.cs | 2 +-
.../NewADDBRestoreFromMediaScriptCommand.cs | 2 +-
.../Datastore/RemoveADDBObjectCommand.cs | 2 +-
.../Datastore/RestoreADDBAttributeCommand.cs | 2 +-
.../Datastore/SetADDBAccountControlCommand.cs | 6 ++----
.../Datastore/SetADDBAccountPasswordCommand.cs | 2 +-
.../SetADDBAccountPasswordHashCommand.cs | 2 +-
.../Datastore/SetADDBBootKeyCommand.cs | 2 +-
.../SetADDBDomainControllerCommand.cs | 2 +-
.../Datastore/SetADDBPrimaryGroupCommand.cs | 2 +-
.../Datastore/UnlockADDBAccountCommand.cs | 2 +-
.../ConvertFromGPPrefPasswordCommand.cs | 2 +-
.../ConvertFromUnicodePasswordCommand.cs | 2 +-
.../ConvertToGPPrefPasswordCommand.cs | 2 +-
.../ConvertToUnicodePasswordCommand.cs | 2 +-
.../Hash/ConvertToKerberosKeyCommand.cs | 2 +-
.../Commands/Hash/ConvertToOrgIdHashCommand.cs | 2 +-
.../Hash/SetSamAccountPasswordHashCommand.cs | 2 +-
.../Commands/LSA/GetLsaBackupKeyCommand.cs | 2 +-
.../LSA/GetLsaPolicyInformationCommand.cs | 2 +-
.../LSA/GetSamPasswordPolicyCommand.cs | 2 +-
.../LSA/SetLsaPolicyInformationCommand.cs | 2 +-
.../ConvertFromADManagedPasswordBlobCommand.cs | 2 +-
.../Commands/Misc/ConvertToHexCommand.cs | 2 +-
.../Commands/Misc/GetADKeyCredential.cs | 2 +-
.../Misc/TestPasswordQualityCommand.cs | 2 +-
.../Replication/AddADReplNgcKeyCommand.cs | 2 +-
.../Replication/GetADReplAccountCommand.cs | 2 +-
.../Replication/GetADReplBackupKeyCommand.cs | 2 +-
50 files changed, 64 insertions(+), 62 deletions(-)
diff --git a/Src/DSInternals.Common/Interop/CryptoBuffer.cs b/Src/DSInternals.Common/Interop/CryptoBuffer.cs
index c282cb4..a8fea9f 100644
--- a/Src/DSInternals.Common/Interop/CryptoBuffer.cs
+++ b/Src/DSInternals.Common/Interop/CryptoBuffer.cs
@@ -3,9 +3,17 @@
using System;
using System.Runtime.InteropServices;
+ ///
+ /// Represents a buffer structure used in cryptographic operations with pointer and length information.
+ ///
[StructLayout(LayoutKind.Sequential)]
internal struct CryptoBuffer
{
+ ///
+ /// Initializes a new instance of the CryptoBuffer structure with the specified buffer pointer and length.
+ ///
+ /// A pointer to the buffer data.
+ /// The length of the buffer in bytes.
public CryptoBuffer(IntPtr buffer, uint length)
{
this.Buffer = buffer;
@@ -13,22 +21,24 @@ public CryptoBuffer(IntPtr buffer, uint length)
this.MaximumLength = length;
}
///
- /// this implementation.
+ /// Initializes a new instance of the CryptoBuffer structure with the specified buffer pointer and length.
///
+ /// A pointer to the buffer data.
+ /// The length of the buffer in bytes.
public CryptoBuffer(IntPtr buffer, int length) : this(buffer, (uint) length)
{
}
///
- /// The Length.
+ /// The current length of data in the buffer.
///
public uint Length;
///
- /// The MaximumLength.
+ /// The maximum capacity of the buffer.
///
public uint MaximumLength;
///
- /// The Buffer.
+ /// A pointer to the buffer data.
///
public IntPtr Buffer;
}
diff --git a/Src/DSInternals.Common/Interop/UnicodeString.cs b/Src/DSInternals.Common/Interop/UnicodeString.cs
index 1cb3fb8..bd56017 100644
--- a/Src/DSInternals.Common/Interop/UnicodeString.cs
+++ b/Src/DSInternals.Common/Interop/UnicodeString.cs
@@ -4,13 +4,10 @@
namespace DSInternals.Common.Interop
{
///
- /// The UnicodeString structure is used to define Unicode strings.
+ /// Represents a Unicode string structure used in Windows API calls for efficient string handling.
///
/// https://learn.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-_unicode_string
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
- ///
- /// Represents a UnicodeString structure.
- ///
public struct UnicodeString
{
private const ushort UnicodeCharLength = 2;
diff --git a/Src/DSInternals.Common/Kerberos/TrustAttributes.cs b/Src/DSInternals.Common/Kerberos/TrustAttributes.cs
index 4966a39..3134592 100644
--- a/Src/DSInternals.Common/Kerberos/TrustAttributes.cs
+++ b/Src/DSInternals.Common/Kerberos/TrustAttributes.cs
@@ -4,13 +4,10 @@
namespace DSInternals.Common.Kerberos
{
///
- /// Information about a trust relartnship between two domains or forests.
+ /// Specifies information about a trust relationship between two domains or forests.
///
/// https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/e9a2d23c-c31e-4a6f-88a0-6646fdb51a3c
[Flags]
- ///
- /// Defines values for TrustAttributes.
- ///
public enum TrustAttributes : uint
{
None = 0,
diff --git a/Src/DSInternals.DataStore/DirectoryContext.cs b/Src/DSInternals.DataStore/DirectoryContext.cs
index f292dc3..1d4e4aa 100644
--- a/Src/DSInternals.DataStore/DirectoryContext.cs
+++ b/Src/DSInternals.DataStore/DirectoryContext.cs
@@ -8,7 +8,7 @@
using NATIVE_UNICODEINDEX = Windows.Win32.Storage.Jet.JET_UNICODEINDEX;
///
- /// Represents a DirectoryContext.
+ /// Provides a context for accessing and managing Active Directory database files and transactions.
///
public class DirectoryContext : IDisposable
{
diff --git a/Src/DSInternals.PowerShell/Commands/ADSI/GetADSIAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/ADSI/GetADSIAccountCommand.cs
index 5274ab7..c7dff38 100644
--- a/Src/DSInternals.PowerShell/Commands/ADSI/GetADSIAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/ADSI/GetADSIAccountCommand.cs
@@ -6,7 +6,7 @@
[Cmdlet(VerbsCommon.Get, "ADSIAccount")]
[OutputType(typeof(DSAccount), typeof(DSUser), typeof(DSComputer))]
///
- /// Implements the GetADSIAccountCommand PowerShell cmdlet.
+ /// Implements the Get-ADSIAccount PowerShell cmdlet.
///
public class GetADSIAccountCommand : ADSICommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/AzureAD/GetAzureADUserExCommand.cs b/Src/DSInternals.PowerShell/Commands/AzureAD/GetAzureADUserExCommand.cs
index e9d1b55..dd3de9a 100644
--- a/Src/DSInternals.PowerShell/Commands/AzureAD/GetAzureADUserExCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/AzureAD/GetAzureADUserExCommand.cs
@@ -8,7 +8,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Get, "AzureADUserEx", DefaultParameterSetName = ParamSetAllUsers)]
[OutputType(typeof(AzureADUser))]
///
- /// Implements the GetAzureADUserExCommand PowerShell cmdlet.
+ /// Implements the Get-AzureADUserEx PowerShell cmdlet.
///
public class GetAzureADUserExCommand : AzureADCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/AzureAD/SetAzureADUserExCommand.cs b/Src/DSInternals.PowerShell/Commands/AzureAD/SetAzureADUserExCommand.cs
index eed8aa7..59d98e6 100644
--- a/Src/DSInternals.PowerShell/Commands/AzureAD/SetAzureADUserExCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/AzureAD/SetAzureADUserExCommand.cs
@@ -6,7 +6,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Set, "AzureADUserEx", DefaultParameterSetName = ParamSetSingleUserUPN)]
[OutputType("None")]
///
- /// Implements the SetAzureADUserExCommand PowerShell cmdlet.
+ /// Implements the Set-AzureADUserEx PowerShell cmdlet.
///
public class SetAzureADUserExCommand : AzureADCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/AddADDBSidHistoryCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/AddADDBSidHistoryCommand.cs
index 85cb6a1..7a20ec9 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/AddADDBSidHistoryCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/AddADDBSidHistoryCommand.cs
@@ -8,7 +8,7 @@
[Cmdlet(VerbsCommon.Add, "ADDBSidHistory")]
[OutputType("None")]
///
- /// Implements the AddADDBSidHistoryCommand PowerShell cmdlet.
+ /// Implements the Add-ADDBSidHistory PowerShell cmdlet.
///
public class AddADDBSidHistoryCommand : ADDBModifyPrincipalCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/DisableADDBAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/DisableADDBAccountCommand.cs
index 715d691..a14fcb4 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/DisableADDBAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/DisableADDBAccountCommand.cs
@@ -6,7 +6,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsLifecycle.Disable, "ADDBAccount")]
[OutputType("None")]
///
- /// Implements the DisableADDBAccountCommand PowerShell cmdlet.
+ /// Implements the Disable-ADDBAccount PowerShell cmdlet.
///
public class DisableADDBAccountCommand : ADDBAccountStatusCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/EnableADDBAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/EnableADDBAccountCommand.cs
index 094a5ca..f631297 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/EnableADDBAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/EnableADDBAccountCommand.cs
@@ -5,7 +5,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsLifecycle.Enable, "ADDBAccount")]
[OutputType("None")]
///
- /// Implements the EnableADDBAccountCommand PowerShell cmdlet.
+ /// Implements the Enable-ADDBAccount PowerShell cmdlet.
///
public class EnableADDBAccountCommand : ADDBAccountStatusCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBAccountCommand.cs
index b80e4b9..ca0ad8c 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBAccountCommand.cs
@@ -8,7 +8,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Get, "ADDBAccount")]
[OutputType(typeof(DSAccount), typeof(DSUser), typeof(DSComputer))]
///
- /// Implements the GetADDBAccountCommand PowerShell cmdlet.
+ /// Implements the Get-ADDBAccount PowerShell cmdlet for retrieving account information from Active Directory database files.
///
public class GetADDBAccountCommand : ADDBPrincipalCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBackupKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBackupKeyCommand.cs
index 5fe5815..b7a4835 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBackupKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBackupKeyCommand.cs
@@ -9,7 +9,7 @@
[Cmdlet(VerbsCommon.Get, "ADDBBackupKey")]
[OutputType(typeof(DSInternals.Common.Data.DPAPIBackupKey))]
///
- /// Implements the GetADDBBackupKeyCommand PowerShell cmdlet.
+ /// Implements the Get-ADDBBackupKey PowerShell cmdlet.
///
public class GetADDBBackupKeyCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBitlockerRecoveryInformationCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBitlockerRecoveryInformationCommand.cs
index b7f1dec..aaee051 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBitlockerRecoveryInformationCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBBitlockerRecoveryInformationCommand.cs
@@ -8,7 +8,7 @@
[Cmdlet(VerbsCommon.Get, "ADDBBitLockerRecoveryInformation")]
[OutputType(typeof(DSInternals.Common.Data.BitLockerRecoveryInformation))]
///
- /// Implements the GetADDBBitLockerRecoveryInformationCommand PowerShell cmdlet.
+ /// Implements the Get-ADDBBitLockerRecoveryInformation PowerShell cmdlet.
///
public class GetADDBBitLockerRecoveryInformationCommand : ADDBObjectCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsResourceRecordCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsResourceRecordCommand.cs
index b995804..86725e1 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsResourceRecordCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsResourceRecordCommand.cs
@@ -6,7 +6,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Get, "ADDBDnsResourceRecord")]
[OutputType(typeof(DSInternals.Common.Data.DnsResourceRecord))]
///
- /// Implements the GetADDBDnsResourceRecordCommand PowerShell cmdlet.
+ /// Implements the Get-ADDBDnsResourceRecord PowerShell cmdlet.
///
public class GetADDBDnsResourceRecordCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsZoneCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsZoneCommand.cs
index 448970f..21d4555 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsZoneCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDnsZoneCommand.cs
@@ -6,7 +6,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Get, "ADDBDnsZone")]
[OutputType(typeof(string))]
///
- /// Implements the GetADDBDnsZoneCommand PowerShell cmdlet.
+ /// Implements the Get-ADDBDnsZone PowerShell cmdlet.
///
public class GetADDBDnsZoneCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDomainControllerCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDomainControllerCommand.cs
index 11b7868..e8a11a8 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDomainControllerCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBDomainControllerCommand.cs
@@ -5,7 +5,7 @@
[Cmdlet(VerbsCommon.Get, "ADDBDomainController")]
[OutputType(typeof(DSInternals.PowerShell.DomainController))]
///
- /// Implements the GetADDBDomainControllerCommand PowerShell cmdlet.
+ /// Implements the Get-ADDBDomainController PowerShell cmdlet.
///
public class GetADDBDomainControllerCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBIndexCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBIndexCommand.cs
index 34f23e4..ec1be08 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBIndexCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBIndexCommand.cs
@@ -7,7 +7,7 @@ namespace DSInternals.PowerShell.Commands
// TODO: output type
[OutputType("None")]
///
- /// Implements the GetADDBIndexCommand PowerShell cmdlet.
+ /// Implements the Get-ADDBIndex PowerShell cmdlet.
///
public class GetADDBIndexCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBKdsRootKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBKdsRootKeyCommand.cs
index 3485d86..ce329b9 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBKdsRootKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBKdsRootKeyCommand.cs
@@ -9,7 +9,7 @@
[Cmdlet(VerbsCommon.Get, "ADDBKdsRootKey", DefaultParameterSetName = GetADDBKdsRootKeyCommand.AllKeysParameterSet)]
[OutputType(typeof(DSInternals.Common.Data.KdsRootKey))]
///
- /// Implements the GetADDBKdsRootKeyCommand PowerShell cmdlet.
+ /// Implements the Get-ADDBKdsRootKey PowerShell cmdlet.
///
public class GetADDBKdsRootKeyCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBSchemaAttributeCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBSchemaAttributeCommand.cs
index 1fcd217..6cbdace 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBSchemaAttributeCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBSchemaAttributeCommand.cs
@@ -7,7 +7,7 @@
[Cmdlet(VerbsCommon.Get, "ADDBSchemaAttribute")]
[OutputType(typeof(AttributeSchema))]
///
- /// Implements the GetADDBSchemaAttributeCommand PowerShell cmdlet.
+ /// Implements the Get-ADDBSchemaAttribute PowerShell cmdlet.
///
public class GetADDBSchemaAttributeCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBServiceAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBServiceAccountCommand.cs
index e7637ff..23b76ed 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBServiceAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBServiceAccountCommand.cs
@@ -7,7 +7,7 @@
[Cmdlet(VerbsCommon.Get, "ADDBServiceAccount")]
[OutputType(typeof(DSInternals.Common.Data.GroupManagedServiceAccount))]
///
- /// Implements the GetADDBServiceAccountCommand PowerShell cmdlet.
+ /// Implements the Get-ADDBServiceAccount PowerShell cmdlet.
///
public class GetADDBServiceAccountCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBTrust.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBTrust.cs
index 58d5bc2..a685495 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBTrust.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetADDBTrust.cs
@@ -8,7 +8,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Get, "ADDBTrust")]
[OutputType(typeof(TrustedDomain))]
///
- /// Implements the GetADDBTrustCommand PowerShell cmdlet.
+ /// Implements the Get-ADDBTrust PowerShell cmdlet.
///
public class GetADDBTrustCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/GetBootKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/GetBootKeyCommand.cs
index 394adf5..d97c03d 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/GetBootKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/GetBootKeyCommand.cs
@@ -10,7 +10,7 @@
[Cmdlet(VerbsCommon.Get, "BootKey")]
[OutputType(typeof(string))]
///
- /// Implements the GetBootKeyCommand PowerShell cmdlet.
+ /// Implements the Get-BootKey PowerShell cmdlet.
///
public class GetBootKeyCommand : PSCmdletEx
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/NewADDBRestoreFromMediaScriptCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/NewADDBRestoreFromMediaScriptCommand.cs
index ea2dc72..4daa581 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/NewADDBRestoreFromMediaScriptCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/NewADDBRestoreFromMediaScriptCommand.cs
@@ -14,7 +14,7 @@
[Cmdlet(VerbsCommon.New, "ADDBRestoreFromMediaScript")]
[OutputType(typeof(string))]
///
- /// Implements the NewADDBRestoreFromMediaScriptCommand PowerShell cmdlet.
+ /// Implements the New-ADDBRestoreFromMediaScript PowerShell cmdlet.
///
public class NewADDBRestoreFromMediaScriptCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/RemoveADDBObjectCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/RemoveADDBObjectCommand.cs
index 711cf48..3108883 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/RemoveADDBObjectCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/RemoveADDBObjectCommand.cs
@@ -12,7 +12,7 @@
)]
[OutputType("None")]
///
- /// Implements the RemoveADDBObjectCommand PowerShell cmdlet.
+ /// Implements the Remove-ADDBObject PowerShell cmdlet.
///
public class RemoveADDBObjectCommand : ADDBObjectCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/RestoreADDBAttributeCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/RestoreADDBAttributeCommand.cs
index 035073e..760f198 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/RestoreADDBAttributeCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/RestoreADDBAttributeCommand.cs
@@ -6,7 +6,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsData.Restore, "ADDBAttribute")]
[OutputType("None")]
///
- /// Implements the RestoreADDBAttributeCommand PowerShell cmdlet.
+ /// Implements the Restore-ADDBAttribute PowerShell cmdlet.
///
public class RestoreADDBAttributeCommand : ADDBObjectCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountControlCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountControlCommand.cs
index 117fe4d..3cd1dc2 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountControlCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountControlCommand.cs
@@ -5,13 +5,11 @@
namespace DSInternals.PowerShell.Commands
{
///
- /// Modifies user account control (UAC) values for an Active Directory account.
+ ///
+ /// Implements the Set-ADDBAccountControl PowerShell cmdlet for modifying user account control (UAC) values for an Active Directory account.
///
[Cmdlet(VerbsCommon.Set, "ADDBAccountControl")]
[OutputType("None")]
- ///
- /// Implements the SetADDBAccountControlCommand PowerShell cmdlet.
- ///
public class SetADDBAccountControlCommand : ADDBModifyPrincipalCommandBase
{
///
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordCommand.cs
index 8aced15..e5f2c00 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordCommand.cs
@@ -9,7 +9,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Set, "ADDBAccountPassword")]
[OutputType("None")]
///
- /// Implements the SetADDBAccountPasswordCommand PowerShell cmdlet.
+ /// Implements the Set-ADDBAccountPassword PowerShell cmdlet.
///
public class SetADDBAccountPasswordCommand : ADDBModifyPrincipalCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordHashCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordHashCommand.cs
index 34521a3..890cdd8 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordHashCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBAccountPasswordHashCommand.cs
@@ -8,7 +8,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Set, "ADDBAccountPasswordHash")]
[OutputType("None")]
///
- /// Implements the SetADDBAccountPasswordHashCommand PowerShell cmdlet.
+ /// Implements the Set-ADDBAccountPasswordHash PowerShell cmdlet.
///
public class SetADDBAccountPasswordHashCommand : ADDBModifyPrincipalCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBBootKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBBootKeyCommand.cs
index 7ddcfe6..ede1d75 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBBootKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBBootKeyCommand.cs
@@ -7,7 +7,7 @@
[Cmdlet(VerbsCommon.Set, "ADDBBootKey")]
[OutputType("None")]
///
- /// Implements the SetADDBBootKeyCommand PowerShell cmdlet.
+ /// Implements the Set-ADDBBootKey PowerShell cmdlet.
///
public class SetADDBBootKeyCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBDomainControllerCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBDomainControllerCommand.cs
index 118bbcc..1aed023 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBDomainControllerCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBDomainControllerCommand.cs
@@ -7,7 +7,7 @@
[Cmdlet(VerbsCommon.Set, "ADDBDomainController", ConfirmImpact = ConfirmImpact.High)]
[OutputType("None")]
///
- /// Implements the SetADDBDomainControllerCommand PowerShell cmdlet.
+ /// Implements the Set-ADDBDomainController PowerShell cmdlet.
///
public class SetADDBDomainControllerCommand : ADDBCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBPrimaryGroupCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBPrimaryGroupCommand.cs
index c54a547..ca206d8 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBPrimaryGroupCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/SetADDBPrimaryGroupCommand.cs
@@ -8,7 +8,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Set, "ADDBPrimaryGroup")]
[OutputType("None")]
///
- /// Implements the SetADDBPrimaryGroupCommand PowerShell cmdlet.
+ /// Implements the Set-ADDBPrimaryGroup PowerShell cmdlet.
///
public class SetADDBPrimaryGroupCommand : ADDBModifyPrincipalCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Datastore/UnlockADDBAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/Datastore/UnlockADDBAccountCommand.cs
index 23be962..3926ba3 100644
--- a/Src/DSInternals.PowerShell/Commands/Datastore/UnlockADDBAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Datastore/UnlockADDBAccountCommand.cs
@@ -7,7 +7,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Unlock, "ADDBAccount")]
[OutputType("None")]
///
- /// Implements the UnlockADDBAccountCommand PowerShell cmdlet.
+ /// Implements the Unlock-ADDBAccount PowerShell cmdlet.
///
public class UnlockADDBAccountCommand : ADDBModifyPrincipalCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromGPPrefPasswordCommand.cs b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromGPPrefPasswordCommand.cs
index 5a60127..e972235 100644
--- a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromGPPrefPasswordCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromGPPrefPasswordCommand.cs
@@ -7,7 +7,7 @@
[Cmdlet(VerbsData.ConvertFrom, "GPPrefPassword")]
[OutputType(new Type[] { typeof(string) })]
///
- /// Implements the ConvertFromGPPrefPasswordCommand PowerShell cmdlet.
+ /// Implements the ConvertFrom-GPPrefPassword PowerShell cmdlet.
///
public class ConvertFromGPPrefPasswordCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromUnicodePasswordCommand.cs b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromUnicodePasswordCommand.cs
index 246db54..7a82b5f 100644
--- a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromUnicodePasswordCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertFromUnicodePasswordCommand.cs
@@ -8,7 +8,7 @@
[Cmdlet(VerbsData.ConvertFrom, "UnicodePassword")]
[OutputType(typeof(string))]
///
- /// Implements the ConvertFromUnicodePasswordCommand PowerShell cmdlet.
+ /// Implements the ConvertFrom-UnicodePassword PowerShell cmdlet.
///
public class ConvertFromUnicodePasswordCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToGPPrefPasswordCommand.cs b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToGPPrefPasswordCommand.cs
index e2009bd..d787b59 100644
--- a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToGPPrefPasswordCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToGPPrefPasswordCommand.cs
@@ -8,7 +8,7 @@
[Cmdlet(VerbsData.ConvertTo, "GPPrefPassword")]
[OutputType(new Type[] { typeof(string) })]
///
- /// Implements the ConvertToGPPrefPasswordCommand PowerShell cmdlet.
+ /// Implements the ConvertTo-GPPrefPassword PowerShell cmdlet.
///
public class ConvertToGPPrefPasswordCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToUnicodePasswordCommand.cs b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToUnicodePasswordCommand.cs
index 03449ca..d88505a 100644
--- a/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToUnicodePasswordCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Encryption/ConvertToUnicodePasswordCommand.cs
@@ -8,7 +8,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsData.ConvertTo, "UnicodePassword")]
[OutputType(new Type[] { typeof(String) })]
///
- /// Implements the ConvertToUnicodePasswordCommand PowerShell cmdlet.
+ /// Implements the ConvertTo-UnicodePassword PowerShell cmdlet.
///
public class ConvertToUnicodePasswordCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToKerberosKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToKerberosKeyCommand.cs
index e35b5cf..390cd42 100644
--- a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToKerberosKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToKerberosKeyCommand.cs
@@ -9,7 +9,7 @@
[Cmdlet(VerbsData.ConvertTo, "KerberosKey")]
[OutputType(new Type[] { typeof(KerberosKeyDataNew) })]
///
- /// Implements the ConvertToKerberosKeyCommand PowerShell cmdlet.
+ /// Implements the ConvertTo-KerberosKey PowerShell cmdlet.
///
public class ConvertToKerberosKeyCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToOrgIdHashCommand.cs b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToOrgIdHashCommand.cs
index 8b1c94b..db51a0c 100644
--- a/Src/DSInternals.PowerShell/Commands/Hash/ConvertToOrgIdHashCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Hash/ConvertToOrgIdHashCommand.cs
@@ -9,7 +9,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsData.ConvertTo, "OrgIdHash", DefaultParameterSetName = "FromHash")]
[OutputType(new Type[] { typeof(string) })]
///
- /// Implements the ConvertToOrgIdHashCommand PowerShell cmdlet.
+ /// Implements the ConvertTo-OrgIdHash PowerShell cmdlet.
///
public class ConvertToOrgIdHashCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Hash/SetSamAccountPasswordHashCommand.cs b/Src/DSInternals.PowerShell/Commands/Hash/SetSamAccountPasswordHashCommand.cs
index d78e45b..9f7f715 100644
--- a/Src/DSInternals.PowerShell/Commands/Hash/SetSamAccountPasswordHashCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Hash/SetSamAccountPasswordHashCommand.cs
@@ -11,7 +11,7 @@
[Cmdlet(VerbsCommon.Set, "SamAccountPasswordHash")]
[OutputType("None")]
///
- /// Implements the SetSamAccountPasswordHashCommand PowerShell cmdlet.
+ /// Implements the Set-SamAccountPasswordHash PowerShell cmdlet.
///
public class SetSamAccountPasswordHashCommand : SamCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/LSA/GetLsaBackupKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/LSA/GetLsaBackupKeyCommand.cs
index 039242f..8129af6 100644
--- a/Src/DSInternals.PowerShell/Commands/LSA/GetLsaBackupKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/LSA/GetLsaBackupKeyCommand.cs
@@ -7,7 +7,7 @@
[Cmdlet(VerbsCommon.Get, "LsaBackupKey")]
[OutputType(typeof(DPAPIBackupKey))]
///
- /// Implements the GetLsaBackupKeyCommand PowerShell cmdlet.
+ /// Implements the Get-LsaBackupKey PowerShell cmdlet.
///
public class GetLsaBackupKeyCommand : LsaPolicyCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/LSA/GetLsaPolicyInformationCommand.cs b/Src/DSInternals.PowerShell/Commands/LSA/GetLsaPolicyInformationCommand.cs
index 6c859d9..5d60b89 100644
--- a/Src/DSInternals.PowerShell/Commands/LSA/GetLsaPolicyInformationCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/LSA/GetLsaPolicyInformationCommand.cs
@@ -6,7 +6,7 @@
[Cmdlet(VerbsCommon.Get, "LsaPolicyInformation")]
[OutputType(typeof(LsaPolicyInformation))]
///
- /// Implements the GetLsaPolicyInformationCommand PowerShell cmdlet.
+ /// Implements the Get-LsaPolicyInformation PowerShell cmdlet.
///
public class GetLsaPolicyInformationCommand : LsaPolicyCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/LSA/GetSamPasswordPolicyCommand.cs b/Src/DSInternals.PowerShell/Commands/LSA/GetSamPasswordPolicyCommand.cs
index 769f7c3..48817b7 100644
--- a/Src/DSInternals.PowerShell/Commands/LSA/GetSamPasswordPolicyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/LSA/GetSamPasswordPolicyCommand.cs
@@ -7,7 +7,7 @@
[Cmdlet(VerbsCommon.Get, "SamPasswordPolicy")]
[OutputType(typeof(SamDomainPasswordInformation))]
///
- /// Implements the GetSamPasswordPolicyCommand PowerShell cmdlet.
+ /// Implements the Get-SamPasswordPolicy PowerShell cmdlet.
///
public class GetSamPasswordPolicyCommand : SamCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/LSA/SetLsaPolicyInformationCommand.cs b/Src/DSInternals.PowerShell/Commands/LSA/SetLsaPolicyInformationCommand.cs
index d47cc31..9c86464 100644
--- a/Src/DSInternals.PowerShell/Commands/LSA/SetLsaPolicyInformationCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/LSA/SetLsaPolicyInformationCommand.cs
@@ -9,7 +9,7 @@
[Cmdlet(VerbsCommon.Set, "LsaPolicyInformation")]
[OutputType("None")]
///
- /// Implements the SetLsaPolicyInformationCommand PowerShell cmdlet.
+ /// Implements the Set-LsaPolicyInformation PowerShell cmdlet.
///
public class SetLsaPolicyInformationCommand : LsaPolicyCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Misc/ConvertFromADManagedPasswordBlobCommand.cs b/Src/DSInternals.PowerShell/Commands/Misc/ConvertFromADManagedPasswordBlobCommand.cs
index c283337..089e7cd 100644
--- a/Src/DSInternals.PowerShell/Commands/Misc/ConvertFromADManagedPasswordBlobCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Misc/ConvertFromADManagedPasswordBlobCommand.cs
@@ -7,7 +7,7 @@
[Cmdlet(VerbsData.ConvertFrom, "ADManagedPasswordBlob")]
[OutputType(typeof(ManagedPassword))]
///
- /// Implements the ConvertFromADManagedPasswordBlobCommand PowerShell cmdlet.
+ /// Implements the ConvertFrom-ADManagedPasswordBlob PowerShell cmdlet.
///
public class ConvertFromADManagedPasswordBlobCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Misc/ConvertToHexCommand.cs b/Src/DSInternals.PowerShell/Commands/Misc/ConvertToHexCommand.cs
index f7552da..a4d9a73 100644
--- a/Src/DSInternals.PowerShell/Commands/Misc/ConvertToHexCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Misc/ConvertToHexCommand.cs
@@ -7,7 +7,7 @@
[Cmdlet(VerbsData.ConvertTo, "Hex")]
[OutputType(new Type[] { typeof(string) })]
///
- /// Implements the ConvertToHexCommand PowerShell cmdlet.
+ /// Implements the ConvertTo-Hex PowerShell cmdlet.
///
public class ConvertToHexCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Misc/GetADKeyCredential.cs b/Src/DSInternals.PowerShell/Commands/Misc/GetADKeyCredential.cs
index ae11e78..7dc95d4 100644
--- a/Src/DSInternals.PowerShell/Commands/Misc/GetADKeyCredential.cs
+++ b/Src/DSInternals.PowerShell/Commands/Misc/GetADKeyCredential.cs
@@ -8,7 +8,7 @@
[Cmdlet(VerbsCommon.Get, "ADKeyCredential", DefaultParameterSetName = ParamSetFromUserCertificate)]
[OutputType(new Type[] { typeof(KeyCredential) })]
///
- /// Implements the GetADKeyCredentialCommand PowerShell cmdlet.
+ /// Implements the Get-ADKeyCredential PowerShell cmdlet.
///
public class GetADKeyCredentialCommand : PSCmdlet
{
diff --git a/Src/DSInternals.PowerShell/Commands/Misc/TestPasswordQualityCommand.cs b/Src/DSInternals.PowerShell/Commands/Misc/TestPasswordQualityCommand.cs
index 3d66b49..0cb2d21 100644
--- a/Src/DSInternals.PowerShell/Commands/Misc/TestPasswordQualityCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Misc/TestPasswordQualityCommand.cs
@@ -13,7 +13,7 @@
[Cmdlet(VerbsDiagnostic.Test, "PasswordQuality", DefaultParameterSetName = ParamSetSingleSortedFile)]
[OutputType(new Type[] { typeof(PasswordQualityTestResult) })]
///
- /// Implements the TestPasswordQualityCommand PowerShell cmdlet.
+ /// Implements the Test-PasswordQuality PowerShell cmdlet.
///
public class TestPasswordQualityCommand : PSCmdletEx, IDisposable
{
diff --git a/Src/DSInternals.PowerShell/Commands/Replication/AddADReplNgcKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Replication/AddADReplNgcKeyCommand.cs
index 0ee100c..aa42a0d 100644
--- a/Src/DSInternals.PowerShell/Commands/Replication/AddADReplNgcKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Replication/AddADReplNgcKeyCommand.cs
@@ -6,7 +6,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Add, "ADReplNgcKey")]
[OutputType("None")]
///
- /// Implements the AddADReplNgcKeyCommand PowerShell cmdlet.
+ /// Implements the Add-ADReplNgcKey PowerShell cmdlet.
///
public class AddADReplNgcKeyCommand : ADReplPrincipalCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Replication/GetADReplAccountCommand.cs b/Src/DSInternals.PowerShell/Commands/Replication/GetADReplAccountCommand.cs
index 1e8f794..5eb44e5 100644
--- a/Src/DSInternals.PowerShell/Commands/Replication/GetADReplAccountCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Replication/GetADReplAccountCommand.cs
@@ -10,7 +10,7 @@ namespace DSInternals.PowerShell.Commands
[Cmdlet(VerbsCommon.Get, "ADReplAccount")]
[OutputType(typeof(DSAccount), typeof(DSUser), typeof(DSComputer))]
///
- /// Implements the GetADReplAccountCommand PowerShell cmdlet.
+ /// Implements the Get-ADReplAccount PowerShell cmdlet.
///
public class GetADReplAccountCommand : ADReplPrincipalCommandBase
{
diff --git a/Src/DSInternals.PowerShell/Commands/Replication/GetADReplBackupKeyCommand.cs b/Src/DSInternals.PowerShell/Commands/Replication/GetADReplBackupKeyCommand.cs
index 6bf7746..a0344b3 100644
--- a/Src/DSInternals.PowerShell/Commands/Replication/GetADReplBackupKeyCommand.cs
+++ b/Src/DSInternals.PowerShell/Commands/Replication/GetADReplBackupKeyCommand.cs
@@ -6,7 +6,7 @@
[Cmdlet(VerbsCommon.Get, "ADReplBackupKey")]
[OutputType(typeof(DPAPIBackupKey))]
///
- /// Implements the GetADReplBackupKeyCommand PowerShell cmdlet.
+ /// Implements the Get-ADReplBackupKey PowerShell cmdlet.
///
public class GetADReplBackupKeyCommand : ADReplCommandBase
{
From 247cc592ac88e03bf54b5c7498204c85e5f600fd Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 4 Sep 2025 20:18:48 +0000
Subject: [PATCH 17/22] Fix syntax error in ReplicaObjectCollection constructor
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
.../ReplicaObjectCollection.cs | 2 +-
.../packages.lock.json | 14 ++++++++++++++
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/Src/DSInternals.Replication.Model/ReplicaObjectCollection.cs b/Src/DSInternals.Replication.Model/ReplicaObjectCollection.cs
index 62a4144..a7987e2 100644
--- a/Src/DSInternals.Replication.Model/ReplicaObjectCollection.cs
+++ b/Src/DSInternals.Replication.Model/ReplicaObjectCollection.cs
@@ -18,7 +18,7 @@ public ReplicaObjectCollection() : base()
/// Initializes a new instance of the ReplicaObjectCollection class with the specified capacity.
///
/// The number of objects that the collection can initially store.
- : base(numObjects)
+ public ReplicaObjectCollection(int numObjects) : base(numObjects)
{
}
}
diff --git a/Src/DSInternals.Replication.Model/packages.lock.json b/Src/DSInternals.Replication.Model/packages.lock.json
index 1dbef1f..93707b1 100644
--- a/Src/DSInternals.Replication.Model/packages.lock.json
+++ b/Src/DSInternals.Replication.Model/packages.lock.json
@@ -2,6 +2,15 @@
"version": 1,
"dependencies": {
".NETFramework,Version=v4.8": {
+ "Microsoft.NETFramework.ReferenceAssemblies": {
+ "type": "Direct",
+ "requested": "[1.0.3, )",
+ "resolved": "1.0.3",
+ "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
+ "dependencies": {
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3"
+ }
+ },
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
@@ -25,6 +34,11 @@
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": {
+ "type": "Transitive",
+ "resolved": "1.0.3",
+ "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ=="
+ },
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
From caadf64cfabd26d43ba0c612d8621af0ffe65c46 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 4 Sep 2025 20:24:48 +0000
Subject: [PATCH 18/22] Fix SecurityDescriptorRersolver typo throughout
codebase
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
.../SecurityDescriptorResolverTester.cs | 2 +-
Src/DSInternals.DataStore/DatastoreObject.cs | 2 +-
Src/DSInternals.DataStore/DirectoryContext.cs | 10 +-
.../SecurityDescriptorResolver.cs | 4 +-
Src/DSInternals.DataStore/packages.lock.json | 14 ++
.../packages.lock.json | 215 ------------------
6 files changed, 23 insertions(+), 224 deletions(-)
delete mode 100644 Src/DSInternals.Replication.Model/packages.lock.json
diff --git a/Src/DSInternals.DataStore.Test/SecurityDescriptorResolverTester.cs b/Src/DSInternals.DataStore.Test/SecurityDescriptorResolverTester.cs
index 6ec9fc5..04e6c77 100644
--- a/Src/DSInternals.DataStore.Test/SecurityDescriptorResolverTester.cs
+++ b/Src/DSInternals.DataStore.Test/SecurityDescriptorResolverTester.cs
@@ -15,7 +15,7 @@ public void SecurityDescriptorResolver_ComputeHash_ObjectSD()
byte[] expectedHash = Convert.FromBase64String("2FUDMNHg430Z3T4G9yu6Pg==");
var securityDescriptor = new RawSecurityDescriptor(binarySecurityDescriptor, 0);
- byte[] calculatedHash = SecurityDescriptorRersolver.ComputeHash(securityDescriptor);
+ byte[] calculatedHash = SecurityDescriptorResolver.ComputeHash(securityDescriptor);
Assert.AreEqual(true, expectedHash.SequenceEqual(calculatedHash));
}
}
diff --git a/Src/DSInternals.DataStore/DatastoreObject.cs b/Src/DSInternals.DataStore/DatastoreObject.cs
index db43b3d..81af814 100644
--- a/Src/DSInternals.DataStore/DatastoreObject.cs
+++ b/Src/DSInternals.DataStore/DatastoreObject.cs
@@ -218,7 +218,7 @@ public override void ReadAttribute(string name, out RawSecurityDescriptor value)
{
// The binary value is a 64-bit foreign key
long securityDescriptorId = BitConverter.ToInt64(binaryValue, 0);
- value = this.context.SecurityDescriptorRersolver.GetDescriptor(securityDescriptorId);
+ value = this.context.SecurityDescriptorResolver.GetDescriptor(securityDescriptorId);
}
else
{
diff --git a/Src/DSInternals.DataStore/DirectoryContext.cs b/Src/DSInternals.DataStore/DirectoryContext.cs
index 1d4e4aa..d58c42a 100644
--- a/Src/DSInternals.DataStore/DirectoryContext.cs
+++ b/Src/DSInternals.DataStore/DirectoryContext.cs
@@ -136,7 +136,7 @@ public DirectoryContext(string dbFilePath, bool readOnly, string logDirectoryPat
this.isDBAttached = true;
this.database = this.session.OpenDatabase(this.DSADatabaseFile);
this.Schema = DirectorySchema.Create(this.database);
- this.SecurityDescriptorRersolver = new SecurityDescriptorRersolver(this.database);
+ this.SecurityDescriptorResolver = new SecurityDescriptorResolver(this.database);
this.DistinguishedNameResolver = new DistinguishedNameResolver(this.database, this.Schema);
this.LinkResolver = new LinkResolver(this.database, this.Schema);
this.DomainController = new DomainController(this);
@@ -218,7 +218,7 @@ public DistinguishedNameResolver DistinguishedNameResolver
private set;
}
- public SecurityDescriptorRersolver SecurityDescriptorRersolver
+ public SecurityDescriptorResolver SecurityDescriptorResolver
{
get;
private set;
@@ -273,10 +273,10 @@ protected virtual void Dispose(bool disposing)
return;
}
- if (this.SecurityDescriptorRersolver != null)
+ if (this.SecurityDescriptorResolver != null)
{
- this.SecurityDescriptorRersolver.Dispose();
- this.SecurityDescriptorRersolver = null;
+ this.SecurityDescriptorResolver.Dispose();
+ this.SecurityDescriptorResolver = null;
}
if (this.DomainController != null)
diff --git a/Src/DSInternals.DataStore/SecurityDescriptorResolver.cs b/Src/DSInternals.DataStore/SecurityDescriptorResolver.cs
index 3a8e70e..9a0f67c 100644
--- a/Src/DSInternals.DataStore/SecurityDescriptorResolver.cs
+++ b/Src/DSInternals.DataStore/SecurityDescriptorResolver.cs
@@ -12,7 +12,7 @@
///
/// Resolves and caches security descriptors from the Active Directory database to improve performance.
///
- public class SecurityDescriptorRersolver : IDisposable
+ public class SecurityDescriptorResolver : IDisposable
{
private const string SecurityDescriptorIdentifierColumn = "sd_id";
private const string SecurityDescriptorValueColumn = "sd_value";
@@ -28,7 +28,7 @@ public class SecurityDescriptorRersolver : IDisposable
private Columnid _securityDescriptorIdentifierColumnId;
private Columnid _securityDescriptorValueColumnId;
- public SecurityDescriptorRersolver(IsamDatabase database)
+ public SecurityDescriptorResolver(IsamDatabase database)
{
if (database == null)
{
diff --git a/Src/DSInternals.DataStore/packages.lock.json b/Src/DSInternals.DataStore/packages.lock.json
index 5a83c73..3663768 100644
--- a/Src/DSInternals.DataStore/packages.lock.json
+++ b/Src/DSInternals.DataStore/packages.lock.json
@@ -17,6 +17,15 @@
"DSInternals.ManagedEsent.Interop": "2.0.4.1"
}
},
+ "Microsoft.NETFramework.ReferenceAssemblies": {
+ "type": "Direct",
+ "requested": "[1.0.3, )",
+ "resolved": "1.0.3",
+ "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
+ "dependencies": {
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3"
+ }
+ },
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
@@ -51,6 +60,11 @@
"resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
},
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": {
+ "type": "Transitive",
+ "resolved": "1.0.3",
+ "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ=="
+ },
"Microsoft.SourceLink.Common": {
"type": "Transitive",
"resolved": "8.0.0",
diff --git a/Src/DSInternals.Replication.Model/packages.lock.json b/Src/DSInternals.Replication.Model/packages.lock.json
deleted file mode 100644
index 93707b1..0000000
--- a/Src/DSInternals.Replication.Model/packages.lock.json
+++ /dev/null
@@ -1,215 +0,0 @@
-{
- "version": 1,
- "dependencies": {
- ".NETFramework,Version=v4.8": {
- "Microsoft.NETFramework.ReferenceAssemblies": {
- "type": "Direct",
- "requested": "[1.0.3, )",
- "resolved": "1.0.3",
- "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
- "dependencies": {
- "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3"
- }
- },
- "Microsoft.SourceLink.GitHub": {
- "type": "Direct",
- "requested": "[8.0.0, )",
- "resolved": "8.0.0",
- "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
- "dependencies": {
- "Microsoft.Build.Tasks.Git": "8.0.0",
- "Microsoft.SourceLink.Common": "8.0.0"
- }
- },
- "Microsoft.Bcl.AsyncInterfaces": {
- "type": "Transitive",
- "resolved": "9.0.8",
- "contentHash": "mdq9WaHnRJBvmhbDvoEk9aIEjpoW1cmA6wGuE0/eV49NT/0Z/d+NauB4jzw2Dyi/TndebYfjAYHCOXeB0c/Qhg==",
- "dependencies": {
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- },
- "Microsoft.Build.Tasks.Git": {
- "type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
- },
- "Microsoft.NETFramework.ReferenceAssemblies.net48": {
- "type": "Transitive",
- "resolved": "1.0.3",
- "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ=="
- },
- "Microsoft.SourceLink.Common": {
- "type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
- },
- "PeterO.Cbor": {
- "type": "Transitive",
- "resolved": "4.5.5",
- "contentHash": "9fMcLg2SUm9ri1j3gVPYxk6+Ev4l4wu93bYwFG1tvntg1Qy4m0rFDdxStG88XR/W4DggOtBXfPVkC3bLF10nqw==",
- "dependencies": {
- "PeterO.Numbers": "1.8.2",
- "PeterO.URIUtility": "1.0.0"
- }
- },
- "PeterO.Numbers": {
- "type": "Transitive",
- "resolved": "1.8.2",
- "contentHash": "d+A5KLoWbwOTpvubPaGXLgCzANE00jXmsT+yneHwLe2OlobBBFLaIHyoDwmekuHM17z9hU++RF6mL+zZ2x69nA=="
- },
- "PeterO.URIUtility": {
- "type": "Transitive",
- "resolved": "1.0.0",
- "contentHash": "fpRTBsYACMp7NvTECauYRomubWTC3vUNw4hMXdIedP8ctBGK6tea9HOJwE+qVzis6MZYkL3LIs8qeY3rc6Jdlw=="
- },
- "System.Buffers": {
- "type": "Transitive",
- "resolved": "4.6.1",
- "contentHash": "N8GXpmiLMtljq7gwvyS+1QvKT/W2J8sNAvx+HVg4NGmsG/H+2k/y9QI23auLJRterrzCiDH+IWAw4V/GPwsMlw=="
- },
- "System.Formats.Asn1": {
- "type": "Transitive",
- "resolved": "9.0.8",
- "contentHash": "gGL0gt2nAArsF2oOMFzClll6QN2FhtooTxEQ+K26uer4lrhahnYIo/qOn5HUSfjHlM91646L5/7dYIMJ86fHkQ==",
- "dependencies": {
- "System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
- "System.ValueTuple": "4.5.0"
- }
- },
- "System.IO.Pipelines": {
- "type": "Transitive",
- "resolved": "9.0.8",
- "contentHash": "6vPmJt73mgUo1gzc/OcXlJvClz/2jxZ4TQPRfriVaLoGRH2mye530D9WHJYbFQRNMxF3PWCoeofsFdCyN7fLzA==",
- "dependencies": {
- "System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- },
- "System.Memory": {
- "type": "Transitive",
- "resolved": "4.6.3",
- "contentHash": "qdcDOgnFZY40+Q9876JUHnlHu7bosOHX8XISRoH94fwk6hgaeQGSgfZd8srWRZNt5bV9ZW2TljcegDNxsf+96A==",
- "dependencies": {
- "System.Buffers": "4.6.1",
- "System.Numerics.Vectors": "4.6.1",
- "System.Runtime.CompilerServices.Unsafe": "6.1.2"
- }
- },
- "System.Numerics.Vectors": {
- "type": "Transitive",
- "resolved": "4.6.1",
- "contentHash": "sQxefTnhagrhoq2ReR0D/6K0zJcr9Hrd6kikeXsA1I8kOCboTavcUC4r7TSfpKFeE163uMuxZcyfO1mGO3EN8Q=="
- },
- "System.Runtime.CompilerServices.Unsafe": {
- "type": "Transitive",
- "resolved": "6.1.2",
- "contentHash": "2hBr6zdbIBTDE3EhK7NSVNdX58uTK6iHW/P/Axmm9sl1xoGSLqDvMtpecn226TNwHByFokYwJmt/aQQNlO5CRw=="
- },
- "System.Text.Encodings.Web": {
- "type": "Transitive",
- "resolved": "9.0.8",
- "contentHash": "W+LotQsM4wBJ4PG7uRkyul4wqL4Fz7R4ty6uXrCNZUhbaHYANgrPaYR2ZpMVpdCjQEJ17Jr1NMN8hv4SHaHY4A==",
- "dependencies": {
- "System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0"
- }
- },
- "System.Text.Json": {
- "type": "Transitive",
- "resolved": "9.0.8",
- "contentHash": "mIQir9jBqk0V7X0Nw5hzPJZC8DuGdf+2DS3jAVsr6rq5+/VyH5rza0XGcONJUWBrZ+G6BCwNyjWYd9lncBu48A==",
- "dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "9.0.8",
- "System.Buffers": "4.5.1",
- "System.IO.Pipelines": "9.0.8",
- "System.Memory": "4.5.5",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0",
- "System.Text.Encodings.Web": "9.0.8",
- "System.Threading.Tasks.Extensions": "4.5.4",
- "System.ValueTuple": "4.5.0"
- }
- },
- "System.Threading.Tasks.Extensions": {
- "type": "Transitive",
- "resolved": "4.5.4",
- "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
- "dependencies": {
- "System.Runtime.CompilerServices.Unsafe": "4.5.3"
- }
- },
- "System.ValueTuple": {
- "type": "Transitive",
- "resolved": "4.6.1",
- "contentHash": "+RJT4qaekpZ7DDLhf+LTjq+E48jieKiY9ulJ+BoxKmZblIJfIJT8Ufcaa/clQqnYvWs8jugfGSMu8ylS0caG0w=="
- },
- "dsinternals.common": {
- "type": "Project",
- "dependencies": {
- "PeterO.Cbor": "[4.5.5, )",
- "System.Buffers": "[4.6.1, )",
- "System.Formats.Asn1": "[9.0.8, )",
- "System.Memory": "[4.6.3, )",
- "System.Text.Json": "[9.0.8, )",
- "System.ValueTuple": "[4.6.1, )"
- }
- }
- },
- "net8.0-windows7.0": {
- "Microsoft.SourceLink.GitHub": {
- "type": "Direct",
- "requested": "[8.0.0, )",
- "resolved": "8.0.0",
- "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
- "dependencies": {
- "Microsoft.Build.Tasks.Git": "8.0.0",
- "Microsoft.SourceLink.Common": "8.0.0"
- }
- },
- "Microsoft.Build.Tasks.Git": {
- "type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
- },
- "Microsoft.SourceLink.Common": {
- "type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
- },
- "PeterO.Cbor": {
- "type": "Transitive",
- "resolved": "4.5.5",
- "contentHash": "9fMcLg2SUm9ri1j3gVPYxk6+Ev4l4wu93bYwFG1tvntg1Qy4m0rFDdxStG88XR/W4DggOtBXfPVkC3bLF10nqw==",
- "dependencies": {
- "PeterO.Numbers": "1.8.2",
- "PeterO.URIUtility": "1.0.0"
- }
- },
- "PeterO.Numbers": {
- "type": "Transitive",
- "resolved": "1.8.2",
- "contentHash": "d+A5KLoWbwOTpvubPaGXLgCzANE00jXmsT+yneHwLe2OlobBBFLaIHyoDwmekuHM17z9hU++RF6mL+zZ2x69nA=="
- },
- "PeterO.URIUtility": {
- "type": "Transitive",
- "resolved": "1.0.0",
- "contentHash": "fpRTBsYACMp7NvTECauYRomubWTC3vUNw4hMXdIedP8ctBGK6tea9HOJwE+qVzis6MZYkL3LIs8qeY3rc6Jdlw=="
- },
- "System.DirectoryServices": {
- "type": "Transitive",
- "resolved": "9.0.8",
- "contentHash": "xN2JrOfhcOyswOflVZG27XlFJDPPqU7AQtAAStWcnKoC8W9XCLOLdAYIrrwiZMfeRhavVErI8HkSO/c2TQ+z2g=="
- },
- "dsinternals.common": {
- "type": "Project",
- "dependencies": {
- "PeterO.Cbor": "[4.5.5, )",
- "System.DirectoryServices": "[9.0.8, )"
- }
- }
- }
- }
-}
\ No newline at end of file
From 4dc0d0cbcf31d1f3e1329de51b8c09d92cb77193 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 4 Sep 2025 20:30:09 +0000
Subject: [PATCH 19/22] Improve XML documentation for PowerShell Utils,
DataStore enums and constants
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
Src/DSInternals.DataStore/ADConstants.cs | 14 +-
Src/DSInternals.DataStore/DatastoreObject.cs | 8 +
Src/DSInternals.DataStore/DirectoryAgent.cs | 2 +-
.../Enums/DatabaseState.cs | 2 +-
.../Enums/DomainControllerOptions.cs | 4 +-
Src/DSInternals.DataStore/packages.lock.json | 303 ------------------
.../SupplementalCredentialsDeserializer.cs | 19 +-
.../Utils/AcceptHexStringAttribute.cs | 5 +-
8 files changed, 38 insertions(+), 319 deletions(-)
delete mode 100644 Src/DSInternals.DataStore/packages.lock.json
diff --git a/Src/DSInternals.DataStore/ADConstants.cs b/Src/DSInternals.DataStore/ADConstants.cs
index 37374f8..77ec4cb 100644
--- a/Src/DSInternals.DataStore/ADConstants.cs
+++ b/Src/DSInternals.DataStore/ADConstants.cs
@@ -7,31 +7,31 @@ namespace DSInternals.DataStore
internal static class ADConstants
{
///
- /// The DataTableName.
+ /// Name of the main Active Directory database table containing object data.
///
public const string DataTableName = "datatable";
///
- /// The SystemTableName.
+ /// Name of the hidden system table containing internal Active Directory metadata.
///
public const string SystemTableName = "hiddentable";
///
- /// The LinkTableName.
+ /// Name of the table containing linked attribute references between Active Directory objects.
///
public const string LinkTableName = "link_table";
///
- /// The SecurityDescriptorTableName.
+ /// Name of the table containing security descriptors for Active Directory objects.
///
public const string SecurityDescriptorTableName = "sd_table";
///
- /// The EseBaseName.
+ /// Base filename prefix for ESE database files.
///
public const string EseBaseName = "edb";
///
- /// The EseTempDatabaseName.
+ /// Filename for the ESE temporary database used during operations.
///
public const string EseTempDatabaseName = "temp.edb";
///
- /// The 10240.
+ /// Size of ESE log files in kilobytes (10MB).
///
public const int EseLogFileSize = 10240; // 10MB
///
diff --git a/Src/DSInternals.DataStore/DatastoreObject.cs b/Src/DSInternals.DataStore/DatastoreObject.cs
index 81af814..641470d 100644
--- a/Src/DSInternals.DataStore/DatastoreObject.cs
+++ b/Src/DSInternals.DataStore/DatastoreObject.cs
@@ -10,11 +10,19 @@
using DSInternals.Common.Schema;
using Microsoft.Database.Isam;
+ ///
+ /// Represents an Active Directory object stored in the database, providing access to attributes and metadata.
+ ///
public sealed class DatastoreObject : DirectoryObject
{
private DirectoryContext context;
private Cursor cursor;
+ ///
+ /// Initializes a new instance of the DatastoreObject class with the specified database cursor and context.
+ ///
+ /// The database cursor positioned at the object's record.
+ /// The directory context for database operations.
public DatastoreObject(Cursor datatableCursor, DirectoryContext context)
{
this.cursor = datatableCursor;
diff --git a/Src/DSInternals.DataStore/DirectoryAgent.cs b/Src/DSInternals.DataStore/DirectoryAgent.cs
index fb71b9d..5bf15c0 100644
--- a/Src/DSInternals.DataStore/DirectoryAgent.cs
+++ b/Src/DSInternals.DataStore/DirectoryAgent.cs
@@ -17,7 +17,7 @@ public partial class DirectoryAgent : IDisposable
{
// 2^30
///
- /// The 30.
+ /// Maximum value for Relative Identifier (RID) in Active Directory (2^30).
///
public const int RidMax = 1 << 30;
diff --git a/Src/DSInternals.DataStore/Enums/DatabaseState.cs b/Src/DSInternals.DataStore/Enums/DatabaseState.cs
index c086518..79f99a2 100644
--- a/Src/DSInternals.DataStore/Enums/DatabaseState.cs
+++ b/Src/DSInternals.DataStore/Enums/DatabaseState.cs
@@ -1,7 +1,7 @@
namespace DSInternals.DataStore
{
///
- /// Defines values for DatabaseState.
+ /// Specifies the current state of the Active Directory database during installation and operations.
///
public enum DatabaseState
{
diff --git a/Src/DSInternals.DataStore/Enums/DomainControllerOptions.cs b/Src/DSInternals.DataStore/Enums/DomainControllerOptions.cs
index 6411906..18690fc 100644
--- a/Src/DSInternals.DataStore/Enums/DomainControllerOptions.cs
+++ b/Src/DSInternals.DataStore/Enums/DomainControllerOptions.cs
@@ -2,10 +2,10 @@
namespace DSInternals.DataStore
{
- [Flags]
///
- /// Defines values for DomainControllerOptions.
+ /// Specifies configuration options and capabilities for Active Directory domain controllers.
///
+ [Flags]
public enum DomainControllerOptions : int
{
None = 0,
diff --git a/Src/DSInternals.DataStore/packages.lock.json b/Src/DSInternals.DataStore/packages.lock.json
deleted file mode 100644
index 3663768..0000000
--- a/Src/DSInternals.DataStore/packages.lock.json
+++ /dev/null
@@ -1,303 +0,0 @@
-{
- "version": 1,
- "dependencies": {
- ".NETFramework,Version=v4.8": {
- "DSInternals.ManagedEsent.Interop": {
- "type": "Direct",
- "requested": "[2.0.4.1, )",
- "resolved": "2.0.4.1",
- "contentHash": "WTcjhN/4l6C802QCBHctCZJZAGrVlI5TzVccS+P7s4axvfi0COjMEqHwhQJ4RdzsmblmemHAq4AQay/kc1e75Q=="
- },
- "DSInternals.ManagedEsent.Isam": {
- "type": "Direct",
- "requested": "[2.0.4.1, )",
- "resolved": "2.0.4.1",
- "contentHash": "ttkkBm6GIEylpxSAepD5u9pR8uP1Kf87Fmr0G4f5pgFW5oXRBGWPr8UCitWkx4hdg6hqTV12+IGOTU0oVSaDRA==",
- "dependencies": {
- "DSInternals.ManagedEsent.Interop": "2.0.4.1"
- }
- },
- "Microsoft.NETFramework.ReferenceAssemblies": {
- "type": "Direct",
- "requested": "[1.0.3, )",
- "resolved": "1.0.3",
- "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
- "dependencies": {
- "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3"
- }
- },
- "Microsoft.SourceLink.GitHub": {
- "type": "Direct",
- "requested": "[8.0.0, )",
- "resolved": "8.0.0",
- "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
- "dependencies": {
- "Microsoft.Build.Tasks.Git": "8.0.0",
- "Microsoft.SourceLink.Common": "8.0.0"
- }
- },
- "Microsoft.Windows.CsWin32": {
- "type": "Direct",
- "requested": "[0.3.183, )",
- "resolved": "0.3.183",
- "contentHash": "Ze3aE2y7xgzKxEWtNb4SH0CExXpCHr3sbmwnvMiWMzJhWDX/G4Rs5wgg2UNs3VN+qVHh/DkDWLCPaVQv/b//Nw==",
- "dependencies": {
- "Microsoft.Windows.SDK.Win32Docs": "0.1.42-alpha",
- "Microsoft.Windows.SDK.Win32Metadata": "61.0.15-preview",
- "Microsoft.Windows.WDK.Win32Metadata": "0.12.8-experimental"
- }
- },
- "Microsoft.Bcl.AsyncInterfaces": {
- "type": "Transitive",
- "resolved": "9.0.8",
- "contentHash": "mdq9WaHnRJBvmhbDvoEk9aIEjpoW1cmA6wGuE0/eV49NT/0Z/d+NauB4jzw2Dyi/TndebYfjAYHCOXeB0c/Qhg==",
- "dependencies": {
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- },
- "Microsoft.Build.Tasks.Git": {
- "type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
- },
- "Microsoft.NETFramework.ReferenceAssemblies.net48": {
- "type": "Transitive",
- "resolved": "1.0.3",
- "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ=="
- },
- "Microsoft.SourceLink.Common": {
- "type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
- },
- "Microsoft.Windows.SDK.Win32Docs": {
- "type": "Transitive",
- "resolved": "0.1.42-alpha",
- "contentHash": "Z/9po23gUA9aoukirh2ItMU2ZS9++Js9Gdds9fu5yuMojDrmArvY2y+tq9985tR3cxFxpZO1O35Wjfo0khj5HA=="
- },
- "Microsoft.Windows.SDK.Win32Metadata": {
- "type": "Transitive",
- "resolved": "61.0.15-preview",
- "contentHash": "cysex3dazKtCPALCluC2XX3f5Aedy9H2pw5jb+TW5uas2rkem1Z7FRnbUrg2vKx0pk0Qz+4EJNr37HdYTEcvEQ=="
- },
- "Microsoft.Windows.WDK.Win32Metadata": {
- "type": "Transitive",
- "resolved": "0.12.8-experimental",
- "contentHash": "3n8R44/Z96Ly+ty4eYVJfESqbzvpw96lRLs3zOzyDmr1x1Kw7FNn5CyE416q+bZQV3e1HRuMUvyegMeRE/WedA==",
- "dependencies": {
- "Microsoft.Windows.SDK.Win32Metadata": "61.0.15-preview"
- }
- },
- "PeterO.Cbor": {
- "type": "Transitive",
- "resolved": "4.5.5",
- "contentHash": "9fMcLg2SUm9ri1j3gVPYxk6+Ev4l4wu93bYwFG1tvntg1Qy4m0rFDdxStG88XR/W4DggOtBXfPVkC3bLF10nqw==",
- "dependencies": {
- "PeterO.Numbers": "1.8.2",
- "PeterO.URIUtility": "1.0.0"
- }
- },
- "PeterO.Numbers": {
- "type": "Transitive",
- "resolved": "1.8.2",
- "contentHash": "d+A5KLoWbwOTpvubPaGXLgCzANE00jXmsT+yneHwLe2OlobBBFLaIHyoDwmekuHM17z9hU++RF6mL+zZ2x69nA=="
- },
- "PeterO.URIUtility": {
- "type": "Transitive",
- "resolved": "1.0.0",
- "contentHash": "fpRTBsYACMp7NvTECauYRomubWTC3vUNw4hMXdIedP8ctBGK6tea9HOJwE+qVzis6MZYkL3LIs8qeY3rc6Jdlw=="
- },
- "System.Buffers": {
- "type": "Transitive",
- "resolved": "4.6.1",
- "contentHash": "N8GXpmiLMtljq7gwvyS+1QvKT/W2J8sNAvx+HVg4NGmsG/H+2k/y9QI23auLJRterrzCiDH+IWAw4V/GPwsMlw=="
- },
- "System.Formats.Asn1": {
- "type": "Transitive",
- "resolved": "9.0.8",
- "contentHash": "gGL0gt2nAArsF2oOMFzClll6QN2FhtooTxEQ+K26uer4lrhahnYIo/qOn5HUSfjHlM91646L5/7dYIMJ86fHkQ==",
- "dependencies": {
- "System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
- "System.ValueTuple": "4.5.0"
- }
- },
- "System.IO.Pipelines": {
- "type": "Transitive",
- "resolved": "9.0.8",
- "contentHash": "6vPmJt73mgUo1gzc/OcXlJvClz/2jxZ4TQPRfriVaLoGRH2mye530D9WHJYbFQRNMxF3PWCoeofsFdCyN7fLzA==",
- "dependencies": {
- "System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- },
- "System.Memory": {
- "type": "Transitive",
- "resolved": "4.6.3",
- "contentHash": "qdcDOgnFZY40+Q9876JUHnlHu7bosOHX8XISRoH94fwk6hgaeQGSgfZd8srWRZNt5bV9ZW2TljcegDNxsf+96A==",
- "dependencies": {
- "System.Buffers": "4.6.1",
- "System.Numerics.Vectors": "4.6.1",
- "System.Runtime.CompilerServices.Unsafe": "6.1.2"
- }
- },
- "System.Numerics.Vectors": {
- "type": "Transitive",
- "resolved": "4.6.1",
- "contentHash": "sQxefTnhagrhoq2ReR0D/6K0zJcr9Hrd6kikeXsA1I8kOCboTavcUC4r7TSfpKFeE163uMuxZcyfO1mGO3EN8Q=="
- },
- "System.Runtime.CompilerServices.Unsafe": {
- "type": "Transitive",
- "resolved": "6.1.2",
- "contentHash": "2hBr6zdbIBTDE3EhK7NSVNdX58uTK6iHW/P/Axmm9sl1xoGSLqDvMtpecn226TNwHByFokYwJmt/aQQNlO5CRw=="
- },
- "System.Text.Encodings.Web": {
- "type": "Transitive",
- "resolved": "9.0.8",
- "contentHash": "W+LotQsM4wBJ4PG7uRkyul4wqL4Fz7R4ty6uXrCNZUhbaHYANgrPaYR2ZpMVpdCjQEJ17Jr1NMN8hv4SHaHY4A==",
- "dependencies": {
- "System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0"
- }
- },
- "System.Text.Json": {
- "type": "Transitive",
- "resolved": "9.0.8",
- "contentHash": "mIQir9jBqk0V7X0Nw5hzPJZC8DuGdf+2DS3jAVsr6rq5+/VyH5rza0XGcONJUWBrZ+G6BCwNyjWYd9lncBu48A==",
- "dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "9.0.8",
- "System.Buffers": "4.5.1",
- "System.IO.Pipelines": "9.0.8",
- "System.Memory": "4.5.5",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0",
- "System.Text.Encodings.Web": "9.0.8",
- "System.Threading.Tasks.Extensions": "4.5.4",
- "System.ValueTuple": "4.5.0"
- }
- },
- "System.Threading.Tasks.Extensions": {
- "type": "Transitive",
- "resolved": "4.5.4",
- "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
- "dependencies": {
- "System.Runtime.CompilerServices.Unsafe": "4.5.3"
- }
- },
- "System.ValueTuple": {
- "type": "Transitive",
- "resolved": "4.6.1",
- "contentHash": "+RJT4qaekpZ7DDLhf+LTjq+E48jieKiY9ulJ+BoxKmZblIJfIJT8Ufcaa/clQqnYvWs8jugfGSMu8ylS0caG0w=="
- },
- "dsinternals.common": {
- "type": "Project",
- "dependencies": {
- "PeterO.Cbor": "[4.5.5, )",
- "System.Buffers": "[4.6.1, )",
- "System.Formats.Asn1": "[9.0.8, )",
- "System.Memory": "[4.6.3, )",
- "System.Text.Json": "[9.0.8, )",
- "System.ValueTuple": "[4.6.1, )"
- }
- }
- },
- "net8.0-windows7.0": {
- "DSInternals.ManagedEsent.Interop": {
- "type": "Direct",
- "requested": "[2.0.4.1, )",
- "resolved": "2.0.4.1",
- "contentHash": "WTcjhN/4l6C802QCBHctCZJZAGrVlI5TzVccS+P7s4axvfi0COjMEqHwhQJ4RdzsmblmemHAq4AQay/kc1e75Q=="
- },
- "DSInternals.ManagedEsent.Isam": {
- "type": "Direct",
- "requested": "[2.0.4.1, )",
- "resolved": "2.0.4.1",
- "contentHash": "ttkkBm6GIEylpxSAepD5u9pR8uP1Kf87Fmr0G4f5pgFW5oXRBGWPr8UCitWkx4hdg6hqTV12+IGOTU0oVSaDRA==",
- "dependencies": {
- "DSInternals.ManagedEsent.Interop": "2.0.4.1"
- }
- },
- "Microsoft.SourceLink.GitHub": {
- "type": "Direct",
- "requested": "[8.0.0, )",
- "resolved": "8.0.0",
- "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
- "dependencies": {
- "Microsoft.Build.Tasks.Git": "8.0.0",
- "Microsoft.SourceLink.Common": "8.0.0"
- }
- },
- "Microsoft.Windows.CsWin32": {
- "type": "Direct",
- "requested": "[0.3.183, )",
- "resolved": "0.3.183",
- "contentHash": "Ze3aE2y7xgzKxEWtNb4SH0CExXpCHr3sbmwnvMiWMzJhWDX/G4Rs5wgg2UNs3VN+qVHh/DkDWLCPaVQv/b//Nw==",
- "dependencies": {
- "Microsoft.Windows.SDK.Win32Docs": "0.1.42-alpha",
- "Microsoft.Windows.SDK.Win32Metadata": "61.0.15-preview",
- "Microsoft.Windows.WDK.Win32Metadata": "0.12.8-experimental"
- }
- },
- "Microsoft.Build.Tasks.Git": {
- "type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
- },
- "Microsoft.SourceLink.Common": {
- "type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
- },
- "Microsoft.Windows.SDK.Win32Docs": {
- "type": "Transitive",
- "resolved": "0.1.42-alpha",
- "contentHash": "Z/9po23gUA9aoukirh2ItMU2ZS9++Js9Gdds9fu5yuMojDrmArvY2y+tq9985tR3cxFxpZO1O35Wjfo0khj5HA=="
- },
- "Microsoft.Windows.SDK.Win32Metadata": {
- "type": "Transitive",
- "resolved": "61.0.15-preview",
- "contentHash": "cysex3dazKtCPALCluC2XX3f5Aedy9H2pw5jb+TW5uas2rkem1Z7FRnbUrg2vKx0pk0Qz+4EJNr37HdYTEcvEQ=="
- },
- "Microsoft.Windows.WDK.Win32Metadata": {
- "type": "Transitive",
- "resolved": "0.12.8-experimental",
- "contentHash": "3n8R44/Z96Ly+ty4eYVJfESqbzvpw96lRLs3zOzyDmr1x1Kw7FNn5CyE416q+bZQV3e1HRuMUvyegMeRE/WedA==",
- "dependencies": {
- "Microsoft.Windows.SDK.Win32Metadata": "61.0.15-preview"
- }
- },
- "PeterO.Cbor": {
- "type": "Transitive",
- "resolved": "4.5.5",
- "contentHash": "9fMcLg2SUm9ri1j3gVPYxk6+Ev4l4wu93bYwFG1tvntg1Qy4m0rFDdxStG88XR/W4DggOtBXfPVkC3bLF10nqw==",
- "dependencies": {
- "PeterO.Numbers": "1.8.2",
- "PeterO.URIUtility": "1.0.0"
- }
- },
- "PeterO.Numbers": {
- "type": "Transitive",
- "resolved": "1.8.2",
- "contentHash": "d+A5KLoWbwOTpvubPaGXLgCzANE00jXmsT+yneHwLe2OlobBBFLaIHyoDwmekuHM17z9hU++RF6mL+zZ2x69nA=="
- },
- "PeterO.URIUtility": {
- "type": "Transitive",
- "resolved": "1.0.0",
- "contentHash": "fpRTBsYACMp7NvTECauYRomubWTC3vUNw4hMXdIedP8ctBGK6tea9HOJwE+qVzis6MZYkL3LIs8qeY3rc6Jdlw=="
- },
- "System.DirectoryServices": {
- "type": "Transitive",
- "resolved": "9.0.8",
- "contentHash": "xN2JrOfhcOyswOflVZG27XlFJDPPqU7AQtAAStWcnKoC8W9XCLOLdAYIrrwiZMfeRhavVErI8HkSO/c2TQ+z2g=="
- },
- "dsinternals.common": {
- "type": "Project",
- "dependencies": {
- "PeterO.Cbor": "[4.5.5, )",
- "System.DirectoryServices": "[9.0.8, )"
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Src/DSInternals.PowerShell/Types/SupplementalCredentialsDeserializer.cs b/Src/DSInternals.PowerShell/Types/SupplementalCredentialsDeserializer.cs
index 61a363f..070b805 100644
--- a/Src/DSInternals.PowerShell/Types/SupplementalCredentialsDeserializer.cs
+++ b/Src/DSInternals.PowerShell/Types/SupplementalCredentialsDeserializer.cs
@@ -5,7 +5,7 @@
namespace DSInternals.PowerShell
{
///
- /// Represents a SupplementalCredentialsDeserializer.
+ /// Provides PowerShell type conversion for deserializing supplemental credentials from serialized objects.
///
public class SupplementalCredentialsDeserializer : PSTypeConverter
{
@@ -13,8 +13,11 @@ public class SupplementalCredentialsDeserializer : PSTypeConverter
private static readonly string SerializationTypeName = "Deserialized." + typeof(SupplementalCredentials).FullName;
///
- /// CanConvertFrom implementation.
+ /// Determines whether this converter can convert from the specified source type to the supplemental credentials type.
///
+ /// The source value to convert from.
+ /// The destination type to convert to.
+ /// True if the conversion is supported; otherwise, false.
public override bool CanConvertFrom(object sourceValue, Type destinationType)
{
bool sourceTypeIsValid = sourceValue is PSObject &&
@@ -24,16 +27,24 @@ public override bool CanConvertFrom(object sourceValue, Type destinationType)
}
///
- /// CanConvertTo implementation.
+ /// Determines whether this converter can convert from the supplemental credentials type to the specified destination type.
///
+ /// The source value to convert from.
+ /// The destination type to convert to.
+ /// Always throws NotImplementedException as conversion to other types is not supported.
public override bool CanConvertTo(object sourceValue, Type destinationType)
{
throw new NotImplementedException();
}
///
- /// ConvertFrom implementation.
+ /// Converts a PowerShell deserialized object back to SupplementalCredentials by deserializing the Base64-encoded blob.
///
+ /// The PowerShell object containing the serialized credentials.
+ /// The destination type (SupplementalCredentials).
+ /// The format provider (not used).
+ /// Whether to ignore case (not used).
+ /// A SupplementalCredentials object deserialized from the Base64 blob.
public override object ConvertFrom(object sourceValue, Type destinationType, IFormatProvider formatProvider, bool ignoreCase)
{
// We expect that CanConvertFrom has already been called and returned true.
diff --git a/Src/DSInternals.PowerShell/Utils/AcceptHexStringAttribute.cs b/Src/DSInternals.PowerShell/Utils/AcceptHexStringAttribute.cs
index 605d36a..5da015b 100644
--- a/Src/DSInternals.PowerShell/Utils/AcceptHexStringAttribute.cs
+++ b/Src/DSInternals.PowerShell/Utils/AcceptHexStringAttribute.cs
@@ -12,8 +12,11 @@ namespace DSInternals.PowerShell
public sealed class AcceptHexStringAttribute : ArgumentTransformationAttribute
{
///
- /// Transform implementation.
+ /// Transforms hex string input data to byte arrays for PowerShell cmdlet parameters.
///
+ /// The engine intrinsics for the current PowerShell session.
+ /// The input data to transform (string or byte array).
+ /// A byte array converted from the input hex string or the original byte array.
public override object Transform(EngineIntrinsics engineIntrinsics, object inputData)
{
string hexString;
From 59924ad7a95949ed815188e30fdc11e5b2a20b2f Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 4 Sep 2025 20:34:26 +0000
Subject: [PATCH 20/22] Improve XML documentation for
ReplicaAttributeCollection and Interop classes
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
Src/DSInternals.Common/Interop/OemString.cs | 8 +++--
.../Interop/SafeOemStringPointer.cs | 31 +++++++++++++++----
.../Interop/SafeSidKeyProviderHandle.cs | 15 +++++++--
.../ReplicaAttributeCollection.cs | 7 ++++-
4 files changed, 50 insertions(+), 11 deletions(-)
diff --git a/Src/DSInternals.Common/Interop/OemString.cs b/Src/DSInternals.Common/Interop/OemString.cs
index 14047ff..f8808e3 100644
--- a/Src/DSInternals.Common/Interop/OemString.cs
+++ b/Src/DSInternals.Common/Interop/OemString.cs
@@ -3,12 +3,16 @@
namespace DSInternals.Common.Interop
{
- [StructLayout(LayoutKind.Sequential)]
///
- /// Represents a OemString structure.
+ /// Represents an OEM string structure used in Windows API calls for legacy character encoding.
///
+ [StructLayout(LayoutKind.Sequential)]
public struct OemString
{
+ ///
+ /// Initializes a new instance of the OemString structure from a SafeOemStringPointer.
+ ///
+ /// The safe pointer containing the OEM string data.
public OemString(SafeOemStringPointer oemStringPtr)
{
this.Buffer = oemStringPtr;
diff --git a/Src/DSInternals.Common/Interop/SafeOemStringPointer.cs b/Src/DSInternals.Common/Interop/SafeOemStringPointer.cs
index 8ea85c2..9817ca2 100644
--- a/Src/DSInternals.Common/Interop/SafeOemStringPointer.cs
+++ b/Src/DSInternals.Common/Interop/SafeOemStringPointer.cs
@@ -5,16 +5,15 @@
namespace DSInternals.Common.Interop
{
- //TODO: SafeOemStringPointer documentation
///
- /// Represents a wrapper class for...
+ /// Represents a safe wrapper for OEM string pointers with automatic memory management.
///
[SecurityCritical]
- ///
- /// Represents a SafeOemStringPointer.
- ///
public class SafeOemStringPointer : SafeHandleZeroOrMinusOneIsInvalid
{
+ ///
+ /// Gets the length of the allocated OEM string buffer in bytes.
+ ///
public int Length
{
get;
@@ -22,8 +21,10 @@ public int Length
}
///
- /// Allocate implementation.
+ /// Allocates a new OEM string pointer with the specified length.
///
+ /// The length of the buffer to allocate in bytes.
+ /// A new SafeOemStringPointer instance wrapping the allocated memory.
public static SafeOemStringPointer Allocate(int length)
{
IntPtr nativeMemory = Marshal.AllocHGlobal(length);
@@ -35,18 +36,33 @@ private SafeOemStringPointer()
{
}
+ ///
+ /// Initializes a new instance of the SafeOemStringPointer class with an existing handle, ownership flag, and length.
+ ///
+ /// An existing handle to wrap.
+ /// True if the handle should be released when the wrapper is disposed.
+ /// The length of the buffer in bytes.
public SafeOemStringPointer(IntPtr preexistingHandle, bool ownsHandle, int length)
: this(preexistingHandle, ownsHandle)
{
this.Length = length;
}
+ ///
+ /// Initializes a new instance of the SafeOemStringPointer class with an existing handle and ownership flag.
+ ///
+ /// An existing handle to wrap.
+ /// True if the handle should be released when the wrapper is disposed.
public SafeOemStringPointer(IntPtr preexistingHandle, bool ownsHandle)
: base(ownsHandle)
{
this.SetHandle(preexistingHandle);
}
+ ///
+ /// Releases the handle by zeroing the buffer and freeing the allocated memory.
+ ///
+ /// True if the handle was released successfully; otherwise, false.
[SecurityCritical]
protected override bool ReleaseHandle()
{
@@ -55,6 +71,9 @@ protected override bool ReleaseHandle()
return true;
}
+ ///
+ /// Fills the allocated buffer with zeros for security purposes.
+ ///
[SecurityCritical]
protected void ZeroFill()
{
diff --git a/Src/DSInternals.Common/Interop/SafeSidKeyProviderHandle.cs b/Src/DSInternals.Common/Interop/SafeSidKeyProviderHandle.cs
index f7c8abb..cd570dd 100644
--- a/Src/DSInternals.Common/Interop/SafeSidKeyProviderHandle.cs
+++ b/Src/DSInternals.Common/Interop/SafeSidKeyProviderHandle.cs
@@ -16,16 +16,20 @@ private SafeSidKeyProviderHandle() : base(true)
}
///
- /// base implementation.
+ /// Initializes a new instance of the SafeSidKeyProviderHandle class with an existing handle and ownership flag.
///
+ /// An existing handle to wrap.
+ /// True if the handle should be released when the wrapper is disposed.
public SafeSidKeyProviderHandle(IntPtr preexistingHandle, bool ownsHandle) : base(ownsHandle)
{
this.SetHandle(preexistingHandle);
}
///
- /// ToArray implementation.
+ /// Converts the handle's memory contents to a byte array of the specified size.
///
+ /// The number of bytes to read from the handle.
+ /// A byte array containing the data from the handle.
public byte[] ToArray(int size)
{
if(this.IsInvalid)
@@ -39,6 +43,9 @@ public byte[] ToArray(int size)
return binaryData;
}
+ ///
+ /// Gets the string value pointed to by the handle.
+ ///
public string StringValue
{
get
@@ -47,6 +54,10 @@ public string StringValue
}
}
+ ///
+ /// Releases the handle by calling the appropriate native method to free the SID Key Provider.
+ ///
+ /// True if the handle was released successfully; otherwise, false.
[SecurityCritical]
protected override bool ReleaseHandle()
{
diff --git a/Src/DSInternals.Replication.Model/ReplicaAttributeCollection.cs b/Src/DSInternals.Replication.Model/ReplicaAttributeCollection.cs
index 0778847..4f5d47c 100644
--- a/Src/DSInternals.Replication.Model/ReplicaAttributeCollection.cs
+++ b/Src/DSInternals.Replication.Model/ReplicaAttributeCollection.cs
@@ -17,14 +17,19 @@ public class ReplicaAttributeCollection : Dictionary
+ /// Initializes a new instance of the ReplicaAttributeCollection class with the specified initial capacity.
+ ///
+ /// The initial number of attributes the collection can store.
public ReplicaAttributeCollection(int numAttributes)
: base(numAttributes)
{
}
///
- /// Add implementation.
+ /// Adds a replica attribute to the collection, merging with existing attributes of the same type.
///
+ /// The replica attribute to add to the collection.
public void Add(ReplicaAttribute attribute)
{
Validator.AssertNotNull(attribute, "attribute");
From ccded4977592fd6fb912a9ec702a54de08bfbbe3 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 4 Sep 2025 20:37:45 +0000
Subject: [PATCH 21/22] Improve XML documentation for remaining Interop and
DataStore Cryptography classes
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
.../Interop/NamedPipeConnection.cs | 10 +++++++++-
.../Interop/RegistryHiveFileMapping.cs | 12 +++++++++++-
.../Cryptography/BootKeyRetriever.cs | 5 ++++-
.../Cryptography/DataStoreSecretDecryptor.cs | 14 +++++++++++++-
4 files changed, 37 insertions(+), 4 deletions(-)
diff --git a/Src/DSInternals.Common/Interop/NamedPipeConnection.cs b/Src/DSInternals.Common/Interop/NamedPipeConnection.cs
index 9f6ecdd..1af016c 100644
--- a/Src/DSInternals.Common/Interop/NamedPipeConnection.cs
+++ b/Src/DSInternals.Common/Interop/NamedPipeConnection.cs
@@ -8,12 +8,15 @@ namespace DSInternals.Common.Interop
using System.Security;
///
- /// Represents a NamedPipeConnection.
+ /// Provides connectivity to remote servers via named pipe connections for administrative operations.
///
public class NamedPipeConnection : CriticalFinalizerObject, IDisposable
{
private const string IPCShareFormat = @"\\{0}\IPC$";
+ ///
+ /// Gets the name of the server this connection is established to.
+ ///
public string Server
{
get;
@@ -35,6 +38,11 @@ private string ShareName
}
}
+ ///
+ /// Initializes a new instance of the NamedPipeConnection class and establishes a connection to the specified server.
+ ///
+ /// The name of the server to connect to.
+ /// The network credentials to use for authentication.
public NamedPipeConnection(string server, NetworkCredential credential)
{
// Argument validation:
diff --git a/Src/DSInternals.Common/Interop/RegistryHiveFileMapping.cs b/Src/DSInternals.Common/Interop/RegistryHiveFileMapping.cs
index eacf88f..c58358f 100644
--- a/Src/DSInternals.Common/Interop/RegistryHiveFileMapping.cs
+++ b/Src/DSInternals.Common/Interop/RegistryHiveFileMapping.cs
@@ -7,7 +7,7 @@
using System.ComponentModel;
///
- /// Represents a RegistryHiveFileMapping.
+ /// Provides functionality for mapping registry hive files to temporary registry keys for read-only access.
///
public class RegistryHiveFileMapping : IDisposable
{
@@ -15,6 +15,10 @@ public class RegistryHiveFileMapping : IDisposable
private const char PathSeparator = '\\';
private const string BackupPrivilege = "SeBackupPrivilege";
private const string RestorePrivilege = "SeRestorePrivilege";
+ ///
+ /// Initializes a new instance of the RegistryHiveFileMapping class by loading the specified hive file.
+ ///
+ /// The path to the registry hive file to load.
public RegistryHiveFileMapping(string hiveFilePath)
{
Validator.AssertNotNullOrWhiteSpace(hiveFilePath, "hiveFilePath");
@@ -25,6 +29,9 @@ public RegistryHiveFileMapping(string hiveFilePath)
Validator.AssertSuccess(result);
}
+ ///
+ /// Gets the root registry key for accessing the loaded hive.
+ ///
public RegistryKey RootKey
{
get
@@ -36,6 +43,9 @@ public RegistryKey RootKey
}
}
+ ///
+ /// Gets the temporary subkey name used to mount the hive under HKEY_USERS.
+ ///
public string UsersSubKey
{
get;
diff --git a/Src/DSInternals.DataStore/Cryptography/BootKeyRetriever.cs b/Src/DSInternals.DataStore/Cryptography/BootKeyRetriever.cs
index e77ecc5..4553f07 100644
--- a/Src/DSInternals.DataStore/Cryptography/BootKeyRetriever.cs
+++ b/Src/DSInternals.DataStore/Cryptography/BootKeyRetriever.cs
@@ -6,10 +6,13 @@
namespace DSInternals.DataStore
{
+ ///
+ /// Provides methods for retrieving boot keys from registry hives for database decryption.
+ ///
public static class BootKeyRetriever
{
///
- /// The 16.
+ /// The standard length of boot keys in bytes (16 bytes / 128 bits).
///
public const int BootKeyLength = 16;
// AD DS Constants:
diff --git a/Src/DSInternals.DataStore/Cryptography/DataStoreSecretDecryptor.cs b/Src/DSInternals.DataStore/Cryptography/DataStoreSecretDecryptor.cs
index c213151..40e8bb0 100644
--- a/Src/DSInternals.DataStore/Cryptography/DataStoreSecretDecryptor.cs
+++ b/Src/DSInternals.DataStore/Cryptography/DataStoreSecretDecryptor.cs
@@ -8,7 +8,7 @@
namespace DSInternals.DataStore
{
///
- /// Represents a DataStoreSecretDecryptor.
+ /// Provides decryption services for secrets stored in the Active Directory database using Password Encryption Keys (PEK).
///
public class DataStoreSecretDecryptor : DirectorySecretDecryptor
{
@@ -24,18 +24,27 @@ public class DataStoreSecretDecryptor : DirectorySecretDecryptor
///
private static readonly Guid ExpectedSignature = new Guid(0x4881d956, 0x91ec, 0x11d1, 0x90, 0x5a, 0x00, 0xc0, 0x4f, 0xc2, 0xd4, 0xcf);
+ ///
+ /// Gets the array of Password Encryption Keys (PEK) used for decrypting secrets.
+ ///
public byte[][] Keys
{
get;
private set;
}
+ ///
+ /// Gets the index of the current encryption key in the Keys array.
+ ///
public int CurrentKeyIndex
{
get;
private set;
}
+ ///
+ /// Gets the current encryption key used for decrypting secrets.
+ ///
public override byte[] CurrentKey
{
get
@@ -44,6 +53,9 @@ public override byte[] CurrentKey
}
}
+ ///
+ /// Gets the encryption type used for secret decryption based on the database version.
+ ///
public override SecretEncryptionType EncryptionType
{
get
From 0dfc0b326ac802edb01a6b5183a24bbc9bd8dd8c Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 4 Sep 2025 20:41:19 +0000
Subject: [PATCH 22/22] Fix remaining generic XML documentation comments across
Common namespace
Co-authored-by: MichaelGrafnetter <8986376+MichaelGrafnetter@users.noreply.github.com>
---
Src/DSInternals.Common/ADSI/AdsiObjectAdapter.cs | 4 +++-
.../DirectoryObjectOperationException.cs | 4 ++--
.../SchemaAttributeNotFoundException.cs | 7 ++++++-
.../Interop/SafeUnicodeSecureStringPointer.cs | 3 +--
.../Interop/SecureUnicodeString.cs | 5 +----
Src/DSInternals.Common/Schema/BaseSchema.cs | 15 +++++++++++----
6 files changed, 24 insertions(+), 14 deletions(-)
diff --git a/Src/DSInternals.Common/ADSI/AdsiObjectAdapter.cs b/Src/DSInternals.Common/ADSI/AdsiObjectAdapter.cs
index d24ddca..e08b38f 100644
--- a/Src/DSInternals.Common/ADSI/AdsiObjectAdapter.cs
+++ b/Src/DSInternals.Common/ADSI/AdsiObjectAdapter.cs
@@ -57,8 +57,10 @@ protected override bool HasBigEndianRid
}
///
- /// HasAttribute implementation.
+ /// Determines whether the directory object has the specified attribute.
///
+ /// The name of the attribute to check for.
+ /// True if the attribute exists; otherwise, false.
public override bool HasAttribute(string name)
{
return this.directoryEntry.Properties.Contains(name);
diff --git a/Src/DSInternals.Common/Exceptions/DirectoryObjectOperationException.cs b/Src/DSInternals.Common/Exceptions/DirectoryObjectOperationException.cs
index 0bf72fd..75b853b 100644
--- a/Src/DSInternals.Common/Exceptions/DirectoryObjectOperationException.cs
+++ b/Src/DSInternals.Common/Exceptions/DirectoryObjectOperationException.cs
@@ -1,9 +1,9 @@
namespace DSInternals.Common.Exceptions
{
- [Serializable]
///
- /// Represents a DirectoryObjectOperationException.
+ /// The exception that is thrown when an operation on a directory object fails for a specific reason.
///
+ [Serializable]
public class DirectoryObjectOperationException : DirectoryObjectException
{
public string Reason
diff --git a/Src/DSInternals.Common/Exceptions/SchemaAttributeNotFoundException.cs b/Src/DSInternals.Common/Exceptions/SchemaAttributeNotFoundException.cs
index f8ef080..1367100 100644
--- a/Src/DSInternals.Common/Exceptions/SchemaAttributeNotFoundException.cs
+++ b/Src/DSInternals.Common/Exceptions/SchemaAttributeNotFoundException.cs
@@ -12,12 +12,17 @@ public object AttributeIdentifier
private set;
}
///
- /// base implementation.
+ /// Initializes a new instance of the SchemaAttributeNotFoundException class with the specified attribute name.
///
+ /// The name of the attribute that was not found.
public SchemaAttributeNotFoundException(string attributeName) : base(null)
{
this.AttributeIdentifier = attributeName;
}
+ ///
+ /// Initializes a new instance of the SchemaAttributeNotFoundException class with the specified attribute type.
+ ///
+ /// The attribute type that was not found.
public SchemaAttributeNotFoundException(AttributeType attributeId)
: base(null)
{
diff --git a/Src/DSInternals.Common/Interop/SafeUnicodeSecureStringPointer.cs b/Src/DSInternals.Common/Interop/SafeUnicodeSecureStringPointer.cs
index ea7173b..53a8f49 100644
--- a/Src/DSInternals.Common/Interop/SafeUnicodeSecureStringPointer.cs
+++ b/Src/DSInternals.Common/Interop/SafeUnicodeSecureStringPointer.cs
@@ -7,9 +7,8 @@
namespace DSInternals.Common.Interop
{
///
- /// Represents a wrapper class for...
+ /// Provides a safe wrapper for Unicode secure string pointers with automatic memory management and zeroing.
///
-
public sealed class SafeUnicodeSecureStringPointer : SafeHandleZeroOrMinusOneIsInvalid
{
private int numChars = 0;
diff --git a/Src/DSInternals.Common/Interop/SecureUnicodeString.cs b/Src/DSInternals.Common/Interop/SecureUnicodeString.cs
index 7e5caca..f9b6af8 100644
--- a/Src/DSInternals.Common/Interop/SecureUnicodeString.cs
+++ b/Src/DSInternals.Common/Interop/SecureUnicodeString.cs
@@ -4,13 +4,10 @@
namespace DSInternals.Common.Interop
{
///
- /// The UnicodeString structure is used to define Unicode strings.
+ /// Represents a secure Unicode string structure used for protecting sensitive text data in memory.
///
/// http://msdn.microsoft.com/library/windows/hardware/ff564879.aspx
[StructLayout(LayoutKind.Sequential)]
- ///
- /// Represents a SecureUnicodeString structure.
- ///
public struct SecureUnicodeString
{
public SecureUnicodeString(SafeUnicodeSecureStringPointer passwordPtr)
diff --git a/Src/DSInternals.Common/Schema/BaseSchema.cs b/Src/DSInternals.Common/Schema/BaseSchema.cs
index ba9d0aa..aff4c90 100644
--- a/Src/DSInternals.Common/Schema/BaseSchema.cs
+++ b/Src/DSInternals.Common/Schema/BaseSchema.cs
@@ -44,8 +44,10 @@ public void AddAttribute(AttributeSchema attribute)
}
///
- /// FindAttributeId implementation.
+ /// Finds the attribute type identifier for the specified attribute name.
///
+ /// The name of the attribute to find.
+ /// The attribute type identifier, or null if not found.
public AttributeType? FindAttributeId(string attributeName)
{
_ = _attributesByName.TryGetValue(attributeName, out AttributeSchema attribute);
@@ -53,8 +55,10 @@ public void AddAttribute(AttributeSchema attribute)
}
///
- /// FindAttributeInternalId implementation.
+ /// Finds the internal attribute type identifier for the specified attribute name.
///
+ /// The name of the attribute to find.
+ /// The internal attribute type identifier, or null if not found.
public AttributeType? FindAttributeInternalId(string attributeName)
{
_ = _attributesByName.TryGetValue(attributeName, out AttributeSchema attribute);
@@ -71,8 +75,9 @@ public void AddAttribute(AttributeSchema attribute)
}
///
- /// LoadPrefixTable implementation.
+ /// Loads the OID prefix table from the specified binary blob.
///
+ /// The binary data containing the prefix table.
public void LoadPrefixTable(byte[] blob)
{
_prefixTable.LoadFromBlob(blob);
@@ -82,8 +87,10 @@ public void LoadPrefixTable(byte[] blob)
}
///
- /// AddPrefix implementation.
+ /// Adds a new OID prefix to the prefix table with the specified index.
///
+ /// The index for the prefix.
+ /// The OID prefix bytes to add.
public void AddPrefix(ushort index, byte[] oidPrefix)
{
_prefixTable.Add(index, oidPrefix);