Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Копирование занятых файлов  (Прочитано 7809 раз)
0 Пользователей и 1 Гость смотрят эту тему.
assch
Интересующийся

ru
Offline Offline

« : 16-02-2011 23:51 » 

На сайте 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
Буду признателен любой информации по этой теме
Записан
darkelf
Молодой специалист

no
Offline Offline

« Ответ #1 : 17-02-2011 06:29 » 

Как вариант - написать нужное значение в виде
FSCTL_GET_RETRIEVAL_POINTERS equ <значение>
в своём заголовочном файле или в текущем, но до использования.
Записан
assch
Интересующийся

ru
Offline Offline

« Ответ #2 : 17-02-2011 15:59 » 

В коде находяться две структуры которых в 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
Кто сталкивался с этим подскажите пожалуйста
« Последнее редактирование: 17-02-2011 16:05 от RXL » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines