2017-01-06 9 views
0

Я использую DLL «Interop.TSUSEREXLib.dll», чтобы определить путь доступа к терминалам для учетной записи AD. Это работало до сих пор без проблем с Win7 в качестве моего клиента. тот же код не работает с ОС Windows 10.VB.NET TSUSEREXLib.dll не работает под окнами 10

Вот короткий пример кода:

Imports TSUSEREXLib 

Dim oTsUser As IADsTSUserEx = Nothing 
oTsUser = TryCast(New DirectoryEntry(ADsPath).NativeObject, IADsTSUserEx) 

If oTsUser Is Nothing Then 
    MessageBox.Show("Die Terminalservices-Attribute konnten nicht ermittelt werden!") 
    Return Nothing 
End If 

Dim sReturnValue As String = Nothing 

sReturnValue = oTsUser.TerminalServicesProfilePath 

Использование Win10 всегда отображается выше MessageBox.

Кто-нибудь знает способ определения атрибутов TS пользователя ActiveDirectory с Windows 10 в качестве клиента?

Я использую Win10 x64 с VS2015 Express. Спасибо!

+0

является основной COM DLL на самом деле настоящий и зарегистрировано, т. е. «regsvr32 tsuserex.dll»? У вас есть «On Error Resume Next», маскирующая ошибку с некоторой фактической информацией? – tolanj

ответ

0

Вы можете использовать решение описано здесь: https://blog.cjwdev.co.uk/2014/08/24/vb-net-decode-ad-userparameters-attribute-values/

Public Function GetUserParamsValue(UserParametersText As String, PropertyName As String, IsInteger As Boolean) As String 
    Dim Bytes() As Byte = System.Text.Encoding.Unicode.GetBytes(UserParametersText) 
    Dim Start As Integer = UserParametersText.IndexOf(PropertyName) 
    Dim StartingByteCount As Integer = ((Start + PropertyName.Length) * 2) 
    Dim ValueLength As UInt16 = Convert.ToUInt16(Bytes((Start * 2) - 4)) 
    Dim Counter As Integer = 0 

    If IsInteger Then 
     Dim HexBytes((CInt(ValueLength/2) - 1)) As Byte 
     For i As Integer = StartingByteCount To CInt(StartingByteCount + (ValueLength - 1)) Step +2 
      Dim OriginalCharHex As String = Chr(Bytes(i)) & Chr(Bytes(i + 1)) 
      HexBytes(Counter) = CByte(Integer.Parse(OriginalCharHex)) 
      Counter += 1 
     Next 
     Return BitConverter.ToUInt32(HexBytes, 0).ToString 
    Else 
     Dim HexBytes(CInt(ValueLength/2) - 2) As Byte 
     For i As Integer = StartingByteCount To CInt(StartingByteCount + (ValueLength - 3)) Step +2 
      Dim OriginalCharHex As String = Chr(Bytes(i)) & Chr(Bytes(i + 1)) 
      Dim CharHexDecimal As Integer = Convert.ToInt32(OriginalCharHex, 16) 
      HexBytes(Counter) = CByte(CharHexDecimal) 
      Counter += 1 
     Next 
     Return System.Text.Encoding.ASCII.GetString(HexBytes) 
    End If 
End Function 

И на этом сайте есть полный код для кодирования и декодирования userParameters включая некоторое объяснение: https://00laboratories.com/resources/code/c-sharp/microsoft-active-directory-userparameters-header

+0

Я пробовал ваше решение, но я не знаю, что передать в парм «UserParamtersText». Можете ли вы привести пример, пожалуйста? Благодаря! –

+0

Вам необходимо передать UserParameters от пользователя, над которым вы работаете. , например. с CtxWFProfilePath 'Dim пользователя Как DirectoryEntry = Новый DirectoryEntry (LDAP)' ' Dim CtxWFProfilePath As String = GetUserParamsValue (user.Properties ("UserParameters"). Value.ToString(), "CtxWFProfilePath", False)' Здесь вы можете найти все свойства: https://msdn.microsoft.com/en-us/library/ff635169.aspx – Kel

 Смежные вопросы

  • Нет связанных вопросов^_^