ВУЗ:
Составители:
LPDWORD IpNumberOfBytesRead, // адрес слова, в которое будет записано количество прочи-
танных байт
LPOVERLAPPED IpOverlapped); // адрес структуры типа OVERLAPPED
BOOL WriteFile(
HANDLE hFile, // идентификатор файла
LPVOID IpBuffer, // адрес записываемого блока данных
DWORD nNuroberOfBytesToWrite, // количество байт, которые необходимо записать
LPDWORD IpNumberOfBytesWrite, // адрес слова, в котором будет сохранено количество запи-
санных байт
LPOVERLAPPED IpOverlapped); // адрес структуры типа OVERLAPPED
Через параметр hFile этим функциям необходимо передать идентификатор объ-
екта, полученный от функции CreateFile.
Параметр lpBuffer должен содержать адрес буфера, в котором будут сохранены
прочитанные данные (для функции ReadFile) или из которого будет выполняться
запись данных (для функции WriteFile).
Параметр nNumberOfBytesToRead используется для функции ReadFile и задает
количество байт данных, которые должны быть прочитаны в буфер IpBuffer. Ана-
логично параметр nNumberOfBytesToWrite задает функции WriteFile размер блока
данных, имеющего адрес IpBuffer, который должен быть записан в объект.
Так как в процессе чтения возможно возникновение ошибки или достижение
конца файла, количество прочитанных или записанных байт может отличаться от
значений, заданных соответственно параметрами nNumberOfBytesToRead и
nNumberOfBytesToWrite. Функции ReadFile и WriteFile записывают количество
действительно прочитанных или записанных байт в
двойное слово с адресом соот-
ветственно lpNumberOfBytesRead и lpNumberOfBytesWrite.
Параметр lpOverlapped используется в функциях ReadFile и WriteFile для орга-
низации асинхронного режима чтения и записи. Если запись выполняется синхрон-
но, в качестве этого параметра следует указать значение NULL.
Если функции ReadFile и WriteFile были выполнены успешно, они возвращают
значение TRUE. При возникновении ошибки возвращается значение FALSE. В по-
следнем случае вы
можете получить код ошибки, вызвав функцию GetLastError.
Используя перечисленные функции для чтения MBR можно создать на языке Си
следующую функцию:
#pragma pack(1)
typedef struct tagPartitionInfo
{
UCHAR ucActivePartFlag; // Индикатор активного раздела
UCHAR ucDH; // Начало CHS, в формате Int13h
UCHAR ucCL;
UCHAR ucCH;
UCHAR ucType; // тип раздела
UCHAR ucEndDH; // конец CHS, в формате Int13h
UCHAR ucEndCL;
UCHAR ucEndCH;
DWORD dwLba; //начало раздела
DWORD dwSize; // размер раздела
} PART_INFO, *PPART_INFO;
typedef struct tagMBR
{
UCHAR ucBootProgramAndData[0x1be]; // код загрузки
PART_INFO PartInfo[4]; // Таблица разделов
Страницы
- « первая
- ‹ предыдущая
- …
- 12
- 13
- 14
- 15
- 16
- …
- следующая ›
- последняя »