[ Shadowed @ 26.05.2007. 13:50 ] @
Da li je ikako moguce pokrenuti samo deo koda (npr. jednu funkciju) sa drugacijim credentials ako su poznati username/password?
I, ako nije, da li postoji mogucnost za ista manje od pokretanja celog procesa sa drugim u/p?
[ ajaalba @ 27.05.2007. 17:22 ] @
Ako sam dobro razumeo treba ti poziv eksterne funkcije.

Ja sam to svojevremeno resio kreiranjem dll-a u C++ i njegovim pozivom iz jednog drugog programskog jezika koji nije tema ovog foruma. (Sve jedno proces je proces iz kog god jezika da je nastao i sve je to asembler) i siguran sam da je programski jezik koji u sebi nema kljucnu rec extern ili external za kantu za djubre. C# naravno ima tu rec.

Sto se tice kreiranja dll-a iz C# do sada sam samo radio sa kreiranjem klase koja se nece kompajlirati u exe vec u dll. Dakle mora se instancirati (ako nije static) i ne mora se pozivati kao extern (ne znam da li moze? Ako moze onda je resenje pred tobom, ali ako nije nastavi da citas). Da li postoji elegantna akcija kao u C++ ne znam i voleo bih da me neko generalno malo vise specijalizira za kreiranje izvrsnih verzija programa u visual studio-u. Ali da se vratimo trenutnom problemu.

Dakle kako napraviti c++ dll. Nema nista lakse:

http://www.htbasic.com/simpledll.html

Kako ga pozvati iz C#. Pogledao sam malo po webu i evo resenja:

http://csharp-pro.blogspot.com...external-dll-library-in-c.html
[ ajaalba @ 27.05.2007. 17:38 ] @
mada sudeci po tvojim postovima sa:

http://www.elitesecurity.org/t262388-ukljucivanje-dll

zakljucujem da ti nisam reako nista novo
[ Shadowed @ 27.05.2007. 18:58 ] @
Iz C#-a se ne moze kreirati .dll sa C++ funkcijama (bar koliko sam ranije saznao, tj. saznao sam za VB.net pa pretpostavljam da vazi isto).
C++ mi nije narocito dobro resenje jer ga slabo znam (radim u vb.net-u), ali recimo da uspem da napisem kod koji radi sta treba, i dalje ne znam kako da to pozovem sa drugim credentials (ovaj drugi primer govori kako da se klasicno pozove, sto sam znao).
Inace, nije mi neophodno da bude u eksternom .dll-u, cak bi mi bilo mnogo bolje kada bih imao f-ju u istoj klasi koju bih pozvao na taj nacin. No, sve se meni cini da to nije moguce u okviru istog procesa...
[ mmix @ 28.05.2007. 15:15 ] @
Postupak je sledeci:


1. Pozoves WinLogon API da ulogujes korisnika i dobije logon token
2. Koristis API da impersonate taj token
3. Pozoves metod
4. Po povratku iskljucis impersonate
5. Izlogujes korisnika

Ako ti trebaju primeri, reci...
[ mmix @ 28.05.2007. 15:26 ] @
Samo da ti pomognem u odlucivanju, security token se ne primenjuje na nivou procesa nego na nivou thread-a, nista te ne sprecava da imas proces sa 10 threadova sa 10 razlicitih tokena od razlicitih usera i da kroz njih asinhrono pozivas zeljeni metod. Posto je logon/logoff operacija skupa, mozda ti je ovaj pristup bolji ako radis vise poziva.

Sad sam i video da imas lep primer u MSDN library. Pogledaj pod "WindowsIdentity.Impersonate(IntPtr)" metodom, imas ceo postupak u kodu :)
[ Shadowed @ 28.05.2007. 15:29 ] @
Tnx, pogledacu.
[ Shadowed @ 30.05.2007. 02:20 ] @
Nasao sam primer - http://msdn2.microsoft.com/en-us/library/aa331756(VS.71).aspx
I radi dobro (to sto je u primeru dato), medjutim, nisam siguran da li je zaista pod drugim account-om jer ako pre impersonatedUser.Undo() upisem Shell("calc.exe") (isto je i preko process.start), pokrene se kalkulator, medjutim u task manager-u kaze da je pokrenut pod prvobitnim account-om (administrator umesto shadowed kao sto sam se prebacio u programu).
[ jablan @ 30.05.2007. 08:42 ] @
Ja sam koristio isti kôd i mislim da je radilo (trebalo je da iz svog programa pristupim nekom share-u na drugoj mašini pod određenim nalogom).
[ mmix @ 31.05.2007. 16:01 ] @
Citat:
Shadowed: pokrene se kalkulator, medjutim u task manager-u kaze da je pokrenut pod prvobitnim account-om (administrator umesto shadowed kao sto sam se prebacio u programu).


Radi ok. Task manager prikazuje security token usera koji je pokrenuo prvi thread. Cak iako imas samo jedan thread u aplikaciji i njega promenis da imersonate drugog usera, task manager ce pokazati da proces pripada prvom useru. To je generalno i ispravno jer task manager ne prikazuje security kontekst procesa nego njegovog vlasnika (owner)
[ Shadowed @ 31.05.2007. 18:27 ] @
OK, mislio sam da ce biti user iz onog thread-a koji je pokrenuo nov proces.
U svakom slucaju, kada sam ugradio u aplikaciju radi ono sto mi je trebalo tako da je sve odlicno.

Hvala svima.