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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2013, 22:37   #1
bigory
Пользователь
 
Регистрация: 04.06.2009
Сообщений: 46
По умолчанию Скрыть/раскрыть раздел диска

Всем доброе время суток!
Есть утилита под Linux, которая называется gparted, е нее есть возможность отключать и включать раздели на дисках ставя галочку на против пункта hidden. Эта утилита позволяет заблокировать раздел на диске и никакая система не может получить к ней доступ. Вопрос такой, как это реализовать средствами Visual Studia C++ для Windows?
bigory вне форума Ответить с цитированием
Старый 08.11.2013, 10:21   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от bigory Посмотреть сообщение
Эта утилита позволяет заблокировать раздел на диске и никакая система не может получить к ней доступ
Чушь.

Кстати, в Windows тоже есть подобная утилита, называется diskpart.exe

Если хотите сделать сами - начинайте читать тут: http://en.wikipedia.org/wiki/Partition_table и далее по ссылкам.
waleri вне форума Ответить с цитированием
Старый 08.11.2013, 19:04   #3
bigory
Пользователь
 
Регистрация: 04.06.2009
Сообщений: 46
По умолчанию

diskpart.exe может затереть букву с раздела, что делает ее невидимым в "Моем компьютере", а я имею ввиду отключить раздел (Конечно есть сторонние программы, которые, вопреки настроек, могут прочитать разделы). Если просто затереть букву,то Винда раздел не видит, а линуксу ничто не мешает увидеть этот раздел. Та утилита про которую я писал выше, она блокирует раздел. Ничто не может получить к ней доступ пока галочку не снять с hidden. Уже пробовал получить доступ в линуксе и на винде. Мак-оса только под рукой нет для проверки

Если я правильно понял, то есть флаги для логических дисков в MBR. Как до него достучаться чтобы активировать нужный мне пункт?

Нашел код в инете
Код:
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>

#pragma pack(push, 1)
typedef struct PART
{
  BYTE  ActFlag;
  BYTE  Begin_Hd;
  WORD  Begin_SecTrk;
  BYTE  SysCode;
  BYTE  End_Hd;
  WORD  End_SecTrk;
  DWORD RelSec; 
  DWORD Size;
};

typedef struct MBR
{
  BYTE        LoadCode[0x1BE];
  struct PART rt[4];
  WORD        EndFlag;
};
#pragma pack(pop)

int main(void)
{
  HANDLE hDrive = CreateFile(L"\\\\.\\PhysicalDrive1",
	                GENERIC_READ, 
                    FILE_SHARE_READ | FILE_SHARE_WRITE,
					0,
                    OPEN_EXISTING,
					FILE_ATTRIBUTE_NORMAL,
					0);
  if (INVALID_HANDLE_VALUE == hDrive)
    fprintf(stderr, "CreateFile failed 0x%08X\n", GetLastError());
  else
  {
    struct MBR mbr;
    DWORD      NumberOfBytesRead = 0;

    RtlZeroMemory(&mbr, sizeof(mbr));
    if (0 == ReadFile(hDrive, &mbr, sizeof(mbr), &NumberOfBytesRead, 0))
      fprintf(stderr, "ReadFile failed 0x%08X\n", GetLastError());
    else if (sizeof(mbr) != NumberOfBytesRead)
      fprintf(stderr, "sizeof(mbr) = 0x%08X, ReadFile read 0x%08X\n",
        sizeof(mbr), NumberOfBytesRead);
    else
    {
      int j;
  
      for (j = 0; j < 4; j++)
        fprintf(stdout, "Partition %d\n"
                        "  ActFlag      = 0x%02X\n"
                        "  Begin_Hd     = 0x%02X\n"
                        "  Begin_SecTrk = 0x%04X\n"
                        "  SysCode      = 0x%02X\n"
                        "  End_Hd       = 0x%02X\n"
                        "  End_SecTrk   = 0x%04X\n"
                        "  RelSec       = 0x%08X\n"
                        "  Size         = 0x%08X\n\n",
          j,
          mbr.rt[j].ActFlag,
          mbr.rt[j].Begin_Hd,
          mbr.rt[j].Begin_SecTrk,
          mbr.rt[j].SysCode,
          mbr.rt[j].End_Hd,
          mbr.rt[j].End_SecTrk,
          mbr.rt[j].RelSec, 
          mbr.rt[j].Size);
    }

    CloseHandle(hDrive);
  }

  system("pause");
  return 0;
}
Проделывая с ней анализ заблокированного раздела и разблокированного, увидел что меняется значение SysCode. Судя по коду на TRUE и FALSE. Как мне программно изменить на 2м разделе SysCode?

Последний раз редактировалось bigory; 08.11.2013 в 21:54.
bigory вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как запаролить раздел жёсткого диска ???? Александр_1981 Безопасность, Шифрование 7 17.12.2010 15:51
Объединить 2 раздел жесткого диска stenl1 Операционные системы общие вопросы 1 29.08.2010 14:11
Не видит раздел диска в Win 7 stscolt Компьютерное железо 0 17.03.2010 11:26
Установка пароля на раздел жёсткого диска Terran Компьютерное железо 6 28.11.2009 11:17
ПРОПАЛ РАЗДЕЛ ЖЕСТКОГО ДИСКА! lea_szd Софт 4 24.11.2009 23:49