Código
format PE GUI 4.0 DLL entry DllEntryPoint include 'win32a.inc' section '.code' code readable executable struct SHELLEXECUTEINFO cbSize dd ? fMask dd ? hwnd dd ? lpVerb dd ? lpFile dd ? lpParameters dd ? lpDirectory dd ? nShow dd ? hInstApp dd ? lpIDList dd ? lpClass dd ? hKeyClass dd ? dwHotKey dd ? hIconOrMonitor dd ? hProcess dd ? ends proc DllEntryPoint hinstDLL,fdwReason,lpvReserved mov eax,TRUE ret endp proc ShowProp filepath mov [sei.cbSize], sizeof.SHELLEXECUTEINFO mov [sei.fMask], SEE_MASK_NOCLOSEPROCESS or SEE_MASK_INVOKEIDLIST mov [sei.lpVerb], prop mov ecx, [filepath] mov [sei.lpFile], ecx mov [sei.nShow], 1 invoke ShellExecuteEx, sei ret endp section '.data' data readable writeable SEE_MASK_NOCLOSEPROCESS = 0x00000040 SEE_MASK_INVOKEIDLIST = 0x0000000C prop db "properties",0 sei SHELLEXECUTEINFO section '.idata' import data readable writeable library shell32,'SHELL32.DLL' import shell32,ShellExecuteEx,'ShellExecuteEx' section '.edata' export data readable export 'ShowProperties.dll', ShowProp, 'ShowProp' section '.reloc' fixups data discardable
pero el mismo no compila. Al hacer unas pruebas (esto es, comentar lineas hasta que no me aparecieran mas errores) descubri que el problema esta en las lineas 41 y 42 al intentar asignar cadenas a los campos lpVerb y lpFile del struct SHELLEXECUTEINFO y sin importar como lo haga, el compilador siempre muestra algun error. ¿Que estoy haciendo mal? Por cierto, estos son los errores que me aparecen:
Linea | Modificación | Error que aparece |
41 | mov[sei.lpVerb],prop | invalid use of symbol. |
41 | mov [sei.lpVerb], "properties" | value out of range. |
42 | mov [sei.lpFile], filepath | invalid value. |
37 y 42 | proc ShowProp filepath* y mov [sei.lpFile], filepath (con y sin * al final) | extra characters on line. (en endp) |
Edit varios días después: Ya arregle ese problema que aparecía al ejecutar la función (eso de "access violation writing ..."). Abajo explico como lo logre.