Монтируем диск: программная замена mountvol — Хакер

Что такое платформы

Аппаратная платформа – это набор совместимого оборудования, на котором можно запускать программные приложения. Каждая конкретная аппаратная платформа имеет свой собственный машинный язык, и программы должны создаваться специально для платформы, которая включает стандартизированный тип процессора и связанные с ним аппаратные компоненты.

Информация об операционной системе

Ошибки mountvol.exe могут появляться в любых из нижеперечисленных операционных систем Microsoft Windows:

  • Windows 10
  • Windows 8.1
  • Windows 7
  • Windows Vista
  • Windows XP
  • Windows ME
  • Windows 200

РЕКОМЕНДУЕМЫЕ:Оптимизируйте свой компьютер и устраняйте ошибки с помощью этого простого исправления для Windows!

Что такое mountvol.exe?

mountvol.exe это исполняемый файл, который является частью Платформы разработанный Microsoft, Версия программного обеспечения для Windows: 1.0.0.0 обычно 9488 в байтах, но у вас может отличаться версия.

Расширение .exe имени файла отображает исполняемый файл. В некоторых случаях исполняемые файлы могут повредить ваш компьютер. Пожалуйста, прочитайте следующее, чтобы решить для себя, является ли mountvol.exe Файл на вашем компьютере – это вирус или вредоносная программа, которую вы должны удалить, или, если это действительно допустимый файл операционной системы Windows или надежное приложение.

Рекомендуется: Выявление проблем, связанных с mountvol.exe.(опциональное предложение для Reimage – Cайт | Лицензионное соглашение | Персональные данные | Удалить)

Директории. логическая структура файлового архива

Файловая система на диске представляет собой иерархическую структуру, которая организована за счет наличия специальных файлов – каталогов (директорий). Каталоги имеют один и тот же внутренний табличный формат (
рис.
11.1) и обеспечивают многоуровневое наименование файлов.

Запись в каталоге о файле содержит имя файла, некоторые атрибуты (длина имени, временная метка) и ссылку на запись в главной файловой таблице, необходимую для нахождения блоков файла.

В итоге, файловая система на диске образует хорошо известную древовидную структуру (
рис.
11.2), где нет циклов (если отсутствуют ссылки и точки монтирования) и путь от корня к файлу однозначно определяет файл.

Поскольку имена файлов, находящихся в разных каталогах, могут совпадать, уникальность имени файла на диске обеспечивается добавлением к собственному имени файла списка вложенных каталогов, содержащих данный файл.

Так образуется хорошо известное абсолютное или полное имя (pathname), например, GamesHeroesheroes.exe. Таким образом, использование древовидных каталогов минимизирует сложность назначения уникальных имен.

Чтобы иметь возможность работать с собственными именами файлов, используют концепцию рабочей или текущей директории, которая обычно входит в состав атрибутов процесса, работающего с данным файлом. Тогда на файлы в такой директории можно ссылаться только по имени. Кроме того ОС поддерживает обозначения ‘.’ – для текущей директории и ‘..’ – для родительской.

В системе поддерживается большое количество Win32-функций для манипуляции с каталогами, их полный перечень имеется в MSDN. В частности, для создания каталогов можно использовать функцию CreateDirectory.

Вновь созданная директория включает записи с именами ‘.’ и ‘..’, однако считается пустой. Для работы с текущим каталогом можно использовать функции GetCurrentDirectory и SetCurrentDirectory. Работа с этими функциями проста и не нуждается в специальных разъяснениях.

Защита файлов

Защита файлов от несанкционированного использования основана на том, что доступ к файлу зависит от идентификатора пользователя. Система контроля доступа предполагает наличие у каждого файла дескриптора защиты, содержащего список прав доступа, который формирует владелец файла и который входит в состав атрибута SecurityAttributes файла.

Список прав доступа содержит набор идентификаторов пользователей, имеющих право на доступ к файлу, и их права в отношении этого файла. Маркер доступа содержит идентификатор владельца процесса.

Система контроля доступа в момент открытия файла проверяет соответствие прав владельца процесса с теми, которые перечислены в списке прав доступа к файлу. В результате доступ может быть разрешен или отклонен.

Во время выполнения операций чтения, записи и других, проверок прав доступа уже не производится.

В новых версиях NTFS дескрипторы защиты всех файлов хранятся в отдельном файле метаданных $Secure, который описывается 9-й записью главной файловой таблицы тома MFT (консолидированная защита).

Более подробно защита от несанкционированного доступа описана в части V данного курса.

Как исправить mountvol.exe

Аккуратный и опрятный компьютер – это один из лучших способов избежать проблем с mountvol.exe. Это означает выполнение сканирования на наличие вредоносных программ, очистку жесткого диска cleanmgr и ПФС / SCANNOWудаление ненужных программ, мониторинг любых автозапускаемых программ (с помощью msconfig) и включение автоматических обновлений Windows. Не забывайте всегда делать регулярные резервные копии или хотя бы определять точки восстановления.

