diff --git a/reactos/include/ndk/ldrtypes.h b/reactos/include/ndk/ldrtypes.h index a0fe6de167e..6bad3f6afc3 100644 --- a/reactos/include/ndk/ldrtypes.h +++ b/reactos/include/ndk/ldrtypes.h @@ -19,6 +19,15 @@ #define RESOURCE_LANGUAGE_LEVEL 2 #define RESOURCE_DATA_LEVEL 3 +/* FIXME: USE CORRRECT LDR_ FLAGS */ +#define IMAGE_DLL 0x00000004 +#define LOAD_IN_PROGRESS 0x00001000 +#define UNLOAD_IN_PROGRESS 0x00002000 +#define ENTRY_PROCESSED 0x00004000 +#define DONT_CALL_FOR_THREAD 0x00040000 +#define PROCESS_ATTACH_CALLED 0x00080000 +#define IMAGE_NOT_AT_BASE 0x00200000 + /* ENUMERATIONS **************************************************************/ /* TYPES *********************************************************************/ @@ -34,8 +43,26 @@ typedef struct _PEB_LDR_DATA PVOID EntryInProgress; } PEB_LDR_DATA, *PPEB_LDR_DATA; -/* FIXME: Update with _LDR_DATA_TABLE_ENTRY and LDR_ flags */ -//typedef struct _LDR_MODULE +typedef struct _LDR_DATA_TABLE_ENTRY +{ + LIST_ENTRY InLoadOrderModuleList; + LIST_ENTRY InMemoryOrderModuleList; + LIST_ENTRY InInitializationOrderModuleList; + PVOID DllBase; + PVOID EntryPoint; + ULONG SizeOfImage; + UNICODE_STRING FullDllName; + UNICODE_STRING BaseDllName; + ULONG Flags; + SHORT LoadCount; /* FIXME: HACK!!! FIX ASAP */ + SHORT TlsIndex; /* FIXME: HACK!!! FIX ASAP */ + LIST_ENTRY HashLinks; + PVOID SectionPointer; + ULONG CheckSum; + ULONG TimeDateStamp; + PVOID LoadedImports; + PVOID EntryPointActivationContext; +} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY; typedef struct _LDR_RESOURCE_INFO { diff --git a/reactos/include/ndk/ntndk.h b/reactos/include/ndk/ntndk.h index 66d5c62ca70..48cbbb9b82e 100644 --- a/reactos/include/ndk/ntndk.h +++ b/reactos/include/ndk/ntndk.h @@ -34,6 +34,9 @@ #else /* User-Mode NDK */ #include "umtypes.h" /* Native Types in DDK/IFS but not in PSDK */ + #ifdef READY_FOR_NEW_NTDLL /* This hack will be removed in the next commit */ + #include "umfuncs.h" /* User-Mode NT Library Functions */ + #endif #endif /* Shared NDK */ diff --git a/reactos/include/ndk/rtlfuncs.h b/reactos/include/ndk/rtlfuncs.h index 1c223dfc3b4..b3b8e8d2b55 100644 --- a/reactos/include/ndk/rtlfuncs.h +++ b/reactos/include/ndk/rtlfuncs.h @@ -204,19 +204,14 @@ RemoveTailList( } /* - * Debug Functions + * Error and Exception Functions */ - -ULONG -CDECL -DbgPrint( - IN PCH Format, - IN ... -); - -VOID +PVOID STDCALL -DbgBreakPoint(VOID); +RtlAddVectoredExceptionHandler( + IN ULONG FirstHandler, + IN PRTL_VECTORED_EXCEPTION_HANDLER VectoredHandler +); VOID STDCALL @@ -227,6 +222,14 @@ RtlAssert( PCHAR Message ); +PVOID +STDCALL +RtlEncodePointer(IN PVOID Pointer); + +PVOID +STDCALL +RtlDecodePointer(IN PVOID Pointer); + ULONG STDCALL RtlNtStatusToDosError(IN NTSTATUS Status); @@ -271,6 +274,13 @@ RtlCreateHeap( IN PRTL_HEAP_DEFINITION Definition OPTIONAL ); +DWORD +STDCALL +RtlCompactHeap( + HANDLE heap, + DWORD flags +); + HANDLE STDCALL RtlDestroyHeap(HANDLE hheap); @@ -283,6 +293,13 @@ RtlFreeHeap( IN PVOID P ); +ULONG +STDCALL +RtlGetProcessHeaps( + ULONG HeapCount, + HANDLE *HeapArray +); + PVOID STDCALL RtlReAllocateHeap( @@ -1138,7 +1155,9 @@ RtlFillMemoryUlong( /* * Process Management Functions - */ + */ +/* FIXME: Some of these will be split up into enviro/path functions */ + VOID STDCALL RtlAcquirePebLock(VOID); @@ -1224,6 +1243,41 @@ RtlExpandEnvironmentStrings_U( PULONG Length ); +BOOLEAN +STDCALL +RtlDoesFileExists_U(PWSTR FileName); + +ULONG +STDCALL +RtlDetermineDosPathNameType_U(PCWSTR Path); + +ULONG +STDCALL +RtlDosSearchPath_U( + WCHAR *sp, + WCHAR *name, + WCHAR *ext, + ULONG buf_sz, + WCHAR *buffer, + WCHAR **shortname +); + +ULONG +STDCALL +RtlGetCurrentDirectory_U( + ULONG MaximumLength, + PWSTR Buffer +); + +ULONG +STDCALL +RtlGetFullPathName_U( + const WCHAR *dosname, + ULONG size, + WCHAR *buf, + WCHAR **shortname +); + PRTL_USER_PROCESS_PARAMETERS STDCALL RtlNormalizeProcessParams( @@ -1238,6 +1292,10 @@ RtlQueryEnvironmentVariable_U( PUNICODE_STRING Value ); +NTSTATUS +STDCALL +RtlSetCurrentDirectory_U(PUNICODE_STRING name); + NTSTATUS STDCALL RtlSetEnvironmentVariable( @@ -1267,6 +1325,13 @@ RtlInitializeCriticalSection( PRTL_CRITICAL_SECTION CriticalSection ); +NTSTATUS +STDCALL +RtlInitializeCriticalSectionAndSpinCount( + PRTL_CRITICAL_SECTION CriticalSection, + ULONG SpinCount +); + NTSTATUS STDCALL RtlLeaveCriticalSection( @@ -1308,6 +1373,28 @@ RtlGetCompressionWorkSpaceSize( OUT PULONG CompressFragmentWorkSpaceSize ); +/* + * Debug Info Functions + */ +PDEBUG_BUFFER +STDCALL +RtlCreateQueryDebugBuffer( + IN ULONG Size, + IN BOOLEAN EventPair +); + +NTSTATUS +STDCALL +RtlDestroyQueryDebugBuffer(IN PDEBUG_BUFFER DebugBuffer); + +NTSTATUS +STDCALL +RtlQueryProcessDebugInformation( + IN ULONG ProcessId, + IN ULONG DebugInfoClassMask, + IN OUT PDEBUG_BUFFER DebugBuffer +); + /* * Bitmap Functions */ @@ -1368,17 +1455,113 @@ RtlSetBits ( ); /* - * PE Functions + * Timer Functions */ -NTSTATUS +NTSTATUS STDCALL -LdrVerifyImageMatchesChecksum( - IN HANDLE FileHandle, - ULONG Unknown1, - ULONG Unknown2, - ULONG Unknown3 +RtlCreateTimer( + HANDLE TimerQueue, + PHANDLE phNewTimer, + WAITORTIMERCALLBACKFUNC Callback, + PVOID Parameter, + DWORD DueTime, + DWORD Period, + ULONG Flags ); +NTSTATUS +STDCALL +RtlCreateTimerQueue(PHANDLE TimerQueue); + +NTSTATUS +STDCALL +RtlDeleteTimer( + HANDLE TimerQueue, + HANDLE Timer, + HANDLE CompletionEvent +); + +NTSTATUS +STDCALL +RtlUpdateTimer( + HANDLE TimerQueue, + HANDLE Timer, + ULONG DueTime, + ULONG Period +); + +NTSTATUS +STDCALL +RtlDeleteTimerQueueEx( + HANDLE TimerQueue, + HANDLE CompletionEvent +); + +NTSTATUS +STDCALL +RtlDeleteTimerQueue(HANDLE TimerQueue); + +/* + * Debug Functions + */ +ULONG +CDECL +DbgPrint( + IN PCH Format, + IN ... +); + +VOID +STDCALL +DbgBreakPoint(VOID); + +/* + * Handle Table Functions + */ +PRTL_HANDLE +STDCALL +RtlAllocateHandle ( + IN PRTL_HANDLE_TABLE HandleTable, + IN OUT PULONG Index +); + +VOID +STDCALL +RtlDestroyHandleTable (IN PRTL_HANDLE_TABLE HandleTable); + +BOOLEAN +STDCALL +RtlFreeHandle ( + IN PRTL_HANDLE_TABLE HandleTable, + IN PRTL_HANDLE Handle +); + +VOID +STDCALL +RtlInitializeHandleTable ( + IN ULONG TableSize, + IN ULONG HandleSize, + IN PRTL_HANDLE_TABLE HandleTable +); + +BOOLEAN +STDCALL +RtlIsValidHandle ( + IN PRTL_HANDLE_TABLE HandleTable, + IN PRTL_HANDLE Handle +); + +BOOLEAN +STDCALL +RtlIsValidIndexHandle ( + IN PRTL_HANDLE_TABLE HandleTable, + IN OUT PRTL_HANDLE *Handle, + IN ULONG Index +); + +/* + * PE Functions + */ NTSTATUS STDCALL RtlFindMessage( @@ -1388,6 +1571,10 @@ RtlFindMessage( IN ULONG MessageId, OUT PRTL_MESSAGE_RESOURCE_ENTRY *MessageResourceEntry ); + +ULONG +STDCALL +RtlGetNtGlobalFlags(VOID); PVOID STDCALL diff --git a/reactos/include/ndk/rtltypes.h b/reactos/include/ndk/rtltypes.h index d7c2768d692..b929e5e1f91 100644 --- a/reactos/include/ndk/rtltypes.h +++ b/reactos/include/ndk/rtltypes.h @@ -43,6 +43,13 @@ #define RTL_RANGE_SHARED 0x01 #define RTL_RANGE_CONFLICT 0x02 +/* FIXME: Rename these */ +#define PDI_MODULES 0x01 /* The loaded modules of the process */ +#define PDI_BACKTRACE 0x02 /* The heap stack back traces */ +#define PDI_HEAPS 0x04 /* The heaps of the process */ +#define PDI_HEAP_TAGS 0x08 /* The heap tags */ +#define PDI_HEAP_BLOCKS 0x10 /* The heap blocks */ +#define PDI_LOCKS 0x20 /* The locks created by the process */ /* ENUMERATIONS **************************************************************/ typedef enum @@ -53,6 +60,18 @@ typedef enum ExceptionCollidedUnwind } EXCEPTION_DISPOSITION; +typedef enum +{ + INVALID_PATH = 0, + UNC_PATH, /* "//foo" */ + ABSOLUTE_DRIVE_PATH, /* "c:/foo" */ + RELATIVE_DRIVE_PATH, /* "c:foo" */ + ABSOLUTE_PATH, /* "/foo" */ + RELATIVE_PATH, /* "foo" */ + DEVICE_PATH, /* "//./foo" */ + UNC_DOT_PATH /* "//." */ +} DOS_PATHNAME_TYPE; + /* FUNCTION TYPES ************************************************************/ typedef NTSTATUS (*PHEAP_ENUMERATION_ROUTINE)( @@ -68,6 +87,10 @@ typedef EXCEPTION_DISPOSITION PVOID ); +typedef LONG (STDCALL *PRTL_VECTORED_EXCEPTION_HANDLER)( + PEXCEPTION_POINTERS ExceptionPointers +); + typedef DWORD (STDCALL *PTHREAD_START_ROUTINE)( LPVOID Parameter ); @@ -91,6 +114,98 @@ typedef struct _ACE ACCESS_MASK AccessMask; } ACE, *PACE; +/* FIXME: Review definitions and give these guys a better name */ +typedef struct _DEBUG_BUFFER +{ + HANDLE SectionHandle; + PVOID SectionBase; + PVOID RemoteSectionBase; + ULONG SectionBaseDelta; + HANDLE EventPairHandle; + ULONG Unknown[2]; + HANDLE RemoteThreadHandle; + ULONG InfoClassMask; + ULONG SizeOfInfo; + ULONG AllocatedSize; + ULONG SectionSize; + PVOID ModuleInformation; + PVOID BackTraceInformation; + PVOID HeapInformation; + PVOID LockInformation; + PVOID Reserved[8]; +} DEBUG_BUFFER, *PDEBUG_BUFFER; +typedef struct _DEBUG_MODULE_INFORMATION +{ + ULONG Reserved[2]; + PVOID Base; + ULONG Size; + ULONG Flags; + USHORT Index; + USHORT Unknown; + USHORT LoadCount; + USHORT ModuleNameOffset; + CHAR ImageName[256]; +} DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION; +typedef struct _DEBUG_HEAP_INFORMATION +{ + PVOID Base; + ULONG Flags; + USHORT Granularity; + USHORT Unknown; + ULONG Allocated; + ULONG Committed; + ULONG TagCount; + ULONG BlockCount; + ULONG Reserved[7]; + PVOID Tags; + PVOID Blocks; +} DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION; +typedef struct _DEBUG_LOCK_INFORMATION +{ + PVOID Address; + USHORT Type; + USHORT CreatorBackTraceIndex; + ULONG OwnerThreadId; + ULONG ActiveCount; + ULONG ContentionCount; + ULONG EntryCount; + ULONG RecursionCount; + ULONG NumberOfSharedWaiters; + ULONG NumberOfExclusiveWaiters; +} DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION; +typedef struct _RTL_HANDLE +{ + struct _RTL_HANDLE *Next; /* pointer to next free handle */ +} RTL_HANDLE, *PRTL_HANDLE; + +typedef struct _RTL_HANDLE_TABLE +{ + ULONG TableSize; /* maximum number of handles */ + ULONG HandleSize; /* size of handle in bytes */ + PRTL_HANDLE Handles; /* pointer to handle array */ + PRTL_HANDLE Limit; /* limit of pointers */ + PRTL_HANDLE FirstFree; /* pointer to first free handle */ + PRTL_HANDLE LastUsed; /* pointer to last allocated handle */ +} RTL_HANDLE_TABLE, *PRTL_HANDLE_TABLE; +#ifdef READY_FOR_NEW_NTDLL +typedef struct _LOCK_INFORMATION +{ + ULONG LockCount; + DEBUG_LOCK_INFORMATION LockEntry[1]; +} LOCK_INFORMATION, *PLOCK_INFORMATION; +typedef struct _HEAP_INFORMATION +{ + ULONG HeapCount; + DEBUG_HEAP_INFORMATION HeapEntry[1]; +} HEAP_INFORMATION, *PHEAP_INFORMATION; +typedef struct _MODULE_INFORMATION +{ + ULONG ModuleCount; + DEBUG_MODULE_INFORMATION ModuleEntry[1]; +} MODULE_INFORMATION, *PMODULE_INFORMATION; +/* END REVIEW AREA */ +#endif + typedef struct _EXCEPTION_REGISTRATION { struct _EXCEPTION_REGISTRATION* prev; @@ -138,6 +253,19 @@ typedef BOOLEAN PRTL_RANGE Range ); +typedef struct _RTL_RESOURCE +{ + RTL_CRITICAL_SECTION Lock; + HANDLE SharedSemaphore; + ULONG SharedWaiters; + HANDLE ExclusiveSemaphore; + ULONG ExclusiveWaiters; + LONG NumberActive; + HANDLE OwningThread; + ULONG TimeoutBoost; /* ?? */ + PVOID DebugInfo; /* ?? */ +} RTL_RESOURCE, *PRTL_RESOURCE; + typedef struct _RANGE_LIST_ITERATOR { PLIST_ENTRY RangeListHead; diff --git a/reactos/include/ndk/umfuncs.h b/reactos/include/ndk/umfuncs.h new file mode 100644 index 00000000000..35041a281a5 --- /dev/null +++ b/reactos/include/ndk/umfuncs.h @@ -0,0 +1,218 @@ +/* + * PROJECT: ReactOS Native Headers + * FILE: include/ndk/umfuncs.h + * PURPOSE: Prototypes for NT Library Functions + * PROGRAMMER: Alex Ionescu (alex@relsoft.net) + */ +#ifndef _UMFUNCS_H +#define _UMFUNCS_H + +/* DEPENDENCIES **************************************************************/ +#include "ldrtypes.h" +#include "lpctypes.h" +#include /* FIXME: Temporary */ + +/* PROTOTYPES ****************************************************************/ + +/* + * CSR Functions + */ +NTSTATUS +STDCALL +CsrClientConnectToServer(VOID); + +NTSTATUS +STDCALL +CsrClientCallServer( + PCSRSS_API_REQUEST Request, + PCSRSS_API_REPLY Reply OPTIONAL, + ULONG Length, + ULONG ReplyLength +); + +NTSTATUS +STDCALL +CsrIdentifyAlertableThread(VOID); + +NTSTATUS +STDCALL +CsrNewThread(VOID); + +NTSTATUS +STDCALL +CsrSetPriorityClass( + HANDLE Process, + PULONG PriorityClass +); + +VOID +STDCALL +CsrProbeForRead( + IN CONST PVOID Address, + IN ULONG Length, + IN ULONG Alignment +); + +VOID +STDCALL +CsrProbeForWrite( + IN CONST PVOID Address, + IN ULONG Length, + IN ULONG Alignment +); + +NTSTATUS +STDCALL +CsrCaptureParameterBuffer( + PVOID ParameterBuffer, + ULONG ParameterBufferSize, + PVOID* ClientAddress, + PVOID* ServerAddress +); + +NTSTATUS +STDCALL +CsrReleaseParameterBuffer(PVOID ClientAddress); + +/* + * Debug Functions + */ +ULONG +CDECL +DbgPrint( + IN PCH Format, + IN ... +); + +VOID +STDCALL +DbgBreakPoint(VOID); + +NTSTATUS +STDCALL +DbgSsInitialize( + HANDLE ReplyPort, + ULONG Unknown1, + ULONG Unknown2, + ULONG Unknown3 +); + +NTSTATUS +STDCALL +DbgUiConnectToDbg(VOID); + +NTSTATUS +STDCALL +DbgUiContinue( + PCLIENT_ID ClientId, + ULONG ContinueStatus +); + +NTSTATUS +STDCALL +DbgUiWaitStateChange( + ULONG Unknown1, + ULONG Unknown2 +); + +NTSTATUS +STDCALL +DbgUiRemoteBreakin(VOID); + +NTSTATUS +STDCALL +DbgUiIssueRemoteBreakin(HANDLE Process); + +/* + * Loader Functions + */ +NTSTATUS +STDCALL +LdrDisableThreadCalloutsForDll(IN PVOID BaseAddress); + +NTSTATUS +STDCALL +LdrGetDllHandle( + IN PWCHAR Path OPTIONAL, + IN ULONG Unknown2, + IN PUNICODE_STRING DllName, + OUT PVOID *BaseAddress +); + +NTSTATUS +STDCALL +LdrFindEntryForAddress( + IN PVOID Address, + OUT PLDR_DATA_TABLE_ENTRY *Module +); + +NTSTATUS +STDCALL +LdrGetProcedureAddress( + IN PVOID BaseAddress, + IN PANSI_STRING Name, + IN ULONG Ordinal, + OUT PVOID *ProcedureAddress +); + +VOID +STDCALL +LdrInitializeThunk( + ULONG Unknown1, + ULONG Unknown2, + ULONG Unknown3, + ULONG Unknown4 +); + +NTSTATUS +STDCALL +LdrLoadDll( + IN PWSTR SearchPath OPTIONAL, + IN ULONG LoadFlags, + IN PUNICODE_STRING Name, + OUT PVOID *BaseAddress OPTIONAL +); + +PIMAGE_BASE_RELOCATION +STDCALL +LdrProcessRelocationBlock( + IN PVOID Address, + IN USHORT Count, + IN PUSHORT TypeOffset, + IN ULONG_PTR Delta +); + +NTSTATUS +STDCALL +LdrQueryImageFileExecutionOptions( + IN PUNICODE_STRING SubKey, + IN PCWSTR ValueName, + IN ULONG ValueSize, + OUT PVOID Buffer, + IN ULONG BufferSize, + OUT PULONG RetunedLength OPTIONAL +); + +NTSTATUS +STDCALL +LdrShutdownProcess(VOID); + +NTSTATUS +STDCALL +LdrShutdownThread(VOID); + +NTSTATUS +STDCALL +LdrUnloadDll(IN PVOID BaseAddress); + +NTSTATUS +STDCALL +LdrVerifyImageMatchesChecksum( + IN HANDLE FileHandle, + ULONG Unknown1, + ULONG Unknown2, + ULONG Unknown3 +); + +#endif +/* EOF */ diff --git a/reactos/lib/kernel32/k32.h b/reactos/lib/kernel32/k32.h index ca6bba17d5d..2185e7f8e46 100755 --- a/reactos/lib/kernel32/k32.h +++ b/reactos/lib/kernel32/k32.h @@ -23,7 +23,6 @@ /* FIXME: Clean this sh*t up */ #include -#include #include #include #include diff --git a/reactos/lib/ntdll/inc/ntdll.h b/reactos/lib/ntdll/inc/ntdll.h index dc2ca452d17..9559282a361 100644 --- a/reactos/lib/ntdll/inc/ntdll.h +++ b/reactos/lib/ntdll/inc/ntdll.h @@ -13,13 +13,18 @@ #define NTOS_MODE_USER #include +/* NTDLL Headers FIXME: These will be gone imminently */ +#include +#include +#include + +/* Internal NTDLL */ +#include "ntdllp.h" + +/* CSRSS Header */ +#include + /* Helper Macros */ #include -/* NTDLL Public Headers. FIXME: Combine/clean these after NDK */ -#include -#include -#include -#include - /* EOF */ diff --git a/reactos/subsys/csrss/init.c b/reactos/subsys/csrss/init.c index 5a2b8233065..5adf245f91b 100644 --- a/reactos/subsys/csrss/init.c +++ b/reactos/subsys/csrss/init.c @@ -14,7 +14,6 @@ #define NTOS_MODE_USER #include #include -#include #include #include #include