Added hal dispatch tables.

Implemented PhysicalDrive links.
Started drive letter assignment.

svn path=/trunk/; revision=1214
This commit is contained in:
Eric Kohl 2000-06-30 22:53:32 +00:00
parent cc95f73421
commit f3e6819471
14 changed files with 644 additions and 201 deletions

View file

@ -1,4 +1,4 @@
/* $Id: halddk.h,v 1.1 2000/06/29 23:35:11 dwelch Exp $
/* $Id: halddk.h,v 1.2 2000/06/30 22:49:26 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -69,6 +69,224 @@ typedef struct _DEVICE_DESCRIPTION
typedef BOOLEAN (*PHAL_RESET_DISPLAY_PARAMETERS)(ULONG Columns, ULONG Rows);
/* Hal dispatch table */
typedef enum _HAL_QUERY_INFORMATION_CLASS
{
HalInstalledBusInformation,
HalProfileSourceInformation,
HalSystemDockInformation,
HalPowerInformation,
HalProcessorSpeedInformation,
HalCallbackInformation,
HalMapRegisterInformation,
HalMcaLogInformation,
HalFrameBufferCachingInformation,
HalDisplayBiosInformation
/* information levels >= 0x8000000 reserved for OEM use */
} HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS;
typedef enum _HAL_SET_INFORMATION_CLASS
{
HalProfileSourceInterval,
HalProfileSourceInterruptHandler,
HalMcaRegisterDriver
} HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS;
typedef
NTSTATUS
(*pHalQuerySystemInformation) (
IN HAL_QUERY_INFORMATION_CLASS InformationClass,
IN ULONG BufferSize,
IN OUT PVOID Buffer,
OUT PULONG ReturnedLength
);
typedef
NTSTATUS
(*pHalSetSystemInformation) (
IN HAL_SET_INFORMATION_CLASS InformationClass,
IN ULONG BufferSize,
IN PVOID Buffer
);
typedef
NTSTATUS
(*pHalQueryBusSlots) (
// IN PBUS_HANDLER BusHandler,
IN PVOID BusHandler,
IN ULONG BufferSize,
OUT PULONG SlotNumbers,
OUT PULONG ReturnedLength
);
/* Control codes of HalDeviceControl function */
#define BCTL_EJECT 0x0001
#define BCTL_QUERY_DEVICE_ID 0x0002
#define BCTL_QUERY_DEVICE_UNIQUE_ID 0x0003
#define BCTL_QUERY_DEVICE_CAPABILITIES 0x0004
#define BCTL_QUERY_DEVICE_RESOURCES 0x0005
#define BCTL_QUERY_DEVICE_RESOURCE_REQUIREMENTS 0x0006
#define BCTL_QUERY_EJECT 0x0007
#define BCTL_SET_LOCK 0x0008
#define BCTL_SET_POWER 0x0009
#define BCTL_SET_RESUME 0x000A
#define BCTL_SET_DEVICE_RESOURCES 0x000B
/* Defines for BCTL structures */
typedef struct
{
BOOLEAN PowerSupported;
BOOLEAN ResumeSupported;
BOOLEAN LockSupported;
BOOLEAN EjectSupported;
BOOLEAN Removable;
} BCTL_DEVICE_CAPABILITIES, *PBCTL_DEVICE_CAPABILITIES;
typedef struct _DEVICE_CONTROL_CONTEXT
{
NTSTATUS Status;
// PDEVICE_HANDLER_OBJECT DeviceHandler;
PVOID DeviceHandler;
PDEVICE_OBJECT DeviceObject;
ULONG ControlCode;
PVOID Buffer;
PULONG BufferLength;
PVOID Context;
} DEVICE_CONTROL_CONTEXT, *PDEVICE_CONTROL_CONTEXT;
typedef
VOID
(*PDEVICE_CONTROL_COMPLETION) (
IN PDEVICE_CONTROL_CONTEXT ControlContext
);
typedef
NTSTATUS
(*pHalDeviceControl) (
// IN PDEVICE_HANDLER_OBJECT DeviceHandler,
IN PVOID DeviceHandler,
IN PDEVICE_OBJECT DeviceObject,
IN ULONG ControlCode,
IN OUT PVOID Buffer OPTIONAL,
IN OUT PULONG BufferLength OPTIONAL,
IN PVOID Context,
IN PDEVICE_CONTROL_COMPLETION CompletionRoutine
);
typedef
VOID
(FASTCALL *pHalExamineMBR) (
IN PDEVICE_OBJECT DeviceObject,
IN ULONG SectorSize,
IN ULONG MBRTypeIdentifier,
OUT PVOID * Buffer
);
typedef
VOID
(FASTCALL *pHalIoAssignDriveLetters) (
IN PLOADER_PARAMETER_BLOCK LoaderBlock,
IN PSTRING NtDeviceName,
OUT PUCHAR NtSystemPath,
OUT PSTRING NtSystemPathString
);
typedef
NTSTATUS
(FASTCALL *pHalIoReadPartitionTable) (
IN PDEVICE_OBJECT DeviceObject,
IN ULONG SectorSize,
IN BOOLEAN ReturnRecognizedPartitions,
OUT PDRIVE_LAYOUT_INFORMATION * PartitionBuffer
);
typedef
NTSTATUS
(FASTCALL *pHalIoSetPartitionInformation) (
IN PDEVICE_OBJECT DeviceObject,
IN ULONG SectorSize,
IN ULONG PartitionNumber,
IN ULONG PartitionType
);
typedef
NTSTATUS
(FASTCALL *pHalIoWritePartitionTable) (
IN PDEVICE_OBJECT DeviceObject,
IN ULONG SectorSize,
IN ULONG SectorsPerTrack,
IN ULONG NumberOfHeads,
IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer
);
typedef
//PBUS_HANDLER
PVOID
(FASTCALL *pHalHandlerForBus) (
IN INTERFACE_TYPE InterfaceType,
IN ULONG BusNumber
);
typedef
VOID
(FASTCALL *pHalReferenceBusHandler) (
// IN PBUS_HANDLER BusHandler
IN PVOID BusHandler
);
typedef struct _HAL_DISPATCH
{
ULONG Version;
pHalQuerySystemInformation HalQuerySystemInformation;
pHalSetSystemInformation HalSetSystemInformation;
pHalQueryBusSlots HalQueryBusSlots;
pHalDeviceControl HalDeviceControl;
pHalExamineMBR HalExamineMBR;
pHalIoAssignDriveLetters HalIoAssignDriveLetters;
pHalIoReadPartitionTable HalIoReadPartitionTable;
pHalIoSetPartitionInformation HalIoSetPartitionInformation;
pHalIoWritePartitionTable HalIoWritePartitionTable;
pHalHandlerForBus HalReferenceHandlerForBus;
pHalReferenceBusHandler HalReferenceBusHandler;
pHalReferenceBusHandler HalDereferenceBusHandler;
} HAL_DISPATCH, *PHAL_DISPATCH;
#define HAL_DISPATCH_VERSION 1
#ifdef __NTOSKRNL__
extern HAL_DISPATCH EXPORTED HalDispatchTable;
#else
extern HAL_DISPATCH IMPORTED HalDispatchTable;
#endif
/* Hal private dispatch table */
typedef struct _HAL_PRIVATE_DISPATCH
{
ULONG Version;
} HAL_PRIVATE_DISPATCH, *PHAL_PRIVATE_DISPATCH;
#define HAL_PRIVATE_DISPATCH_VERSION 1
#ifdef __NTOSKRNL__
extern HAL_PRIVATE_DISPATCH EXPORTED HalPrivateDispatchTable;
#else
extern HAL_PRIVATE_DISPATCH IMPORTED HalPrivateDispatchTable;
#endif
VOID
STDCALL

