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

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

Вернуться   Форум программистов > Операционные системы > Операционные системы общие вопросы
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2009, 08:53   #1
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
Вопрос Недры NTFS

Мне нужно добраться до содержимого дисков.
То есть чтобы можно было прочитать директивы FILE0 на дисках и получить всю инфу по данным файлам, узнать формат данных и как с ним работать. Работа с MFT: добавление, изменение и удаление записей.
Полагаю нужно курить SDK + DDK + MSDN?
Спасибо!
psycho-coder вне форума Ответить с цитированием
Старый 12.08.2009, 09:08   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

М.м.м не пробовал но в хелпе читал про :
Цитата:
Disk Devices
Windows NT: You can use the CreateFile function to open a disk drive or a partition on a disk drive. The function returns a handle to the disk device; that handle can be used with the DeviceIOControl function. The following requirements must be met in order for such a call to succeed:

· The caller must have administrative privileges for the operation to succeed on a hard disk drive.
· The lpFileName string should be of the form \\.\PHYSICALDRIVEx to open the hard disk x. Hard disk numbers start at zero. For example:

String Meaning
\\.\PHYSICALDRIVE2 Obtains a handle to the third physical drive on the user's computer.


· The lpFileName string should be \\.\x: to open a floppy drive x or a partition x on a hard disk. For example:

String Meaning
\\.\A: Obtains a handle to drive A on the user's computer.
\\.\C: Obtains a handle to drive C on the user's computer.


Windows 95: This technique does not work for opening a logical drive. In Windows 95, specifying a string in this form causes CreateFile to return an error.

· The dwCreationDistribution parameter must have the OPEN_EXISTING value.
· When opening a floppy disk or a partition on a hard disk, you must set the FILE_SHARE_WRITE flag in the dwShareMode parameter.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.08.2009, 09:17   #3
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Хорошо, попробую.
Остальные вопросы остаются открытыми...
psycho-coder вне форума Ответить с цитированием
Старый 12.08.2009, 10:03   #4
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

В мсдн вроде есть раздел, что-то вроде 'дефрагментация и дисковые утилиты'
пыщь
JTG вне форума Ответить с цитированием
Старый 12.08.2009, 16:44   #5
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Хм... Странно. Но программа не может открыть диск
Код:
#include <windows.h>
#include <stdio.h>

int main()
{
	HANDLE hFile;
	LPCWSTR fileName = (LPCWSTR) "\\.\D:";
	
	hFile = CreateFile(fileName, 
		GENERIC_READ, 
		FILE_SHARE_READ, 
		NULL, 
		OPEN_EXISTING, 
		FILE_ATTRIBUTE_NORMAL, 
		NULL);

	if (hFile == INVALID_HANDLE_VALUE)
	{
		printf("Could not open file (error %d)\n", GetLastError());
		system("pause");
		return 1;
	}

	printf("File was open\n");
	system("pause");

	return 0;
}
Код ошибки 2:
Цитата:
ERROR_FILE_NOT_FOUND
2 The system cannot find the file specified.
P.S. Visual Studio 2005
psycho-coder вне форума Ответить с цитированием
Старый 12.08.2009, 16:49   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А пробовал \\.\PHYSICALDRIVE<номер диска> ?

Кстати у меня вот такое:
Код:
var h:THandle;
begin
 SetLastError(0);
 h:=CreateFile('\\.\D:',GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
 if h=INVALID_HANDLE_VALUE then RaiseLastWin32Error;
 CloseHandle(h);
end;
Работает на ура. Если устройство не занято другим чем то
I'm learning to live...

Последний раз редактировалось Stilet; 12.08.2009 в 16:52.
Stilet вне форума Ответить с цитированием
Старый 12.08.2009, 17:01   #7
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Если устройство не занято другим чем то
То есть не занято? У меня торрент качает. Может из-за этого?
А в Delphi вообще Access Violation выдало.((
psycho-coder вне форума Ответить с цитированием
Старый 12.08.2009, 17:05   #8
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Код:
#include <windows.h>
#include <stdio.h>

int main()
{
	HANDLE hFile;
	LPCSTR fileName = (LPCSTR)"\\\\.\\D:";
	
	hFile = CreateFile(fileName, 
	
		GENERIC_READ, 
		FILE_SHARE_READ | FILE_SHARE_WRITE, 
		NULL, 
		OPEN_EXISTING, 
		FILE_ATTRIBUTE_NORMAL, 
		NULL);

	if (hFile == INVALID_HANDLE_VALUE)
	{
		printf("Could not open file (error %d)\n", GetLastError());
		system("pause");
		return 1;
	}

	printf("File was open\n");
	system("pause");

	return 0;
}
Так работает (под рукой только Dev-C++)

Да, кстати, под вистой прямой доступ к диску на запись возможен только из kernel-mode, юзермодные приложения могут писать только в MBR и неразмеченную область.
пыщь
JTG вне форума Ответить с цитированием
Старый 12.08.2009, 17:13   #9
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Нифига...
Уже и диск менял.
Цитата:
А пробовал \\.\PHYSICALDRIVE<номер диска> ?
Да. Тоже самое
Цитата:
Could not open file (error 2)
Для продолжения нажмите любую клавишу . . .
Цитата:
Да, кстати, под вистой прямой доступ к диску на запись возможен только из kernel-mode, юзермодные приложения могут писать только в MBR и неразмеченную область.
В XP (у меня собсно она) можно только от прав админа.
Начинает раздражать.

Прога получается не может найти путь... Если бы не могла открыть, ошибка другая была
psycho-coder вне форума Ответить с цитированием
Старый 12.08.2009, 18:05   #10
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Я в сях не шарю, но разве оно не воспринимает неэкранированный слеш как escape-последовательность
\\.\D: и \\\\.\\D
пыщь
JTG вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
формат NTFS Primarius Windows 3 20.01.2009 13:16
бан доступа в NTFS meinung Win Api 6 09.03.2008 03:21
Вывод атрибутов файла в NTFS un07 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 27.02.2008 19:47
Права доступа NTFS LinCoRe Windows 6 07.02.2008 21:24
NTFS -> FAT JoanM Свободное общение 2 16.08.2007 08:37