You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
214 lines
4.4 KiB
214 lines
4.4 KiB
#if !defined(NO_LEGACY_DRIVERS)
|
|
/*++
|
|
|
|
Copyright (c) 1989 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
drivesup.c
|
|
|
|
Abstract:
|
|
|
|
This module contains the subroutines for drive support. This includes
|
|
such things as how drive letters are assigned on a particular platform,
|
|
how device partitioning works, etc.
|
|
|
|
Author:
|
|
|
|
Darryl E. Havens (darrylh) 23-Apr-1992
|
|
|
|
Environment:
|
|
|
|
Kernel mode
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
#include "halp.h"
|
|
#include "bugcodes.h"
|
|
|
|
#include "ntddft.h"
|
|
#include "ntdddisk.h"
|
|
#include "ntdskreg.h"
|
|
#include "stdio.h"
|
|
#include "string.h"
|
|
|
|
|
|
VOID
|
|
HalpAssignDriveLetters(
|
|
PLOADER_PARAMETER_BLOCK LoaderBlock,
|
|
PSTRING NtDeviceName,
|
|
OUT PUCHAR NtSystemPath,
|
|
OUT PSTRING NtSystemPathString
|
|
);
|
|
|
|
NTSTATUS
|
|
HalpReadPartitionTable(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN ULONG SectorSize,
|
|
IN BOOLEAN ReturnRecognizedPartitions,
|
|
OUT PDRIVE_LAYOUT_INFORMATION *PartitionBuffer
|
|
);
|
|
|
|
NTSTATUS
|
|
HalpSetPartitionInformation(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN ULONG SectorSize,
|
|
IN ULONG PartitionNumber,
|
|
IN ULONG PartitionType
|
|
);
|
|
|
|
NTSTATUS
|
|
HalpWritePartitionTable(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN ULONG SectorSize,
|
|
IN ULONG SectorsPerTrack,
|
|
IN ULONG NumberOfHeads,
|
|
IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer
|
|
);
|
|
|
|
|
|
NTKERNELAPI
|
|
VOID
|
|
FASTCALL
|
|
IoAssignDriveLetters(
|
|
PLOADER_PARAMETER_BLOCK LoaderBlock,
|
|
PSTRING NtDeviceName,
|
|
OUT PUCHAR NtSystemPath,
|
|
OUT PSTRING NtSystemPathString
|
|
);
|
|
|
|
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
FASTCALL
|
|
IoReadPartitionTable(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN ULONG SectorSize,
|
|
IN BOOLEAN ReturnRecognizedPartitions,
|
|
OUT PDRIVE_LAYOUT_INFORMATION *PartitionBuffer
|
|
);
|
|
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
FASTCALL
|
|
IoSetPartitionInformation(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN ULONG SectorSize,
|
|
IN ULONG PartitionNumber,
|
|
IN ULONG PartitionType
|
|
);
|
|
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
FASTCALL
|
|
IoWritePartitionTable(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN ULONG SectorSize,
|
|
IN ULONG SectorsPerTrack,
|
|
IN ULONG NumberOfHeads,
|
|
IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer
|
|
);
|
|
|
|
#ifdef ALLOC_PRAGMA
|
|
#pragma alloc_text(PAGE, HalpAssignDriveLetters)
|
|
#pragma alloc_text(PAGE, HalpReadPartitionTable)
|
|
#pragma alloc_text(PAGE, HalpSetPartitionInformation)
|
|
#pragma alloc_text(PAGE, HalpWritePartitionTable)
|
|
#endif
|
|
|
|
|
|
VOID
|
|
HalpAssignDriveLetters(
|
|
PLOADER_PARAMETER_BLOCK LoaderBlock,
|
|
PSTRING NtDeviceName,
|
|
OUT PUCHAR NtSystemPath,
|
|
OUT PSTRING NtSystemPathString
|
|
)
|
|
{
|
|
|
|
//
|
|
// Stub to call extensible routine in ke so that hal vendors
|
|
// don't have to support.
|
|
//
|
|
|
|
IoAssignDriveLetters(
|
|
LoaderBlock,
|
|
NtDeviceName,
|
|
NtSystemPath,
|
|
NtSystemPathString
|
|
);
|
|
|
|
}
|
|
|
|
|
|
NTSTATUS
|
|
HalpReadPartitionTable(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN ULONG SectorSize,
|
|
IN BOOLEAN ReturnRecognizedPartitions,
|
|
OUT PDRIVE_LAYOUT_INFORMATION *PartitionBuffer
|
|
)
|
|
{
|
|
//
|
|
// Stub to call extensible routine in ke so that hal vendors
|
|
// don't have to support.
|
|
//
|
|
|
|
return IoReadPartitionTable(
|
|
DeviceObject,
|
|
SectorSize,
|
|
ReturnRecognizedPartitions,
|
|
PartitionBuffer
|
|
);
|
|
}
|
|
|
|
NTSTATUS
|
|
HalpSetPartitionInformation(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN ULONG SectorSize,
|
|
IN ULONG PartitionNumber,
|
|
IN ULONG PartitionType
|
|
)
|
|
{
|
|
//
|
|
// Stub to call extensible routine in ke so that hal vendors
|
|
// don't have to support.
|
|
//
|
|
|
|
return IoSetPartitionInformation(
|
|
DeviceObject,
|
|
SectorSize,
|
|
PartitionNumber,
|
|
PartitionType
|
|
);
|
|
|
|
}
|
|
|
|
|
|
NTSTATUS
|
|
HalpWritePartitionTable(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN ULONG SectorSize,
|
|
IN ULONG SectorsPerTrack,
|
|
IN ULONG NumberOfHeads,
|
|
IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer
|
|
)
|
|
{
|
|
|
|
//
|
|
// Stub to call extensible routine in ke so that hal vendors
|
|
// don't have to support.
|
|
//
|
|
|
|
return IoWritePartitionTable(
|
|
DeviceObject,
|
|
SectorSize,
|
|
SectorsPerTrack,
|
|
NumberOfHeads,
|
|
PartitionBuffer
|
|
);
|
|
}
|
|
#endif // NO_LEGACY_DRIVERS
|