disk_io.h
上传用户:xiaoan1112
上传日期:2013-04-11
资源大小:19621k
文件大小:11k
源码类别:

操作系统开发

开发平台:

Visual C++

  1. /***************************************************************************/
  2. /* */
  3. /* DISK_IO.H */
  4. /* */
  5. /* Copyright (c) 1991 - Microsoft Corp. */
  6. /* All rights reserved. */
  7. /* Microsoft Confidential */
  8. /* */
  9. /* Prototypes and struct definitions for low level disk access via */
  10. /* int 13h.  */
  11. /* */
  12. /*  */
  13. /* Created 06-06-89 johnhe */
  14. /***************************************************************************/
  15. /***************************************************************************/
  16. #pragma  pack(1) /* Pack all structures */
  17. /***************************************************************************/
  18. #define DOS_O_RDWR 2
  19. #define LAST_DISK 256
  20. #define REDO_DISK 257
  21. #define NOT_FOUND 258
  22. #define BAD_MEDIA 1
  23. #define BAD_HARDWARE 2
  24. #define BAD_SOURCE 3
  25. #define NO_SPACE 4
  26. #define DMA_ERROR 0x09
  27. #define BAD_DISK_ERROR -100
  28. #define MEMORY_ERROR -200
  29. #define IVALID_DRIVE_TYPE -300
  30. #define MAX_RETRIES 5
  31. #define DSK_PARAM_LEN 13
  32. #define DISK_INTERRUPT  0x13
  33. #define DISK_TIME_OUT 0x80
  34. #define DISK_WRITE_PROTECT 0x03
  35. #define DSK_PARAMS_VECT 0x1e
  36. #define READ 0
  37. #define WRITE 1
  38. #define MAX_FORMAT_TYPE 6
  39. #define     MAX_HIDDEN_SECTORS   1UL
  40. /***************************************************************************/
  41. /* Structure for passing to DOS 4.x int 25h & 26h disk io operations. */
  42. /***************************************************************************/
  43. struct ABSIO_PACKET
  44. {
  45. long lStartSector; /* Starting sector */
  46. unsigned  uNumSectors; /* Number of sectors */
  47. char far  *pchBuffer; /* Ptr to buffer */
  48. };
  49. /***************************************************************************/
  50. /*                                                                     */
  51. /* Media bios parameter block structure. Gives information about FAT based */
  52. /* block devices. */
  53. /*                                                                     */
  54. /***************************************************************************/
  55. struct BPB
  56. {
  57. unsigned int uBytesPerSec; /* Bytes per sector    */
  58. unsigned char uchSecPerClus; /* Sectors per cluster    */
  59. unsigned int uReservSec; /* Number of reserved sectors */
  60. unsigned char uchNumberFats; /* Number of copies of the FAT */
  61. unsigned int uRootEntries; /* Number of root dir entries */
  62. unsigned int uTotalSectors; /* Total sectors on the disk */
  63. unsigned char uchMediaDescr; /* Media descriptor */
  64. unsigned int uSecPerFat; /* Number sectors per FAT copy */
  65. unsigned int uSecPerTrack;  /* Number of sectors per track */
  66. unsigned int uNumberHeads;  /* Total number of heads */
  67. unsigned long ulHiddenSec; /* Total hidden sectors (boot) */
  68. unsigned long ulTotalBigSecs; /* Total sectors on > 32M disks */
  69. };
  70. /***************************************************************************/
  71. /* MS-DOS 4.0 boot record layout */
  72. struct BOOT_HEADER
  73. {
  74. unsigned char BootJmp[3]; /* 3 byte jmp  */
  75. unsigned char OemString[8]; /* 8 byte OEM name string  */
  76. struct BPB Bpb; /* Disk BPB structure */
  77. unsigned char uchPhysDrv; /* Physical drive number */
  78. unsigned char uchCurHd; /* Current hard disk */
  79. unsigned char uchExtSig; /* Extended BPB signature 0x29 */
  80. unsigned long ulSerial; /* Serial number */
  81. unsigned char uchVolLabel[11]; /* Volume label string */
  82. unsigned char uchSystemId[8]; /* System ID ie: "FAT12" etc. */
  83. };
  84. /***************************************************************************/
  85. /* Format of file's creation time in a DIR structure */
  86. /***************************************************************************/
  87. struct TIME
  88. {
  89. unsigned tSec:5;
  90. unsigned Min:6;
  91. unsigned    Hour:5;
  92. };
  93. /***************************************************************************/
  94. #ifndef DATE_DEFINED
  95. struct DATE
  96. {
  97. unsigned Day:5;
  98. unsigned Month:4;
  99. unsigned  Year:7;
  100. };
  101. #define DATE_DEFINED
  102. #endif
  103. /***************************************************************************/
  104. struct DIR /* MS-DOS directory entry layout */
  105. {
  106. char Name[8]; /* File name padded with spaces */
  107. char Ext[3]; /* Padded file extension */
  108. char Attrib; /* File attributes */
  109. char      Reserv[10]; /* Reserved for MS-DOS */
  110. struct TIME Time; /* Packed file creation time */
  111. struct DATE    Date; /* Packed file creation date */
  112. unsigned Cluster; /* File's starting cluster */
  113. unsigned long Size; /* File size in bytes */
  114. };
  115. /***************************************************************************/
  116. /* Track layout information */
  117. /* needed by the ROM BIOS format */
  118. /* track function. */
  119. struct FIELD_LIST
  120. {
  121. unsigned char uchTrack; /* Zero based track */
  122. unsigned char uchHead; /* Zero based head */
  123. unsigned char uchSector; /* One based sector */
  124. unsigned char uchSize; /* Sector size ( 2 == 512 bytes) */
  125. };
  126. /***************************************************************************/
  127. /* ROM BIOS DASD structure for */
  128. /* disk parameters. */
  129. struct DSK_PARMS
  130. {
  131. unsigned char Specify1;
  132. unsigned char Specify2;
  133. unsigned char MotorWait; /* Wait till motor off  */
  134. unsigned char SecSize; /* Bytes/Sector (2 = 512) */
  135. unsigned char EOT; /* Sectors per track (MAX) */
  136. unsigned char RWGap; /* Read Write Gap */
  137. unsigned char DTL; /*   */
  138. unsigned char FmtGap; /* Format Gap Length */
  139. unsigned char Fill; /* Format Fill Byte */
  140. unsigned char HdSettle; /* Head Settle Time (MSec) */
  141. unsigned char MotorStrt; /* Motor start delay */
  142. unsigned char Res1; /* Reserve field for new ROMs */
  143. unsigned char Res2; /* Reserve field for new ROMs */
  144. };
  145. /***************************************************************************/
  146. struct DOS_FCB
  147. {
  148. char Drive;
  149. char Name[8];
  150. char Ext[3];
  151. unsigned CurBlock;
  152. unsigned RecSize;
  153. unsigned long FileSize;
  154. unsigned Date;
  155. unsigned Time;
  156. char Reserved[8];
  157. unsigned char CurRecord;
  158. unsigned long RelRecord;
  159. };
  160. /***************************************************************************/
  161. /* Function prototype for all functions in disk_lib */
  162. /***************************************************************************/
  163. extern int IsInterlnk ( int Drive );
  164. extern int IsRemoveable ( int Drive );
  165. extern int IsLocalDrive ( int Drive );
  166. extern int IsValidDrive ( char DriveLetter );
  167. extern int IsRamDrive ( char DriveLetter );
  168. extern int IsReallyValidHardDrive( char chDrive );
  169. extern int IsValidHardDrive( char chDrive );
  170. extern void EnableDiskAccess( unsigned char Drive );
  171. extern void far *SetMediaType ( unsigned uDrv,unsigned uTotalTracks,
  172.   unsigned uSecPerTrack );
  173. extern int ResetDrv  ( int Drive );
  174. extern int SetDiskType  ( unsigned uDrv, unsigned char DiskType );
  175. extern int IsDiskReady ( int Drive );
  176. extern int GetBootSector ( int Drive, char far *Buffer );
  177. extern int CheckDmaBound ( void *Buffer, unsigned Bytes );
  178. extern int PhyDiskRead ( char *pchBuf,int iSecCyl,int iHead,char chDrive,
  179.   int cSecs);
  180. extern int PhyDiskWrite ( char *pchBuf,int iSecCyl,int iHead,char chDrive,
  181.   int cSecs);
  182. extern int FcbOpen ( struct DOS_FCB *Fcb );
  183. extern int FcbRename ( char *Fcb );
  184. extern int FcbParse ( char *Name, char *Fcb );
  185. extern void far Int24Fail ( void ); /* Must be FAR */
  186. extern int GetNumberOfDrives( void );
  187. extern int AbsReadWrite ( int Drive, struct ABSIO_PACKET *absPack,
  188.   int ReadWrite );
  189. extern int IsValidPath (char *szPath,unsigned int uDrvNumber, int SavePath);
  190. extern int MoveToDir  (char *szPath, int SavePath);
  191. extern int IsValidDirName (char *szPath);
  192. extern int ValidDirChars (char *szPath);
  193. extern void SetFileTimeDate( struct DIR *Dir );
  194. extern unsigned long ToLongTd( struct DIR *Dir );
  195. extern int ValidatePath ( char *szPath );
  196. extern int ValidateDir ( char *szPath );
  197. extern int IsFormatted ( int iDrv, struct BPB *Bpb, char *pchBuffer );
  198. extern int GetDiskHead ( unsigned uSec, struct BPB *Bpb );
  199. extern int GetDiskTrack  ( unsigned uSec, struct BPB *Bpb );
  200. extern long _dos_seek ( int Handle, long lOffset, int Mode );
  201. extern int _dos_dskreset ( void );
  202. extern int _dos_getdir  ( char *Buffer, int Drive );
  203. extern unsigned long GetDiskLabel( int iDrv, char *szLabel, struct BPB *Bpb );
  204. extern unsigned long SetDiskLabel( int iDrv, char *szLabel, struct BPB *Bpb );
  205. extern int ReadWriteBoot ( int iDosDrv, void *Buffer, int ReadWrite );
  206. extern int ReadWriteRoot ( int iDosDrv, struct BPB *Bpb, void *Buf,
  207.   int Sector, int ReadWrite );
  208. extern int ReadWriteFat ( int iDosDrv, struct BPB *Bpb, void *Buf,
  209.   int Sector, int ReadWrite );
  210. extern void interrupt cdecl far NewInt24 (unsigned es, unsigned ds,
  211. unsigned di, unsigned si,
  212. unsigned bp, unsigned sp,
  213. unsigned bx, unsigned dx,
  214. unsigned cx, unsigned ax );
  215. extern unsigned GetMaxSectorSize ( void );
  216. extern unsigned GetSectorSize ( unsigned char );
  217. /* FILE_LIB */
  218. extern int FileExists ( char *szFile );
  219. extern int IsDirEmpty ( char *szPath );
  220. extern int BigReadWrite ( int iFile,char far *Buf,long lBytes,int RdWr );
  221. extern int RenameFCB ( char *szFrom,char *szTo );
  222. extern int ReplaceFile ( char *szSource,char *szDestin );
  223. extern int RdWrSectors ( int iDrv, unsigned uSec, unsigned uNumSec,
  224.   char *puchBuf, struct BPB *Bpb, int RdWr );
  225. extern int CreatRootDir ( int iDrv, struct BPB *Bpb );
  226. extern int ScrubFatRoot ( int iDrv, struct BPB *Bpb );
  227. extern void ScrubFat  ( unsigned char *pchFat, unsigned Clusters );
  228. extern int WriteBoot ( int iDrv, struct BPB *Bpb, char *szLabel );
  229. extern long GetDiskFree  ( int DrvLetter );
  230. extern int GetDskFmtType ( void );
  231. extern int GetDisketteType( int Drv );
  232. extern int FindFirstHd ( void *Buffer );
  233. extern int GetDriveType ( unsigned char Drive, void *Buffer );
  234. extern void InitNew13 ( void *SectorBuffer );
  235. extern void RestoreOld13 ( void );
  236. extern unsigned long FloppySetDiskLabel( int iDrv, char *szLabel, struct BPB *Bpb );
  237. int FloppyWriteBoot( int iDrv, struct BPB *Bpb, char *szLabel );