Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Problemi con NetShareGetInfo

Ciao a tutti.
Sviluppo su una macchina con win2k e ho finalmente
terminato un programma che usa NetShareGetInfo
di Netapi32.dll e tutto funziona a meraviglia.
Ora mi sono purtroppo accorto che se faccio girare
il prog in W98 si pianta dando 'Errore di runtime 453'
- Impossibile trovare il punto di ingresso della DLL
NetShareGetInfo in Netapi32.dll
La NetShareGetInfo con level =502 ritorna un buffer
del tipo (solo per NT, w2000 e xp)
Private Type SHARE_INFO_502
  shi502_netname      As Long
  shi502_type         As Long
  shi502_remark       As Long
  shi502_permissions  As Long
  shi502_max_uses     As Long
  shi502_current_uses As Long
  shi502_path         As Long
  shi502_passwd       As Long
  shi502_reserved     As Long
  shi502_security_descriptor As Long
End Type
a me serve solo leggere shi502_path.  Peccato che
il level 502 sembra non essere valido per w98.
Per il w98 sembra che ci sia il level 50, ma non
so come usarlo...
Qualcuno sa darmi qualche idea su come fare ?
Esiste il modo di sostituire quest'API con un'altra
che funzioni dovunque e mi restituisca anche solo
il path che mi serve?
Grazie davvero a chi mi aiuta.
Beppe

 
Visto che ti serve solo il path perche' non usi la SHARE_INFO_2:
typedef struct _SHARE_INFO_2 {
     LPTSTR    shi2_netname;
     DWORD     shi2_type;
     LPTSTR    shi2_remark;
     DWORD     shi2_permissions;
     DWORD     shi2_max_uses;
     DWORD     shi2_current_uses;
     LPTSTR    shi2_path;
     LPTSTR    shi2_passwd;
} SHARE_INFO_2, *PSHARE_INFO_2, *LPSHARE_INFO_2;
Questa non contiene info sulla security e non dovrebbe darti problemi.
ciao
		maxx

 ha scritto nel messaggio
news:3CF87FC9...@laserinforma.com...

Provero'.  Fra l'altro mi pare di capire che per win9x non
si deve usare la Netapi32.dll, bensi' la Svrapi.dll. e le
varie dichiarazioni non le trovo da nessuna parte.
Non e' che per caso hai le declare delle varie
NetShare (add,del,getinfo, setinfo) per netapi32 e svrapi
e i vari tipi e costanti ?  (per VB ovviamente) ?
Io sto diventando pazzo.... trovo pezzi un po'
dovunque e uno diverso dall'altro.
Grazie mille
Beppe

 e i vari tipi e costanti ?  (per VB ovviamente) ?
Immagino tu abbia gia' provato:
http://www.allapi.net/apilist/example.php?example=NetShareGetInfo
Prova anche a leggere:
http://groups.google.com/groups?hl=it&lr=&threadm=OVuLJMRJ%23GA.255%40uppssnewspub04.moswest.msn.net&rnum=5&prev=/groups%3Fq%3Dnetsharegetinfo%2520vb%2520declaration%26hl%3Dit%26lr%3D%26sa%3DN%26tab%3Dwg
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q125700
Purtroppo non so suggerirti altro ...
Ho l'impressione che queste funzioni non siano supportate adeguatamente 
visto che sono un port da Lan Manager ...
ciao
		maxx

 visto che sono un port da Lan Manager ...
Sono veramente una fetecchia.   Se poi consideri che da
una parte dicono di convertire in Unicode, dall'altra sono
ANSI, il VB che si pianta.... accidenti.
.... e pensare che credevo di aver risolto invece sono
punto e daccapo (quasi)
mah
Ciao
Beppe

 punto e daccapo (quasi)
Non so esattamente a cosa ti servano le netshare, ma se il problema e' 
lo stesso di qualche tuo thread fa, secondo me fai prima ad usare le 
mailslot. Alla comunicazione tra PC ci pensa windows e tu passi solo i 
comandi o i dati di intercomunicazione.
buon lavoro
		maxx

 ha scritto nel messaggio
news:3CF8D85...@laserinforma.com...

Il problema di qualche thread fa l'ho risolto.
Ora se lancio la mia applicazione su più
PC nella stessa rete si vedono e si parlano
tutte via UDP senza problemi, posso inviare
messaggi a tutti o a qualcuno in particolare.
Il mio problema e' la fase successiva, ovvero
tutti devono necessariamente agganciarsi ad
un unico file di database, e visto che non trovo
un sistema per imporre l'uso di un determinato
file sulla rete, mi limito a controllare che quello
scelto sia lo stesso di una qualsiasi stazione
gia' attiva.
Per ottenere questo ho pensato di convertire,
per ogni stazione, il nome del database con un
path davvero unico, ottenuto con due campi: il
nome del pc o server su cui si trova il file e il
path assoluto secondo la macchina su cui si
trova.
Ad esempio il mio file si trova su una macchina
di nome \\ Beppe  ed esattamente su E:\DataArray
reso visibile in rete col nome di condivisione
Shared.   Questa stazione quindi calcola:
Nome server: \\ Beppe
Path file: E:\DatArray\Dbase.mdb
(e comunica questi dati via UDP)
Se ho un'altra macchina in rete che seleziona lo
stesso file, e ha mappato \\ Beppe\Shared come
drive P: avro':
Path file: P:\Dbase.mdb
Ora io con WNetEnumResource riconverto P:
con \\ Beppe\Shared, poi passando Shared
alla maledettissima NetShareGetInfo ottengo
(se un giorno il Signore me lo consentira')
E:\DatArray.   Ottengo quindi
Nome server: \\ Beppe
Path file: E:\DatArray\Dbase.mdb
e posso validare il nome del file selezionato.
Lo stesso accade su qualsiasi macchina in rete.
Questo e' l'unico sistema che dopo numerose
pippe mentali mi e' venuto in mente.
Comunque sono riuscito alla fine. Ora riesco a fare
tutto, anche su win98 e compagnia.   Mi rimane solo
da capire perche' su win98 funge nell'ambiente VB
e NetShareGetInfo mi da errore 87 se lo compilo.
sob
Beppe

 e NetShareGetInfo mi da errore 87 se lo compilo.
Non e' che il compilato si linka alla libreria sbagliata?
#define ERROR_INVALID_PARAMETER          87L
Buon weekend
		maxx

 Buon weekend
Io lavoro anche la domenica.  Devo finire per lunedi'
senno' mi cambiano sesso.
Ciao e grazie
Beppe
da lunedi' :
Beppa    :-(

 senno' mi cambiano sesso.
A chi lo dici! :-(
ciao
		maxx