1 /* 2 * COPYRIGHT: GPL - See COPYING in the top level directory 3 * PROJECT: ReactOS Virtual DOS Machine 4 * FILE: subsystems/mvdm/ntvdm/hardware/disk.h 5 * PURPOSE: Generic Disk Controller (Floppy, Hard Disk, ...) 6 * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr) 7 */ 8 9 #ifndef _DISK_H_ 10 #define _DISK_H_ 11 12 /* DEFINES ********************************************************************/ 13 14 // https://learn.microsoft.com/en-us/windows/win32/api/winioctl/ns-winioctl-disk_geometry 15 // https://learn.microsoft.com/en-us/windows/win32/api/winioctl/ns-winioctl-disk_int13_info 16 // https://learn.microsoft.com/en-us/windows/win32/api/winioctl/ns-winioctl-disk_ex_int13_info 17 // https://learn.microsoft.com/en-us/windows/win32/api/winioctl/ne-winioctl-media_type 18 19 typedef struct _DISK_INFO 20 { 21 WORD Cylinders; // DWORD 22 BYTE Heads; // DWORD 23 BYTE Sectors; // QWORD 24 // SectorPerTrack; ??? // DWORD 25 WORD SectorSize; 26 } DISK_INFO, *PDISK_INFO; 27 28 typedef struct _DISK_IMAGE 29 { 30 DISK_INFO DiskInfo; 31 BYTE DiskType; // Type to return from BIOS & CMOS 32 33 BYTE LastOperationStatus; 34 // CurrentPos; 35 36 HANDLE hDisk; 37 BOOLEAN ReadOnly; 38 // WCHAR ImageFile[MAX_PATH]; 39 40 } DISK_IMAGE, *PDISK_IMAGE; 41 42 typedef enum _DISK_TYPE 43 { 44 FLOPPY_DISK, 45 HARD_DISK, 46 MAX_DISK_TYPE 47 } DISK_TYPE; 48 49 /* FUNCTIONS ******************************************************************/ 50 51 BOOLEAN 52 IsDiskPresent(IN PDISK_IMAGE DiskImage); 53 54 BYTE 55 SeekDisk(IN PDISK_IMAGE DiskImage, 56 IN WORD Cylinder, 57 IN BYTE Head, 58 IN BYTE Sector); 59 60 BYTE 61 ReadDisk(IN PDISK_IMAGE DiskImage, 62 IN WORD Cylinder, 63 IN BYTE Head, 64 IN BYTE Sector, 65 IN BYTE NumSectors); 66 67 BYTE 68 WriteDisk(IN PDISK_IMAGE DiskImage, 69 IN WORD Cylinder, 70 IN BYTE Head, 71 IN BYTE Sector, 72 IN BYTE NumSectors); 73 74 PDISK_IMAGE 75 RetrieveDisk(IN DISK_TYPE DiskType, 76 IN ULONG DiskNumber); 77 78 BOOLEAN 79 MountDisk(IN DISK_TYPE DiskType, 80 IN ULONG DiskNumber, 81 IN PCWSTR FileName, 82 IN BOOLEAN ReadOnly); 83 84 BOOLEAN 85 UnmountDisk(IN DISK_TYPE DiskType, 86 IN ULONG DiskNumber); 87 88 BOOLEAN DiskCtrlInitialize(VOID); 89 VOID DiskCtrlCleanup(VOID); 90 91 #endif /* _DISK_H_ */ 92