Если у вас возникла более серьезная проблема, постарайтесь запомнить последнее, что вы сделали, или последнее, что вы установили перед проблемой. Использовать resmon Команда для определения процессов, вызывающих вашу проблему. Даже в случае серьезных проблем вместо переустановки Windows вы должны попытаться восстановить вашу установку или, в случае Windows 8, выполнив команду DISM.

Чтобы помочь вам проанализировать процесс mountvol.exe на вашем компьютере, вам могут пригодиться следующие программы: Менеджер задач безопасности отображает все запущенные задачи Windows, включая встроенные скрытые процессы, такие как мониторинг клавиатуры и браузера или записи автозапуска.

Единый рейтинг риска безопасности указывает на вероятность того, что это шпионское ПО, вредоносное ПО или потенциальный троянский конь. Это антивирус обнаруживает и удаляет со своего жесткого диска шпионское и рекламное ПО, трояны, кейлоггеры, вредоносное ПО и трекеры.

Могу ли я удалить или удалить mountvol.exe?

Не следует удалять безопасный исполняемый файл без уважительной причины, так как это может повлиять на производительность любых связанных программ, использующих этот файл. Не забывайте регулярно обновлять программное обеспечение и программы, чтобы избежать будущих проблем, вызванных поврежденными файлами.

Лучшая диагностика для этих подозрительных файлов – полный системный анализ с ASR Pro or это антивирус и средство для удаления вредоносных программ, Если файл классифицируется как вредоносный, эти приложения также удаляют mountvol.exe и избавляются от связанных вредоносных программ.

Однако, если это не вирус, и вам нужно удалить mountvol.exe, вы можете удалить Platforms с вашего компьютера, используя его деинсталлятор. Если вы не можете найти его деинсталлятор, то вам может понадобиться деинсталлировать платформы, чтобы полностью удалить mountvol.exe. Вы можете использовать функцию «Установка и удаление программ» на панели управления Windows.

  • 1. в Меню Пуск (для Windows 8 щелкните правой кнопкой мыши в нижнем левом углу экрана), нажмите Панель управления, а затем под Программы:
    o Windows Vista / 7 / 8.1 / 10: нажмите Удаление программы.
    o Windows XP: нажмите Установка и удаление программ.
  • 2. Когда вы найдете программу Платформыщелкните по нему, а затем:
    o Windows Vista / 7 / 8.1 / 10: нажмите Удалить.
    o Windows XP: нажмите Удалить or Изменить / Удалить вкладка (справа от программы).
  • 3. Следуйте инструкциям по удалению Платформы.
:/>  Перезагрузка компьютера из командной строки Windows | Как настроить?

Написание, компиляция и прогон программы, осуществляющей перемещение указателя текущей позиции внутри открытого файла

В качестве самостоятельного упражнения рекомендуется написать программу, которая проиллюстрировала бы перемещение указателя текущей позиции в результате операций чтения, записи и позиционирования. Необходимо также продемонстрировать в программе независимое позиционирование для двух описателей одного и того же файла и зависимое позиционирование для дубликата уже существующего описателя.

Операция позиционирования в случае синхронного доступа к файлу

Итак, в случае асинхронного доступа позиция, начиная с которой будет осуществляться операция чтения-записи, содержится в запросе на операцию (параметр структуры OVERLAPPED ).

Рассмотрим теперь особенности позиционирования при обычном синхронном вводе-выводе. В этом случае реализуется схема с “сохранением состояния”, 64-разрядный указатель текущей для чтения-записи позиции хранится в составе атрибутов объекта “открытый файл” (его не нужно путать с атрибутами файла), описатель которого возвращает функцияCreateFile.

Текущая позиция смещается на конец считанной или записанной последовательности байтов в результате операций чтения или записи. Кроме того, можно установить текущую позицию при помощи Win32-функции SetFilePointer. Например, операция

устанавливает указатель текущей позиции на 17-й байт с начала файла.

Тот факт, что указатель текущей позиции является атрибутом объекта “открытый файл”, а не самого файла, означает, что тот же самый файл можно открыть повторно с другим описателем.

С другой стороны, получив описатель открытого файла, можно его продублировать при помощи Win32- функции DuplicateHandle. В этом случае два разных описателя будут ссылаться на один и тот же объект с одним и тем же указателем текущей позиции.

Пример применения операции асинхронного чтения из файла

Для того чтобы воспользоваться возможностями асинхронного ввода-вывода, нужно вызвать функцию CreateFile с установленным флагом FILE_FLAG_OVERLAPPED, входящим в состав параметра dwFlagsAndAttrs, и указать: с какой позиции осуществлять чтение (запись), сколько байтов считать (записать) и какое событие должно сигнализировать о том, что операция завершена.

Для этого необходимо проинициализировать поля структуры OVERLAPPED в параметре pOverlapped функций ReadFile или WriteFile.

Прогон программы, задача которой создать каталог на диске и сделать его текущим

#include <windows.h>
#include <stdio.h>

void main(void) {

int iRet = 0;
char Buf[512];
int bufSize = 512;

iRet = GetCurrentDirectory(bufSize, Buf);
 printf("iRet = %d, current directory %sn", iRet, Buf);

iRet = CreateDirectory("f:\tmp1", NULL);
 if(!iRet) printf("CreateDirectory errorn");

iRet = SetCurrentDirectory("f:\tmp1");
 if(!iRet) printf("SetCurrentDirectory errorn");

iRet = GetCurrentDirectory(bufSize, Buf);
 printf("iRet = %d, current directory %sn", iRet, Buf);
}

Приведенная программа выводит на экран название текущего каталога, создает каталог “tmp1” на диске “F:” , делает его текущим и выводит на экран его название в качестве текущего каталога.

Прогон программы, осуществляющей асинхронное чтение из уже существующего файла

#include <windows.h>
#include <stdio.h>

void main(void) {

HANDLE hFile, hHeap;
int iRet = 0;
void *pMem;
long BufSize = 512;
DWORD iRead = 10;
char * String;
OVERLAPPED ov = {0};


hFile = CreateFile("MYFILE.TXT", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,                                                          
                    FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); 
if (hFile == INVALID_HANDLE_VALUE) printf("Could not open file.");

hHeap = GetProcessHeap();
pMem = HeapAlloc(hHeap, HEAP_ZERO_MEMORY, BufSize);
String = (char *)pMem;

ov.Offset = 3;

ReadFile(hFile, pMem, iRead, &iRead, &ov);
WaitForSingleObject(hFile, INFINITE);
printf("Read %d bytes: %sn", iRead, String);
printf("Read %d bytes: %sn", ov.InternalHigh, String);

HeapFree(hHeap, 0, pMem);
CloseHandle(hFile); 
}

В программе проинициализирована структура OVERLAPPED и передана функции ReadFile в качестве параметра. Чтение начинается с 3-й позиции.

Узнать число прочитанных байтов можно из ov.InternalHigh – компонента структуры OVERLAPPED. Обратите внимание, что значение переменной iRead, которая должна содержать количество прочтенных байтов, равно 0, так как функция вернула управление до завершения операции ввода-вывода.

Обычно это справедливо для первого запуска программы. При последующих запусках, поскольку данные файла находятся в кэше, запрос может успеть выполниться синхронно и значение iRead уже будет равно числу прочитанных байтов.

В программе выбран простейший вариант синхронизации – сигнализация от объекта, управляющего устройством, в данном случае – открытого файла (функции WaitForSingleObject передан описатель открытого файла в качестве параметра).

Существуют и другие, более интересные способы синхронизации, например, использование порта завершения ввода-вывода ( IoCompletitionPort ). Более подробно возможности асинхронного ввода-вывода описаны в
[
Рихтер
] ,
[
Рихтер, Кларк
] и
[
Харт
] .

Результат работы данной программы практически ничем не отличается от обычного синхронного чтения и в таком виде большого смысла не имеет. Однако если между операциями чтения и синхронизации заставить программу выполнять какую-либо полезную работу, то ресурсы компьютера будут использоваться более эффективно, т.к. процессор и устройство ввода будут работать параллельно.

Программно монтируем диски в директорию – благин константин

В этой статье рассматривается, как программно монтировать жесткие диски в директории. По умолчанию Windows монтирует несъемные носители автоматически, то есть если вы подключаете новый жесткий диск к компьютеру и после загрузки операционной системы, и установки необходимых драйверов, вы можете увидеть его в проводнике.

В операционных системах UNIX существует возможность монтирования жестких дисков в директории, так называемые точки монтирования. Начиная с Windows NT 4.0 в поставку операционной системы входит утилита mountvol.exe, которая через интерфейс командной строки позволяет создавать, удалять и выводит список точек подключения дисков. Результат работы которой вы видите на рисунке:

Программно монтируем диски в директорию

После не продолжительной работы с данной утилитой, мне захотелось реализовать предоставленные возможности самому, программно. Первым шагом, нужно было, выяснить какие API функции использует mountvol.exe, для этого использовалась программа Dependency Walker входящая в состав поставки среды разработки, ниже на рисунке предоставлено основное окно программы с загруженной в нее утилиты mountvol.exe:
Программно монтируем диски в директорию
Из результата работы Dependency Walker мы видим какие API функции использует mountvol.exe. Для создания программы-примера использовалась среда разработки MS Visual C 6.0, тип приложения «Win 32 Console Application».Для начала рассмотрим функций, которые будут использоваться в приложении, и так по порядку:

HANDLE FindFirstVolume(LPTSTR lpszVolumeName,DWORD cchBufferLength);

Данная функция используется для начала сканирования компьютера на наличие томов, возвращаемое значение хендел который используется для последующего поиска, в переменную lpszVolumeName возвращается указатель на буфер, содержащий уникальный индефикатор (GUID) первого найденного тома.

:/>  Как активировать командною строку на экране входа в систему

Для дальнейшего поиска используется функция:

