mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 17:05:46 +00:00
Added hal dispatch tables.
Implemented PhysicalDrive links. Started drive letter assignment. svn path=/trunk/; revision=1214
This commit is contained in:
parent
cc95f73421
commit
f3e6819471
14 changed files with 644 additions and 201 deletions
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
|
22
reactos/ntoskrnl/include/internal/xhal.h
Normal file
22
reactos/ntoskrnl/include/internal/xhal.h
Normal 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
|
48
reactos/ntoskrnl/io/xhaldisp.c
Normal file
48
reactos/ntoskrnl/io/xhaldisp.c
Normal 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 */
|
193
reactos/ntoskrnl/io/xhaldrv.c
Normal file
193
reactos/ntoskrnl/io/xhaldrv.c
Normal 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 */
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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 = \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue