[ Moonshine @ 18.11.2003. 01:48 ] @
Ovo me muci vec par dana i nikako ne mogu da nadjem resenje.
Radi se o servisu koji treba da izvuce username (ili bilo koju drugu informaciju)trenutno aktivnog usera.
Da li moram da radim as Aktivnim Direktorijumima (ADSI), s obzirom da iako je user domenski on je ipak logovan i na lokalnu masinu. Probao sam svasta ali nikako ne uspevam.

Kako?
[ Dragi Tata @ 18.11.2003. 05:39 ] @
Pogledaj NetWksta... funkcije, npr NetWkstaUserGetInfo
[ Moonshine @ 18.11.2003. 09:27 ] @
Probao sam ali ona vraca podatke o useru ali samo ako je pozovem iz konteksta logovanog usera. Ja kad bih znao taj kontekst nebih je ni zvao.
Jedino mi jos preostaje da preko NetWkstaUserEnum enumerisem sve usere pa da onda filterisem sistemske, ali to mi i dalje ne daje aktivnog usera.
[ Dragi Tata @ 18.11.2003. 16:37 ] @
A, tek sad vidim da to treba da obaviš iz servisa. Samo, nije mi jasno kako onda definišeš ko je "aktivan korisnik". Svi koji su ulogovani su "aktivni", zar ne?
[ Moonshine @ 18.11.2003. 21:38 ] @
Da to je tacno tek sad vidim tu stranu problema. I uopste mi se ne svidja:)

Ali s obzirom da bih ja trebao da izbacim dialog box i u zavisnosti od grupe kojoj user pripada da mu prikazem odgovarajuca polja.. Opet mi ostaje pitanje kako da dodjem do logovanog ("aktivnog") korisnika.. Ok mora enumeracija.. Ali sad bih morao i da pazim gde koji dijalog izbacujem.. Ovo postaje previse komplikovano za moj mali mozak:))

Nazad na tablu za crtanje.
U svakom slucaju hvala.
[ Mikky @ 18.11.2003. 22:10 ] @
Jesi li probao sa GetUserName() API
Code:

GetUserName
The GetUserName function retrieves the user name of the current thread. This is the name of the user currently logged onto the system. 

BOOL GetUserName(
  LPTSTR lpBuffer,  // address of name buffer
  LPDWORD nSize     // address of size of name buffer
);

[ -zombie- @ 18.11.2003. 22:14 ] @
servis po definiciji ne bi trebao da (direktno) interaguje sa krajnjim korisnikom. znači, ne bi trebalo da ima bilo kakav UI.

za takve prilike, obično servis startuje neku "običnu" aplikaciju koja će da korisniku prikaže/pita to što treba.

a time rešavaš i pitanje aktivnog korisnika...
[ Moonshine @ 19.11.2003. 08:47 ] @
GetUserName ne radi jer je fora bas u prvoj recenici da vraca korisnicko ime trenutnog threda. A servis radi u kontekstu lokalnog sistema.
Nasao sam neko resenje da enumerisem sve sesije, pa da iz njih vidim koja je aktivna i na osnovu nje vidim aktivnog usera.
Jos nisam implementirao ali cinimi se da ce uspeti javicu ako proradi.

Ako startujem aplikaciju iz servisnog threada zar nece ona da se opet izvrsi pod kontekstom sistema?
[ Moonshine @ 19.11.2003. 18:50 ] @
Ako nekog interesuje. Resenje koje je kod mene proradilo je
WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSUserName, ppUserName, pBytesReturned);
[ Dragi Tata @ 19.11.2003. 19:04 ] @
Terminal Services?

Duhovito, nema šta. Samo, obrati pažnju da te funkcije ne dolaze sa svim verzijama Windows-a (čak ni svim NT verzijama).
[ leka @ 20.11.2003. 17:25 ] @
Duhovito je zapravo, da ne kazem tragikomicno, sto se covek uopste muci oko ovih stvari. Necu da spominjem da jedan poularni OS ima veoma proste getpwuid(), getuid(), (...) funkcije koje postoje decenijama... Kao i uvek M$ ekipa radi po proverenom sistemu "sto mora lako, kad moze komplikovano?".
[ Dragi Tata @ 20.11.2003. 17:37 ] @
getpwuid(getuid()) - GetUserName. Šta je lakše i jednostavnije procenite sami.

Jedino što mi nije jasno kako to čoveku rešava problem.
[ Reljam @ 20.11.2003. 20:08 ] @
getpwuid i getuid ne resavaju ovaj problem. Proces koji je vlasnik se vrti pod sistemskim nalogom, a ne korisnickim. A i GetUserName je lakse od ta dva...
[ Moonshine @ 22.11.2003. 12:59 ] @
Znam, ali gazde su mi odobrile, a ja se nisam uopste bunio.
Specifikacija je cudo. :))