Какие функции лучше использовать чтобы переименовать файл и при этом избежать совпадения? Типа If File Exist = file10 then rename to file12 Или как сгенерировать CLSID полд асмом, чтобы в него переименовать файл? Вобшем не знаю, наверное есть простое решение, подскажите.
А любой другой хэш (от файла) не устроит? SHA-160, например. Быстрый (32 bits) Hsieh hash почти не дает коллизий. http://www.azillionmonkeys.com/qed/hash.html
Semiono Не обязательно избегать совпадения. Пусть, нужно переименовать файл в "uniquefilename_0.txt". Делаем MoveFile и, если в ответ получаем ERROR_ALREADY_EXISTS, то инкрементируем счётчик (получаем "uniquefilename_1.txt") и повторяем процедуру. Выходим из цикла, когда MoveFile возвращает успех. По обстоятельствам вместо инкрементирования, начиная с нуля, в качестве числового суффикса можно брать результат работы rdtsc.
Код (Text): include '%fasm%/win64ax.inc' section '.code' executable start: sub rsp,8 invoke ExpandEnvironmentStrings,'%SystemDrive%\HashTab.dll',a1,MAX_PATH invoke ExpandEnvironmentStrings,'%SystemDrive%\1',a2,MAX_PATH mov [lpFileOp.pFrom],a1 @@: invoke lstrcat,a2,a3 mov [lpFileOp.pTo],a2 mov [lpFileOp.wFunc],FO_RENAME mov [lpFileOp.fFlags],FOF_SILENT + FOF_FILESONLY invoke SHFileOperation,lpFileOp cmp eax,NULL jz exit inc [a3] jmp @r exit: invoke ExitProcess,NULL FO_RENAME = 0x0004 FOF_SILENT = 0x0004 FOF_FILESONLY = 0x0080 section '.data' readable writeable a1 rd MAX_PATH a2 rd MAX_PATH a3 db '2' struct LPSHFILEOPSTRUCT hwnd dq NULL wFunc dq NULL pFrom dq NULL pTo dq NULL fFlags dq NULL fAnyOperationsAborted dq NULL hNameMappings dq NULL lpszProgressTitle dq NULL ends lpFileOp LPSHFILEOPSTRUCT section '.idata' import readable library kernel32,'KERNEL32.DLL',shell32,'SHELL32.DLL' include '%fasm%/api/kernel32.inc' include '%fasm%/api/shell32.inc' Вот такой вот код. Круче не смог придумать. а что память нельзя инкримминировать? inc [a3] пишут, что надо через регистр... 0_o
Semiono Тогда возможно дело в том, что ты пишешь под x64 и надо явно указать, что a3 у тебя байт, а не 8-ми байтовое. Хотя странно все это.