2010-09-07 3 views
1

J'ai le code suivant (VB.NET) qui est conçu pour déterminer si un nom de compte donné fait référence à un groupe local ou à un compte d'utilisateur. Cela ne sera appelé que pour les comptes/groupes sur une machine, pas un domaine.NetUserGetInfo/NetLocalGroupGetInfo renvoyant une erreur 1722

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 

Mon problème est que le NetUserGetInfo/NetLocalGroupGetInfo appelle toujours retourner le code d'erreur 1722 (Serveur RPC indisponible). J'ai essayé d'utiliser le nom de la machine locale et le nom des serveurs Windows distants, sur lesquels j'ai des droits d'administration, avec le même résultat.

Si je remplace "\\" & MachineName avec Nothing j'obtiens l'erreur 2221/2220 (Utilisateur/Groupe non trouvé), peu importe si oui ou non le compte/groupe référencé par AccountName existe réellement.

Aidez-nous s'il vous plaît. Qu'est-ce que je fais mal?

Mise à jour: Je ne sais pas si cela aide, mais j'ai essayé de courir ce qui précède à la fois Windows 7 et Windows XP SP3. Ma compilation cible le framework client .NET 4.0.

Répondre

1

NetUserGetInfo et NetLocalGroupGetInfo attendent tous deux des paramètres de chaîne Unicode (large). Pouvez-vous Declare Unicode ces méthodes et confirmer si le problème persiste?

Voir aussi http://www.xtremedotnettalk.com/showthread.php?t=69609

+0

C'est ce que je manque. Merci, ça marche maintenant. –

Questions connexes