Newsgroup: it.comp.lang.visual-basic
Titolo: Accedere a directory con user e pw diversi

Il mio sw ha la necessità di accedere, in rete, ad una serie di directory
remote appartenenti a differenti utenti, quindi con la necessità di loggarsi
di volta in volta con i rispettivi user e pw, qualcuno ha idea di come
potrei fare?

 ha scritto nel messaggio
news:UQ_Ie.6876$HM1.1...@twister1.libero.it...


> cerca nei post precedenti è stato detto 10^1000 volte :P
Veramente è un pò che cerco ma, come soluzione, ho trovato solo quella di
mappare delle unità di rete che, di per sè, mi sembra un pò artificioso,
forse non sto usando le keyword adeguate boh...

 ha scritto nel messaggio
news:UQ_Ie.6876$HM1.1...@twister1.libero.it...


 ps. Specifica su che os si trovano le directory dove devi accedere.
Si tratta, in tutti i casi, di sistemi NT4/2K/XP

 Si tratta, in tutti i casi, di sistemi NT4/2K/XP
Con NT4 non credo sia possibile se non riloggando
la macchina, feci diverse prove ma non ottenni nulla.
Con 2K e XP ora mappo provvisoriamente la risorsa, sò
che non è una cosa bellissima, ma funziona ed è decisamente
semplice sia via API(WNetAddConnection2) che WMI(MapNetworkDrive).
Ciao
@ALex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 semplice sia via API(WNetAddConnection2) che WMI(MapNetworkDrive).
Si può utilizzare l'impersonation tramite le API LogonUser e la 
ImpersonateLoggedOnUser.
Il "grosso" limite (oltre ad altre implicazioni minori) è quello che il 
processo chiamante la LogonUser deve possedere il privilegio SET_TCB_NAME 
(act as part of the operating system) a meno che la piattaforma non sia 
WinXP o successivo.
Riferimenti:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthn/security/logonuser.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/impersonateloggedonuser.asp
ciao
-- 
Gianluca Cannalire
Microsoft MVP/MCP - Visual Basic
http://www.visual-basic.it
http://community.visual-basic.it/gianluca

 ciao
Ottimo suggerimento, grazie.
@Alex


 Ottimo suggerimento, grazie.
Prego ;)
Qui trovi anche un esempio:
"How to impersonate a user from Active Server Pages"
http://support.microsoft.com/?id=248187
Il fatto che l'esempio è applicato al "mondo" ASP, non ha importanza...
Ciao


 ImpersonateLoggedOnUser.
Ottimo! Ora mi metto a studiare :-)

 Ciao
Eccezionale e preziosissimo...!
Ciao Gianluca grazie.


 
http://support.microsoft.com/?id=248187
grazie del link. ma non ho ben capito come da un client 2000 risolvo la
questione "The process calling LogonUser requires the SE_TCB_NAME
privilege".
nel codice qui sotto mi aspetterei inoltre un errore sul privilegio,
invece arriva direttamente quello di accesso a percorso/file (ho girato i
metodi della dll della pagina ms in normali sub)
Private Sub Command1_Click()
    On Error GoTo errman
    Logon "administrator", "password", "dominio"
    Image1.Picture = LoadPicture("\\server\cartella\c000001.jpg")
    Logoff
    Exit Sub
errman:    MsgBox Error
End Sub
la chiamata non da' errore ne' come admin ne' come utente. semplicemente
sembra che non esista.
l'idea ovviamente e' di fare aprire a un utente immagini (o db o quel che
e') in una cartella cui non ha accesso. non mi piace molto la pass
hardcoded, ma una cosa per volta :)
grazie, a.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 hardcoded, ma una cosa per volta :)
La gestione degli errori, in questo caso, è errata.
Infatti, nella Logon proposta nell'esempio da me indicato, viene prima 
invocata l'API LogonUser e successivamente la ImpersonateLoggedOnUser.
Ora, la LogonUser, nel caso in cui fallisce, non genera un RT error, ma:
"LogonUser"
Return Values
-If the function succeeds, the function returns nonzero.
-If the function fails, it returns zero. To get extended error 
information, call GetLastError
Nel tuo caso, quindi, restituira un bel '0' (in Win2000, normalmente, non 
si possiede il privilegio SET_TCB_NAME) che, passato alla 
ImpersonateLoggedOnUser non farà nient'altro che generare un'altro '0':
"ImpersonateLoggedOnUser"
Return Values
-If the function succeeds, the return value is nonzero.
-If the function fails, the return value is zero. To get extended error 
information, call GetLastError.
Vedrai che, invocando GetLastError, nel caso in cui LogonUser ti 
restituisca il valore '0', otterai in risposta un bel 
ERROR_PRIVILEGE_NOT_HELD


 La gestione degli errori, in questo caso, è errata.
l'ho capito dopo avere postato.
al momento ho risolto con un exe con diritti 0 che lancia un exe con diritti
ok. a me controllare che exe2 non sia virus.exe rinominato...
ciao, a.