DevHlp ReadFile
DevHlp_ReadFile is used by base device drivers to read a file previously opened using DevHlp_OpenFile.
Syntax
C
DevHelp_ReadFile ( PFILEIOINFO pfileread)
Assembler
Calling Sequence in Assembler
LES DI, ReadFile MOV DL, DevHlp_ReadFile CALL [Device_Help]
Parameters
C
Pointer to the FILEIOINFO structure defined as follows
typedef struct FOPEN { PSZ FileName; /* (input) pointer to file name */ ULONG FileSize; /* (output) size of file returned by FileOpen */ } FILEOPEN; typedef struct FCLOSE { USHORT reserved /* reserved */ } FILECLOSE; typedef struct FREAD { PBYTE Buffer; /* (input) pointer to input buffer */ ULONG ReadSize; /* (input) number of bytes to read fromfile */ } FILEREAD; typedef struct FREADAT { PBYTE Buffer; /* (input) pointer to input buffer */ ULONG ReadSize; /* (input) number of bytes to read from file */ ULONG StartPosition /* (input) starting file position relative to the beginning of the file */ } FILEREADAT; typedef union FILEIOOP { struct FOPEN FileOpen; struct FCLOSE FileClose; struct FREAD FileRead; struct FREADAT FileReadAt; } FILEIOOP; typedef struc _DDFileIo { USHORT Length; /* (input) length of imbedded structure */ FILEIOOP Data; /* (input) imbedded file system operation structure */ } FILEIOINFO, FAR * PFILEIOINFO
Assembler
ES DI points to a FILEIOINFO structure defined as follows
FILEIOINFO struc length dw 8 ; length of imbedded fle system operation structure / length of structure (must be 8) ; FREAD struc Buffer dd ? ; 1616 pointer to the input buffer / 16:16 address of a read buffer ReadSize dd ? ; length of data to read / number of bytes to read FREAD ends ; FILEIOINFO ends
Return Code
C
- Success Indicator 0 if file was read.
- 24 ERROR_BAD_LENGTH Length in the FILEIOINFO structure is invalid.
Assembler
- C Clear if the file is closed. AX = zero.
- C Set if error.
Possible errors
- 24 ERROR_BAD_LENGTH The length in the FILEIOINFO structure is invalid.
Remarks
DevHlp_FileRead may be called at initialization time only. It provides a primitive interface to the mini-IFS or micro_IFS at initialization time.
The file is read from the current file position. After a successful read, the current file position is updated.
Using this interface only one file may be opened at a time. No handle is assigned by open. The file read is assumed to be the most recent opened using DevHlp_OpenFile.
Restriction
Valid at INIT time only. Although the size argument of the data structure implies, I'd recommend to better not read more than 32K at a time. Note that the buffer itself is segmented, so DMA overrun and other effects might apply, depending on the quality of the miniIFS in use.
Bugs
Holger Veit's opinion is that the length of structure should be 10, not 8.