View file

@ -1,6 +1,6 @@
#ifndef _INCLUDE_DDK_IOFUNCS_H
#define _INCLUDE_DDK_IOFUNCS_H
/* $Id: iofuncs.h,v 1.14 2000/06/13 15:50:51 ekohl Exp $ */
/* $Id: iofuncs.h,v 1.15 2000/06/30 22:49:26 ekohl Exp $ */
/* --- EXPORTED BY NTOSKRNL --- */
@ -1111,11 +1111,12 @@ IofCompleteRequest (
VOID
STDCALL
IoAssignDriveLetters (
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2,
DWORD Unknown3
IN PLOADER_PARAMETER_BLOCK LoaderBlock,
IN PSTRING NtDeviceName,
OUT PUCHAR NtSystemPath,
OUT PSTRING NtSystemPathString
);
BOOLEAN
STDCALL
IoFlushAdapterBuffers (
@ -1126,11 +1127,13 @@ IoFlushAdapterBuffers (
ULONG Length,
BOOLEAN WriteToDevice
);
VOID
STDCALL
IoFreeAdapterChannel (
PADAPTER_OBJECT AdapterObject
);
VOID
STDCALL
IoFreeMapRegisters (
@ -1138,6 +1141,7 @@ IoFreeMapRegisters (
PVOID MapRegisterBase,
ULONG NumberOfMapRegisters
);
PHYSICAL_ADDRESS
STDCALL
IoMapTransfer (
@ -1148,14 +1152,16 @@ IoMapTransfer (
PULONG Length,
BOOLEAN WriteToDevice
);
NTSTATUS
STDCALL
IoReadPartitionTable (
PDEVICE_OBJECT DeviceObject,
ULONG SectorSize,
BOOLEAN ReturnedRecognizedPartitions,
struct _DRIVE_LAYOUT_INFORMATION ** PBuffer
PDEVICE_OBJECT DeviceObject,
ULONG SectorSize,
BOOLEAN ReturnedRecognizedPartitions,
PDRIVE_LAYOUT_INFORMATION * PartitionBuffer
);
NTSTATUS
STDCALL
IoSetPartitionInformation (
@ -1164,21 +1170,20 @@ IoSetPartitionInformation (
ULONG PartitionNumber,
ULONG PartitionType
);
NTSTATUS
STDCALL
IoWritePartitionTable (
PDEVICE_OBJECT DeviceObject,
ULONG SectorSize,
ULONG SectorsPerTrack,
ULONG NumberOfHeads,
struct _DRIVE_LAYOUT_INFORMATION* PBuffer
PDEVICE_OBJECT DeviceObject,
ULONG SectorSize,
ULONG SectorsPerTrack,
ULONG NumberOfHeads,
PDRIVE_LAYOUT_INFORMATION * PartitionBuffer
);
/* --- --- --- INTERNAL or REACTOS ONLY --- --- --- */
/*
* FUNCTION: Registers the driver with WMI
* ARGUMENTS:
@ -1186,120 +1191,17 @@ IoWritePartitionTable (
* Action = Action to take
* RETURNS: Status (?)
*/
//NTSTATUS IoWMIRegistrationControl(DeviceObject, WMIREGACTION Action);
/*
NTSTATUS
IoWMIRegistrationControl (
PDEVICE_OBJECT DeviceObject,
WMIREGACTION Action);
*/
/*
* FUNCTION: Returns a pointer to the callers
* stack location in the irp
*/
/*
PIO_STACK_LOCATION
IoGetCurrentIrpStackLocation (
IRP * irp
);
*/
/*
ULONG
IoGetFunctionCodeFromCtlCode (
ULONG ControlCode
);
*/
/*
* FUNCTION:
*/
/*
PIO_STACK_LOCATION
IoGetNextIrpStackLocation (
IRP * irp
);
*/
/*
VOID
IoInitializeDpcRequest (
PDEVICE_OBJECT DeviceObject,
PIO_DPC_ROUTINE DpcRoutine
);
*/
/*
BOOLEAN
IoIsErrorUserInduced (
NTSTATUS Status
);
*/
BOOLEAN
IoIsTotalDeviceFailure (
NTSTATUS Status
);
/*
* FUNCTION: Marks an IRP as pending
* ARGUMENTS:
* Irp = Irp to mark
* NOTE: If a driver doesn't complete the irp in its dispatch routine it
* must mark it pending otherwise the I/O manager will complete it on
* return from the dispatch routine.
*/
/*
VOID
IoMarkIrpPending (
PIRP Irp
);
*/
/*
VOID
IoRequestDpc (
PDEVICE_OBJECT DeviceObject,
PIRP Irp,
PVOID Context
);
*/
/*
PDRIVER_CANCEL
IoSetCancelRoutine (
PIRP Irp,
PDRIVER_CANCEL CancelRoutine
);
*/
/*
VOID
IoSetCompletionRoutine (
PIRP Irp,
PIO_COMPLETION_ROUTINE CompletionRoutine,
PVOID Context,
BOOLEAN InvokeOnSuccess,
BOOLEAN InvokeOnError,
BOOLEAN InvokeOnCancel
);
*/
/*
VOID
IoSetNextIrpStackLocation (
PIRP Irp
);
*/
/*
* FUNCTION: Determines the size of an IRP
* ARGUMENTS:
* StackSize = number of stack locations in the IRP
* RETURNS: The size of the IRP in bytes
*/
/*
USHORT
IoSizeOfIrp (
CCHAR StackSize
);
*/
#if 0
// Preliminary guess
NTKERNELAPI
NTSTATUS
IoQueryFileVolumeInformation (
IN PFILE_OBJECT FileObject,
IN FS_INFORMATION_CLASS FsInformationClass,
IN ULONG Length,
OUT PVOID FsInformation,
OUT PULONG ReturnedLength
);
#endif
#endif /* ndef _INCLUDE_DDK_IOFUNCS_H */

View file

@ -3,17 +3,56 @@
#ifndef __INCLUDE_DDK_KETYPES_H
#define __INCLUDE_DDK_KETYPES_H
typedef struct _LOADER_PARAMETER_BLOCK
{
/*
* Magic value (useless really)
*/
unsigned int magic;
/*
* Cursor position
*/
unsigned int cursorx;
unsigned int cursory;
/*
* Number of files (including the kernel) loaded
*/
unsigned int nr_files;
/*
* Range of physical memory being used by the system
*/
unsigned int start_mem;
unsigned int end_mem;
/*
* List of module lengths (terminated by a 0)
*/
unsigned int module_length[64];
/*
* Kernel parameter string
*/
char kernel_parameters[256];
} LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK;
#ifdef __NTOSKRNL__
extern CHAR EXPORTED KeNumberProcessors;
extern LOADER_PARAMETER_BLOCK EXPORTED KeLoaderBlock;
#else
extern CHAR IMPORTED KeNumberProcessors;
extern LOADER_PARAMETER_BLOCK IMPORTED KeLoaderBlock;
#endif
struct _KMUTANT;
typedef LONG KPRIORITY;
typedef VOID (*PKBUGCHECK_CALLBACK_ROUTINE)(PVOID Buffer, ULONG Length);
typedef BOOLEAN (*PKSYNCHRONIZE_ROUTINE)(PVOID SynchronizeContext);
@ -27,8 +66,8 @@ typedef VOID (*PKKERNEL_ROUTINE)(struct _KAPC* Apc,
PVOID* NormalContext,
PVOID* SystemArgument1,
PVOID* SystemArgument2);
typedef VOID (*PKRUNDOWN_ROUTINE)(struct _KAPC* Apc);
typedef VOID (*PKRUNDOWN_ROUTINE)(struct _KAPC* Apc);
struct _DISPATCHER_HEADER;
@ -85,10 +124,10 @@ typedef struct _KTIMER
BOOLEAN signaled;
BOOLEAN running;
TIMER_TYPE type;
ULONG period;
ULONG period;
} KTIMER, *PKTIMER;
*/
struct _KSPIN_LOCK;
typedef struct _KSPIN_LOCK
@ -103,7 +142,7 @@ typedef struct _KDEVICE_QUEUE
KSPIN_LOCK Lock;
} KDEVICE_QUEUE, *PKDEVICE_QUEUE;
typedef struct _KAPC
{
CSHORT Type;
@ -132,7 +171,7 @@ typedef struct
ULONG Checksum;
UCHAR State;
} KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
typedef struct _KMUTEX
{
DISPATCHER_HEADER Header;
@ -141,12 +180,12 @@ typedef struct _KMUTEX
BOOLEAN Abandoned;
UCHAR ApcDisable;
} KMUTEX, *PKMUTEX, KMUTANT, *PKMUTANT;
typedef struct
{
DISPATCHER_HEADER Header;
LONG Limit;
} KSEMAPHORE, *PKSEMAPHORE;
} KSEMAPHORE, *PKSEMAPHORE;
typedef struct _KEVENT
{
@ -177,8 +216,8 @@ typedef struct _KDPC
{
SHORT Type;
UCHAR Number;
UCHAR Importance;
LIST_ENTRY DpcListEntry;
UCHAR Importance;
LIST_ENTRY DpcListEntry;
PKDEFERRED_ROUTINE DeferredRoutine;
PVOID DeferredContext;
PVOID SystemArgument1;

View file

@ -1,4 +1,4 @@
/* $Id: ntddk.h,v 1.14 2000/06/29 23:35:12 dwelch Exp $
/* $Id: ntddk.h,v 1.15 2000/06/30 22:49:26 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -24,9 +24,10 @@ extern "C"
#define FASTCALL STDCALL
#endif
#include <ntos/types.h>
#include <ntos/types.h>
#include <ntos/disk.h>
#include <napi/types.h>
#include <ddk/status.h>
#include <ddk/ntdef.h>
#include <ddk/defines.h>
@ -42,22 +43,22 @@ extern "C"
#include <ddk/extypes.h>
#include <ddk/pstypes.h>
#include <ddk/zwtypes.h>
#include <ddk/ioctrl.h>
#include <ddk/ioctrl.h>
#include <ddk/rtl.h>
#include <ddk/halddk.h>
#include <ddk/zw.h>
#include <ddk/cmfuncs.h>
#include <ddk/exfuncs.h>
#include <ddk/mmfuncs.h>
#include <ddk/kdfuncs.h>
#include <ddk/kefuncs.h>
#include <ddk/iofuncs.h>
#include <ddk/iofuncs.h>
#include <ddk/psfuncs.h>
#include <ddk/obfuncs.h>
#include <ddk/dbgfuncs.h>
#include <ddk/sefuncs.h>
#include <ddk/sefuncs.h>
#ifdef __cplusplus
};
#endif

View file

@ -12,21 +12,21 @@
#ifndef __INCLUDE_DISK_H
#define __INCLUDE_DISK_H
typedef enum _MEDIA_TYPE {
Unknown,
F5_1Pt2_512,
F3_1Pt44_512,
F3_2Pt88_512,
F3_20Pt8_512,
F3_720_512,
F5_360_512,
F5_320_512,
F5_320_1024,
F5_180_512,
F5_160_512,
RemovableMedia,
FixedMedia
} MEDIA_TYPE;
typedef enum _MEDIA_TYPE {
Unknown,
F5_1Pt2_512,
F3_1Pt44_512,
F3_2Pt88_512,
F3_20Pt8_512,
F3_720_512,
F5_360_512,
F5_320_512,
F5_320_1024,
F5_180_512,
F5_160_512,
RemovableMedia,
FixedMedia
} MEDIA_TYPE;
typedef struct _PARTITION_INFORMATION {
BYTE PartitionType;
@ -38,19 +38,19 @@ typedef struct _PARTITION_INFORMATION {
LARGE_INTEGER HiddenSectors;
} PARTITION_INFORMATION;
typedef struct _DRIVE_LAYOUT_INFORMATION {
DWORD PartitionCount;
DWORD Signature;
PARTITION_INFORMATION PartitionEntry[1];
} DRIVE_LAYOUT_INFORMATION;
typedef struct _DRIVE_LAYOUT_INFORMATION {
DWORD PartitionCount;
DWORD Signature;
PARTITION_INFORMATION PartitionEntry[1];
} DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION;
typedef struct _DISK_GEOMETRY {
LARGE_INTEGER Cylinders;
MEDIA_TYPE MediaType;
DWORD TracksPerCylinder;
DWORD SectorsPerTrack;
DWORD BytesPerSector;
} DISK_GEOMETRY ;
typedef struct _DISK_GEOMETRY {
LARGE_INTEGER Cylinders;
MEDIA_TYPE MediaType;
DWORD TracksPerCylinder;
DWORD SectorsPerTrack;
DWORD BytesPerSector;
} DISK_GEOMETRY ;
#endif /* __INCLUDE_DISK_H */

View file

@ -1,4 +1,4 @@
/* $Id: drive.c,v 1.1 2000/03/26 19:38:18 ea Exp $
/* $Id: drive.c,v 1.2 2000/06/30 22:51:34 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -20,14 +20,23 @@
VOID
STDCALL
IoAssignDriveLetters (
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2,
DWORD Unknown3
IN PLOADER_PARAMETER_BLOCK LoaderBlock,
IN PSTRING NtDeviceName,
OUT PUCHAR NtSystemPath,
OUT PSTRING NtSystemPathString
)
{
UNIMPLEMENTED;
#ifdef __NTOSKRNL__
HalDispatchTable.HalIoAssignDriveLetters (LoaderBlock,
NtDeviceName,
NtSystemPath,
NtSystemPathString);
#else
HalDispatchTable->HalIoAssignDriveLetters (LoaderBlock,
NtDeviceName,
NtSystemPath,
NtSystemPathString);
#endif
}
/* EOF */

View file

@ -1,4 +1,4 @@
/* $Id: parttab.c,v 1.1 2000/03/26 19:38:18 ea Exp $
/* $Id: parttab.c,v 1.2 2000/06/30 22:51:34 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -22,10 +22,10 @@
NTSTATUS
STDCALL
IoReadPartitionTable (
PDEVICE_OBJECT DeviceObject,
ULONG SectorSize,
BOOLEAN ReturnRecognizedPartitions,
struct _DRIVE_LAYOUT_INFORMATION ** PBuffer
PDEVICE_OBJECT DeviceObject,
ULONG SectorSize,
BOOLEAN ReturnRecognizedPartitions,
PDRIVE_LAYOUT_INFORMATION * PartitionBuffer
)
{
UNIMPLEMENTED;
@ -45,11 +45,11 @@ IoSetPartitionInformation (
NTSTATUS
STDCALL
IoWritePartitionTable (
PDEVICE_OBJECT DeviceObject,
ULONG SectorSize,
ULONG SectorsPerTrack,
ULONG NumberOfHeads,
struct _DRIVE_LAYOUT_INFORMATION * PBuffer
PDEVICE_OBJECT DeviceObject,
ULONG SectorSize,
ULONG SectorsPerTrack,
ULONG NumberOfHeads,
PDRIVE_LAYOUT_INFORMATION * PBuffer
)
{
UNIMPLEMENTED;

View file

@ -0,0 +1,22 @@
#ifndef __INCLUDE_INTERNAL_XHAL_H
#define __INCLUDE_INTERNAL_XHAL_H
VOID
FASTCALL
xHalExamineMBR (
IN PDEVICE_OBJECT DeviceObject,
IN ULONG SectorSize,
IN ULONG MBRTypeIdentifier,
OUT PVOID * Buffer
);
VOID
FASTCALL
xHalIoAssignDriveLetters (
IN PLOADER_PARAMETER_BLOCK LoaderBlock,
IN PSTRING NtDeviceName,
OUT PUCHAR NtSystemPath,
OUT PSTRING NtSystemPathString
);
#endif

View file

@ -0,0 +1,48 @@
/* $Id: xhaldisp.c,v 1.1 2000/06/30 22:52:49 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/io/xhaldisp.c
* PURPOSE: Hal dispatch tables
* PROGRAMMER: Eric Kohl (ekohl@rz-online.de)
* UPDATE HISTORY:
* Created 19/06/2000
*/
/* INCLUDES *****************************************************************/
#include <ddk/ntddk.h>
#include <internal/xhal.h>
/* DATA **********************************************************************/
HAL_DISPATCH EXPORTED HalDispatchTable =
{
HAL_DISPATCH_VERSION,
NULL, // HalQuerySystemInformation
NULL, // HalSetSystemInformation
NULL, // HalQueryBusSlots
NULL, // HalDeviceControl
xHalExamineMBR,
xHalIoAssignDriveLetters,
NULL, // HalIoReadPartitionTable
NULL, // HalIoSetPartitionInformation
NULL, // HalIoWritePartitionTable
NULL, // HalReferenceHandlerForBus
NULL, // HalReferenceBusHandler
NULL // HalDereferenceBusHandler
};
HAL_PRIVATE_DISPATCH EXPORTED HalPrivateDispatchTable =
{
HAL_PRIVATE_DISPATCH_VERSION
// HalHandlerForBus
// HalHandlerForConfigSpace
// HalCompleteDeviceControl
// HalRegisterBusHandler
// any more??
};
/* EOF */

View file

@ -0,0 +1,193 @@
/* $Id: xhaldrv.c,v 1.1 2000/06/30 22:52:49 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/io/xhaldrv.c
* PURPOSE: Hal drive routines
* PROGRAMMER: Eric Kohl (ekohl@rz-online.de)
* UPDATE HISTORY:
* Created 19/06/2000
*/
/* INCLUDES *****************************************************************/
#include <ddk/ntddk.h>
#include <internal/xhal.h>
//#define NDEBUG
#include <internal/debug.h>
/* FUNCTIONS *****************************************************************/
VOID
FASTCALL
xHalExamineMBR (
IN PDEVICE_OBJECT DeviceObject,
IN ULONG SectorSize,
IN ULONG MBRTypeIdentifier,
OUT PVOID * Buffer
)
{
KEVENT Event;
IO_STATUS_BLOCK StatusBlock;
LARGE_INTEGER Offset;
PUCHAR LocalBuffer;
PIRP Irp;
NTSTATUS Status;
DPRINT ("xHalExamineMBR()\n");
*Buffer = NULL;
if (SectorSize < 512)
SectorSize = 512;
if (SectorSize > 4096)
SectorSize = 4096;
LocalBuffer = (PUCHAR)ExAllocatePool (PagedPool,
SectorSize);
if (LocalBuffer == NULL)
return;
KeInitializeEvent (&Event,
NotificationEvent,
FALSE);
Offset.QuadPart = 0;
Irp = IoBuildSynchronousFsdRequest (IRP_MJ_READ,
DeviceObject,
LocalBuffer,
SectorSize,
&Offset,
&Event,
&StatusBlock);
Status = IoCallDriver (DeviceObject,
Irp);
if (Status == STATUS_PENDING)
{
KeWaitForSingleObject (&Event,
Executive,
KernelMode,
FALSE,
NULL);
Status = StatusBlock.Status;
}
if (!NT_SUCCESS(Status))
{
DPRINT ("xHalExamineMBR failed (Status = 0x%08lx)\n",
Status);
ExFreePool (LocalBuffer);
return;
}
if (LocalBuffer[0x1FE] != 0x55 || LocalBuffer[0x1FF] != 0xAA)
{
DPRINT ("xHalExamineMBR: invalid MBR signature\n");
ExFreePool (LocalBuffer);
return;
}
if (LocalBuffer[0x1C2] != MBRTypeIdentifier)
{
DPRINT ("xHalExamineMBR: invalid MBRTypeIdentifier\n");
ExFreePool (LocalBuffer);
return;
}
*Buffer = (PVOID)LocalBuffer;
}
VOID
FASTCALL
xHalIoAssignDriveLetters (
IN PLOADER_PARAMETER_BLOCK LoaderBlock,
IN PSTRING NtDeviceName,
OUT PUCHAR NtSystemPath,
OUT PSTRING NtSystemPathString
)
{
PCONFIGURATION_INFORMATION ConfigInfo;
OBJECT_ATTRIBUTES ObjectAttributes;
IO_STATUS_BLOCK StatusBlock;
UNICODE_STRING UnicodeString1;
UNICODE_STRING UnicodeString2;
HANDLE FileHandle;
PWSTR Buffer1;
PWSTR Buffer2;
ULONG i;
NTSTATUS Status;
DPRINT ("xHalIoAssignDriveLetters()\n");
ConfigInfo = IoGetConfigurationInformation ();
Buffer1 = (PWSTR)ExAllocatePool (PagedPool,
64 * sizeof(WCHAR));
Buffer2 = (PWSTR)ExAllocatePool (PagedPool,
32 * sizeof(WCHAR));
// Create PhysicalDrive links
DPRINT ("Physical disk drives: %d\n", ConfigInfo->DiskCount);
for (i = 0; i < ConfigInfo->DiskCount; i++)
{
swprintf (Buffer1,
L"\\Device\\Harddisk%d\\Partition0",
i);
RtlInitUnicodeString (&UnicodeString1,
Buffer1);
InitializeObjectAttributes (&ObjectAttributes,
&UnicodeString1,
0,
NULL,
NULL);
Status = NtOpenFile (&FileHandle,
0x10001,
&ObjectAttributes,
&StatusBlock,
1,
0x20);
if (NT_SUCCESS(Status))
{
swprintf (Buffer2,
L"\\??\\PhysicalDrive%d",
i);
RtlInitUnicodeString (&UnicodeString2,
Buffer2);
DPRINT ("Creating link: %S ==> %S\n",
Buffer2,
Buffer1);
IoCreateSymbolicLink (&UnicodeString2,
&UnicodeString1);
NtClose (FileHandle);
}
}
ExFreePool (Buffer2);
ExFreePool (Buffer1);
// Assign pre-assigned (registry) partitions
// Assign bootable partitions
// Assign remaining primary partitions
// Assign extended (logical) partitions
// Assign floppy drives
DPRINT("Floppy drives: %d\n", ConfigInfo->FloppyCount);
// Assign cdrom drives
DPRINT("CD-Rom drives: %d\n", ConfigInfo->CDRomCount);
// Any more ??
}
/* EOF */

View file

@ -1,4 +1,4 @@
/* $Id: main.c,v 1.48 2000/06/29 23:35:38 dwelch Exp $
/* $Id: main.c,v 1.49 2000/06/30 22:53:32 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -33,6 +33,7 @@
ULONG EXPORTED NtBuildNumber = KERNEL_VERSION_BUILD;
ULONG EXPORTED NtGlobalFlag = 0;
CHAR EXPORTED KeNumberProcessors = 1;
LOADER_PARAMETER_BLOCK EXPORTED KeLoaderBlock;
/* FUNCTIONS ****************************************************************/
@ -301,6 +302,14 @@ void _main(boot_param* _bp)
CHECKPOINT;
LdrLoadAutoConfigDrivers();
/*
* Assign drive letters
*/
IoAssignDriveLetters (&KeLoaderBlock,
NULL,
NULL,
NULL);
/*
* Launch initial process
*/

View file

@ -1,4 +1,4 @@
# $Id: makefile_rex,v 1.75 2000/06/29 23:35:32 dwelch Exp $
# $Id: makefile_rex,v 1.76 2000/06/30 22:50:53 ekohl Exp $
#
# ReactOS Operating System
#
@ -153,7 +153,9 @@ OBJECTS_IO = \
io/shutdown.o \
io/symlink.o \
io/timer.o \
io/vpb.o
io/vpb.o \
io/xhaldisp.o \
io/xhaldrv.o
# Object Manager (Ob)
OBJECTS_OB = \

View file

@ -1,4 +1,4 @@
; $Id: ntoskrnl.def,v 1.76 2000/06/18 15:21:18 ekohl Exp $
; $Id: ntoskrnl.def,v 1.77 2000/06/30 22:50:53 ekohl Exp $
;
; reactos/ntoskrnl/ntoskrnl.def
;
@ -193,8 +193,8 @@ FsRtlUninitializeFileLock@4
FsRtlUninitializeLargeMcb@4
FsRtlUninitializeMcb@4
FsRtlUninitializeOplock@4
;HalDispatchTable DATA
;HalPrivateDispatchTable DATA
HalDispatchTable DATA
HalPrivateDispatchTable DATA
;@InterlockedCompareExchange@12
InterlockedCompareExchange@12
;@InterlockedDecrement@4
@ -374,7 +374,7 @@ KeInsertQueueApc@16
KeInsertQueueDpc@12
;KeIsExecutingDpc
KeLeaveCriticalRegion@0
;KeLoaderBlock DATA
KeLoaderBlock DATA
KeNumberProcessors DATA
;KeProfileInterrupt
;KeProfileInterruptWithSource

View file

@ -1,4 +1,4 @@
; $Id: ntoskrnl.edf,v 1.63 2000/06/18 15:21:18 ekohl Exp $
; $Id: ntoskrnl.edf,v 1.64 2000/06/30 22:50:53 ekohl Exp $
;
; reactos/ntoskrnl/ntoskrnl.def
;
@ -192,8 +192,8 @@ FsRtlUninitializeFileLock=FsRtlUninitializeFileLock@4
FsRtlUninitializeLargeMcb=FsRtlUninitializeLargeMcb@4
FsRtlUninitializeMcb=FsRtlUninitializeMcb@4
FsRtlUninitializeOplock=FsRtlUninitializeOplock@4
;HalDispatchTable DATA
;HalPrivateDispatchTable DATA
HalDispatchTable DATA
HalPrivateDispatchTable DATA
;InterlockedCompareExchange=@InterlockedCompareExchange@12
InterlockedCompareExchange=InterlockedCompareExchange@12
;InterlockedDecrement=@InterlockedDecrement@4
@ -369,7 +369,7 @@ KeInsertQueueApc=KeInsertQueueApc@16
KeInsertQueueDpc=KeInsertQueueDpc@12
;KeIsExecutingDpc
KeLeaveCriticalRegion=KeLeaveCriticalRegion@0
;KeLoaderBlock DATA
KeLoaderBlock DATA
KeNumberProcessors DATA
;KeProfileInterrupt
;KeProfileInterruptWithSource