PDA

View Full Version : Eprire cartella condivisa con password...


TonyManero
24-10-2006, 10:14
Da programma ho bisogno di aprire una cartella condivisa in rete... ed il PC che la ospita mi chiede utente e password.

Disolito per aprire cartelle ecc uso la semplicissima ShellExecute. C'è un modo con questa funzione di passate utente e password? Non ho trovato esempi in rete...

Grazie a tutti! :D

cionci
24-10-2006, 10:34
Ci sono Api per montare una cartella condivisa su una lettera di unità (ovviamente cartella condivisa con username e password)...devo solo ritrovarle (spero di farcela entro stasera)...

-fidel-
24-10-2006, 10:41
C'è un insieme di funzioni per gestire condivisioni remote...
Devi prima autenticarti, con la ShellExecute() non vai lontano.

Dai un'occhiata alle funzioni Net* :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netmgmt/netmgmt/network_management_functions.asp

EDIT: cambiato il link

EDIT2: Ad esempio, comincia a guardare le funzioni NetUse*, come ad esempio NetUseAdd().

cionci
24-10-2006, 10:47
Sono quelle che ho usato anche io :)

andbin
24-10-2006, 10:51
Esempio:
#define _WIN32_WINNT 0x0400
#define STRICT
#include <windows.h>
#include <Lm.h>

int main (int argc, char *argv[])
{
USE_INFO_2 useInfo2;
NET_API_STATUS status;
DWORD dwParmError;
WCHAR szPassword[128];

lstrcpyW (szPassword, L"password");

ZeroMemory (&useInfo2, sizeof (USE_INFO_2));

useInfo2.ui2_local = NULL;
useInfo2.ui2_remote = L"server_remoto";
useInfo2.ui2_username = L"nome_utente";
useInfo2.ui2_password = szPassword;
useInfo2.ui2_asg_type = USE_WILDCARD;

status = NetUseAdd (NULL, 2, (LPBYTE) &useInfo2, &dwParmError);

return 0;
}Linkare con Netapi32.lib.

Notare le stringhe in Unicode.

-fidel-
24-10-2006, 10:57
Linkare con Netapi32.lib.

Notare le stringhe in Unicode.

Appena finito di scrivere l'edit ed ecco il codice completo :D

andbin
24-10-2006, 11:32
L'unica cosa che non ho capito è perché nel mio esempio non posso mettere la stringa della password direttamente come literal.

useInfo2.ui2_password = L"password";

Così in questo modo avviene una violazione di accesso, sembra che la NetUseAdd cerchi di scriverci sopra. :mbe: Ecco perché ho usato un buffer per la password.

TonyManero
24-10-2006, 13:06
Mi fate godere.... :D

Riamngo sempre sbalordito da quanto mi potete essere utili! :D