ReactOS 0.4.16-dev-747-gbc52d5f
disk.h
Go to the documentation of this file.
1/*
2 * FreeLoader
3 * Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20#pragma once
21
22#include <reactos/rosioctl.h>
23
24/* FreeLoader-specific disk geometry structure */
25typedef struct _GEOMETRY
26{
33
34#include <pshpack1.h>
35
36/*
37 * Extended disk geometry (Int13 / AH=48h)
38 * See also ntdddisk.h DISK_EX_INT13_INFO
39 */
40typedef struct _EXTENDED_GEOMETRY
41{
51
52/*
53 * Define the structure of a partition table entry
54 */
56{
57 UCHAR BootIndicator; // 0x00 - non-bootable partition,
58 // 0x80 - bootable partition (one partition only)
59 UCHAR StartHead; // Beginning head number
60 UCHAR StartSector; // Beginning sector (2 high bits of cylinder #)
61 UCHAR StartCylinder; // Beginning cylinder# (low order bits of cylinder #)
62 UCHAR SystemIndicator; // System indicator
63 UCHAR EndHead; // Ending head number
64 UCHAR EndSector; // Ending sector (2 high bits of cylinder #)
65 UCHAR EndCylinder; // Ending cylinder# (low order bits of cylinder #)
66 ULONG SectorCountBeforePartition; // Number of sectors preceding the partition
67 ULONG PartitionSectorCount; // Number of sectors in the partition
69
70/*
71 * Define the structure of the master boot record
72 */
73typedef struct _MASTER_BOOT_RECORD
74{
76 ULONG Signature; /* 0x1B8 */
77 USHORT Reserved; /* 0x1BC */
81
82#include <poppack.h>
83
84/*
85 * Partition type defines (of PSDK)
86 */
87#define PARTITION_ENTRY_UNUSED 0x00 // Entry unused
88#define PARTITION_FAT_12 0x01 // 12-bit FAT entries
89#define PARTITION_XENIX_1 0x02 // Xenix
90#define PARTITION_XENIX_2 0x03 // Xenix
91#define PARTITION_FAT_16 0x04 // 16-bit FAT entries
92#define PARTITION_EXTENDED 0x05 // Extended partition entry
93#define PARTITION_HUGE 0x06 // Huge partition MS-DOS V4
94#define PARTITION_IFS 0x07 // IFS Partition
95#define PARTITION_OS2BOOTMGR 0x0A // OS/2 Boot Manager/OPUS/Coherent swap
96#define PARTITION_FAT32 0x0B // FAT32
97#define PARTITION_FAT32_XINT13 0x0C // FAT32 using extended int13 services
98#define PARTITION_XINT13 0x0E // Win95 partition using extended int13 services
99#define PARTITION_XINT13_EXTENDED 0x0F // Same as type 5 but uses extended int13 services
100#define PARTITION_NTFS 0x17 // NTFS
101#define PARTITION_PREP 0x41 // PowerPC Reference Platform (PReP) Boot Partition
102#define PARTITION_LDM 0x42 // Logical Disk Manager partition
103#define PARTITION_UNIX 0x63 // Unix
104#define VALID_NTFT 0xC0 // NTFT uses high order bits
105#define PARTITION_NTFT 0x80 // NTFT partition
106#define PARTITION_GPT 0xEE // GPT protective partition
107#ifdef __REACTOS__
108#define PARTITION_OLD_LINUX 0x43
109#define PARTITION_LINUX 0x83
110#endif
111
113//
114// PC x86/64 BIOS Disk Functions (pcdisk.c)
115//
117#if defined(__i386__) || defined(_M_AMD64)
119#endif // defined __i386__ || defined(_M_AMD64)
120
121/* Buffer for disk reads (hwdisk.c) */
122extern PVOID DiskReadBuffer;
124
125
126/* ARC path of the boot drive and partition */
128
129
131//
132// Fixed Disk Partition Management Functions
133//
135
136VOID
138 IN UCHAR DriveNumber);
139
142 IN UCHAR DriveNumber,
143 OUT PPARTITION_TABLE_ENTRY PartitionTableEntry,
144 OUT PULONG BootPartition);
145
148 IN UCHAR DriveNumber,
150 OUT PPARTITION_TABLE_ENTRY PartitionTableEntry);
151
152/*
153 * SCSI support (disk/scsiport.c)
154 */
156
157PCCHAR FrLdrGetBootPath(VOID);
unsigned char BOOLEAN
#define __cdecl
Definition: accygwin.h:79
ULONG FrldrGetBootPartition(VOID)
Definition: freeldr.c:206
struct _PARTITION_TABLE_ENTRY PARTITION_TABLE_ENTRY
struct _EXTENDED_GEOMETRY EXTENDED_GEOMETRY
struct _EXTENDED_GEOMETRY * PEXTENDED_GEOMETRY
CCHAR FrLdrBootPath[MAX_PATH]
Definition: freeldr.c:29
PCCHAR FrLdrGetBootPath(VOID)
Definition: freeldr.c:196
PVOID DiskReadBuffer
Definition: hwdisk.c:49
struct _PARTITION_TABLE_ENTRY * PPARTITION_TABLE_ENTRY
struct _MASTER_BOOT_RECORD * PMASTER_BOOT_RECORD
ULONG LoadBootDeviceDriver(VOID)
Definition: scsiport.c:1635
BOOLEAN DiskGetPartitionEntry(IN UCHAR DriveNumber, IN ULONG PartitionNumber, OUT PPARTITION_TABLE_ENTRY PartitionTableEntry)
Definition: partition.c:407
UCHAR FrldrGetBootDrive(VOID)
Definition: freeldr.c:201
struct _MASTER_BOOT_RECORD MASTER_BOOT_RECORD
struct _GEOMETRY * PGEOMETRY
struct _GEOMETRY GEOMETRY
BOOLEAN DiskGetBootPartitionEntry(IN UCHAR DriveNumber, OUT PPARTITION_TABLE_ENTRY PartitionTableEntry, OUT PULONG BootPartition)
Definition: partition.c:367
SIZE_T DiskReadBufferSize
Definition: hwdisk.c:50
VOID DiskDetectPartitionType(IN UCHAR DriveNumber)
Definition: partition.c:314
#define MAX_PATH
Definition: compat.h:34
VOID __cdecl DiskStopFloppyMotor(VOID)
Definition: pc98hw.c:1235
unsigned short USHORT
Definition: pedump.c:61
ULONGLONG Sectors
Definition: disk.h:47
USHORT Size
Definition: disk.h:42
USHORT Flags
Definition: disk.h:43
ULONG Heads
Definition: disk.h:45
USHORT BytesPerSector
Definition: disk.h:48
ULONG SectorsPerTrack
Definition: disk.h:46
ULONG Cylinders
Definition: disk.h:44
ULONG PDPTE
Definition: disk.h:49
Definition: disk.h:26
ULONG BytesPerSector
Number of bytes per sector.
Definition: disk.h:30
ULONG Cylinders
Number of cylinders on the disk.
Definition: disk.h:27
ULONGLONG Sectors
Total number of disk sectors/LBA blocks.
Definition: disk.h:31
ULONG SectorsPerTrack
Number of sectors per track.
Definition: disk.h:29
ULONG Heads
Number of heads on the disk.
Definition: disk.h:28
UCHAR MasterBootRecordCodeAndData[0x1b8]
Definition: disk.h:75
USHORT MasterBootRecordMagic
Definition: disk.h:79
PARTITION_TABLE_ENTRY PartitionTable[4]
Definition: disk.h:78
USHORT Reserved
Definition: disk.h:77
ULONG Signature
Definition: disk.h:76
Definition: disk.h:56
ULONG SectorCountBeforePartition
Definition: disk.h:66
ULONG PartitionSectorCount
Definition: disk.h:67
UCHAR BootIndicator
Definition: disk.h:57
UCHAR StartCylinder
Definition: disk.h:61
UCHAR StartSector
Definition: disk.h:60
UCHAR SystemIndicator
Definition: disk.h:62
UCHAR EndHead
Definition: disk.h:63
UCHAR EndSector
Definition: disk.h:64
UCHAR EndCylinder
Definition: disk.h:65
UCHAR StartHead
Definition: disk.h:59
uint32_t * PULONG
Definition: typedefs.h:59
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
uint64_t ULONGLONG
Definition: typedefs.h:67
#define OUT
Definition: typedefs.h:40
char CCHAR
Definition: typedefs.h:51
_In_ ULONG _In_ ULONG PartitionNumber
Definition: iofuncs.h:2061
unsigned char UCHAR
Definition: xmlstorage.h:181