summaryrefslogtreecommitdiffstats
path: root/private/ntos/rtl/ntrtlp.h
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/rtl/ntrtlp.h
downloadNT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip
Diffstat (limited to 'private/ntos/rtl/ntrtlp.h')
-rw-r--r--private/ntos/rtl/ntrtlp.h409
1 files changed, 409 insertions, 0 deletions
diff --git a/private/ntos/rtl/ntrtlp.h b/private/ntos/rtl/ntrtlp.h
new file mode 100644
index 000000000..c7494467d
--- /dev/null
+++ b/private/ntos/rtl/ntrtlp.h
@@ -0,0 +1,409 @@
+/*++
+
+Copyright (c) 1989 Microsoft Corporation
+
+Module Name:
+
+ ntrtlp.h
+
+Abstract:
+
+ Include file for NT runtime routines that are callable by both
+ kernel mode code in the executive and user mode code in various
+ NT subsystems, but which are private interfaces.
+
+Author:
+
+ David N. Cutler (davec) 15-Aug-1989
+
+Environment:
+
+ These routines are statically linked in the caller's executable and
+ are callable in either kernel mode or user mode.
+
+Revision History:
+
+--*/
+
+#ifndef _NTRTLP_
+#define _NTRTLP_
+#include <ntos.h>
+#include <nturtl.h>
+#include <zwapi.h>
+
+#ifdef _X86_
+#include "i386\ntrtl386.h"
+#endif
+
+#ifdef _MIPS_
+#include "mips\ntrtlmip.h"
+#endif
+
+#ifdef _PPC_
+#include "ppc\ntrtlppc.h"
+#endif
+
+#ifdef _ALPHA_
+#include "alpha\ntrtlalp.h"
+#endif
+
+#ifdef BLDR_KERNEL_RUNTIME
+#undef try
+#define try if(1)
+#undef except
+#define except(a) else if (0)
+#undef finally
+#define finally if (1)
+#undef GetExceptionCode
+#define GetExceptionCode() 1
+#define finally if (1)
+#endif
+
+#include "string.h"
+#include "wchar.h"
+
+//
+// Machine state reporting. See machine specific includes for more.
+//
+
+VOID
+RtlpGetStackLimits (
+ OUT PULONG LowLimit,
+ OUT PULONG HighLimit
+ );
+
+LONG
+LdrpCompareResourceNames(
+ IN ULONG ResourceName,
+ IN PIMAGE_RESOURCE_DIRECTORY ResourceDirectory,
+ IN PIMAGE_RESOURCE_DIRECTORY_ENTRY ResourceDirectoryEntry
+ );
+
+NTSTATUS
+LdrpSearchResourceSection(
+ IN PVOID DllHandle,
+ IN PULONG ResourceIdPath,
+ IN ULONG ResourceIdPathLength,
+ IN BOOLEAN FindDirectoryEntry,
+ OUT PVOID *ResourceDirectoryOrData
+ );
+
+LONG
+LdrpCompareResourceNames_U(
+ IN ULONG ResourceName,
+ IN PIMAGE_RESOURCE_DIRECTORY ResourceDirectory,
+ IN PIMAGE_RESOURCE_DIRECTORY_ENTRY ResourceDirectoryEntry
+ );
+
+NTSTATUS
+LdrpSearchResourceSection_U(
+ IN PVOID DllHandle,
+ IN PULONG ResourceIdPath,
+ IN ULONG ResourceIdPathLength,
+ IN BOOLEAN FindDirectoryEntry,
+ OUT PVOID *ResourceDirectoryOrData
+ );
+
+NTSTATUS
+LdrpAccessResourceData(
+ IN PVOID DllHandle,
+ IN PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry,
+ OUT PVOID *Address OPTIONAL,
+ OUT PULONG Size OPTIONAL
+ );
+
+VOID
+RtlpAnsiPszToUnicodePsz(
+ IN PCHAR AnsiString,
+ IN WCHAR *UnicodeString,
+ IN USHORT AnsiStringLength
+ );
+
+BOOLEAN
+RtlpDidUnicodeToOemWork(
+ IN POEM_STRING OemString,
+ IN PUNICODE_STRING UnicodeString
+ );
+
+extern CCHAR RtlpBitsClearAnywhere[256];
+extern CCHAR RtlpBitsClearLow[256];
+extern CCHAR RtlpBitsClearHigh[256];
+extern CCHAR RtlpBitsClearTotal[256];
+
+//
+// Macro that tells how many contiguous bits are set (i.e., 1) in
+// a byte
+//
+
+#define RtlpBitSetAnywhere( Byte ) RtlpBitsClearAnywhere[ (~(Byte) & 0xFF) ]
+
+
+//
+// Macro that tells how many contiguous LOW order bits are set
+// (i.e., 1) in a byte
+//
+
+#define RtlpBitsSetLow( Byte ) RtlpBitsClearLow[ (~(Byte) & 0xFF) ]
+
+
+//
+// Macro that tells how many contiguous HIGH order bits are set
+// (i.e., 1) in a byte
+//
+
+#define RtlpBitsSetHigh( Byte ) RtlpBitsClearHigh[ (~(Byte) & 0xFF) ]
+
+
+//
+// Macro that tells how many set bits (i.e., 1) there are in a byte
+//
+
+#define RtlpBitsSetTotal( Byte ) RtlpBitsClearTotal[ (~(Byte) & 0xFF) ]
+
+
+
+//
+// Upcase data table
+//
+
+extern PUSHORT Nls844UnicodeUpcaseTable;
+extern PUSHORT Nls844UnicodeLowercaseTable;
+
+
+//
+// Macros for Upper Casing a Unicode Code Point.
+//
+
+
+#define LOBYTE(w) ((UCHAR)((w)))
+#define HIBYTE(w) ((UCHAR)(((USHORT)((w)) >> 8) & 0xFF))
+
+#define GET8(w) ((ULONG)(((w) >> 8) & 0xff))
+#define GETHI4(w) ((ULONG)(((w) >> 4) & 0xf))
+#define GETLO4(w) ((ULONG)((w) & 0xf))
+
+/***************************************************************************\
+* TRAVERSE844W
+*
+* Traverses the 8:4:4 translation table for the given wide character. It
+* returns the final value of the 8:4:4 table, which is a WORD in length.
+*
+* Broken Down Version:
+* --------------------
+* Incr = pTable[GET8(wch)];
+* Incr = pTable[Incr + GETHI4(wch)];
+* Value = pTable[Incr + GETLO4(wch)];
+*
+* DEFINED AS A MACRO.
+*
+* 05-31-91 JulieB Created.
+\***************************************************************************/
+
+#define TRAVERSE844W(pTable, wch) \
+ ( (pTable)[(pTable)[(pTable)[GET8((wch))] + GETHI4((wch))] + GETLO4((wch))] )
+
+//
+// NLS_UPCASE - Based on julieb's macros in nls.h
+//
+// We will have this upcase macro quickly shortcircuit out if the value
+// is within the normal ANSI range (i.e., < 127). We actually won't bother
+// with the 5 values above 'z' because they won't happen very often and
+// coding it this way lets us get out after 1 compare for value less than
+// 'a' and 2 compares for lowercase a-z.
+//
+
+#define NLS_UPCASE(wch) ( \
+ ((wch) < 'a' ? \
+ (wch) \
+ : \
+ ((wch) <= 'z' ? \
+ (wch) - ('a'-'A') \
+ : \
+ ((WCHAR)((wch) + TRAVERSE844W(Nls844UnicodeUpcaseTable,(wch)))) \
+ ) \
+ ) \
+)
+
+#define NLS_DOWNCASE(wch) ( \
+ ((wch) < 'A' ? \
+ (wch) \
+ : \
+ ((wch) <= 'Z' ? \
+ (wch) + ('a'-'A') \
+ : \
+ ((WCHAR)((wch) + TRAVERSE844W(Nls844UnicodeLowercaseTable,(wch)))) \
+ ) \
+ ) \
+)
+
+#if DBG && defined(NTOS_KERNEL_RUNTIME)
+#define RTL_PAGED_CODE() PAGED_CODE()
+#else
+#define RTL_PAGED_CODE()
+#endif
+
+
+//
+// The follow definition is used to support the Rtl compression engine
+// Every compression format that NT supports will need to supply
+// these set of routines in order to be called by NtRtl.
+//
+
+typedef NTSTATUS (*PRTL_COMPRESS_WORKSPACE_SIZE) (
+ IN USHORT CompressionEngine,
+ OUT PULONG CompressBufferWorkSpaceSize,
+ OUT PULONG CompressFragmentWorkSpaceSize
+ );
+
+typedef NTSTATUS (*PRTL_COMPRESS_BUFFER) (
+ IN USHORT CompressionEngine,
+ IN PUCHAR UncompressedBuffer,
+ IN ULONG UncompressedBufferSize,
+ OUT PUCHAR CompressedBuffer,
+ IN ULONG CompressedBufferSize,
+ IN ULONG UncompressedChunkSize,
+ OUT PULONG FinalCompressedSize,
+ IN PVOID WorkSpace
+ );
+
+typedef NTSTATUS (*PRTL_DECOMPRESS_BUFFER) (
+ OUT PUCHAR UncompressedBuffer,
+ IN ULONG UncompressedBufferSize,
+ IN PUCHAR CompressedBuffer,
+ IN ULONG CompressedBufferSize,
+ OUT PULONG FinalUncompressedSize
+ );
+
+typedef NTSTATUS (*PRTL_DECOMPRESS_FRAGMENT) (
+ OUT PUCHAR UncompressedFragment,
+ IN ULONG UncompressedFragmentSize,
+ IN PUCHAR CompressedBuffer,
+ IN ULONG CompressedBufferSize,
+ IN ULONG FragmentOffset,
+ OUT PULONG FinalUncompressedSize,
+ IN PVOID WorkSpace
+ );
+
+typedef NTSTATUS (*PRTL_DESCRIBE_CHUNK) (
+ IN OUT PUCHAR *CompressedBuffer,
+ IN PUCHAR EndOfCompressedBufferPlus1,
+ OUT PUCHAR *ChunkBuffer,
+ OUT PULONG ChunkSize
+ );
+
+typedef NTSTATUS (*PRTL_RESERVE_CHUNK) (
+ IN OUT PUCHAR *CompressedBuffer,
+ IN PUCHAR EndOfCompressedBufferPlus1,
+ OUT PUCHAR *ChunkBuffer,
+ IN ULONG ChunkSize
+ );
+
+//
+// Here is the declarations of the LZNT1 routines
+//
+
+NTSTATUS
+RtlCompressWorkSpaceSizeLZNT1 (
+ IN USHORT CompressionEngine,
+ OUT PULONG CompressBufferWorkSpaceSize,
+ OUT PULONG CompressFragmentWorkSpaceSize
+ );
+
+NTSTATUS
+RtlCompressBufferLZNT1 (
+ IN USHORT CompressionEngine,
+ IN PUCHAR UncompressedBuffer,
+ IN ULONG UncompressedBufferSize,
+ OUT PUCHAR CompressedBuffer,
+ IN ULONG CompressedBufferSize,
+ IN ULONG UncompressedChunkSize,
+ OUT PULONG FinalCompressedSize,
+ IN PVOID WorkSpace
+ );
+
+NTSTATUS
+RtlDecompressBufferLZNT1 (
+ OUT PUCHAR UncompressedBuffer,
+ IN ULONG UncompressedBufferSize,
+ IN PUCHAR CompressedBuffer,
+ IN ULONG CompressedBufferSize,
+ OUT PULONG FinalUncompressedSize
+ );
+
+NTSTATUS
+RtlDecompressFragmentLZNT1 (
+ OUT PUCHAR UncompressedFragment,
+ IN ULONG UncompressedFragmentSize,
+ IN PUCHAR CompressedBuffer,
+ IN ULONG CompressedBufferSize,
+ IN ULONG FragmentOffset,
+ OUT PULONG FinalUncompressedSize,
+ IN PVOID WorkSpace
+ );
+
+NTSTATUS
+RtlDescribeChunkLZNT1 (
+ IN OUT PUCHAR *CompressedBuffer,
+ IN PUCHAR EndOfCompressedBufferPlus1,
+ OUT PUCHAR *ChunkBuffer,
+ OUT PULONG ChunkSize
+ );
+
+NTSTATUS
+RtlReserveChunkLZNT1 (
+ IN OUT PUCHAR *CompressedBuffer,
+ IN PUCHAR EndOfCompressedBufferPlus1,
+ OUT PUCHAR *ChunkBuffer,
+ IN ULONG ChunkSize
+ );
+
+//
+// Define procedure prototypes for architecture specific debug support routines.
+//
+
+NTSTATUS
+DebugPrint(
+ IN PSTRING Output
+ );
+
+ULONG
+DebugPrompt(
+ IN PSTRING Output,
+ IN PSTRING Input
+ );
+
+#if defined(NTOS_KERNEL_RUNTIME)
+
+VOID
+DebugLoadImageSymbols(
+ IN PSTRING FileName,
+ IN PKD_SYMBOLS_INFO SymbolInfo
+ );
+
+VOID
+DebugUnLoadImageSymbols(
+ IN PSTRING FileName,
+ IN PKD_SYMBOLS_INFO SymbolInfo
+ );
+
+#endif // defined(NTOS_KERNEL_RUNTIME)
+
+#endif // _NTRTLP_
+
+//
+// Procedure prototype for exception logging routines.
+
+ULONG
+RtlpLogExceptionHandler(
+ IN PEXCEPTION_RECORD ExceptionRecord,
+ IN PCONTEXT ContextRecord,
+ IN ULONG ControlPc,
+ IN PVOID HandlerData,
+ IN ULONG Size
+ );
+
+VOID
+RtlpLogLastExceptionDisposition(
+ IN ULONG LogIndex,
+ IN EXCEPTION_DISPOSITION Disposition
+ );