#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