Страница: 1 | 2 | 3 |
Вопрос: NTFS - сжатый, зашифрованный.
Добавлено: 17.07.04 23:41
Автор вопроса: NorN | Web-сайт:
Пожалуйста, подскажите, как считать атрибут шифрованый и сжатый (NTFS).
Спасибо!
Ответы
Всего ответов: 33
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 17.07.04 23:49
Исппользуй GetFileAttributes, а флажки тебе вот такие помогут:
- FILE_ATTRIBUTE_COMPRESSED
- FILE_ATTRIBUTE_ENCRYPTED
Номер ответа: 2
Автор ответа:
NorN
Вопросов: 7
Ответов: 15
Web-сайт:
Профиль | | #2
Добавлено: 19.07.04 15:50
Ну, а дальше? При использовании GetFileAttributes я получаю число из нескольких атрибутов и что мне с ним делать, как определить кто стоит? Перебором чтоли?
Номер ответа: 3
Автор ответа:
Андрей Никитин
ICQ: 325172082
Вопросов: 3
Ответов: 81
Профиль | | #3
Добавлено: 19.07.04 16:25
Проверкой флажков. Вот, например:
Dim fa as Long
fa = GetFileAttributes("c:\autoexec.bat"
If (fa And FILE_ATTRIBUTE_ENCRYPTED) Then MsgBox "Файл зашифрован"
Номер ответа: 4
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #4
Добавлено: 19.07.04 16:35
Не уверен, но скорее всего правильней было бы так:
If (fa And FILE_ATTRIBUTE_ENCRYPTED) = FILE_ATTRIBUTE_ENCRYPTED Then...
Если я не прав, поправьте... но по-идее должно быть так...
Номер ответа: 5
Автор ответа:
Андрей Никитин
ICQ: 325172082
Вопросов: 3
Ответов: 81
Профиль | | #5
Добавлено: 19.07.04 16:40
>to sne: как раз так как я написал (я проверил).
If (fa And FILE_ATTRIBUTE_ENCRYPTED) проверяет установленные разряды (типа побитового сравнения) и возвращает True, если разряды (то бишь флажок) установлен...
Номер ответа: 6
Автор ответа:
Андрей Никитин
ICQ: 325172082
Вопросов: 3
Ответов: 81
Профиль | | #6
Добавлено: 19.07.04 16:44
вдогонку: Помнится об этом еще CyRax писал:
fa Or FILE_ATTRIBUTE_ENCRYPTED - устанавливает разряды
fa Xor FILE_ATTRIBUTE_ENCRYPTED - сбрасывает разряды (а может инвертирует ?)
fa And FILE_ATTRIBUTE_ENCRYPTED - проверяет, что разряды установлены в 1
Номер ответа: 7
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #7
Добавлено: 19.07.04 17:06
Вообще то я думал что булевая операция для AND основывается на флагах.
Usage: AND dest,src
Modifies flags: CF OF PF SF ZF (AF undefined)
Performs a logical AND of the two operands replacing the destination
with the result.
Наверное я ошибался. Скорее всего она работает с числами.
Хотя наверное по флагу джамп можно сделать.
Короче два варианта. VB либо проверяет число либо флаги.
Можно дизассемблировать прогу и глянуть.
Номер ответа: 8
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #8
Добавлено: 19.07.04 17:08
Под булевой операцией я подразумевал это:
fa And FILE_ATTRIBUTE_ENCRYPTED = TRUE/FALSE
Номер ответа: 9
Автор ответа:
Андрей Никитин
ICQ: 325172082
Вопросов: 3
Ответов: 81
Профиль | | #9
Добавлено: 19.07.04 17:23
Нашел фрагмент в MSDN (помимо логического сравнения выполняется также и побитовое):
result = expression1 And expression2
"The AND operator also performs a bitwise comparison of identically positioned bits in two numeric expressions and sets the corresponding bit in result..."
Номер ответа: 10
Автор ответа:
Андрей Никитин
ICQ: 325172082
Вопросов: 3
Ответов: 81
Профиль | | #10
Добавлено: 19.07.04 17:24
вдогонку: выбор вида сравнения логическое/побитовое похоже выбирается из контекста программы
Номер ответа: 11
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #11
Добавлено: 19.07.04 17:28
А по моему это одно и тоже, если конечно не имеются ввиду знаковые биты. Да и они в принципе являются частью числа.
Номер ответа: 12
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #12
Добавлено: 19.07.04 17:37
Андрей, вот как раз как ты написал, это возможны случайные (не)срабатывания...
Сам в математике не силен, но в MSDN с флагами/Аттрибутами работают именно так!
Заметь, при срабатывании что при срабатывании данного условия, возвращаемый результат именно окажется равен той константе, с который ты сравниваешь...
Ну а поскольку конструкция If Then End If явдяется логической, т.е. либо да либо нет, то и данные ей желательно такие подсовывать... а не что в голову приходит
Лично у меня уже сколько раз было такое, что логически все верно, а условие - не срабатывает...
Если же использовать (fa And FILE_ATTRIBUTE_ENCRYPTED) = FILE_ATTRIBUTE_ENCRYPTED, то в качестве возвращаемого резуультата будет либо ложь, либо истина...
сам посмотри:
msgbox (23 and 4)
msgbox ((23 and 4) = 4)
Номер ответа: 13
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #13
Добавлено: 19.07.04 18:00
sne,
if(fa And FILE_ATTRIBUTE_ENCRYPTED) THEN
Такая конструкция правильная. Булевая операция - это только 1/0. Если искомого числа нет, то она вернёт тебе ноль, если есть - не ноль.
Несрабатывания врядли тут могут быть. Разве что глюк VB.
Dim IsPresent As Boolean
IsPresent = 7 And 4
MsgBox IsPresent
IsPresent = 8 And 4
MsgBox IsPresent
if(fa And FILE_ATTRIBUTE_ENCRYPTED) - это то же что If TRUE THEN
Номер ответа: 14
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #14
Добавлено: 19.07.04 18:04
или
if (fa And FILE_ATTRIBUTE_ENCRYPTED)<>0 Then
Номер ответа: 15
Автор ответа:
Андрей Никитин
ICQ: 325172082
Вопросов: 3
Ответов: 81
Профиль | | #15
Добавлено: 19.07.04 18:10
>to sne: Считаю что ты тоже прав
------------
X=23 ' 10111
Y=4 ' 100
X and Y - конечно вернет 100 (4) ведь проверяются все биты входящие в Y.
------------
а насчет логической формы выражения:
If (fa And FILE_ATTRIBUTE_ENCRYPTED) then ...
даже не могу тебе с ходу аргументы представить (клинит что-то, никак не могу представить процесс сравнения и преобразования в логический результат, наверное все же придется взглянуть на дизассемблированный вариант, как сказал CyRax), но это потом и то "может быть"... ))