- •Функция CreateFile.
- •File_share_delete ─ успешно выполнятся последующие операции по открытию объекта, только если запрошен доступ на удаление;
- •2. Функция ReadFile
- •3. Функция WriteFile
- •4. Функция SetFilePointer
- •Если операция завершилась успешно и lpDistanceToMoveHighравноNull, то возвращаемое значение равноlDistanceToMove. Иначе возвращается0xFfffffff.
- •5. Функция DeviceIoControl
- •Параметры
- •6.Функция GetLogicalDrives
- •Возвращаемое значение
- •7. Функция GetVolumeInformation
- •Параметры:
- •8.Функция GetDiskFreeSpace
- •Параметры
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
Пример.