A.D.S : Associer des méta-données à un fichier exécutable
Publié : jeu. 12/avr./2018 18:05
A.D.S. (Alternate Data Stream) est une technologie apparu en 1993 et utilisable qu'avec des disques formatés NTFS uniquement ce qui est le cas de la majorité des ordinateurs en 2018.
Cette technologie consiste à ajouter un ou plusieurs flux de données à un fichier existant.
Ces flux de données peuvent être de toutes natures (texte, graphique, code exécutable...).
Ces flux sur le disque sont sous la forme application.exe:nomduflux et sont jusqu'à présent invisibles (Presque invisibles
)
C'est ce que nous allons voir avec ce code qui permet de compter le nombre de fois qu'un exécutable est lancé.
Deux petites procédures :
■ ReadADS(ADS.s) pour lire un flux de données ADS associé à un éxécutable.
■ WriteADS(ADS.s, Value.s) pour écrire dans un flux de données associé à un exécutable.
Créer un éxécutable avec ce code et lancer le.
La première fois vous aurez la valeur 0 puis au second lancement 1, troisième lancement 2, etc ....
Cette technologie consiste à ajouter un ou plusieurs flux de données à un fichier existant.
Ces flux de données peuvent être de toutes natures (texte, graphique, code exécutable...).
Ces flux sur le disque sont sous la forme application.exe:nomduflux et sont jusqu'à présent invisibles (Presque invisibles

C'est ce que nous allons voir avec ce code qui permet de compter le nombre de fois qu'un exécutable est lancé.
Deux petites procédures :
■ ReadADS(ADS.s) pour lire un flux de données ADS associé à un éxécutable.
■ WriteADS(ADS.s, Value.s) pour écrire dans un flux de données associé à un exécutable.
Code : Tout sélectionner
Procedure.s ReadADS(ADS.s)
Protected Buffer.s
Protected Filename.s = ProgramFilename()
If ReadFile(0, Filename + ":" + ADS, #PB_File_SharedRead)
Buffer = ReadString(0, #PB_Unicode)
CloseFile(0)
EndIf
ProcedureReturn Buffer
EndProcedure
Procedure WriteADS(ADS.s, Value.s)
Protected Filename.s = ProgramFilename()
If CreateFile(0, Filename + ":" + ADS, #PB_File_SharedWrite)
WriteData(0, @Value, StringByteLength(Value))
CloseFile(0)
EndIf
EndProcedure
;Read and show number of lauches
NumberofLauches$ = ReadADS("NUMBEROFLAUCHES")
MessageRequester("Number of launches", Str(Val(NumberofLauches$)))
;Write number of lauches + 1
NumberofLauches = Val(NumberofLauches$) + 1
WriteADS("NUMBEROFLAUCHES", Str(NumberofLauches))
La première fois vous aurez la valeur 0 puis au second lancement 1, troisième lancement 2, etc ....