Удалить пакет поддержки безопасности
Поэтому я работаю над сценарием powershell для управления поставщиками поддержки безопасности для специализированных элементов управления. В настоящее время у меня есть скрипт, работающий для ДОБАВЛЕНИЯ SSP, но когда я пытаюсь изменить сценарий на УДАЛИТЬ SSP, он ломается.
Вот код:
$DynAssembly = New-Object System.Reflection.AssemblyName('SSPI2')
$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly($DynAssembly, [Reflection.Emit.AssemblyBuilderAccess]::Run)
$ModuleBuilder = $AssemblyBuilder.DefineDynamicModule('SSPI2', $False)
$TypeBuilder = $ModuleBuilder.DefineType('SSPI2.Secur32', 'Public, Class')
$PInvokeMethod = $TypeBuilder.DefinePInvokeMethod('DeleteSecurityPackage',
'secur32.dll',
'Public, Static',
[Reflection.CallingConventions]::Standard,
[Int32],
[Type[]] @([String]),
[Runtime.InteropServices.CallingConvention]::Winapi,
[Runtime.InteropServices.CharSet]::Auto)
$Secur32 = $TypeBuilder.CreateType()
$RuntimeSuccess = $True
$Result = $Secur32::DeleteSecurityPackage($DllName)
Каждый раз, когда я запускаю это, я получаю: Исключение, вызывающее "DeleteSecurityPackage" с аргументом (ами) "1": "Запрошенная функция не поддерживается
однако этот кусок кода ДОБАВИТЬ SSP работает нормально:
$DynAssembly = New-Object System.Reflection.AssemblyName('SSPI2')
$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly($DynAssembly, [Reflection.Emit.AssemblyBuilderAccess]::Run)
$ModuleBuilder = $AssemblyBuilder.DefineDynamicModule('SSPI2', $False)
$TypeBuilder = $ModuleBuilder.DefineType('SSPI2.Secur32', 'Public, Class')
$PInvokeMethod = $TypeBuilder.DefinePInvokeMethod('AddSecurityPackage',
'secur32.dll',
'Public, Static',
[Reflection.CallingConventions]::Standard,
[Int32],
[Type[]] @([String], [IntPtr]),
[Runtime.InteropServices.CallingConvention]::Winapi,
[Runtime.InteropServices.CharSet]::Auto)
$Secur32 = $TypeBuilder.CreateType()
if ([IntPtr]::Size -eq 4) {
$StructSize = 20
} else {
$StructSize = 24
}
$StructPtr = [Runtime.InteropServices.Marshal]::AllocHGlobal($StructSize)
[Runtime.InteropServices.Marshal]::WriteInt32($StructPtr, $StructSize)
$RuntimeSuccess = $True
$Result = $Secur32::AddSecurityPackage($DllName, $StructPtr)
по праву это должно быть легче удалить, так как мне не нужно беспокоиться о структуре, однако это не устраивает.
любая помощь будет оценена
1 ответ
Кажется, что это не было полностью реализовано / поддержано Microsoft. Эта статья, кажется, подтверждает это: http://cybernigma.blogspot.com/2014/03/using-sspap-lsass-proxy-to-mitigate.html Соответствующая информация находится на 3/4 пути вниз.