Не могу найти и удалить

Тема в разделе "WASM.BEGINNERS", создана пользователем Semiono, 4 ноя 2011.

  1. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Код (Text):
    1. include '%fasm%/win64ax.inc'
    2. section '.code' executable
    3. start:
    4.         sub rsp,8
    5.  
    6.         mov [lpFileOp.wFunc],FO_DELETE
    7.         mov [lpFileOp.fFlags],FOF_SILENT + FOF_NOCONFIRMATION
    8.  
    9.         invoke ExpandEnvironmentStrings,'%ProgramFiles%\Videodeluxe\',goto,MAX_PATH
    10.         invoke ExpandEnvironmentStrings,'%ProgramFiles%\Videodeluxe\_msi_keyfile_*',expr,MAX_PATH
    11.         invoke FindFirstFile,expr,find
    12.         invoke lstrcat,goto,find.cFileName
    13.         invoke MessageBox,NULL,goto,'',MB_OK
    14.         mov [root],eax
    15.  
    16.         mov [lpFileOp.pFrom],goto
    17.         invoke SHFileOperation,lpFileOp
    18.         cmp eax,NULL
    19.         jnz exit
    20. @@:
    21.         invoke ExpandEnvironmentStrings,'%ProgramFiles%\Videodeluxe\',goto,MAX_PATH
    22.         invoke FindNextFile,[root],find
    23.         cmp eax,NULL
    24.         je exit
    25.         invoke lstrcat,goto,find.cFileName
    26.         invoke MessageBox,NULL,goto,'',MB_OK
    27.         mov [lpFileOp.pFrom],goto
    28.         invoke SHFileOperation,lpFileOp
    29.         jmp @r
    30.         invoke FindClose,[root]
    31. exit:
    32.         invoke ExitProcess,NULL
    33.  
    34.         FO_DELETE = 0x0003
    35.         FOF_SILENT = 0x0004
    36.         FOF_NOCONFIRMATION = 0x0010
    37.  
    38. section '.data' readable writeable
    39.  
    40.         expr rd MAX_PATH
    41.         goto rd MAX_PATH
    42.         root dd NULL
    43.  
    44.         find WIN32_FIND_DATA
    45.  
    46. struct SHFILEOPSTRUCT
    47.  
    48.         hwnd dq NULL
    49.         wFunc dq NULL
    50.         pFrom dq MAX_PATH dup NULL
    51.         pTo dq MAX_PATH dup NULL
    52.         fFlags dq NULL dup NULL
    53.         fAnyOperationsAborted dd NULL
    54.         hNameMappings dd NULL
    55.         lpszProgressTitle dd NULL
    56. ends
    57.         lpFileOp SHFILEOPSTRUCT
    58.  
    59. section '.idata' import readable
    60.  
    61.         library kernel32,'KERNEL32.DLL',shell32,'SHELL32.DLL',user32,'USER32.DLL'
    62.         include '%fasm%/api/kernel32.inc'
    63.         include '%fasm%/api/shell32.inc'
    64.         include '%fasm%/api/user32.inc'
    Что-то кажись со структурой, когда меняю дворды на кворды начинает работать но криво, то есть флаг FOF_NOCONFIRMATION игнорируется тогда. Помогите!
    Если есть код получше, подскажите.
     
  2. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    DeleteFile, кстати, здесь работает, хотя SHFileOperation удобнее тем что удаляет всё невзирая на аттрибуты.
     
  3. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Код (Text):
    1. include '%fasm%/win64ax.inc'
    2. section '.code' executable
    3. start:
    4.         invoke ExpandEnvironmentStrings,'%ProgramFiles%\Videodeluxe\_msi_keyfile_*',open,MAX_PATH
    5.         invoke ExpandEnvironmentStrings,'%ProgramFiles%\Videodeluxe\',temp,MAX_PATH
    6.  
    7.         invoke FindFirstFile,open,find
    8.         mov [root],eax
    9.         invoke lstrcat,temp,find.cFileName
    10.         invoke SetFileAttributes,temp,FILE_ATTRIBUTE_NORMAL
    11.         invoke DeleteFile,temp
    12.         cmp eax,NULL
    13.         jnz start
    14. exit:
    15.         invoke FindClose,[root]
    16.         invoke ExitProcess,NULL
    17.  
    18.         FILE_ATTRIBUTE_NORMAL = 128
    19.  
    20. section '.data' readable writeable
    21.  
    22.         open rd MAX_PATH
    23.         temp rd MAX_PATH
    24.         root dd NULL
    25.  
    26.         find WIN32_FIND_DATA
    Как вам код? Может ли какой нибудь косяк вылезти? Это ничего что я FindNextFile вообще не использую?
    Эх ещё бы поиск рекурсивный тут придумать :\
     
  4. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Что-то до меня FindFirstFileEx так туго доходит, если она рекурсивная то хоть имеет смысл, а так что я зря сижу бьюсь над ней.
    enum _FINDEX_INFO_LEVELS
    и что это структура или что? 0_0
    небось просто числа 1,2,3
     
  5. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Код (Text):
    1.         invoke ExpandEnvironmentStrings,'cmd.exe /c del /f /s /q /a rsh "%ProgramFiles%\Videodeluxe\_msi_keyfile_*"',args,MAX_PATH
    2.         invoke WinExec,args,SW_HIDE
    как же это всётаки cmd.exe делает :)