NetUserGetInfo / NetLocalGroupGetInfo возвращает ошибку 1722 - PullRequest
1 голос
/ 08 сентября 2010

У меня есть следующий код (VB.NET), который предназначен для определения, относится ли данное имя учетной записи к локальной группе или учетной записи пользователя.Это будет вызываться только для учетных записей / групп на компьютере, а не в домене.

Module netapi
    Private Declare Function NetUserGetInfo Lib "Netapi32.dll" ( _
         ByVal ServerName As String, _
         ByVal UserName As String, _
         ByVal level As Integer, _
         ByRef BufPtr As IntPtr) As Integer

    Private Declare Function NetLocalGroupGetInfo Lib "Netapi32.dll" ( _
         ByVal ServerName As String, _
         ByVal GroupName As String, _
         ByVal level As Integer, _
         ByRef BufPtr As IntPtr) As Integer

    Declare Unicode Function NetApiBufferFree Lib "Netapi32.dll" _
    (ByRef buffer As IntPtr) As Long

    Public Function GetPrincipalType(ByVal MachineName As String, ByVal AccountName As String) As String
        Dim bufPtr As IntPtr
        Dim lngReturn As Integer = NetUserGetInfo("\\" & MachineName, AccountName, 0, bufPtr)
        Console.WriteLine("NetUserGetInfo return value = " & lngReturn)
        Call NetApiBufferFree(bufPtr)
        bufPtr = IntPtr.Zero
        If lngReturn = 0 Then
            Return "User"
        End If
        lngReturn = NetLocalGroupGetInfo("\\" & MachineName, AccountName, 0, bufPtr)
        Console.WriteLine("NetLocalGroupGetInfo return value = " & lngReturn)
        Call NetApiBufferFree(bufPtr)
        bufPtr = IntPtr.Zero
        If lngReturn = 0 Then
            Return "Group"
        End If
        Return "NotFound"
    End Function
End Module

Моя проблема заключается в том, что вызовы NetUserGetInfo / NetLocalGroupGetInfo всегда возвращают код ошибки 1722 (сервер RPC недоступен).Я попытался использовать имя локального компьютера и имя удаленного сервера Windows, на котором у меня есть права администратора, с тем же результатом.

Если я заменю "\\" & MachineName на Nothing, тогда я получаю ошибку 2221/2220 (пользователь / группа не найдена) независимо от того, существует ли на самом деле учетная запись / группа, на которую ссылается AccountName.

Пожалуйста, помогите.Что я делаю не так?

Обновление: Не уверен, поможет ли это, но я попытался запустить вышеуказанное на Win 7 и Win XP SP3.Моя компиляция нацелена на клиентскую среду .NET 4.0.

1 Ответ

2 голосов
/ 10 сентября 2010

NetUserGetInfo и NetLocalGroupGetInfo оба ожидают строковые параметры Unicode (wide).Можете ли вы Declare Unicode эти методы и подтвердить, сохраняется ли проблема?

Также см. http://www.xtremedotnettalk.com/showthread.php?t=69609

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...