Изменить атрибуты файла на недопустимые(или нестандартные)

Тема в разделе "WASM.BEGINNERS", создана пользователем REt_v, 21 ноя 2009.

Статус темы:
Закрыта.
  1. REt_v

    REt_v New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2009
    Сообщения:
    4
    Здравствуйте!
    вот программа дающая атрибут файлу "скрытый"
    Код (Text):
    1. CSEG segment
    2. org 100h
    3.  
    4. Begin:
    5.         mov ax,4301h
    6.         mov dx,offset File
    7.         mov cx,2
    8.         int 21h
    9.         jc exit  
    10.         File db 'C:\my_file.txt',0  
    11.         exit: ret      
    12.          
    13. CSEG ends
    14. end Begin
    т.е. значение атрибута становится 0x02.....
    я пробовал как то сделать атрибут 0х40, но у меня ничего не вышло... пожалуйста подскажите как это можно сделать?...
     
  2. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    Тут где то была статья про доступ к файлам тремя способами, вот если прочитать и хорошо подумать, то можно наловчиться напрямую считывать кластера, в которых лежит каталог, а затем перебирать в нем кусочки по 32 байта и искать нужный, соответствующий заданнному файлу. И там уж творить с атрибутами что угодно. Заодно и имя можно сделать кривое, с двоеточиями и слэшами.
     
  3. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    REt_v Твоя программа для ДОС. В Виндах она работает в "виртуальном ДОС" и может менять только то, что разрешено.
     
  4. REt_v

    REt_v New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2009
    Сообщения:
    4
    Но ведь вручную можно изменить hex редактором это значение и под виндой... по этому я и думаю что способ должен быть
     
  5. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    REt_v
    Почему бы тогда не написать 32битное приложение?
     
  6. REt_v

    REt_v New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2009
    Сообщения:
    4
    но я незнаю каким способом можно изменить атрибуты(на недопустимые) программно ((
     
  7. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Код (Text):
    1. #include <windows.h>
    2. int main(){
    3.  
    4.  
    5.  
    6.  if (0X00000001 == GetFileAttributes ("messagebox.exe") ||
    7.      0X00000003 == GetFileAttributes ("messagebox.exe") ||
    8.      0X00000005 == GetFileAttributes ("messagebox.exe") ||
    9.      0X00000007 == GetFileAttributes ("messagebox.exe") ) {
    10.      SetFileAttributes ("messagebox.exe", FILE_ATTRIBUTE_NORMAL);  
    11.  }
    12.  
    13.  
    14.  //Ïîñëå ýòîãî îòêðûâàåì
    15.  HANDLE hFile=CreateFile("messagebox.exe",GENERIC_READ|GENERIC_WRITE ,FILE_SHARE_WRITE,
    16.                         NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    17.  
    18.  if (hFile== INVALID_HANDLE_VALUE) {
    19.   printf ("CreateFile zavershilas oshibkoi\n");
    20.   system ("PAUSE");
    21.   return 0;
    22.  }
    23.  else {
    24.   printf ("hFile= %x\n", hFile);
    25.   system ("PAUSE");
    26.   return 0;
    27.  }
    28.  
    29.  getchar ();
    30. return 0;
    31. }
    Вот прога, которая ссмотрит, как ие атрибуты у файла messagebox.exe
    Если одно из четырёх значений, то она его изменяет на FILE_ATTRIBUTE_NORMAL
    После этого открывает (запись-чтение)
    Для открытия предпочтительно, всё-таки использовать функцию OpenFile, поскольку файл УЖЕ СОЗДАН
    А у твоего файла, я так понимаю, наоборот, атрибуты нормальные и х надо заменить.

    Если так, то здесь
    http://vsokovikov.narod.ru/New_MSDN_API/Menage_files/fn_setfileattributes.htm
    прочтёшь как менять атрибуты файла, на том же сайте смотри и про остальные упомянутые API-функции.
    Если понадобятся числовые значения выражений, ищи их у себя в папке include, в среде программирования.
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    пример того, как не надо писать код :)
     
  9. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Да я уж понял, что бы я не написал, всё плохо будет.
    Кстати, я нормально написал. Всё понятно и читаемо.
     
  10. REt_v

    REt_v New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2009
    Сообщения:
    4
    FILE_ATTRIBUTE_DEVICE - Зарезервировано; не используется.
    это же и есть 0х40.......SetFileAttributes его не желает выстовлять ((
     
  11. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    ты про форматирование или про что?
     
  12. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Да он от нече делать, я же говорю, чтобы я не написал, всё плохо будет.
    Хотя нормальные пацына (как ты) понять не могу- к чему, тут собсно, придираться?
     
  13. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    как минимум CloseHandle пацаны
     
  14. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    про всё :)
    Например, магические константы, которые автор кода уже через неделю забудет.
    4х-кратный вызов GetFileAttributes() тоже очень мило.
    Да и можно было вместо 4х условий писать одно.
    И так практически в каждой строчке кода.
     
  15. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    По константы никто не просит его запоминать.
    Просто я, когда вижу осмысленные слова (типа) всегда лезу смотреть, что они означают, в смысле, какие цифры. Мне так проще.

    ...Это и есть одно условие. Не знаю, где ты там четыре увидел.
    А CloseHandle- так он и так закроется, хэндл-то. Сразу же после <Enter>.
    ...Хотелось бы всё таки по КАЖДОЙ строчке поговорить.
    Напрмер, что тебье не нравится в строчках

    Код (Text):
    1. HANDLE hFile=CreateFile("messagebox.exe",GENERIC_READ|GENERIC_WRITE ,FILE_SHARE_WRITE,
    2.                         NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    Нет, я жду!
     
  16. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Я-то хоть что-то написал, а ты только критиковать можешь.
     
  17. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    хехе, хоть что-то.
    И пофиг, что абсолютно не по теме и не отвечает на вопросы автора, зато хоть что-то.
    По предыдущим топикам я вижу, что спор ни к чему не приведет. Ты не принимаешь аргументы, не умешь слушать оппонента, да и вообще пропускаешь посты, которые тебе почему-то не понравились. Зачем мне тратить буквы?
     
  18. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Ты сказал "практически в каждой строчке кода"
    По моему скудоумию это процентов 70 строчек всего кода.

    Давай говори что там вот я дал тебе строчку, говори, что в ней не так.
     
  19. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Короче, я на тебя пожалуюсь.
     
  20. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    только подтверждаешь мои слова :)
     
Статус темы:
Закрыта.