Accueil > > > [COM] CRÉATION DE RACCOURCIS [MASM32]
[COM] CRÉATION DE RACCOURCIS [MASM32]
Information sur la source
Description
une fonction de création de raccourcis voici le prototype C extern "C" long __stdcall CreateLinkEx( char * lpLinkPath, char * lpTargetPath, char * lpDescription, char * lpCmdLine, char * lpIconPath, unsigned long ulIconIndex); lpLinkPath : chemin complet ou relatif du raccourci lpTargetPath : chemin complet du fichier référencé lpDescription : description (peut être NULL) lpCmdLine : ligne de commande passée au fichier référencé (peut être NULL) lpIconPath : chemin complet de l'icone du raccourci ulIconIndex : index de l'icône (ordre dans lequel une icône est déclarée dans le fichier resource script (.rc)) pour un fichier .ico ulIconPath doit avoir la valeur 0 voila c une chtite fonction tres simple pour montrer l'utilisation (primaire) de COM un exemple d'utilisation en C (désolé, je n'ai aps le temps d'en réaliser un en ASM et j'ai celui en C sou la main) : #include <ole2.h> #include <shlobj.h> #include <shlwapi.h> extern "C" void __stdcall CreateLink(char *,char *,char *); extern "C" void __stdcall CreateLinkEx(char *,char *,char *,char *,char *,int); extern "C" int __stdcall main(void) { char lpDesktopFolder[MAX_PATH]; //définit une chaîne pour accueuillir le chemin du raccourci CoInitialize(NULL); //initialise COM SHGetSpecialFolderPath(NULL, //récupère le chemin du dossier "Bureau" lpDesktopFolder, 0x10, 0); PathAppend(lpDesktopFolder, //fusionne les deux chemins pour en faire un complet "start.lnk"); CreateLinkEx(lpDesktopFolder, //crée le raccourci "C:\\mes documents\\asm\\MSC\\start.exe", "created with CreateLinkEx", NULL, "C:\\mes documents\\asm\\MSC\\start.ico", 0); CoUninitialize(); //finit de travailler avec COM return 0; } bon un exemple en ASM : .386 assume cs:flat,ds:flat,ss:flat,es:flat,fs:nothing,gs:noth ing extrn CreateLinkEx@24:proc data16 segment para public use16 lpLinkPath db "C:\mes documents\asm\MSC\start.lnk",0 lpTargetPath db "C:\mes documents\asm\MSC\start.exe",0 lpDescription db "created with CreateLinkEx",0 lpIconPath db "C:\mes documents\asm\MSC\start.ico",0 data16 ends code16 segment para public use16 startup: push 0 ;initialise COM call CoInitialize push 0 ;crée le raccourci push offset lpIconPath push 0 push offset lpDescription push offset lpTargetPath push offset lpLinkPath call CreateLinkEx@24 call CoUninitialize ;finit de travailler avec COM code16 ends end startup
Source
- ;**************************************************************************
- ; exemple d'utilisation de COM sous MASM32 :
- ; fonction de création de raccourcis
- ;
- ; auteur : gblade
- ;
- ; description :
- ; Ce fichier implémente une fonction de création de raccourcis (fichiers
- ; link portant l'extention .lnk) via l'architecture COM de Microsoft.
- ; Les interfaces utilisées sont IShellLink et IPersistFile.
- ;**************************************************************************
-
-
- .386 ;instructions du 386
-
- option language:stdcall ;convention stdcall
-
- assume cs:flat,ds:flat,ss:flat,es:flat,fs:flat,gs:flat ;model mémoire win32
-
- include kernel32.inc ;header pour les fonctions de gestions de base
- include ole32.inc ;header pour l'utilisation de COM
- includelib kernel32.lib ;librairie pour les fonctions de gestions de base
- includelib ole32.lib ;librairie pour l'utilisation de COM
- includelib uuid.lib ;identificateurs GUID
-
- ;***** Importations *****
-
- extrn IID_IPersistFile:dword
-
-
- ;***** Exportations *****
-
- public CreateLink@12
- public CreateLinkEx@24
-
-
- ;***** Constantes *****
-
- CLSCTX_INPROC_SERVER equ 01h
-
-
- ;***** Données *****
-
- data segment public
-
- ;----- Identificateurs -----
- CLSID_ShellLink dd 00021401h
- dw 00h,\
- 00h
- db 0C0h,\
- 00h,\
- 00h,\
- 00h,\
- 00h,\
- 00h,\
- 00h,\
- 46h
-
- IID_IShellLink dd 000214EEh
- dw 00h,\
- 00h
- db 0C0h,\
- 00h,\
- 00h,\
- 00h,\
- 00h,\
- 00h,\
- 00h,\
- 46h
-
- data ends
-
-
- ;***** Code *****
-
- text segment public
-
- CreateLinkEx@24:
- push 18h ;empile le nombre d'octets à dépiler en fin de fonction
- jmp @f
-
- CreateLink@12:
- push 0ch ;empile le nombre d'octets à dépiler en fin de fonction
- @@:
- push ebp ;réserve la pile
- mov ebp,esp
- sub esp,10h ;réserve 8 octets de variables locales
- push ebx ;sauve EBX pour utilisation future
-
- lea eax,dword ptr [ebp-04h] ;crée une instance de l'objet IShellLink
- push eax
- push offset IID_IShellLink
- push CLSCTX_INPROC_SERVER
- push 0
- push offset CLSID_ShellLink
- call CoCreateInstance
-
- test eax,eax
- jnz createlink_end
-
- mov ebx,dword ptr [ebp-04h] ;charge l'objet IShellLink en EBX
- mov ecx,dword ptr [ebx] ;charge la VMT de l'objet IShellLink en ECX
-
- push dword ptr [ebp+10h] ;change le chemin du fichier référencé
- push ebx
- call dword ptr [ecx+50h]
-
- push dword ptr 0208h ;8 octets demandés
- push 0 ;mémoire fixe demandée
- call LocalAlloc
-
- test eax,eax
- jz createlink_release_ishelllink
-
- mov dword ptr [ebp-0ch],eax ;charge la chaîne nouvellement obtenue dans une variable locale
-
- lea eax,dword ptr [ebp-10h] ;récupère le chemin complet et le nom du fichier référencé
- push eax
- push [ebp-0ch]
- push 0208h
- push dword ptr [ebp+10h]
- call GetFullPathName
-
- mov ecx,dword ptr [ebp-10h] ;charge le nom du fichier en ECX
- mov byte ptr [ecx-01h],0 ;retranche du chemin complet le nom du fichier
-
- mov ecx,dword ptr [ebx] ;charge la VMT de l'objet IShellLink en ECX
-
- push dword ptr [ebp-0ch] ;change le dossier d'exécution du fichier référencé
- push ebx
- call dword ptr [ecx+24h]
-
- test eax,eax
- jnz createlink_release_ipersistfile
-
- mov ecx,dword ptr [ebx] ;charge la VMT de l'objet IShellLink en ECX
-
- push dword ptr [ebp+14h] ;change la description du raccourci
- push ebx
- call dword ptr [ecx+1ch]
-
- test eax,eax
- jnz createlink_release_ipersistfile
-
- cmp dword ptr [ebp+04h],18h
- jnz @f
-
- mov ecx,dword ptr [ebx] ;charge la VMT de l'objet IShellLink en ECX
-
- push dword ptr [ebp+18h] ;change les arguments passés au fichier référencé
- push ebx
- call dword ptr [ecx+2ch]
-
- test eax,eax
- jnz createlink_release_ipersistfile
-
- mov ecx,dword ptr [ebx] ;charge la VMT de l'objet IShellLink en ECX
-
- push dword ptr [ebp+20h] ;change l'icône du raccourci
- push dword ptr [ebp+1ch]
- push ebx
- call dword ptr [ecx+44h]
-
- test eax,eax
- jnz createlink_release_ipersistfile
-
- @@:
- test eax,eax
- jnz createlink_end
-
- mov ecx,dword ptr [ebx] ;charge la VMT de l'objet IShellLink en ECX
-
- lea eax,dword ptr [ebp-08h] ;récupère une instance de l'objet IPersistFile
- push eax
- push offset IID_IPersistFile
- push ebx
- call dword ptr [ecx]
-
- cmp eax,80004002h
- jz createlink_release_ishelllink
-
- push 0208h ;convertit la chaîne au format Unicode
- push dword ptr [ebp-0ch]
- push -1
- push dword ptr [ebp+0ch]
- push 0
- push 0
- call MultiByteToWideChar
-
- test eax,eax
- jz createlink_free
-
- mov ebx,[ebp-08h] ;charge l'objet IPersistFile en EBX
- mov ecx,[ebx] ;charge la VMT de l'objet IPersistFile en ECX
-
- push 0 ;sauvegarde le fichier
- push dword ptr [ebp-0ch]
- push dword ptr [ebp-08h]
- call dword ptr [ecx+18h]
-
- createlink_free:
- push dword ptr [ebp-0ch] ;libère la mémoire allouée à la chaîne Unicode
- call LocalFree
-
- createlink_release_ipersistfile:
- mov ecx,[ebx] ;charge la VMT de l'objet IPersistFile en ECX
-
- push ebx ;libère la mémoire allouée à l'objet IPersistFile
- call dword ptr [ecx+08h]
-
- createlink_release_ishelllink:
- mov ebx,dword ptr [ebp-04h] ;charge l'objet IShellLink en EBX
- mov ecx,dword ptr [ebx] ;charge la VMT de l'objet IShellLink en ECX
-
- push ebx ;libère la mémoire allouée à l'objet IShellLink
- call dword ptr [ecx+08h]
-
- createlink_end:
- pop ebx ;restaure EBX
- mov esp,ebp ;enlève les variables locales
- pop ebp ;restaure EBP
-
- pop edx ;enlève les arguments passés à la fonction de la pile
- pop ecx
- add esp,edx
- push ecx
-
- ret
-
- text ends
-
-
- end
;**************************************************************************
; exemple d'utilisation de COM sous MASM32 :
; fonction de création de raccourcis
;
; auteur : gblade
;
; description :
; Ce fichier implémente une fonction de création de raccourcis (fichiers
; link portant l'extention .lnk) via l'architecture COM de Microsoft.
; Les interfaces utilisées sont IShellLink et IPersistFile.
;**************************************************************************
.386 ;instructions du 386
option language:stdcall ;convention stdcall
assume cs:flat,ds:flat,ss:flat,es:flat,fs:flat,gs:flat ;model mémoire win32
include kernel32.inc ;header pour les fonctions de gestions de base
include ole32.inc ;header pour l'utilisation de COM
includelib kernel32.lib ;librairie pour les fonctions de gestions de base
includelib ole32.lib ;librairie pour l'utilisation de COM
includelib uuid.lib ;identificateurs GUID
;***** Importations *****
extrn IID_IPersistFile:dword
;***** Exportations *****
public CreateLink@12
public CreateLinkEx@24
;***** Constantes *****
CLSCTX_INPROC_SERVER equ 01h
;***** Données *****
data segment public
;----- Identificateurs -----
CLSID_ShellLink dd 00021401h
dw 00h,\
00h
db 0C0h,\
00h,\
00h,\
00h,\
00h,\
00h,\
00h,\
46h
IID_IShellLink dd 000214EEh
dw 00h,\
00h
db 0C0h,\
00h,\
00h,\
00h,\
00h,\
00h,\
00h,\
46h
data ends
;***** Code *****
text segment public
CreateLinkEx@24:
push 18h ;empile le nombre d'octets à dépiler en fin de fonction
jmp @f
CreateLink@12:
push 0ch ;empile le nombre d'octets à dépiler en fin de fonction
@@:
push ebp ;réserve la pile
mov ebp,esp
sub esp,10h ;réserve 8 octets de variables locales
push ebx ;sauve EBX pour utilisation future
lea eax,dword ptr [ebp-04h] ;crée une instance de l'objet IShellLink
push eax
push offset IID_IShellLink
push CLSCTX_INPROC_SERVER
push 0
push offset CLSID_ShellLink
call CoCreateInstance
test eax,eax
jnz createlink_end
mov ebx,dword ptr [ebp-04h] ;charge l'objet IShellLink en EBX
mov ecx,dword ptr [ebx] ;charge la VMT de l'objet IShellLink en ECX
push dword ptr [ebp+10h] ;change le chemin du fichier référencé
push ebx
call dword ptr [ecx+50h]
push dword ptr 0208h ;8 octets demandés
push 0 ;mémoire fixe demandée
call LocalAlloc
test eax,eax
jz createlink_release_ishelllink
mov dword ptr [ebp-0ch],eax ;charge la chaîne nouvellement obtenue dans une variable locale
lea eax,dword ptr [ebp-10h] ;récupère le chemin complet et le nom du fichier référencé
push eax
push [ebp-0ch]
push 0208h
push dword ptr [ebp+10h]
call GetFullPathName
mov ecx,dword ptr [ebp-10h] ;charge le nom du fichier en ECX
mov byte ptr [ecx-01h],0 ;retranche du chemin complet le nom du fichier
mov ecx,dword ptr [ebx] ;charge la VMT de l'objet IShellLink en ECX
push dword ptr [ebp-0ch] ;change le dossier d'exécution du fichier référencé
push ebx
call dword ptr [ecx+24h]
test eax,eax
jnz createlink_release_ipersistfile
mov ecx,dword ptr [ebx] ;charge la VMT de l'objet IShellLink en ECX
push dword ptr [ebp+14h] ;change la description du raccourci
push ebx
call dword ptr [ecx+1ch]
test eax,eax
jnz createlink_release_ipersistfile
cmp dword ptr [ebp+04h],18h
jnz @f
mov ecx,dword ptr [ebx] ;charge la VMT de l'objet IShellLink en ECX
push dword ptr [ebp+18h] ;change les arguments passés au fichier référencé
push ebx
call dword ptr [ecx+2ch]
test eax,eax
jnz createlink_release_ipersistfile
mov ecx,dword ptr [ebx] ;charge la VMT de l'objet IShellLink en ECX
push dword ptr [ebp+20h] ;change l'icône du raccourci
push dword ptr [ebp+1ch]
push ebx
call dword ptr [ecx+44h]
test eax,eax
jnz createlink_release_ipersistfile
@@:
test eax,eax
jnz createlink_end
mov ecx,dword ptr [ebx] ;charge la VMT de l'objet IShellLink en ECX
lea eax,dword ptr [ebp-08h] ;récupère une instance de l'objet IPersistFile
push eax
push offset IID_IPersistFile
push ebx
call dword ptr [ecx]
cmp eax,80004002h
jz createlink_release_ishelllink
push 0208h ;convertit la chaîne au format Unicode
push dword ptr [ebp-0ch]
push -1
push dword ptr [ebp+0ch]
push 0
push 0
call MultiByteToWideChar
test eax,eax
jz createlink_free
mov ebx,[ebp-08h] ;charge l'objet IPersistFile en EBX
mov ecx,[ebx] ;charge la VMT de l'objet IPersistFile en ECX
push 0 ;sauvegarde le fichier
push dword ptr [ebp-0ch]
push dword ptr [ebp-08h]
call dword ptr [ecx+18h]
createlink_free:
push dword ptr [ebp-0ch] ;libère la mémoire allouée à la chaîne Unicode
call LocalFree
createlink_release_ipersistfile:
mov ecx,[ebx] ;charge la VMT de l'objet IPersistFile en ECX
push ebx ;libère la mémoire allouée à l'objet IPersistFile
call dword ptr [ecx+08h]
createlink_release_ishelllink:
mov ebx,dword ptr [ebp-04h] ;charge l'objet IShellLink en EBX
mov ecx,dword ptr [ebx] ;charge la VMT de l'objet IShellLink en ECX
push ebx ;libère la mémoire allouée à l'objet IShellLink
call dword ptr [ecx+08h]
createlink_end:
pop ebx ;restaure EBX
mov esp,ebp ;enlève les variables locales
pop ebp ;restaure EBP
pop edx ;enlève les arguments passés à la fonction de la pile
pop ecx
add esp,edx
push ecx
ret
text ends
end
Conclusion
bug éventuel du a l'utilisation des icones (ce n'est aps de moi mais des fois windows va refuser de prendre en compte une icone alors que la fonction reussi sans erreur)
je rappelle juste qu'en raison de la nature de la fonction, le programme doit faire un appel a CoInitialize et CoUninitialize avant et apres la fonction
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
974 Application Server (12.2.4.0)974 APPLICATION SERVER (12.2.4.0)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP mySongBook Player (1.0.0)MYSONGBOOK PLAYER (1.0.0)mySongBook Player est un logiciel gratuit permettant l'accès à une archive de tablatures/partitio... Cliquez pour télécharger mySongBook Player
|