Shared/KDC.ps1

$script:KDC_KEY_PATH = "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\KDC"
$script:DDSET_KEY_PATH = "Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\Kerberos\Parameters"

$script:KDC_LOG_LEVEL_SPN = 0x1
$script:KDC_LOG_LEVEL_PKINIT = 0x2
$script:KDC_LOG_LEVEL_ALL = 0x4
$script:KDC_LOG_LEVEL_S4U = 0x8
$script:KDC_LOG_LEVEL_ETYPE = 0x10


$script:KDC_KEYS_KDCUSECLIENTADDRESSES = [KerbRegDwordSetting]::new($script:KDC_KEY_PATH, "KdcUseClientAddresses", 0, $script:FormatBoolean)
$script:KDC_KEYS_KDCDONTCHECKADDRESSES = [KerbRegDwordSetting]::new($script:KDC_KEY_PATH, "KdcDontCheckAddresses", 1, $script:FormatBoolean)
$script:KDC_KEYS_NEWCONNECTIONTIMEOUT = [KerbRegDwordSetting]::new($script:KDC_KEY_PATH, "NewConnectionTimeout", 10, $script:FormatSeconds)
$script:KDC_KEYS_MAXDATAGRAMREPLYSIZE = [KerbRegDwordSetting]::new($script:KDC_KEY_PATH, "MaxDatagramReplySize", 1465, $script:FormatBytes)
$script:KDC_KEYS_KDCEXTRALOGLEVEL = [KerbRegDwordSetting]::new($script:KDC_KEY_PATH, "KdcExtraLogLevel", 2, {
    param(
        [int]$value
    )
    $level = ""

    if (($value -band $script:KDC_LOG_LEVEL_SPN) -eq $script:KDC_LOG_LEVEL_SPN) {
        $level += "SPN "
    }
    if (($value -band $script:KDC_LOG_LEVEL_PKINIT) -eq $script:KDC_LOG_LEVEL_PKINIT) {
        $level += "PKINIT "
    }
    if (($value -band $script:KDC_LOG_LEVEL_ALL) -eq $script:KDC_LOG_LEVEL_ALL) {
        $level += "ALL "
    }
    if (($value -band $script:KDC_LOG_LEVEL_S4U) -eq $script:KDC_LOG_LEVEL_S4U) {
        $level += "S4U2Self "
    }
    if (($value -band $script:KDC_LOG_LEVEL_ETYPE) -eq $script:KDC_LOG_LEVEL_ETYPE) {
        $level += "ETYPE"
    }

    if ([string]::IsNullOrEmpty($level)) {
        $level = "NONE"
    }

    return $level.Trim()
})

$script:KDC_KEYS_DEFAULTDOMAINSUPPORTEDENCTYPES = [KerbRegDwordSetting]::new($script:DDSET_KEY_PATH, "DefaultDomainSupportedEncTypes", 0x24, $script:FormatSET)

$script:KDC_KEYS = @(
    $script:KDC_KEYS_KDCUSECLIENTADDRESSES,
    $script:KDC_KEYS_KDCDONTCHECKADDRESSES,
    $script:KDC_KEYS_NEWCONNECTIONTIMEOUT,
    $script:KDC_KEYS_MAXDATAGRAMREPLYSIZE,
    $script:KDC_KEYS_KDCEXTRALOGLEVEL,
    $script:KDC_KEYS_DEFAULTDOMAINSUPPORTEDENCTYPES
)

$script:KDC_PARAMETER_MAP = @{
    "KdcUseClientAddresses" = $script:KDC_KEYS_KDCUSECLIENTADDRESSES
    "KdcDontCheckAddresses" = $script:KDC_KEYS_KDCDONTCHECKADDRESSES
    "NewConnectionTimeout" = $script:KDC_KEYS_NEWCONNECTIONTIMEOUT
    "MaxDatagramReplySize" = $script:KDC_KEYS_MAXDATAGRAMREPLYSIZE
    "KdcExtraLogLevel" = $script:KDC_KEYS_KDCEXTRALOGLEVEL
    "DefaultDomainSupportedEncTypes" = $script:KDC_KEYS_DEFAULTDOMAINSUPPORTEDENCTYPES
}