windows-nt/Source/XPSP1/NT/base/boot/lib/etfsboot.h

208 lines
3.9 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
EtfsBoot.h
Abstract:
This module defines globally used procedure and data structures used
by Etfs boot.
Author:
Steve Collins [stevec] 25-Nov-1995
Revision History:
--*/
#ifndef _ETFSBOOT_
#define _ETFSBOOT_
//
// The following constants are values from the disk.
//
#define ELTORITO_VD_SECTOR (16)
#define ELTORITO_BRVD_SECTOR (17)
#define ET_SYS_ID "EL TORITO SPECIFICATION"
#define BRVD_VERSION_1 (1)
#define VD_BOOTREC (0)
typedef struct _RAW_ET_BRVD {
UCHAR BrIndicator; // boot record indicator = 0
UCHAR StandardId[5]; // volume structure standard id = "CD001"
UCHAR Version; // descriptor version number = 1
UCHAR BootSysId[32]; // boot system identifier = "EL TORITO SPECIFICATION"
UCHAR Unused1[32]; // unused = 0
ULONG BootCatPtr; // absolute pointer to first sector of boot catalog
UCHAR Reserved[1973]; // unused = 0
} RAW_ET_BRVD;
typedef RAW_ET_BRVD *PRAW_ET_BRVD;
//
// The following macros are used to recover data from the different
// volume descriptor structures.
//
#define RBRVD_BR_IND( r ) ( r->BrIndicator )
#define RBRVD_STD_ID( r ) ( r->StandardId )
#define RBRVD_VERSION( r ) ( r->Version )
#define RBRVD_SYS_ID( r ) ( r->BootSysId )
typedef struct _ETFS_STRUCTURE_CONTEXT {
//
// The following field is the sector offset of the start of
// directory data.
//
ULONG RootDirSectorOffset;
//
// The following field is the start of the sector containing the
// this directory.
//
ULONG RootDirDiskOffset;
//
// The following field is the size of the directory.
//
ULONG RootDirSize;
//
// The following field is the sector offset of the start of
// directory data.
//
ULONG DirSectorOffset;
//
// The following field is the start of the sector containing the
// this directory.
//
ULONG DirDiskOffset;
//
// The following field is the size of the directory.
//
ULONG DirSize;
//
// The following field indicates the size of the disk Logical Blocks.
//
ULONG LbnBlockSize;
//
// The following field indicates the number of logical blocks on the
// disk.
//
ULONG LogicalBlockCount;
//
// The following indicates whether this is an Iso or Hsg disk.
//
BOOLEAN IsIsoVol;
} ETFS_STRUCTURE_CONTEXT, *PETFS_STRUCTURE_CONTEXT;
//
// Define Etfs file context structure.
//
typedef struct _ETFS_FILE_CONTEXT {
//
// The following is the disk offset of the read position for the
// start of the file. This may include the above number of non-file
// bytes.
//
ULONG DiskOffset;
//
// The following field contains the size of the file, in bytes.
//
ULONG FileSize;
//
// The following field indicates whether this is a directory.
//
BOOLEAN IsDirectory;
} ETFS_FILE_CONTEXT, *PETFS_FILE_CONTEXT;
//
// Define file I/O prototypes.
//
ARC_STATUS
EtfsClose (
IN ULONG FileId
);
ARC_STATUS
EtfsOpen (
IN PCHAR OpenPath,
IN OPEN_MODE OpenMode,
OUT PULONG FileId
);
ARC_STATUS
EtfsRead (
IN ULONG FileId,
OUT PVOID Buffer,
IN ULONG Length,
OUT PULONG Count
);
ARC_STATUS
EtfsSeek (
IN ULONG FileId,
IN PLARGE_INTEGER Offset,
IN SEEK_MODE SeekMode
);
ARC_STATUS
EtfsWrite (
IN ULONG FileId,
IN PVOID Buffer,
IN ULONG Length,
OUT PULONG Count
);
ARC_STATUS
EtfsGetFileInformation (
IN ULONG FileId,
OUT PFILE_INFORMATION Buffer
);
ARC_STATUS
EtfsSetFileInformation (
IN ULONG FileId,
IN ULONG AttributeFlags,
IN ULONG AttributeMask
);
ARC_STATUS
EtfsInitialize(
VOID
);
#endif // _ETFSBOOT_