Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

direct acces to drive ?

7.3K
11 октября 2004 года
BlackCode
16 / / 11.10.2004
Здраствуйте.


1. Каким образам можно получить прямой доступ к соответсвующему
винчестеру IDE, SCSI можно ли это сделать в среде WINDOWS ? Ну уж
точно не с WriteFile(…), OpenFile(…).
2. Известно, что сектор одназначно определяеется адресом, имеющий
следующий вид (h, c, s) где
h - это головка,
c – цилиндр,
s – сектор.

а) Вообще сколько головок имеют винчестеры? Может это 2 в n-ой степени?
б) Как узнать сколько секторов в соответствующем цилиндре? Ведь чем дальше
цилиндр находится от центра, тем больше в нём секторов.
· Сколько секторов имеет нулевой цилиндр?
· Какая связь имеется в количестве секторов в цилиндрах номер n и (n-1)?

Есть ли какие то стандарты? и что они из себя представляют?
3
11 октября 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by BlackCode
Здраствуйте.
1. Каким образам можно получить прямой доступ к соответсвующему
винчестеру IDE, SCSI можно ли это сделать в среде WINDOWS ? Ну уж
точно не с WriteFile(…), OpenFile(…).


Ну почему же. Именно с помощью CreateFile, ReadFile, WriteFile.

Цитата:
Originally posted by BlackCode
2. Известно, что сектор одназначно определяеется адресом, имеющий
следующий вид (h, c, s) где
h - это головка,
c – цилиндр,
s – сектор.

а) Вообще сколько головок имеют винчестеры? Может это 2 в n-ой степени?
б) Как узнать сколько секторов в соответствующем цилиндре? Ведь чем дальше
цилиндр находится от центра, тем больше в нём секторов.
· Сколько секторов имеет нулевой цилиндр?
· Какая связь имеется в количестве секторов в цилиндрах номер n и (n-1)?

Есть ли какие то стандарты? и что они из себя представляют?



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

723
11 октября 2004 года
Tommy
78 / / 13.10.2002
Короче про то я понял или нет, но так как это форум имеет название Низкоуровневое программирование. То скажу что самый прямой доступ это через порты ввода вывода... и соответсвенно надо использовать интерфейс ATA там все ясно и понятно на счет того как это все будет работать в среде Windows это конечно зависит от того что ты делаешь но идея такова: пишешь в какой либо системе - будь добр используй ф-ии которые поставляет система, если вне системы - делай все что хочешь
7.3K
11 октября 2004 года
BlackCode
16 / / 11.10.2004
Цитата:

Ну почему же. Именно с помощью CreateFile, ReadFile, WriteFile.



Я очень сомневаюсь что WINDOWS мне даст прямой доступ.

Есть int 13h
прерывание BIOS
оно даёт прямой доступ к винчу но
WINDOWS точно переопределил это прерывание.
Во всяком случае боюсь експерементировать с единственным винчом. Куплю новый потом.

Цитата:

На всех цилиндрах количество секторов одинаковое.



Я в этом сильно соомневаюсь.
Думаю такое невозможно по той причине что
это привело бы к потерии огромного пространства.

Цитата:

Количество секторов, головок, цилиндров для каждого HDD специфично.



Естественно.

Цитата:

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



Я об этом слышал но как это использовать?

723
12 октября 2004 года
Tommy
78 / / 13.10.2002
На самом деле все выглядит так

int 13h - это в реальном режиме и если программа запущена в виндовсе, в режме эмуляции тогда это прерывание доступно. Экперементировать не бойся - все в норме диск не запортиться, вот только это прерывание ни дает возможность работы с большими дисками и годиться максимум для работы с дискетами , а вот.
На самом деле все верно - на цилиндре разное число секторов, называеться эта фишка - зонная запись, но это не важно - Ты скажи что ты делаешь и зачем тебе это - писать под виндовс с прямым достыпом вчем замысел???
3
12 октября 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by BlackCode

Я очень сомневаюсь что WINDOWS мне даст прямой доступ.

Есть int 13h
прерывание BIOS
оно даёт прямой доступ к винчу но
WINDOWS точно переопределил это прерывание.
Во всяком случае боюсь експерементировать с единственным винчом. Куплю новый потом.


