Hoi,
Ik wil in een delphiprogramma de ingelogde username ophalen.
Dit werkt al in de volgende gevallen:
- Netware (complete path, notatie CN=USER.OU=ORGUNIT.O=ORG)
- WinNT domein (zelfde notatie van gemaakt, CN=USER.O=DOMAIN, apart user en domein opgehaald uit Windows).
Nu moet ik bij een nieuwe klant (die een Active Directory systeem gebruikt), ook de ingelogde username ophalen (Full Distinguished Name, dus: CN=User.OU=Lokatie1.O=DOMAIN).
Dit kan echter niet op de NT-manier, want dan krijg ik alleen User en Domain.
Nu is mijn vraag:
* Kan iemand bevestigen dat in het opgehaalde windows NT domain het complete path staat?
Ik lees de username bij een Windows 2000 / XP machine als volgt uit:
getWindowsUser is een aparte functie die via
de username ophaalt.
Zelf draai ik hier in de buurt nergens Active Directory om dit "even" te testen. Alvast hartelijk bedankt!
Ik wil in een delphiprogramma de ingelogde username ophalen.
Dit werkt al in de volgende gevallen:
- Netware (complete path, notatie CN=USER.OU=ORGUNIT.O=ORG)
- WinNT domein (zelfde notatie van gemaakt, CN=USER.O=DOMAIN, apart user en domein opgehaald uit Windows).
Nu moet ik bij een nieuwe klant (die een Active Directory systeem gebruikt), ook de ingelogde username ophalen (Full Distinguished Name, dus: CN=User.OU=Lokatie1.O=DOMAIN).
Dit kan echter niet op de NT-manier, want dan krijg ik alleen User en Domain.
Nu is mijn vraag:
* Kan iemand bevestigen dat in het opgehaalde windows NT domain het complete path staat?
Ik lees de username bij een Windows 2000 / XP machine als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| hNETAPI := LoadLibrary( 'NETAPI32.DLL' );
if hNETAPI <> 0 then begin
@WinNT_NetWkstaGetInfo := GetProcAddress( hNETAPI, 'NetWkstaGetInfo' );
@WinNT_NetApiBufferFree := GetProcAddress( hNETAPI, 'NetApiBufferFree' );
EC := WinNT_NetWkstaGetInfo( nil, 100, Pointer( WSNT ) );
if EC = 0 then begin
Domain := WideCharToString( WSNT^.wki100_langroup );
Username := getWindowsUser;
WinNT_NetApiBufferFree( Pointer( WSNT ) );
if (length(domain) > 0) and (length(username) > 0) then
filledIn := true;
end;
end; |
getWindowsUser is een aparte functie die via
code:
1
2
3
4
5
6
7
8
9
10
11
12
| function getWindowsUser: String;
var
xName : array [0..63] of Char;
NwUserName : pChar;
NwBufSize : dWord;
NwError : Word;
begin
NwUserName := xName;
NwBufSize := SizeOf(xName);
NwError := wNetGetUser(nil, NwUserName, NwBufSize);
Result := NwUserName;
end; |
de username ophaalt.
Zelf draai ik hier in de buurt nergens Active Directory om dit "even" te testen. Alvast hartelijk bedankt!