代码之家  ›  专栏  ›  技术社区  ›  Andrew Cooper

netusergetinfo/netlocalgroupgetinfo返回错误1722

  •  1
  • Andrew Cooper  · 技术社区  · 15 年前

    我有以下代码(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 然后,无论引用的帐户/组是否为 AccountName 实际上存在。

    请帮忙。我做错什么了?

    更新: 不确定这是否有帮助,但我已经尝试在Win 7和Win XP SP3上运行上述功能。我的编译目标是.NET 4.0客户端框架。

    1 回复  |  直到 15 年前
        1
  •  2
  •   vladr    15 年前

    NetUserGetInfo NetLocalGroupGetInfo 两者都需要Unicode(宽)字符串参数。你能 Declare Unicode 这些方法并确认问题是否仍然存在?

    也看到 http://www.xtremedotnettalk.com/showthread.php?t=69609