Я так понял из твоих вопросов о секторах, что тебе надо читать/писать сектора, а не управлять контроллером.
Для чтения/записи информации посекторно вполне достаточно ReadFile/WriteFile.

Цитата:
Originally posted by BlackCode

Я в этом сильно соомневаюсь.
Думаю такое невозможно по той причине что
это привело бы к потерии огромного пространства.


Я говорил о логической структуре диска.

7.3K
13 октября 2004 года
BlackCode
16 / / 11.10.2004
Доброй ночи.

Я был неправ. В WINDOWS это делается именно с CreateFile(...).

Прочитав полное описание вызова CreateFile(...), получил
то что надо. (смотрите ниже)

С WINDOWS всё ясно а вот вне ОС не так уш.

Есть int 13h прерывание BIOS.
Которое даёт прямой досуп к винчу или к floppy.

Входные параметры

AH = 02h
DL = drive number (00h,01h,80h,81h)
DH = head id
CH = cylinder id
CL = sector id
AL = number of sectors to read
ES = Segment address of the buffer
BX = offset address of the buffer

Обратите внимание на CH,CL это 8 битные регистры которые
адресуют цилиндр и сектор соответсвенно.
Тоесть можно адресовать всего 256 цилиндров, секторов.
Этого слишком мало для современных винчов.

Кроме того ES,BX начало и конец сегмента с максимальным
размером 64кб. Ну очевидно что этот старый код от старого
8086х никак не годится.

Вот как можно получить досуд к SCSI,IDE контроллерам ?

Tommy.

Дипломная работа.

1. Должен создать сообственную файловую систему и соответствующую
систему управления файлами для WINDOWS.
после
2. Должен создать сообственную операционную систему которая работала с
моей файловой системой.
7.3K
13 октября 2004 года
BlackCode
16 / / 11.10.2004
Код:
#pragma comment(linker,"/ENTRY:WinMain")
#pragma comment(linker,"/OPT:NOWIN98")

#include <windows.h>

unsigned long   __stdcall CopyMBR(char []);

int __stdcall WinMain(HINSTANCE AppInstance,HINSTANCE hPrev,LPSTR lpCmdLine,int nCmdShow)
{
    unsigned long dWord;

    char buffer[5];

    AllocConsole();

    SetConsoleTitle("My Console");

    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

    WriteConsole(hStdOut,"Hello World!\nLife is Wonderful:)\n\n",34,&dWord,0);
   
    itoa(CopyMBR("D:\\sector.txt"),buffer,10);
   
    WriteConsole(hStdOut,buffer,3,&dWord,0);

    Sleep(5000);

    FreeConsole();

    ExitProcess(0);
}

unsigned long   __stdcall CopyMBR(char dest[])
{
    __int8  sector[512];

    unsigned long   nBytesRead;
    unsigned long   nBytesWrite;

    HANDLE hFile = CreateFile(
                            "\\\\.\\PHYSICALDRIVE0",
                            GENERIC_READ,
                            0,
                            NULL,
                            OPEN_EXISTING,
                            FILE_ATTRIBUTE_NORMAL,
                            NULL
                            );

    HANDLE hNewFile = CreateFile(
                //          "D:\\sector.txt",
                            dest,
                            GENERIC_WRITE,
                            0,
                            NULL,
                            CREATE_ALWAYS,
                            FILE_ATTRIBUTE_NORMAL,
                            NULL
                            );

    if(hFile == INVALID_HANDLE_VALUE || hNewFile == INVALID_HANDLE_VALUE)
    {
        MessageBox(0,"CreateFile(...) fail\n You Must have Administrative priviliges","chkpav",0);
        ExitProcess(0);
    }

    SetFilePointer(hFile,NULL,NULL,FILE_BEGIN);

    ReadFile(hFile,&sector,512,&nBytesRead,0);

    WriteFile(hNewFile,&sector,512,&nBytesWrite,0);
   
    CloseHandle(hFile);
    CloseHandle(hNewFile);

    return nBytesRead;
}
3
13 октября 2004 года
Green
4.8K / / 20.01.2000
Однако будет работать только под NT.
Под 9x надо использовать девайс vwin32.vxd
Подробнее на codeguru.com:
http://www.codeguru.com/Cpp/W-P/system/misc/article.php/c5765/
http://www.codeguru.com/Cpp/W-P/system/misc/article.php/c5723/
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог