Newsgroup: it.comp.lang.visual-basic
Titolo: [?] proteggere una Dll da un utilizzatore non autorizzato: come ?

salve a tutti, ho il seguente problema :
devo realizzare un programma del quale cederò i sorgenti e vorrei che le dll
che il programma include possano essere utilizzate solo da QUEL programma e
che non vengano utilizzate anche per altri.
come posso fare?
grazie
CIAO

 come posso fare?
Non cedere i sorgenti

 ha scritto nel messaggio
news:Xns91329886C2B1...@127.0.0.1...


sviluppo ??
Leggi il nome del processo in cui ti trovi e verifichi che corrisponda al
tuo programma ;-)
Sotto la firma, un esempio.
hth, hal
----------- inizio codice ------
Option Explicit
Private Const MAX_PATH = 260
Private Declare Function GetModuleFileName Lib "kernel32" _
                            Alias "GetModuleFileNameA" _
                            (ByVal hModule As Long, _
                            ByVal lpFileName As String, _
                            ByVal nSize As Long) As Long
Public Function vbGetModuleFileName() As String
    Dim sBuffer As String
    Dim nLen As Long
    sBuffer = String(MAX_PATH, 0)
    nLen = GetModuleFileName(App.hInstance, sBuffer, MAX_PATH)
    vbGetModuleFileName = Left$(sBuffer, nLen)
End Function    '// vbGetModuleFileName
Public Sub Test()
    MsgBox vbGetModuleFileName()
End Sub
----------- fine codice --------

innanzitutto grazie x l'interessamento e per l'esempio ....
ma il codice che hai scritto ritorna il path della dll ... come faccio così
a essere sicuro che la dll venga utilizzata solo dal mio programma ?? forse
non ho capito bene io ....
praticamente io ho un programma X che usa questa dll e voglio che se un
programma Y tenta di usare questa dll non gli sia utilizzabile...
in poche parole non voglio che altre persone utilizzino la mia dll per i
loro programmi ......
se cè un modo me lo potresti spiegare chiaramente ?
grazie di tutto


non ho capito bene io ....
Scusa, ho dimenticato un pezzetto importante !
Ho passato App.hInstance, ma non ho considerato che il codice e' eseguito
in una dll e non nell' exe.
Sotto la firma c'e' l' esempio corretto (e, questa volta) anche provato ;-)
ciao, hal
------------ inizio codice ----------
Option Explicit
Private Const MAX_PATH = 260
Private Declare Function GetModuleFileName Lib "kernel32" _
                            Alias "GetModuleFileNameA" _
                            (ByVal hModule As Long, _
                            ByVal lpFileName As String, _
                            ByVal nSize As Long) As Long
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" ( _
                            ByVal lpModuleName As String _
                            ) As Long
Public Function vbGetModuleFileName() As String
    Dim sBuffer As String
    Dim nLen As Long
    Dim hModule As Long
    sBuffer = String(MAX_PATH, 0)
    hModule = GetModuleHandle(0&)
    nLen = GetModuleFileName(hModule, sBuffer, MAX_PATH)
    vbGetModuleFileName = Left$(sBuffer, nLen)
End Function    '// vbGetModuleFileName
Public Sub Test()
    MsgBox vbGetModuleFileName()
End Sub
------------- fine codice ---------

grazie mille ora funziona e la funzione ritorna il percorso del programma
che ha istanziato la dll .....
bene ... adesso però se io trovo che un programma che non poteva accedere
alla dll lo vuole fare come faccio a non farglela utilizzare ? io pensavo
bastasse mettere un End nel main della dll ma non funziona (non è
supportato) nelle dll ....
il codice è il seguente :
'la dll parte con questa sub
Private Sub Main()
    Dim NomeFile As String
    NomeFile = LCase(fnNomeFile(vbGetModuleFileName))
    If NomeFile <> LCase(FileEXE) Then
        MsgBox "Utilizzo non Concesso della Dll!", vbCritical
        ' <----- qui ci andrebbe un'istruzione che non permette l'utilizzo
della dll !!!!!!!!!!!
    End If
End Sub
come posso fare?
inoltre questo metodo è facilmente crakkabile .... basta cambiare il nome
del file exe con quello predestinato all'uso della dll .....
cè un altro metodo + affidabile ?
grazie comunque di tutto e scusa per tutte queste domande .... (sono agli
inizi con l'uso delle dll)
CIAO



Non ti occorre interrompere l'esecuzione del programma chiamante.
Direi che interrompere l'esecuzione dei "servigi" della dll può bastare...
non credi?   ;-P
ciao
ugo

 non credi?   ;-P


mmm... francamente non avevo pensato neanche a quello di hal, che è un
"apicultore" molto, molto, molto migliore di me...
ciao
ugo

grazie mi hai risolto il problema!! se non ci foste voi "guru" noi poveri
inesperti saremmo spacciati :)
grazie davvero!!!
CIAO
p.s. l'inserimento sulla datagrid non sono ancora riuscito a farlo!
arrgh!!!! :)

 p.s. l'inserimento sulla datagrid non sono ancora riuscito a farlo!
datagrid?
Ah... trovato...
Facciamo un "affare":
mandami il form "incriminato" che vediamo di capirci una buona volta...
ciao
ugo

 >ma il codice che hai scritto ritorna il path della dll ... come faccio
così


ok te lo mando grazie!


prego, anche a nome di hal...  :-P
e tre .....
Qui gatta ci cova ...
secondo me Ugo vuole invitarmi a vedere la "Corazzata Potiomkin" in
lingua originale :-PPPPP
-- 
ciao, hal

grazie hal mi hai risolto il problema insieme a ugo :)
 :-PPPPPPP
-- 
ciao, hal

lingua originale :-PPPPP
mmm... per me ti sta "coccolando"... sono geloso!!! :-))) hihihihi... :P
Ciao,
Moreno
-- 
#sirri#@#
morenosoft.com#
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.msvbsite.net
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.it-lang-vb.net
---------------------------------------------------------------------------


Temo che, cedendo i sorgenti del programma, ti sia quasi impossibile...
Forse con qualche "accrocchio" interno alla dll che testi qualcosa di
specifico del programma chiamante o dei database utilizzati... dicci
qualcosa di più.
Comunque resta un "accrocchio"...  :-(
ciao
ugo


e due... diventerò il "coccolatore" ufficiale del Ng... :-P
ciao
ugo