Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
22
Добавлен:
03.03.2016
Размер:
76.8 Кб
Скачать

2. Функция ReadFile

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

BOOL ReadFile( HANDLE hFile,

LPVOID lpBuffer,

DWORD nNumberOfBytesToRead,

LPDWORD lpNumberOfBytesRead,

LPOVERLAPPED lpOverlapped

);

Параметры.

hFile – хэндл на файл;

lpBuffer – указатель на буфер, в который считываются данные;

nNumberOfBytesToRead – количество считываемых байт;

lpNumberOfBytesToRead – указатель на число считываемых байт;

lpOvelapped – должен быть NULL.

Возвращаемое значение.

Если возвращенное значение не ноль, то функция выполнена успешно.

3. Функция WriteFile

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

BOOL WriteFile(

HANDLE hFile,

LPVOID lpBuffer,

DWORD nNumberOfBytesToWrite,

LPDWORD lpNumberOfBytesWritten,

LPOVERLAPPED lpOverlapped

);

Назначение параметров такое же как и для функции ReadFile.

4. Функция SetFilePointer

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

DWORD SetFilePointer( HANDLE hFile,

LONG lDistanceToMove,

PLONG lpDistanceToMoveHigh,

DWORD dwMoveMethod

);

Параметры:

hFile – хэндл на файл;

lDistanceToMove – младшие 32 бита знаковой величины в байтах, на которую нужно сместить указатель файла;

lpDistanceToMoveHigh – указатель на старшие 32 бита знаковой величины в байтах, на которую нужно сместить указатель файла;

dwMoveMethod – указывает позицию, относительно которой указатель надо двигать. Может принимать одно из значений:

FILE_BEGIN – отсчет от начала файла

FILE_CURRENT – отсчет от текущей позиции указателя файла

FILE_END – отсчет от конца файла

Возвращаемое значение.

Если операция завершилась успешно и lpDistanceToMoveHighравноNull, то возвращаемое значение равноlDistanceToMove. Иначе возвращается0xFfffffff.

Если операция завершилась успешно и lpDistanceToMoveHighне равноNULL, то возвращаемое значение равноlDistanceToMove, иначе0xFFFFFFFF. Однако 0xFFFFFFFF может быть легальным значением lDistanceToMove, поэтому необходимо проверить значение, возвращаемое функциейGetLastError(). И если оно равноNO_ERROR, то функция выполнена успешно.

5. Функция DeviceIoControl

Для определения параметров физического диска используется подфункция IOCTL_GET_DRIVE_GEOMETRY функции DeviceIoControl. Формат вызова:

BOOL DeviceIoControl(

(HANDLE) hDevice,

IOCTL_DISK_GET_DRIVE_GEOMETRY,

NULL,

0,

(LPVOID) lpOutBuffer,

(DWORD) nOutBufferSize,

(LPDWORD) lpBytesReturned,

NULL

);

Параметры

hDevice – хэндл на устройство;

lpOutBuffer – указатель на структуру DISK_GEOMETRY, в которую записывается информация о устройстве;

nOutBufferSize – размер буфера lpOutBuffer в байтах. Долже быть больше или равен размеру структуры DISK_GEOMETRY;

lpBytesReturnedуказатель на 32-битную переменную, в которой возвращается количество байт необходимое для заполнения буфера, если значения указанного в nOutBufferSize недостаточно.

Возвращаемое значение.

Если операция завершилась успешно, то возвращается не 0.

Структура DISK_GEOMETRY имеет вид:

typedef struct _DISK_GEOMETRY

{

LARGE_INTEGER Cylinders; // количество цилиндров

MEDIA_TYPE MediaType; // тип носителя

DWORD TracksPerCylinder; // количество дорожек на цилиндр

DWORD SectorsPerTrack; // количество секторов на дорожку

DWORD BytesPerSector; // количество байт на сектор

}

DISK_GEOMETRY;

Формат типа MEDIA_TYPE:

typedef enum _MEDIA_TYPE

{

Unknown, // Неизвестный формат

F5_1Pt2_512, // 5.25", 1.2MB, 512 байт на сектор

F3_1Pt44_512, // 3.5", 1.44MB, 512 байт на сектор

F3_2Pt88_512, // 3.5", 2.88MB, 512 байт на сектор

F3_20Pt8_512, // 3.5", 20.8MB, 512 байт на сектор

F3_720_512, // 3.5", 720KB, 512 байт на сектор

F5_360_512, // 5.25", 360KB, 512 байт на сектор

F5_320_512, // 5.25", 320KB, 512 байт на сектор

F5_320_1024, // 5.25", 320KB, 1024 байт на сектор

F5_180_512, // 5.25", 180KB, 512 байт на сектор

F5_160_512, // 5.25", 160KB, 512 байт на сектор

RemovableMedia, // съемный носитель, отличный от floppy-диска

FixedMedia // несъемный носитель

}

MEDIA_TYPE

Пример.