[VB6] GetUserNameA - Volledige Naam

Pagina: 1
Acties:
  • 197 views sinds 30-01-2008
  • Reageer

  • mrbullet
  • Registratie: Januari 2002
  • Niet online
Ik heb een code geschreven die de userid + volledige naam van een gebruiker opvraagd.
UserID opvragen gaat altijd goed.

Alleen ik krijg niet altijd het volledige(DisplayName) naam terug.
Op mijn laptop gaat het goed, maar op de (bijna identieke )laptop van een collega gaat het niet goed. We hebben allebei een WInXP SP2.
Ik heb het ook onder vmware met win2003 geprobeerd, ook hier klapt het uit bij
: If GetUserNameEx(NameDisplay, sBuffer, Ret) <> 0 Then

Verder heb ik op internet deze en deze gevonden, maar ook hier krijg ik niet het volledige naam terug. Wel weer de userid. Bij de laatste kan ik alleen de lokale gebruikers uitlezen, maar ik moet de "netwerk" loginnaam uitlezen.

Kan iemand mij vertellen waarom deze oplossing niet overal werkt en of ik op een andere manier het volledige naam kan opvragen?

Voor de duidelijkheid: In alle gevallen hebben de gebruikers behalve userid ook een Full UserName in windows/AD.

Als er iets niet duidelijk of niet volgens de "regels" is hoor ik het graag.

VB= vb6 + sp6
Windows= WinXp Sp2, Win2004 SP4 en Win20003 SP1
Netwerk= win2003 en zonder netwerk


Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Private Enum EXTENDED_NAME_FORMAT
    NameUnknown = 0
    NameFullyQualifiedDN = 1
    NameSamCompatible = 2
    NameDisplay = 3
    NameUniqueId = 6
    NameCanonical = 7
    NameUserPrincipal = 8
    NameCanonicalEx = 9
    NameServicePrincipal = 10
End Enum

Private Declare Function GetUserNameEx Lib "secur32.dll" Alias _
"GetUserNameExA" (ByVal NameFormat As EXTENDED_NAME_FORMAT, _
ByVal lpNameBuffer As String, ByRef nSize As Long) As Long

Private Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Private l As Long
Private szBuffer As String * 100

Private Function szToStr(szStr As String) As String
szToStr = Trim(Left(szStr, InStr(szStr, Chr(0))))
End Function

Public Function UserName() As String

Dim l
'Returns the userid of the user logged into
'the system
l = GetUserName(szBuffer, Len(szBuffer))
UserName = szToStr(szBuffer)
End Function


Private Sub Command1_Click()

Text1.Text = UserName
''''''''''''''
Dim sBuffer As String, Ret As Long
sBuffer = String(256, 0)
Ret = Len(sBuffer)
If GetUserNameEx(NameSamCompatible, sBuffer, Ret) <> 0 Then
    Label1.Caption = "Username: " + Left$(sBuffer, Ret)
Else
    MsgBox "Error while retrieving the username"
End If
If GetUserNameEx(NameDisplay, sBuffer, Ret) <> 0 Then 'Ik krijg hier een false.
Dim usernn As String
usernn = Left$(sBuffer, Ret)
Label2.Caption = "Voluit :" & usernn
   ' MsgBox "Username: " + Left$(sBuffer, Ret)
Else
    MsgBox "Error while retrieving the username"
End If
Err
End Sub
'''''''''''''''''''''''''

Pana 5j


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 15:38
Maak je sBuffer ook eens een fixed length string

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Als je gewoon in de specificatie had gekeken, dan zag je dat je met Err.LastDllError het foutnummertje kon ophalen. Je kon daarna hier de fout opzoeken.

Dit nummer is 1332 oftewel ERROR_NONE_MAPPED. Volgens de specificatie is de username dan niet beschikbaar in dat formaat.


Het vreemde is alleen dat ik geen foutmelding krijg bij een kleine buffer tot ongeveer 140. Het zal wel een bug zijn van MS. Als workaround kan je dan kijken of de size veranderd is.

  • mrbullet
  • Registratie: Januari 2002
  • Niet online
Daos schreef op dinsdag 20 juni 2006 @ 13:57:
Als je gewoon in de specificatie had gekeken, dan zag je dat je met Err.LastDllError het foutnummertje kon ophalen. Je kon daarna hier de fout opzoeken.

Dit nummer is 1332 oftewel ERROR_NONE_MAPPED. Volgens de specificatie is de username dan niet beschikbaar in dat formaat.


Het vreemde is alleen dat ik geen foutmelding krijg bij een kleine buffer tot ongeveer 140. Het zal wel een bug zijn van MS. Als workaround kan je dan kijken of de size veranderd is.
Kan je met code uitleggen wat je bedoelt met "kijken of de size veranderd". Ik ben niet bepaald een expert op dit gebied.

En heb je eventueel ook een andere oplossing?

Pana 5j


  • Daos
  • Registratie: Oktober 2004
  • Niet online
mrbullet schreef op dinsdag 20 juni 2006 @ 15:03:
[...]

Kan je met code uitleggen wat je bedoelt met "kijken of de size veranderd".
Nee. Je moet hier ook iets zelf doen in plaats van alleen knippen en plakken.

In specs staat dat nSize door GetUserNameEx veranderd wordt in het aantal characters dat in de buffer komt te staan. Bij mij was dit een aantal keer niet gebeurd, terwijl de functie wel waar teruggaf.

  • mrbullet
  • Registratie: Januari 2002
  • Niet online
Daos schreef op dinsdag 20 juni 2006 @ 15:45:
[...]

Nee. Je moet hier ook iets zelf doen in plaats van alleen knippen en plakken.

In specs staat dat nSize door GetUserNameEx veranderd wordt in het aantal characters dat in de buffer komt te staan. Bij mij was dit een aantal keer niet gebeurd, terwijl de functie wel waar teruggaf.
Hou maar op, op zulke commentaar zit ik niet te wachten. Als je niets nuttigs te zeggen hebt = :X , anders vervuil je alleen maar de forum.
Zoals je kan zien is het volgens de regels gezocht naar een oplossing en gevonden.
Alleen werkt het niet altijd.
Maar goed, inmiddels heb een andere manier gevonden om het op te vragen die wel atijd doet.
Dit doe ik nu via: Active Directory Services Interface.

Pana 5j


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 15:38
Heb je het ook al geprobeerd met een fixed length string eigenlijk? Normale VB strings zijn strings met een lengte etc ( BSTR ).

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • mrbullet
  • Registratie: Januari 2002
  • Niet online
farlane schreef op woensdag 21 juni 2006 @ 19:04:
Heb je het ook al geprobeerd met een fixed length string eigenlijk? Normale VB strings zijn strings met een lengte etc ( BSTR ).
Jah, maar zonder succes.

Pana 5j

Pagina: 1