Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2011, 03:18   #1
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию Копирование занятых файлов

На сайте wasm.ru прочитал статью "3 метода работы с занятыми файлами"
Там вместе со статьёй даны и исходники но только к сожелению на языке С
Мне пондравился способ номер 3 "Чтение файла с помощью прямого доступа к диску"
Я ради интереса попытался перевести это на ассемблер (masm32) но к сожелению встал
на функции DeviceIoControl Вторым параметром этой функции указана константа
FSCTL_GET_RETRIEVAL_POINTERS но в masm32 такой константы нет В библиотеке MSDN
она есть только как её пристроить в код на masm32 я к сожелению так и не понял
Алгоритм кода который дан в статье описывается такой дословно:
"На выходе этой функции мы имеем массив описывающий кластеры файла и число этих кластеров, теперь можно легко скопировать файл"
Может кто работал с этой функцией в этом направлении то было бы не плохо если бы подсказали
Там конечно вместе со статьёй даны и исполняемые файлы но хочется ради интереса перебросить это на ассемблер (masm32)
Статья правда дотирована 22.12.2005 Может уже давно придумали другие способы было бы интересно узнать
ссылка на статью http://www.wasm.ru/article.php?article=lockfileswork
Буду признателен любой информации по этой теме
assch вне форума Ответить с цитированием
Старый 17.02.2011, 03:30   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

FSCTL_GET_RETRIEVAL_POINTERS = 0x00090073
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 17.02.2011, 03:37   #3
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию

Спасибо попробую
Не подскажешь как правильно для masm32 записать это значение
а то попробывал записать так
FSCTL_GET_RETRIEVAL_POINTERS equ 0x00090073
masm32 не принимает такую форму записи
assch вне форума Ответить с цитированием
Старый 17.02.2011, 03:39   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

не силён в масмах. попробуй 00090073h вместо 0x00090073.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 17.02.2011, 03:42   #5
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию

Вроде нормально
Спасибо буду пробывать
assch вне форума Ответить с цитированием
Старый 17.02.2011, 13:07   #6
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Программка на васме LoveHDD(запись и чтение секторов)+посмотрите эти функции для составления таблицы расположения файла по секторам из вышеобозначенной статьи
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 17.02.2011, 13:24   #7
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

assch
FSCTL_GET_RETRIEVAL_POINTERS equ 0x00090073 так можно только в FASM'e или в NASM'e а для MASM или TASM только 90073h
Mikl___ вне форума Ответить с цитированием
Старый 17.02.2011, 14:18   #8
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию

yuran666666
Не подскажешь где можно скачать LoveHDD
В интернете я нашёл пока то что дословно:
Программа демонстрирует низкоуровневое обращения к винчестеру с помощью стпндартного API из usermode. Автор программы обладает определённым чувством юмора, поэтому демонстрация происходит посредством стирания содержимого из первых 4000 секторов на диске C, так что собственно компилировать и запускать программу не рекомендуется.
assch вне форума Ответить с цитированием
Старый 17.02.2011, 14:47   #9
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию

Извиняюсь что сразу не сообразил
Нашёл на этом же сайте
Спасибо за информацию
буду тестить
assch вне форума Ответить с цитированием
Старый 17.02.2011, 18:54   #10
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию

В коде находяться две структуры которых в masm32 нет (или не там искал)
Первая - STARTING_VCN_INPUT_BUFFER
В MSDN эта структура описывается так:

Код:
typedef struct {
  LARGE_INTEGER StartingVcn;
} STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER;
По анологии со структурами в masm32 это получается кажется так:

Код:
STARTING_VCN_INPUT_BUFFER STRUCT
  StartingVcn      LARGE_INTEGER <>
STARTING_VCN_INPUT_BUFFER ENDS
Вторая - RETRIEVAL_POINTERS_BUFFER
В MSDN эта структура описывается так:

Код:
typedef struct RETRIEVAL_POINTERS_BUFFER {
  DWORD         ExtentCount;
  LARGE_INTEGER StartingVcn;
  struct {
    LARGE_INTEGER NextVcn;
    LARGE_INTEGER Lcn;
  } Extents[1];
} RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
По анологии со структурами в masm32 это получается кажется так:

Код:
RETRIEVAL_POINTERS_BUFFER STRUCT
  ExtentCount     DWORD      ?
  StartingVcn     LARGE_INTEGER <>
      struct
         NextVcn  LARGE_INTEGER <>
         Lcn      LARGE_INTEGER <>
      ends
  Extents         BYTE 1 dup(?)
RETRIEVAL_POINTERS_BUFFER ENDS
Больше всего смущает вторая структура,правильно ли я сделал под masm32
Кто сталкивался с этим подскажите пожалуйста

Последний раз редактировалось assch; 17.02.2011 в 19:01.
assch вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование файлов Demien Общие вопросы Delphi 9 26.03.2010 08:52
Копирование файлов critical Microsoft Office Excel 4 02.07.2009 14:45
Копирование файлов Hacker19_90 Общие вопросы C/C++ 0 19.05.2009 19:24
Копирование файлов VadEr Помощь студентам 4 06.04.2009 18:49
Копирование файлов Devil_uu Помощь студентам 2 24.03.2007 20:27