Add new header for native user-mode functios inside the NT library inside the NDK, it will end up replacing most of the exported parts of the ntdll headers. It's not used yet as it would conflict, I added a temporary guard for that. Also added many more types to rtlfuncs.h so that it's almost entirely complete, and took out non rtl-stuff and put it into the user-mode NT header

svn path=/trunk/; revision=16199
This commit is contained in:
Alex Ionescu 2005-06-21 02:08:42 +00:00
parent 1d7902f557
commit 3b2016d0ac
8 changed files with 595 additions and 29 deletions

View file

@ -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
{

View file

@ -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 */

View file

@ -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

View file

@ -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;

View file

@ -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 <csrss/csrss.h> /* 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 */

View file

@ -23,7 +23,6 @@
/* FIXME: Clean this sh*t up */
#include <ntdll/base.h>
#include <ntdll/rtl.h>
#include <ntdll/dbg.h>
#include <ntdll/csr.h>
#include <ntdll/ldr.h>

View file

@ -13,13 +13,18 @@
#define NTOS_MODE_USER
#include <ndk/ntndk.h>
/* NTDLL Headers FIXME: These will be gone imminently */
#include <ntdll/ntdll.h>
#include <ntdll/ldr.h>
#include <ntdll/csr.h>
/* Internal NTDLL */
#include "ntdllp.h"
/* CSRSS Header */
#include <csrss/csrss.h>
/* Helper Macros */
#include <reactos/helper.h>
/* NTDLL Public Headers. FIXME: Combine/clean these after NDK */
#include <ntdll/csr.h>
#include <ntdll/rtl.h>
#include <ntdll/ldr.h>
#include <ntdll/ntdll.h>
/* EOF */

View file

@ -14,7 +14,6 @@
#define NTOS_MODE_USER
#include <ndk/ntndk.h>
#include <ntdll/csr.h>
#include <ntdll/rtl.h>
#include <ntdll/ldr.h>
#include <rosrtl/string.h>
#include <sm/helper.h>