From 85320084c1d6c33a1fc3973f3674c714e96e8a70 Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Sun, 27 Nov 2005 20:18:33 +0000 Subject: [PATCH] - Add the real NT Object Callbacks and #ifdef out the ReactOS ones. - Add the real NT Loader Parameter Block structures & friends and #ifdef out the ReactOS ones (thanks to Filip Navara for some work on these). svn path=/trunk/; revision=19697 --- reactos/include/ndk/fixmes.txt | 12 ---- reactos/include/ndk/halfuncs.h | 19 ++++++ reactos/include/ndk/haltypes.h | 120 ++++++++++++++++++++++++++++++++- reactos/include/ndk/obtypes.h | 83 ++++++++++++++++++++++- 4 files changed, 218 insertions(+), 16 deletions(-) diff --git a/reactos/include/ndk/fixmes.txt b/reactos/include/ndk/fixmes.txt index b3a07e089ed..642c75e970f 100644 --- a/reactos/include/ndk/fixmes.txt +++ b/reactos/include/ndk/fixmes.txt @@ -1,15 +1,3 @@ -Complete list of NDK Fixmes before 1.0 Release (Nov 27th 2005) --------------------------------------------------------------- -______________________________________________________________________________________ -[CRITICAL] - Breaking compatibility with official structures. -|obtypes.h - Object callbacks are ReactOS only definitions. IFDEF-OUT ADDREAL -|haltypes.h - Loader Parameter Block is ReactOS Version, not NT. IFDEF-OUT ADDREAL -| -[MAJOR] - Using incorrect, missing, or invalid names or definitions. -|extypes.h - Classes 13, 20, 30, 31, 49, 51, 52, 54+ are undefined. WONTFIX -|_____________________________________________________________________________________ - - List of ReactOS Applications compiling with the NDK (verify, fix, and optimize their usage) -------------------------------------------------------------- diff --git a/reactos/include/ndk/halfuncs.h b/reactos/include/ndk/halfuncs.h index 8672e8d8c93..4ad28dfd647 100644 --- a/reactos/include/ndk/halfuncs.h +++ b/reactos/include/ndk/halfuncs.h @@ -30,24 +30,28 @@ Author: // // Display Functions // +NTHALAPI BOOLEAN NTAPI HalQueryDisplayOwnership( VOID ); +NTHALAPI VOID NTAPI HalDisplayString( IN PCHAR String ); +NTHALAPI BOOLEAN NTAPI HalQueryDisplayOwnership( VOID ); +NTHALAPI VOID NTAPI HalReleaseDisplayOwnership( @@ -57,12 +61,14 @@ HalReleaseDisplayOwnership( // // Initialization Functions // +NTHALAPI BOOLEAN NTAPI HalAllProcessorsStarted( VOID ); +NTHALAPI VOID NTAPI HalInitializeProcessor( @@ -70,6 +76,7 @@ HalInitializeProcessor( PVOID ProcessorStack ); +NTHALAPI BOOLEAN NTAPI HalInitSystem( @@ -77,12 +84,14 @@ HalInitSystem( PLOADER_PARAMETER_BLOCK LoaderBlock ); +NTHALAPI VOID NTAPI HalReturnToFirmware( FIRMWARE_REENTRY Action ); +NTHALAPI BOOLEAN NTAPI HalStartNextProcessor( @@ -93,6 +102,7 @@ HalStartNextProcessor( // // Interrupt Functions // +NTHALAPI BOOLEAN NTAPI HalBeginSystemInterrupt( @@ -101,6 +111,7 @@ HalBeginSystemInterrupt( PKIRQL OldIrql ); +NTHALAPI BOOLEAN NTAPI HalDisableSystemInterrupt( @@ -108,6 +119,7 @@ HalDisableSystemInterrupt( KIRQL Irql ); +NTHALAPI BOOLEAN NTAPI HalEnableSystemInterrupt( @@ -116,6 +128,7 @@ HalEnableSystemInterrupt( KINTERRUPT_MODE InterruptMode ); +NTHALAPI VOID NTAPI HalEndSystemInterrupt( @@ -123,6 +136,7 @@ HalEndSystemInterrupt( ULONG Vector ); +NTHALAPI BOOLEAN NTAPI HalGetEnvironmentVariable( @@ -131,18 +145,21 @@ HalGetEnvironmentVariable( USHORT ValueLength ); +NTHALAPI VOID NTAPI HalReportResourceUsage( VOID ); +NTHALAPI VOID FASTCALL HalRequestSoftwareInterrupt( KIRQL SoftwareInterruptRequested ); +NTHALAPI VOID NTAPI HalRequestIpi( @@ -152,6 +169,7 @@ HalRequestIpi( // // I/O Functions // +NTHALAPI VOID NTAPI IoAssignDriveLetters( @@ -164,6 +182,7 @@ IoAssignDriveLetters( // // Environment Functions // +NTHALAPI BOOLEAN NTAPI HalSetEnvironmentVariable( diff --git a/reactos/include/ndk/haltypes.h b/reactos/include/ndk/haltypes.h index 0a060aee3ca..ec703957eda 100644 --- a/reactos/include/ndk/haltypes.h +++ b/reactos/include/ndk/haltypes.h @@ -67,8 +67,124 @@ typedef struct _HAL_PRIVATE_DISPATCH ULONG Version; } HAL_PRIVATE_DISPATCH, *PHAL_PRIVATE_DISPATCH; +#ifndef _REACTOS_ // -// Loader Parameter Block Structures (FIXME) +// NLS Data Block +// +typedef struct _NLS_TABLE_DATA +{ + PVOID AnsiCodePageData; + PVOID OemCodePageData; + PVOID UnicodeCodePageData; +} NLS_TABLE_DATA, *PNLS_TABLE_DATA; + +// +// Subsystem Specific Loader Blocks +// +typedef struct _PROFILE_PARAMETER_BLOCK +{ + USHORT DockData0; + USHORT DockData1; + USHORT DockData2; + USHORT DockData3; + ULONG DockData3; + ULONG DockData4; +} PROFILE_PARAMETER_BLOCK, *PPROFILE_PARAMETER_BLOCK; + +typedef struct _HEADLESS_LOADER_BLOCK +{ + UCHAR Unknown[0xC]; +} HEADLESS_LOADER_BLOCK, *PHEADLESS_LOADER_BLOCK; + +typedef struct _NETWORK_LOADER_BLOCK +{ + UCHAR Unknown[0xC]; +} NETWORK_LOADER_BLOCK, *PNETWORK_LOADER_BLOCK; + +// +// Extended Loader Parameter Block +// +typedef struct _LOADER_PARAMETER_EXTENSION +{ + ULONG Size; + PROFILE_PARAMETER_BLOCK ProfileParameterBlock; + ULONG MajorVersion; + ULONG MinorVersion; + PVOID SpecialConfigInfFile; + ULONG SpecialConfigInfSize; + PVOID TriageDumpData; + // + // NT 5.1 + // + ULONG NumberOfPages; + PHEADLESS_LOADER_BLOCK HeadlessLoaderBlock; + PVOID Unknown1; + PVOID PrefetchDatabaseBase; + ULONG PrefetchDatabaseSize; + PNETWORK_LOADER_BLOCK NetworkLoaderBlock; + // + // NT 5.2+ + // + PVOID Reserved[2]; + LIST_ENTRY FirmwareListEntry; + PVOID AcpiTableBase; + ULONG AcpiTableSize; +} LOADER_PARAMETER_EXTENSION, *PLOADER_PARAMETER_EXTENSION; + +// +// Architecture specific Loader Parameter Blocks +// +typedef struct _I386_LOADER_BLOCK +{ + PVOID CommonDataArea; + ULONG MachineType; + ULONG Reserved; +} I386_LOADER_BLOCK, *PI386_LOADER_BLOCK; + +// +// Setup Loader Parameter Block +// +typedef struct _SETUP_LOADER_BLOCK +{ + ULONG Unknown[139]; + ULONG Flags; +} SETUP_LOADER_BLOCK, *PSETUP_LOADER_BLOCK; + +// +// Loader Parameter Block +// +typedef struct _LOADER_PARAMETER_BLOCK +{ + LIST_ENTRY LoadOrderListHead; + LIST_ENTRY MemoryDescriptorListHead; + LIST_ENTRY DriverList; + PVOID KernelStack; + PVOID Prcb; + PVOID Process; + PVOID Thread; + ULONG RegistryLength; + PVOID RegistryBase; + PCONFIGURATION_COMPONENT_DATA ConfigurationRoot; + LPSTR ArcBootDeviceName; + LPSTR ArcHalDeviceName; + LPSTR SystemRoot; + LPSTR BootRoot; + LPSTR CommandLine; + PNLS_TABLE_DATA NlsTables; + PARC_DISK_INFORMATION ArcDevices; + PVOID OEMFont; + PSETUP_LOADER_BLOCK SetupLdrBlock; + PLOADER_PARAMETER_EXTENSION LpbExtension; + union + { + I386_LOADER_BLOCK I386; + } u; +} LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK; + +#else + +// +// FIXME: ReactOS ONLY // typedef struct _LOADER_MODULE { @@ -77,7 +193,6 @@ typedef struct _LOADER_MODULE ULONG String; ULONG Reserved; } LOADER_MODULE, *PLOADER_MODULE; - typedef struct _LOADER_PARAMETER_BLOCK { ULONG Flags; @@ -98,6 +213,7 @@ typedef struct _LOADER_PARAMETER_BLOCK ULONG PageDirectoryEnd; ULONG KernelBase; } LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK; +#endif // // Kernel Exports diff --git a/reactos/include/ndk/obtypes.h b/reactos/include/ndk/obtypes.h index 6219d590eeb..ed083a28a20 100644 --- a/reactos/include/ndk/obtypes.h +++ b/reactos/include/ndk/obtypes.h @@ -117,12 +117,89 @@ typedef enum _OBJECT_INFORMATION_CLASS ObjectHandleInformation } OBJECT_INFORMATION_CLASS; -/* FUNCTION TYPES ************************************************************/ +// +// Dump Control Structure for Object Debugging +// +typedef struct _OBJECT_DUMP_CONTROL +{ + PVOID Stream; + ULONG Detail; +} OBJECT_DUMP_CONTROL, *POBJECT_DUMP_CONTROL; #ifndef NTOS_MODE_USER +#ifndef _REACTOS_ // -// FIXME: Object Callbacks +// Object Type Callbacks +// +typedef VOID +(NTAPI *OB_DUMP_METHOD)( + IN PVOID Object, + IN POB_DUMP_CONTROL Control OPTIONAL +); + +typedef NTSTATUS +(NTAPI *OB_OPEN_METHOD)( + IN OB_OPEN_REASON Reason, + IN PEPROCESS Process OPTIONAL, + IN PVOID ObjectBody, + IN ACCESS_MASK GrantedAccess, + IN ULONG HandleCount +); + +typedef VOID +(NTAPI *OB_CLOSE_METHOD)( + IN PEPROCESS Process OPTIONAL, + IN PVOID Object, + IN ACCESS_MASK GrantedAccess, + IN ULONG ProcessHandleCount, + IN ULONG SystemHandleCount +); + +typedef VOID +(NTAPI *OB_DELETE_METHOD)( + IN PVOID Object +); + +typedef NTSTATUS +(NTAPI *OB_PARSE_METHOD)( + IN PVOID ParseObject, + IN PVOID ObjectType, + IN OUT PACCESS_STATE AccessState, + IN KPROCESSOR_MODE AccessMode, + IN ULONG Attributes, + IN OUT PUNICODE_STRING CompleteName, + IN OUT PUNICODE_STRING RemainingName, + IN OUT PVOID Context OPTIONAL, + IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL, + OUT PVOID *Object +); + +typedef NTSTATUS +(NTAPI *OB_SECURITY_METHOD)( + IN PVOID Object, + IN SECURITY_OPERATION_CODE OperationType, + IN SECURITY_INFORMATION SecurityInformation, + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN OUT PULONG CapturedLength, + IN OUT PSECURITY_DESCRIPTOR *ObjectSecurityDescriptor, + IN POOL_TYPE PoolType, + IN PGENERIC_MAPPING GenericMapping +); + +typedef NTSTATUS +(NTAPI *OB_QUERYNAME_METHOD)( + IN PVOID Object, + IN BOOLEAN HasObjectName, + OUT POBJECT_NAME_INFORMATION ObjectNameInfo, + IN ULONG Length, + OUT PULONG ReturnLength +); + +#else + +// +// FIXME: ReactOS ONLY Object Callbacks // typedef NTSTATUS (NTAPI *OB_OPEN_METHOD)( @@ -198,6 +275,8 @@ typedef NTSTATUS struct _OBJECT_ATTRIBUTES* ObjectAttributes ); +#endif + #else // -- 2.17.1