BOOL FindNextVolume(HANDLE hFindVolume, LPTSTR lpszVolumeName, DWORD cchBufferLength);

Первым параметром, которой является хендел, полученный при помощи вызова функции FindFirstVolume, в переменную lpszVolumeName возвращаются последующие найденные индефикаторы(GUID) томов.

Для завершения поиска необходимо осуществить вызов функции:

BOOL FindVolumeClose(HANDLE hFindVolume);

Единственным параметром функции, которой является хендел поиска.

Для определения типа тома использовалась функция:

UINT GetDriveType( LPCTSTR lpRootPathName);

Параметром которой является индефикатор тома, возвращаемое значение:

DRIVE_UNKNOWN Не известный тип
DRIVE_NO_ROOT_DIR Не точек подключения
DRIVE_REMOVABLE Съёмный диск
DRIVE_FIXED Фиксированный диск
DRIVE_REMOTE Удалённый или network диск
DRIVE_CDROM CD-ROM диск
DRIVE_RAMDISK RAM диск

Для определения файловой системы и метки тома использовалась функция:

BOOL GetVolumeInformation(
  LPCTSTR lpRootPathName,
  LPTSTR lpVolumeNameBuffer,
  DWORD nVolumeNameSize,
  LPDWORD lpVolumeSerialNumber,
  LPDWORD lpMaximumComponentLength,
  LPDWORD lpFileSystemFlags,
  LPTSTR lpFileSystemNameBuffer,
  DWORD nFileSystemNameSize);

Первый параметр которой является уникальный индефикатор тома, в параметра lpVolumeNameBuffer возвращается метка тома, в параметр lpFileSystemNameBuffer возвращается указатель на буфер содержащий имя файловой системы.

Мною также был найден еще один способ получения уникальных индефикаторов томов, для этого использовалась связка функций GetLogicalDrives и GetVolumeNameForVolumeMountPoint, подробней о их параметрах:

DWORD GetLogicalDrives(void);

Функция возвращает битовую маску, которая содержит все доступные тома в системе.

BOOL GetVolumeNameForVolumeMountPoint(
  LPCTSTR lpszVolumeMountPoint,
  LPTSTR lpszVolumeName,
  DWORD cchBufferLength);

Функция возвращает уникальный индефикатор тома по его точке монтирования.
На рисунке представлен результат работы этих двух способов:
Программно монтируем диски в директорию
Для удаления точки монтирования использовалась функция:

BOOL DeleteVolumeMountPoint(LPCTSTR lpszVolumeMountPoint);

Параметром которой является точка монтирования.

И самая главная функция по монтированию томов:

BOOL SetVolumeMountPoint(
  LPCTSTR lpszVolumeMountPoint,
  LPCTSTR lpszVolumeName);

Первый параметр которой является точка последующего монтирования, в нашем случае это директория, например “C:\mnt\”, второй параметр это уникальный индефикатор тома.

<strong>Предупреждение:</strong>
Точка куда будет монтироваться том, в нашем случае директория должна быть пустой!!!
На содержимое монтируемого тома это условие не распространяется.

А теперь пробуем все вместе, далее приведен исходный текст программы, которая сначала выводит двумя способами уникальные индефикаторы томов, так же файловую систему, тип тома и метку, дальше она производит демонтирование заданного диска и последующее его монтирование в точку C:\mnt\ после паузы возвращает первоначальную точку.

#include <iostream.h>
#include <windows.h>
#include <conio.h>
 
HANDLE (WINAPI * FindFirstVolume)(LPTSTR,DWORD);
BOOL   (WINAPI * FindNextVolume)(HANDLE,LPTSTR,DWORD);
BOOL   (WINAPI * FindVolumeClose)(HANDLE);
BOOL   (WINAPI * GetVolumeNameForVolumeMountPoint)(LPCTSTR,LPTSTR,DWORD);
BOOL   (WINAPI * DeleteVolumeMountPoint)(LPCTSTR);
BOOL   (WINAPI * SetVolumeMountPoint)(LPCTSTR,LPCTSTR);
 
void ErrorView();
 
int main()
{
        HANDLE hMount;
 
        char szPath[MAX_PATH],
                 szRecvBuff[MAX_PATH 1],
                 szFileSystem[MAX_PATH 1];
 
        HMODULE hmod;
        if((hmod = LoadLibrary("Kernel32.dll")))
        {
                if(!(FindFirstVolume  = (HANDLE(WINAPI *)
                        (LPTSTR,DWORD))GetProcAddress(hmod,"FindFirstVolumeA")))
                {cout<<"Error GetProcAddress...1"<<endl;return -1;}
                if(!(FindNextVolume   = (BOOL(WINAPI *)
                        (HANDLE,LPTSTR,DWORD))GetProcAddress(hmod,"FindNextVolumeA")))
                {cout<<"Error GetProcAddress...2"<<endl;return -1;}
                if(!(FindVolumeClose  = (BOOL(WINAPI *)
                        (HANDLE))GetProcAddress(hmod,"FindVolumeClose")))
                {cout<<"Error GetProcAddress...3"<<endl;return -1;}
                if(!(GetVolumeNameForVolumeMountPoint  = (BOOL(WINAPI *)
                        (LPCTSTR,LPTSTR,DWORD))GetProcAddress(hmod,
                        "GetVolumeNameForVolumeMountPointA")))
                {cout<<"Error GetProcAddress...4"<<endl;return -1;}
                if(!(DeleteVolumeMountPoint  = (BOOL(WINAPI *)
                        (LPCTSTR))GetProcAddress(hmod,"DeleteVolumeMountPointA")))
                {cout<<"Error GetProcAddress...5"<<endl;return -1;}
                if(!(SetVolumeMountPoint  = (BOOL(WINAPI *)
                        (LPCTSTR,LPCTSTR))GetProcAddress(hmod,"SetVolumeMountPointA")))
                {cout<<"Error GetProcAddress...6"<<endl;return -1;}
 
                hMount = FindFirstVolume(szPath,sizeof(szPath));
 
                UINT uin;
 
                if(hMount!=INVALID_HANDLE_VALUE)
                {
                        do
                        {
                                uin = GetDriveType(szPath);
                                if(uin==DRIVE_CDROM)      {cout<<"CDROM: ";}
                                if(uin==DRIVE_UNKNOWN)    {cout<<"UNKNOWN: ";}
                                if(uin==DRIVE_NO_ROOT_DIR){cout<<"NO_ROOT_DIR: ";}
                                if(uin==DRIVE_REMOVABLE)  {cout<<"REMOV: ";}
                                if(uin==DRIVE_FIXED)      {cout<<"FIXED: ";}
                                if(uin==DRIVE_REMOTE)     {cout<<"REMOTE: ";}
                                if(uin==DRIVE_RAMDISK)    {cout<<"RAMDISK: ";}
 
                                GetVolumeInformation(szPath,
                                                                szRecvBuff,
                                                                sizeof(szRecvBuff),
                                                                NULL,NULL,NULL,
                                                                szFileSystem,
                                                                sizeof(szFileSystem));
 
                                cout<<"("<<szRecvBuff
                                      <<"|"<<szFileSystem
                                      <<") "<<szPath<<endl<<endl;  
        
                                ZeroMemory(szRecvBuff,sizeof(szRecvBuff));
                                ZeroMemory(szFileSystem,sizeof(szFileSystem));
 
                        }while(FindNextVolume(hMount,szPath,sizeof(szPath))!=0);
                        
                        FindVolumeClose(hMount);
 
                }else{cout<<"Error FindFirstVolume"<<endl;}
 
                FreeLibrary(hmod);
                
        }else{cout<<"Error LoadLibrary"<<endl;}
                
        ZeroMemory(szRecvBuff,sizeof(szRecvBuff));
        char szDrive[4];DWORD dwID = GetLogicalDrives();
 
        for(int i = 0;i < 26;i  )
        {
           if(((dwID>>i)&0x00000001)==1)
           {
                 szDrive[0] =  char(65 i);
                 szDrive[1] = ':';
                 szDrive[2] = '\';
                 szDrive[3] = 0;
                 GetVolumeNameForVolumeMountPoint(szDrive,
                                                                        szRecvBuff,
                                                                        sizeof(szRecvBuff));
                 cout <<szDrive<<" "<<szRecvBuff<<endl;
 
           }
        }
 
/************************************/
        if(DeleteVolumeMountPoint("G:\"))
        {cout<<"DeleteVolumeMountPoint status:OK"<<endl;}
        else
        {cout<<"DeleteVolumeMountPoint status:ERROR"<<endl;ErrorView();}
        if(SetVolumeMountPoint("C:\mnt\",
                "\\?\Volume{e7aaf23a-8560-11db-97d5-806d6172696f}\"))
        {cout<<"SetVolumeMountPoint status:OK"<<endl;}
        else
        {cout<<"SetVolumeMountPoint status:ERROR"<<endl;ErrorView();}
/////////////////
        cout<<"(PAUSE)Press any key..."<<endl;
        while(!getch());
/////////////////
        if(DeleteVolumeMountPoint("C:\mnt\"))
        {cout<<"DeleteVolumeMountPoint status:OK"<<endl;}
        else
        {cout<<"DeleteVolumeMountPoint status:ERROR"<<endl;ErrorView();}
        if(SetVolumeMountPoint("G:\",
                "\\?\Volume{e7aaf23a-8560-11db-97d5-806d6172696f}\"))
        {cout<<"SetVolumeMountPoint status:OK"<<endl;}
        else
        {cout<<"SetVolumeMountPoint status:ERROR"<<endl;ErrorView();}
/************************************/
 
        cout<<"Press any key to exit..."<<endl;
        while(!getch());
        return 0;
 
}
 
void ErrorView()
{
        LPVOID lpMsgBuf = NULL;
        FormatMessage
        (FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
        NULL,GetLastError(),
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR)&lpMsgBuf, 0, NULL);
        CharToOem((LPTSTR)lpMsgBuf,(LPTSTR)lpMsgBuf);
        cout<<(LPCTSTR)lpMsgBuf<<endl;
        LocalFree(lpMsgBuf);
}

А теперь подробней, по шагам:

HANDLE (WINAPI * FindFirstVolume) (LPTSTR,DWORD);
BOOL   (WINAPI * FindNextVolume) (HANDLE,LPTSTR,DWORD);
BOOL   (WINAPI * FindVolumeClose)(HANDLE);
BOOL   (WINAPI * GetVolumeNameForVolumeMountPoint) (LPCTSTR,LPTSTR,DWORD);
BOOL   (WINAPI * DeleteVolumeMountPoint) (LPCTSTR);
BOOL   (WINAPI * SetVolumeMountPoint) (LPCTSTR,LPCTSTR);

Создаются указатели на прототипы функций для последующей загрузки в них адресов функций.

hmod = LoadLibrary("Kernel32.dll"));

Загружаем необходимую библиотеку.

if(!(FindFirstVolume  = (HANDLE(WINAPI *)
(LPTSTR,DWORD))GetProcAddress(hmod,"FindFirstVolumeA")))
{cout<<"Error GetProcAddress...1"<<endl;return -1;}
if(!(FindNextVolume   = (BOOL(WINAPI *)
(HANDLE,LPTSTR,DWORD))GetProcAddress(hmod,"FindNextVolumeA")))
{cout<<"Error GetProcAddress...2"<<endl;return -1;}
if(!(FindVolumeClose  = (BOOL(WINAPI *)
(HANDLE))GetProcAddress(hmod,"FindVolumeClose")))
{cout<<"Error GetProcAddress...3"<<endl;return -1;}
if(!(GetVolumeNameForVolumeMountPoint  = (BOOL(WINAPI *)
(LPCTSTR,LPTSTR,DWORD))GetProcAddress(hmod,
"GetVolumeNameForVolumeMountPointA")))
{cout<<"Error GetProcAddress...4"<<endl;return -1;}
if(!(DeleteVolumeMountPoint  = (BOOL(WINAPI *)
(LPCTSTR))GetProcAddress(hmod,"DeleteVolumeMountPointA")))
{cout<<"Error GetProcAddress...5"<<endl;return -1;}
if(!(SetVolumeMountPoint  = (BOOL(WINAPI *)
(LPCTSTR,LPCTSTR))GetProcAddress(hmod,"SetVolumeMountPointA")))
{cout<<"Error GetProcAddress...6"<<endl;return -1;}

Далее получаем адреса необходимых нам функций.

hMount = FindFirstVolume(szPath,sizeof(szPath));
UINT uin;
if(hMount!=INVALID_HANDLE_VALUE)
{
        do
        {
                uin = GetDriveType(szPath);
                if(uin==DRIVE_CDROM)      {cout<<"CDROM: ";}
                if(uin==DRIVE_UNKNOWN)    {cout<<"UNKNOWN: ";}
                if(uin==DRIVE_NO_ROOT_DIR){cout<<"NO_ROOT_DIR: ";}
                if(uin==DRIVE_REMOVABLE)  {cout<<"REMOV: ";}
                if(uin==DRIVE_FIXED)      {cout<<"FIXED: ";}
                if(uin==DRIVE_REMOTE)     {cout<<"REMOTE: ";}
                if(uin==DRIVE_RAMDISK)    {cout<<"RAMDISK: ";}
                GetVolumeInformation(szPath, szRecvBuff,
                                                 sizeof(szRecvBuff), NULL,NULL,NULL,
                                                 szFileSystem,sizeof(szFileSystem));
                cout<<"("<<szrecvbuff
                       <<"|"<<szFileSystem
                       <<") "<<szPath<<endl<<endl;  
        
                ZeroMemory(szRecvBuff,sizeof(szRecvBuff));
                ZeroMemory(szFileSystem,sizeof(szFileSystem));
 
        }while(FindNextVolume(hMount,szPath,sizeof(szPath))!=0);
}

Производится поиск томов и вывод информации о них.

ZeroMemory(szRecvBuff,sizeof(szRecvBuff));
char szDrive[4];DWORD dwID = GetLogicalDrives();
for(int i = 0;i < 26;i  )
{
         if(((dwID>>i)&0x00000001)==1)
          {
                 szDrive[0] =  char(65 i);
                 szDrive[1] = ':';
                 szDrive[2] = '\';
                 szDrive[3] = 0;
                 GetVolumeNameForVolumeMountPoint(szDrive,
                                                      szRecvBuff,
                                                     sizeof(szRecvBuff));
                 cout <<szDrive<<" "<<szRecvBuff<<endl;
 
           }
}

Здесь идет вывод информации вторым способом.

if(DeleteVolumeMountPoint("G:\"))
{cout<<"DeleteVolumeMountPoint status:OK"<<endl;}
else
{cout<<"DeleteVolumeMountPoint status:ERROR"<<endl;ErrorView();}

Удаление точки монтирования, после выполнения данного участка кода, утилита mountvol покажет вам следующее:
Программно монтируем диски в директорию
Далее устанавливаем новую точку монтирования:

if(SetVolumeMountPoint("C:\mnt\",
"\\?\Volume{e7aaf23a-8560-11db-97d5-806d6172696f}\"))
{cout<<"SetVolumeMountPoint status:OK"<<endl;}
else
{cout<<"SetVolumeMountPoint status:ERROR"<<endl;ErrorView();}

и смотрим результат работы mountvol а также заходим в точку монтирования C:mnt и видим там содержимое жесткого диска:
Программно монтируем диски в директорию
Ну а теперь возвращаем все как было, для этого следующий участок кода:

if(DeleteVolumeMountPoint("C:\mnt\"))
{cout<<"DeleteVolumeMountPoint status:OK"<<endl;}
else
{cout<<"DeleteVolumeMountPoint status:ERROR"<<endl;ErrorView();}
if(SetVolumeMountPoint("G:\",
"\\?\Volume{e7aaf23a-8560-11db-97d5-806d6172696f}\"))
{cout<<"SetVolumeMountPoint status:OK"<<endl;}
else
{cout<<"SetVolumeMountPoint status:ERROR"<<endl;ErrorView();}

Результат работы программы вы можете видеть на рисунке, в последующем мне хотелось бы создать программу, которая будет для удобства иметь графический интерфейс….
Программно монтируем диски в директорию[/code]

Работа с точками соединения ntfs

Утилита mountvol. С помощью утилиты mountvol.exe можно:

Применяя утилиту mountvol, можно избежать использования большого количества имен устройств, поскольку обращение к необходимому тому происходит через корневую папку. Утилита mountvol создает неизменные связи с корневыми папками локального тома файловой системы. Она применяет в работе новую технологию, гарантирующую, что при изменениях в параметрах оборудования целевая папка не изменяется.

Синтаксис вызова утилиты mountvol;

mountvol [устройство:]путь Имя_тома

где:

[устройство:]путь ≈ определяет существующую папку NTFS 5.0, являющуюся точкой подключения тома; имя_тома ≈ определяет имя подключаемого тома.

Параметры утилиты mountvol:

/о ≈ уничтожение существующей точки подключения у указанной папки.

/l ≈ отображение списка томов, подключенных к данной папке.

Подключение тома к точке соединения. Предположим, что на жестком диске компьютера Windows 2000 создано два тома (С: и D:). На этом же компьютере установлено устройство CD-ROM (E:). Том С: отформатирован под NTFS, поэтому на нем можно расположить несколько точек соединения NTFS. В приведенных здесь примерах предполагается, что все необходимые для работы с точками соединения NTFS инструменты находятся в папке %SystemRoot98System32, поэтому их можно запустить, находясь в любом месте дерева папок файловой системы. Все описанные ниже команды выполняются из командной строки.

:/>  The Group Policy Editor cкачать на Windows бесплатно

Для того чтобы создать соединение с корневой папкой тома файловой системы:

  1. Введите с клавиатуры команду mountvoi и просмотрите список имен внутренних устройств, назначенных томам данной машины. Предположим, что получен следующий результат:

    Возможные значения ИмениТома вместе с текущими точками подключения:

    ?Volume{4c3eae42-a740-lld3-9534-806d6172696f} С:

    ?Volume{4c3eae45-a740-lld3-953`b806d6172696f} D:

    ?Volume{4c3eae46-a740-lld3-9534-806d6172696f } Е:

    ?Wolume{4c3eae40-a740-lld3-9534-806d6172696f} А:

  2. С помощью утилиты mountvol подключите тома CD-ROM и D: к точкам соединения:

    mkdir CD

    mountvol CD ?Volume{4c3eae46-a740-lld3-9534-806d6172696f} mkdir MoreDiskSpace

    mountvol MoreDiskSpace ?Volume{4c3eae45-a740-lld3- 49534-806d6172696f}

  3. Для проверки работоспособности созданных точек соединения выполните команду dir в двух новых папках. Вы должны увидеть содержимое целевых томов. Теперь полученные соединения могут быть использованы для доступа к целевым томам.
  4. Для того чтобы узнать, какие целевые тома соответствуют точкам соединения, с клавиатуры введите следующие команды:

    mountvol CD /L

    mountvol MoreDiskSpace /L

Теперь можно провести еще одно, весьма “суровое” испытание работоспособности точки соединения NTFS, поскольку после подключения тома к точке соединения вы больше не нуждаетесь в имени тома. Поэтому, запустив оснастку Управление дисками (Disk Management), можно удалить имя устройства D: и CD-ROM. Несмотря на исчезновение имен устройств, вы все же можете получить доступ к ним, используя созданные точки соединения. Конечно, вам следует внимательно следить за тем, чтобы не нарушить работу пользователей и программ, напрямую обращающихся к тому с помощью его имени.

Удаление точки соединения. Для удаления точки соединения введите с клавиатуры следующие команды:

mountvol CD /d

mountvol MoreDiskSpace /d

Разделы диска. операция монтирования

В ОС Windows принято разбивать диски на логические диски (это низкоуровневая операция), иногда называемые разделами (partitions). Бывает, что, наоборот, объединяют несколько физических дисков в один логическийдиск.

Имена логических дисков хранятся в каталоге “??” пространства имен объектов, которые и осуществляют связь логического диска и реального устройства. Указав букву диска, прикладная программа получает доступ к его файловой системе.

По аналогии с Unix операционная системаWindows позволяет пользователю создать точку монтирования – связать какой-либо пустой каталог с каталогом логического диска.

Распространенные сообщения об ошибках в mountvol.exe

Наиболее распространенные ошибки mountvol.exe, которые могут возникнуть:

• «Ошибка приложения mountvol.exe».• «Ошибка mountvol.exe».• «Возникла ошибка в приложении mountvol.exe. Приложение будет закрыто. Приносим извинения за неудобства».• «mountvol.exe не является допустимым приложением Win32».• «mountvol.exe не запущен».• «mountvol.exe не найден».

Эти сообщения об ошибках .exe могут появляться во время установки программы, во время выполнения связанной с ней программы, платформ, при запуске или завершении работы Windows, или даже при установке операционной системы Windows. Отслеживание момента появления ошибки mountvol.exe является важной информацией при устранении неполадок.

Самостоятельное упражнение

На основании предыдущей программы рекомендуется написать программу, которая создает каталог в родительской директории и копирует в него какой-либо файл с помощью функции CopyFile.

Структура overlapped

Параметр Internal используется для хранения кода возможной ошибки, а параметр InternalHigh – для хранения числа переданных байт. Вначале разработчики Windows не планировали делать их общедоступными – отсюда и такие не содержащие мнемоники имена. Offset и OffsetHigh – соответственно младшие и старшие разряды текущей позиции файла. hEvent специфицирует событие, сигнализирующее окончание операции ввода-вывода.

Эксперимент. монтирование логического диска с помощью штатной утилиты mountvol

Чтобы смонтировать логический диск, нужно выполнить команду

Здесь параметр <путь> задает имя пустого каталога, а имя тома задается в виде \?Volume{код_GUID}, где GUID – глобальный уникальный идентификатор.

Например

Имена глобальных уникальных идентификаторов и их связь с буквами диска можно узнать, дав команду

Монтирование также можно выполнить с помощью панели управления дисками системной панели управления, если выбрать пункт “изменение буквы диска и пути диска”.

Наконец, смонтировать диск можно программным образом с помощью Win32-функции SetVolumeMountPoint.

Это mountvol.exe безопасно, или это вирус или вредоносная программа?

Первое, что поможет вам определить, является ли тот или иной файл законным процессом Windows или вирусом, это местоположение самого исполняемого файла. Например, для файла mountvol.exe его путь будет примерно таким: C: Program Files Microsoft Platforms mountvol.exe.

Чтобы определить его путь, откройте диспетчер задач, перейдите в «Просмотр» -> «Выбрать столбцы» и выберите «Имя пути к изображению», чтобы добавить столбец местоположения в диспетчер задач. Если вы обнаружите здесь подозрительный каталог, возможно, стоит дополнительно изучить этот процесс.

Еще один инструмент, который иногда может помочь вам обнаружить плохие процессы, – это Microsoft Process Explorer. Запустите программу (не требует установки) и активируйте «Проверить легенды» в разделе «Параметры». Теперь перейдите в View -> Select Columns и добавьте «Verified Signer» в качестве одного из столбцов.

Если статус процесса «Проверенная подписывающая сторона» указан как «Невозможно проверить», вам следует взглянуть на процесс. Не все хорошие процессы Windows имеют метку проверенной подписи, но ни один из плохих.

Наиболее важные факты о mountvol.exe:

  • Имя: mountvol.exe
  • Программного обеспечения: Платформы
  • Издатель: Microsoft
  • Ожидаемое местоположение: C: Program Files Microsoft Platforms подпапке
  • Ожидаемый полный путь: C: Program Files Microsoft Platforms mountvol.exe
  • SHA1: 0650A27E77822846DFE61266B5C3F5003F12DFAC
  • SHA256:
  • MD5: 02C3E2A97D488C3E8C5171D132BCEDDC
  • Известно, что до 9488 размер байт в большинстве Windows;

Если у вас возникли какие-либо трудности с этим исполняемым файлом, вы должны определить, заслуживает ли он доверия, прежде чем удалять mountvol.exe. Для этого найдите этот процесс в диспетчере задач.

Найти его местоположение и сравнить размер и т. Д. С приведенными выше фактами

Заключение

Файл – единица внешней памяти, поэтому обычно данные, записанные на диск, находятся в составе какого-нибудь файла. Файловая система решает задачи именования и типизации файлов, организации доступа к файлам, защиты, поиска файлов и ряд других.

Оставьте комментарий

Adblock
detector