Сборник по задачам и примерам Assembler

Получить информацию о файле по описателю



Получить информацию о файле по описателю

Вход: АН = 71A6h; флаг cf = 1; ВХ = дескриптор файла; DS:DX — адрес структуры

BYHANDLEFILEINFORMATION.

Выход: CF = 0 — успешное выполнение функции; CF = 1 — АХ = код ошибки. Формат структуры BYHANDLEFILEINFORMATION приведен ниже.

Y_HANDLE_FILE_INFORMATION StuiC
"DwFiieAttributes dd ?

FtCreationTimedd 2 dup(?)

FtLastAccessTime dd 2 dup(?)

FtLastWriteTime dd 2 dup(?)
DwVolumeSeria 1 Number dd ?

NFileSizeHigh dd ?

NfileSizeLow dd ?
NnunberOfLinksdd ?
NFilelndexHighdd ?
NFilelndexLow dd ?
BY_HANDLE_FILE_INFORMATION ends

Поля этой структуры описаны в следующей таблице.

Поле



Описание

dwFileAttributes

Атрибуты файла. Этот элемент может быть комбинацией следующих значений: FI LE_ATTR IBUTENORMAL (00000000H) - файл доступен по чтению и записи; этот атрибут нельзя комбинировать с другими;

FILE_ATTRIBUTE_READONLY (00000001Н) - файл только для чтения;

FILE_ATTRIBUTE_HIDDEN (00000002H) - скрытый файл; FILE_ATTRIBUTE_SYSTEM (00000004H) - системный файл; FI LE_ATTR IBUTEDI RECTORY (00000010H) - каталог; FILE ATTRIBUTE ARCHIVE (00000020H) - архивный файл

CreationTime

Время создания файла в 64-разрядном формате

ftLastAccessTime

Время последнего доступа к файлу в 64-разрядном формате

ftLastWriteTime

Время последней записи в файл в 64-разрядном формате

dwVolumeSeri alNumber

Серийный помер тома, на котором находится файл

NFileSizeHigh

Старшее слово значения, определяющего размер файла

NFiieSizeLow

Младшее слово значения, определяющего размер файла

NNumberOfLinks

Число связей с данным файлом. В файловых системах FAT и HPFS этот элемент всегда равен 1. В файловой системе NTFS число связей может превышать 1

NFilelndexHigh

Старшее слово уникального дескриптора, связанного с файлом

NFilelndexLow

Младшее слово уникального дескриптора, связанного с файлом. Файл однозначно определяется дескриптором

и серийным номером тома

:prg07_26.asm - программа демонстрации применения функции 71A6h прерывания 21п :для получения информации о файле по описателю.


BY_HANDLE_FILE_INFORMATION struc "DwFileAttributes dd ? FtCreationTime dd 2 dup(?) FtLastAccessTime dd 2 dup(?) FtLastWriteTime dd 2 dup(?) DwVolumeSerial Number dd ? NFileSizeHigh dd ? NfileSizeLow dd ? NnumberOfLinks dd ? NFilelndexHigh dd ? NFilelndexLow dd ? BY_HANDLE_F1LE_INFORMATION ends

.data

file_info_ BY_HANDLE_FILE_INFORMATION <>

poir,t_find_ dd file_info_

filename db 'my_file with long name.txt'.O

point_fname dd filename

handle dw 0

:.........

.code

.файл, о котором будем получать информацию

mov bx.0100h+0400h;не использовать буферизацию

содержимое 01 в псевдоним

movdx.l юткрыть файл, если он существует, иначе вернуть ошибку Ids si .point_fname-.формируем указатель на имя файла

mov di.7 repeat:mov ax.716ch

xor ex.ex

int21h

jnc ml

mov dx.10h

jmp repeat ml: mov handle.ax

действия при успешном открытии файла:

добавить в конец псевдонима символ 7 ; номер функции DOS атрибуты файла - обычный файл - доступ для чтения-записи

открываем файл

.если файл существовал, то переход

;создать файл

:переход - повторим открытие файла

:сохраним дескриптор файла

.получаем информацию о файле mov bx. handle

stc ;это обязательно

Idsdx.point_find_;формируем указатель на структуру BY_HANDLE_FILE_INFORMATION


Содержание раздела