|
|
/*++
Copyright (c) 1993 Microsoft Corporation
Module Name:
spdisk.h
Abstract:
Public header file for disk support module in text setup.
Author:
Ted Miller (tedm) 27-Aug-1993
Revision History:
--*/
#ifndef _SPDISK_
#define _SPDISK_
//
// The following will be TRUE if hard disks have been determined
// successfully (ie, if SpDetermineHardDisks was successfully called).
//
extern BOOLEAN HardDisksDetermined;
NTSTATUS SpDetermineHardDisks( IN PVOID SifHandle );
NTSTATUS SpOpenPartition( IN PWSTR DiskDevicePath, IN ULONG PartitionNumber, OUT HANDLE *Handle, IN BOOLEAN NeedWriteAccess );
#define SpOpenPartition0(path,handle,write) SpOpenPartition((path),0,(handle),(write))
NTSTATUS SpReadWriteDiskSectors( IN HANDLE Handle, IN ULONGLONG SectorNumber, IN ULONG SectorCount, IN ULONG BytesPerSector, IN OUT PVOID AlignedBuffer, IN BOOLEAN Write );
ULONG SpArcDevicePathToDiskNumber( IN PWSTR ArcPath );
#define DISK_DEVICE_NAME_BASE L"\\device\\harddisk"
//
// Define enumerated type for possible states a hard disk can be in.
//
typedef enum { DiskOnLine, DiskOffLine } DiskStatus;
//
// Int13 hooker types.
//
typedef enum { NoHooker = 0, HookerEZDrive, HookerOnTrackDiskManager, HookerMax } Int13HookerType;
//
// Define per-disk structure used internally to track hard disks.
//
typedef struct _HARD_DISK {
//
// Cylinder count we got back from the i/o system.
//
ULONGLONG CylinderCount;
//
// Path in the NT namespace of the device.
//
WCHAR DevicePath[(sizeof(DISK_DEVICE_NAME_BASE)+sizeof(L"000"))/sizeof(WCHAR)];
//
// Geometry information.
//
DISK_GEOMETRY Geometry; ULONG SectorsPerCylinder; ULONGLONG DiskSizeSectors; ULONG DiskSizeMB;
//
// Characteristics of the device (remoavable, etc).
//
ULONG Characteristics;
//
// Status of the device.
//
DiskStatus Status;
//
// Human-readable description of the disk device.
//
WCHAR Description[256];
//
// If the disk is a scsi disk, then the shortname of the
// scsi miniport driver is stored here. If this string
// is empty, then the disk is not a scsi disk.
//
WCHAR ScsiMiniportShortname[24];
//
// scsi-style ARC path of the disk device if possible for the disk.
// Empty string if not. This is used to translate between scsi-style ARC
// NT names because the 'firmware' cannot see scsi devices without BIOSes
// and so they do not appear in the arc disk info passed by the osloader.
// (IE, there are no arc names in the system for such disks).
//
WCHAR ArcPath[128];
//
// Int13 hooker support (ie, EZDrive).
//
Int13HookerType Int13Hooker;
//
// This tells us whether the disk is PCMCIA or not.
//
BOOLEAN PCCard;
//
// Contains the signature of the disk. This is used during the
// identification of FT partitions, on the upgrade case.
//
ULONG Signature;
//
// MBR type: formatted for PC/AT or NEC98.
//
UCHAR FormatType;
//
// Wether the disk completely free
//
BOOLEAN NewDisk;
//
// The drive information we read
//
DRIVE_LAYOUT_INFORMATION_EX DriveLayout; #if 0
//
// Number of partition tables (are different between PC/AT and NEC98).
//
USHORT MaxPartitionTables; #endif //0
} HARD_DISK, *PHARD_DISK;
#define DISK_FORMAT_TYPE_UNKNOWN 0x00
#define DISK_FORMAT_TYPE_PCAT 0x01
#define DISK_FORMAT_TYPE_NEC98 0x02
#define DISK_FORMAT_TYPE_GPT 0x03
#define DISK_FORMAT_TYPE_RAW 0x04
#define DISK_TAG_TYPE_UNKNOWN L"[Unknown]"
#define DISK_TAG_TYPE_PCAT L"[MBR]"
#define DISK_TAG_TYPE_NEC98 L"[NEC98]"
#define DISK_TAG_TYPE_GPT L"[GPT]"
#define DISK_TAG_TYPE_RAW L"[Raw]"
#define DISK_TAG_START_CHAR L'['
extern WCHAR *DiskTags[];
VOID SpAppendDiskTag( IN PHARD_DISK Disk );
//
// These two globals track the hard disks attached to the computer.
//
extern PHARD_DISK HardDisks; extern ULONG HardDiskCount;
//
// These flags get set to TRUE if we find any disks owned
// by ATDISK or ABIOSDSK.
//
extern BOOLEAN AtDisksExist,AbiosDisksExist;
#endif // ndef _SPDISK_
|