diff --git a/KSystemInformer/KSystemInformer.sln b/KSystemInformer/KSystemInformer.sln
index 763b15ff5bb5..8999ef377bf4 100644
--- a/KSystemInformer/KSystemInformer.sln
+++ b/KSystemInformer/KSystemInformer.sln
@@ -12,6 +12,9 @@ EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kphlib", "..\kphlib\kphlib_km.vcxproj", "{B1863396-A667-42DB-97AC-C5E033CEE321}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ksidll", "ksidll.vcxproj", "{B385D394-19CC-48BC-827E-AF9ADCE559E0}"
+ ProjectSection(ProjectDependencies) = postProject
+ {B1863396-A667-42DB-97AC-C5E033CEE321} = {B1863396-A667-42DB-97AC-C5E033CEE321}
+ EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/KSystemInformer/KSystemInformer.vcxproj b/KSystemInformer/KSystemInformer.vcxproj
index 2b8d7f6103a7..39dd7827790b 100644
--- a/KSystemInformer/KSystemInformer.vcxproj
+++ b/KSystemInformer/KSystemInformer.vcxproj
@@ -111,7 +111,7 @@
stdcpplatest
stdc17
stdclatest
- /kernel /utf-8 /INTEGRITYCHECK /d2guardretpoline %(AdditionalOptions)
+ /kernel /utf-8 /INTEGRITYCHECK /d1nodatetime /d2guardretpoline %(AdditionalOptions)
StdCall
true
false
@@ -123,6 +123,7 @@
4201
true
false
+ true
ksi.lib;Netio.lib;FltMgr.lib;ksecdd.lib;kphlib_km.lib;volatileaccessk.lib;%(AdditionalDependencies)
@@ -148,7 +149,7 @@
stdcpplatest
stdc17
stdclatest
- /kernel /utf-8 /INTEGRITYCHECK %(AdditionalOptions)
+ /kernel /utf-8 /INTEGRITYCHECK /d1nodatetime %(AdditionalOptions)
StdCall
true
Guard
@@ -160,6 +161,7 @@
true
false
false
+ true
ksi.lib;Netio.lib;FltMgr.lib;ksecdd.lib;kphlib_km.lib;volatileaccessk.lib;%(AdditionalDependencies)
@@ -200,6 +202,7 @@
true
Speed
true
+ true
ksi.lib;Netio.lib;FltMgr.lib;ksecdd.lib;kphlib_km.lib;volatileaccessk.lib;%(AdditionalDependencies)
@@ -240,6 +243,7 @@
AnySuitable
true
Speed
+ true
ksi.lib;Netio.lib;FltMgr.lib;ksecdd.lib;kphlib_km.lib;volatileaccessk.lib;%(AdditionalDependencies)
diff --git a/KSystemInformer/include/ntfill.h b/KSystemInformer/include/ntfill.h
index 5e787d90b8b3..230f15738384 100644
--- a/KSystemInformer/include/ntfill.h
+++ b/KSystemInformer/include/ntfill.h
@@ -401,6 +401,8 @@ typedef struct _REG_SAVE_MERGED_KEY_INFORMATION
#define VS_FFI_SIGNATURE 0xFEEF04BDL
+typedef struct _IMAGE_RESOURCE_DATA_ENTRY IMAGE_RESOURCE_DATA_ENTRY, *PIMAGE_RESOURCE_DATA_ENTRY;
+
NTKERNELAPI
NTSTATUS
NTAPI
@@ -458,6 +460,8 @@ typedef struct _FIXEDFILEINFO
DWORD dwFileDateLS;
} VS_FIXEDFILEINFO, *PVS_FIXEDFILEINFO;
+typedef struct _NON_PAGED_DEBUG_INFO NON_PAGED_DEBUG_INFO, *PNON_PAGED_DEBUG_INFO;
+
typedef struct _KLDR_DATA_TABLE_ENTRY
{
LIST_ENTRY InLoadOrderLinks;
diff --git a/KSystemInformer/ksidll.vcxproj b/KSystemInformer/ksidll.vcxproj
index 90f4cfe0d644..db3ca37c09d6 100644
--- a/KSystemInformer/ksidll.vcxproj
+++ b/KSystemInformer/ksidll.vcxproj
@@ -112,7 +112,7 @@
stdcpplatest
stdc17
stdclatest
- /kernel /utf-8 /INTEGRITYCHECK /d2guardretpoline %(AdditionalOptions)
+ /kernel /utf-8 /INTEGRITYCHECK /d1nodatetime /d2guardretpoline %(AdditionalOptions)
StdCall
true
false
@@ -123,6 +123,7 @@
4201
true
false
+ true
true
@@ -149,7 +150,7 @@
stdcpplatest
stdc17
stdclatest
- /kernel /utf-8 /INTEGRITYCHECK %(AdditionalOptions)
+ /kernel /utf-8 /INTEGRITYCHECK /d1nodatetime %(AdditionalOptions)
StdCall
true
true
@@ -160,6 +161,7 @@
true
false
false
+ true
true
@@ -185,7 +187,7 @@
stdcpplatest
stdc17
stdclatest
- /kernel /utf-8 /INTEGRITYCHECK /d2guardretpoline %(AdditionalOptions)
+ /kernel /utf-8 /INTEGRITYCHECK /d1nodatetime /d2guardretpoline %(AdditionalOptions)
true
StdCall
true
@@ -200,6 +202,7 @@
true
Speed
true
+ true
true
@@ -226,7 +229,7 @@
stdcpplatest
stdc17
stdclatest
- /kernel /utf-8 /INTEGRITYCHECK %(AdditionalOptions)
+ /kernel /utf-8 /INTEGRITYCHECK /d1nodatetime %(AdditionalOptions)
StdCall
true
true
@@ -240,6 +243,7 @@
AnySuitable
true
Speed
+ true
true
diff --git a/KSystemInformer/resource.rc b/KSystemInformer/resource.rc
index 044c030a2f60..3f8d8234ab1f 100644
--- a/KSystemInformer/resource.rc
+++ b/KSystemInformer/resource.rc
@@ -1,39 +1,49 @@
+// Microsoft Visual C++ generated resource script.
+//
#pragma code_page(65001)
#include
#include
-#define VER_COMMA 3,2,1,0
-#define VER_STR "3.2\0"
+#define VER_FILEVERSION 3,2,1,0
+#define VER_FILEVERSION_STR "3.2\0"
-#define VER_FILEVERSION VER_COMMA
-#define VER_FILEVERSION_STR VER_STR
-#define VER_PRODUCTVERSION VER_COMMA
-#define VER_PRODUCTVERSION_STR VER_STR
+#define VER_PRODUCTVERSION VER_FILEVERSION
+#define VER_PRODUCTVERSION_STR VER_FILEVERSION_STR
-#ifndef DEBUG
-#define VER_DEBUG 0
+#if DEBUG
+#define VER_DEBUG VS_FF_DEBUG
+#define VER_PRERELEASE VS_FF_PRERELEASE
+#define VER_PRIVATE VS_FF_PRIVATEBUILD
#else
-#define VER_DEBUG VS_FF_DEBUG
+#define VER_DEBUG 0
+#define VER_PRERELEASE 0
+#define VER_PRIVATE 0
#endif
-#define VER_PRIVATEBUILD 0
-#define VER_PRERELEASE 0
+#define VER_FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
+#define VER_FILEFLAGS (VER_PRERELEASE | VER_DEBUG | VER_PRIVATE)
+#define VER_FILEOS VOS_NT_WINDOWS32
-#define VER_COMPANYNAME_STR "System Informer\0"
-#define VER_FILEDESCRIPTION_STR "System Informer\0"
-#define VER_LEGALCOPYRIGHT_STR "Copyright (c) Winsider Seminars & Solutions, Inc. All rights reserved.\0"
-#define VER_ORIGINALFILENAME_STR "SystemInformer.sys\0"
-#define VER_PRODUCTNAME_STR "System Informer\0"
+#define VER_FILETYPE VFT_DRV
+#define VER_FILESUBTYPE VFT2_DRV_SYSTEM
+#define VER_COMPANYNAME_STR "System Informer\0"
+#define VER_FILEDESCRIPTION_STR "System Informer\0"
+#define VER_LEGALCOPYRIGHT_STR "Copyright (c) Winsider Seminars & Solutions, Inc. All rights reserved.\0"
+#define VER_ORIGINALFILENAME_STR "SystemInformer.sys\0"
+#define VER_INTERNALNAME_STR "SystemInformer.sys\0"
+#define VER_PRODUCTNAME_STR "System Informer\0"
+
+#if !defined(DEFAULT_VERSIONINFO)
VS_VERSION_INFO VERSIONINFO
-FILEVERSION VER_FILEVERSION
-PRODUCTVERSION VER_PRODUCTVERSION
-FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
-FILEFLAGS (VER_PRIVATEBUILD | VER_PRERELEASE | VER_DEBUG)
-FILEOS VOS__WINDOWS32
-FILETYPE VFT_DRV
-FILESUBTYPE VFT2_DRV_SYSTEM
+FILEVERSION VER_FILEVERSION
+PRODUCTVERSION VER_PRODUCTVERSION
+FILEFLAGSMASK VER_FILEFLAGSMASK
+FILEFLAGS VER_FILEFLAGS
+FILEOS VER_FILEOS
+FILETYPE VER_FILETYPE
+FILESUBTYPE VER_FILESUBTYPE
BEGIN
BLOCK "StringFileInfo"
BEGIN
@@ -42,16 +52,19 @@ BEGIN
VALUE "CompanyName", VER_COMPANYNAME_STR
VALUE "FileDescription", VER_FILEDESCRIPTION_STR
VALUE "FileVersion", VER_FILEVERSION_STR
- VALUE "InternalName", VER_ORIGINALFILENAME_STR
+ VALUE "InternalName", VER_INTERNALNAME_STR
VALUE "LegalCopyright", VER_LEGALCOPYRIGHT_STR
VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR
VALUE "ProductName", VER_PRODUCTNAME_STR
VALUE "ProductVersion", VER_PRODUCTVERSION_STR
END
END
-
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252
END
END
+#else
+#include
+#include "common.ver"
+#endif
diff --git a/kphlib/include/sistatus.rc b/kphlib/include/sistatus.rc
index d5a5fd1fdb46..825b4cacdb2d 100644
--- a/kphlib/include/sistatus.rc
+++ b/kphlib/include/sistatus.rc
@@ -1,49 +1,2 @@
-// Microsoft Visual C++ generated resource script.
-//
-#pragma code_page(65001)
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "winres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (United States) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""winres.h""\r\n"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-1 RT_MESSAGETABLE "sistatus_MSG00001.bin"
-
-#endif // English resources
-/////////////////////////////////////////////////////////////////////////////
-
+LANGUAGE 0x9,0x1
+1 11 "sistatus_MSG00001.bin"
diff --git a/kphlib/include/sistatus_MSG00001.bin b/kphlib/include/sistatus_MSG00001.bin
index bde733586288..612244ec35f6 100644
Binary files a/kphlib/include/sistatus_MSG00001.bin and b/kphlib/include/sistatus_MSG00001.bin differ
diff --git a/kphlib/kphdyndata.c b/kphlib/kphdyndata.c
index 4fdedee33cf1..f50c875f24a0 100644
--- a/kphlib/kphdyndata.c
+++ b/kphlib/kphdyndata.c
@@ -13,7 +13,7 @@
#include
#ifndef _KERNEL_MODE
-#include "../tools/thirdparty/winsdk/ntintsafe.h"
+#include
#ifndef Add2Ptr
#define Add2Ptr(P,I) ((PVOID)((PUCHAR)(P) + (I)))
#endif
diff --git a/kphlib/kphlib_km.vcxproj b/kphlib/kphlib_km.vcxproj
index a8b55780d296..290e63ba0bd0 100644
--- a/kphlib/kphlib_km.vcxproj
+++ b/kphlib/kphlib_km.vcxproj
@@ -162,6 +162,17 @@
"$(SolutionDir)..\tools\CustomBuildTool\bin\Release\$(PROCESSOR_ARCHITECTURE)\CustomBuildTool.exe" -dyndata "$(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)"
+
+ true
+ true
+ true
+ $(IntDir)\include
+ true
+ true
+
+
+ /c 65001 %(AdditionalOptions)
+
@@ -194,6 +205,17 @@
"$(SolutionDir)..\tools\CustomBuildTool\bin\Release\$(PROCESSOR_ARCHITECTURE)\CustomBuildTool.exe" -dyndata "$(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)"
+
+ true
+ true
+ true
+ $(IntDir)\include
+ true
+ true
+
+
+ /c 65001 %(AdditionalOptions)
+
@@ -219,6 +241,17 @@
"$(SolutionDir)..\tools\CustomBuildTool\bin\Release\$(PROCESSOR_ARCHITECTURE)\CustomBuildTool.exe" -dyndata "$(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)"
+
+ true
+ true
+ true
+ $(IntDir)\include
+ true
+ true
+
+
+ /c 65001 %(AdditionalOptions)
+
@@ -247,6 +280,17 @@
"$(SolutionDir)..\tools\CustomBuildTool\bin\Release\$(PROCESSOR_ARCHITECTURE)\CustomBuildTool.exe" -dyndata "$(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)"
+
+ true
+ true
+ true
+ $(IntDir)\include
+ true
+ true
+
+
+ /c 65001 %(AdditionalOptions)
+
@@ -279,6 +323,17 @@
"$(SolutionDir)..\tools\CustomBuildTool\bin\Release\$(PROCESSOR_ARCHITECTURE)\CustomBuildTool.exe" -dyndata "$(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)"
+
+ true
+ true
+ true
+ $(IntDir)\include
+ true
+ true
+
+
+ /c 65001 %(AdditionalOptions)
+
@@ -309,6 +364,17 @@
"$(SolutionDir)..\tools\CustomBuildTool\bin\Release\$(PROCESSOR_ARCHITECTURE)\CustomBuildTool.exe" -dyndata "$(SolutionDir)..\bin\$(Configuration)$(PlatformArchitecture)"
+
+ true
+ true
+ true
+ $(IntDir)\include
+ true
+ true
+
+
+ /c 65001 %(AdditionalOptions)
+
diff --git a/kphlib/sistatus.mc b/kphlib/sistatus.mc
index 004a2af90379..e9b6986db206 100644
--- a/kphlib/sistatus.mc
+++ b/kphlib/sistatus.mc
@@ -1,4 +1,4 @@
-;/*
+;/*
; * Copyright (c) 2022 Winsider Seminars & Solutions, Inc. All rights reserved.
; *
; * This file is part of System Informer.
diff --git a/phnt/include/ntimage.h b/phnt/include/ntimage.h
index ae21f052dbd4..f73e69d0fa3c 100644
--- a/phnt/include/ntimage.h
+++ b/phnt/include/ntimage.h
@@ -158,8 +158,10 @@ typedef struct _IMAGE_DVRT_ARM64X_DELTA_FIXUP_RECORD
// Note: The Windows SDK defines UNALIGNED for PIMAGE_IMPORT_DESCRIPTOR but
// doesn't include UNALIGNED for PIMAGE_THUNK_DATA (See GH#1694) (dmex)
-typedef IMAGE_THUNK_DATA32 UNALIGNED *UNALIGNED_PIMAGE_THUNK_DATA32;
-typedef IMAGE_THUNK_DATA64 UNALIGNED *UNALIGNED_PIMAGE_THUNK_DATA64;
+typedef struct _IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA32;
+typedef struct _IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA64;
+typedef IMAGE_THUNK_DATA32 UNALIGNED* UNALIGNED_PIMAGE_THUNK_DATA32;
+typedef IMAGE_THUNK_DATA64 UNALIGNED* UNALIGNED_PIMAGE_THUNK_DATA64;
// Note: Required for legacy SDK support (dmex)
#if !defined(NTDDI_WIN10_NI) || (NTDDI_VERSION < NTDDI_WIN10_NI)
diff --git a/tools/thirdparty/winsdk/ntintsafe.h b/tools/thirdparty/winsdk/ntintsafe.h
deleted file mode 100644
index dd5683c22824..000000000000
--- a/tools/thirdparty/winsdk/ntintsafe.h
+++ /dev/null
@@ -1,8615 +0,0 @@
-/******************************************************************
-* *
-* ntintsafe.h -- This module defines helper functions to prevent *
-* integer overflow bugs for drivers. A similar *
-* file, intsafe.h, is available for applications. *
-* *
-* Copyright (c) Microsoft Corp. All rights reserved. *
-* *
-******************************************************************/
-#ifndef _NTINTSAFE_H_INCLUDED_
-#define _NTINTSAFE_H_INCLUDED_
-
-#include
-
-
-#if (_MSC_VER > 1000)
-#pragma once
-#endif
-
-#pragma region Application Family or Games Family
-#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM | WINAPI_PARTITION_GAMES)
-
-#include // for _In_, etc.
-
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#pragma warning(disable:4668) // #if not_defined treated as #if 0
-#endif
-
-#if !defined(_W64)
-#if !defined(__midl) && (defined(_X86_) || defined(_M_IX86) || defined(_ARM_) || defined(_M_ARM)) && (_MSC_VER >= 1300)
-#define _W64 __w64
-#else
-#define _W64
-#endif
-#endif
-
-//
-// typedefs
-//
-typedef char CHAR;
-typedef signed char INT8;
-typedef unsigned char UCHAR;
-typedef unsigned char UINT8;
-typedef unsigned char BYTE;
-typedef short SHORT;
-typedef signed short INT16;
-typedef unsigned short USHORT;
-typedef unsigned short UINT16;
-typedef unsigned short WORD;
-typedef int INT;
-typedef signed int INT32;
-typedef unsigned int UINT;
-typedef unsigned int UINT32;
-typedef long LONG;
-typedef unsigned long ULONG;
-typedef unsigned long DWORD;
-typedef __int64 LONGLONG;
-typedef __int64 LONG64;
-typedef signed __int64 RtlINT64;
-typedef unsigned __int64 ULONGLONG;
-typedef unsigned __int64 DWORDLONG;
-typedef unsigned __int64 ULONG64;
-typedef unsigned __int64 DWORD64;
-typedef unsigned __int64 UINT64;
-
-#if (__midl > 501)
-typedef [public] __int3264 INT_PTR;
-typedef [public] unsigned __int3264 UINT_PTR;
-typedef [public] __int3264 LONG_PTR;
-typedef [public] unsigned __int3264 ULONG_PTR;
-#else
-#ifdef _WIN64
-typedef __int64 INT_PTR;
-typedef unsigned __int64 UINT_PTR;
-typedef __int64 LONG_PTR;
-typedef unsigned __int64 ULONG_PTR;
-#else
-typedef _W64 int INT_PTR;
-typedef _W64 unsigned int UINT_PTR;
-typedef _W64 long LONG_PTR;
-typedef _W64 unsigned long ULONG_PTR;
-#endif // WIN64
-#endif // (__midl > 501)
-
-#ifdef _WIN64
-typedef __int64 ptrdiff_t;
-typedef unsigned __int64 size_t;
-#else
-typedef _W64 int ptrdiff_t;
-typedef _W64 unsigned int size_t;
-#endif
-
-typedef ULONG_PTR DWORD_PTR;
-typedef LONG_PTR SSIZE_T;
-typedef ULONG_PTR SIZE_T;
-
-#undef _USE_INTRINSIC_MULTIPLY128
-
-#if !defined(_M_CEE) && ((defined(_AMD64_) && !defined(_ARM64EC_)) || (defined(_IA64_) && (_MSC_VER >= 1400)))
-#define _USE_INTRINSIC_MULTIPLY128
-#endif
-
-#if defined(_USE_INTRINSIC_MULTIPLY128)
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if !defined(_ARM64EC_)
-
-#define UnsignedMultiply128 _umul128
-
-#else
-
-#define _umul128 Multiply128
-
-#endif // defined(_ARM64EC_)
-
-ULONG64
-UnsignedMultiply128(
- _In_ ULONGLONG ullMultiplicand,
- _In_ ULONGLONG ullMultiplier,
- _Out_ _Deref_out_range_(==, ullMultiplicand * ullMultiplier) ULONGLONG* pullResultHigh);
-
-#if !defined(_ARM64EC_)
-#pragma intrinsic(_umul128)
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif // _USE_INTRINSIC_MULTIPLY128
-
-
-
-typedef _Return_type_success_(return >= 0) long NTSTATUS;
-
-#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)
-
-#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
-#ifndef SORTPP_PASS
-// compiletime asserts (failure results in error C2118: negative subscript)
-#define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
-#else
-#define C_ASSERT(e)
-#endif
-
-//
-// UInt32x32To64 macro
-//
-#ifndef UInt32x32To64
-#if defined(MIDL_PASS) || defined(RC_INVOKED) || defined(_M_CEE_PURE) \
- || defined(_68K_) || defined(_MPPC_) \
- || defined(_M_IA64) || defined(_M_AMD64) || defined(_M_ARM) || defined(_M_ARM64) \
- || defined(_M_HYBRID_X86_ARM64)
-#define UInt32x32To64(a, b) (((unsigned __int64)((unsigned int)(a))) * ((unsigned __int64)((unsigned int)(b))))
-#elif defined(_M_IX86)
-#define UInt32x32To64(a, b) ((unsigned __int64)(((unsigned __int64)((unsigned int)(a))) * ((unsigned int)(b))))
-#else
-#error Must define a target architecture.
-#endif
-#endif
-
-//
-// Min/Max type values
-//
-#define INT8_MIN (-127i8 - 1)
-#define SHORT_MIN (-32768)
-#define INT16_MIN (-32767i16 - 1)
-#ifndef INT_MIN
-#define INT_MIN (-2147483647 - 1)
-#endif
-#define INT32_MIN (-2147483647i32 - 1)
-#ifndef LONG_MIN
-#define LONG_MIN (-2147483647L - 1)
-#endif
-#define LONGLONG_MIN (-9223372036854775807i64 - 1)
-#define LONG64_MIN (-9223372036854775807i64 - 1)
-#define INT64_MIN (-9223372036854775807i64 - 1)
-#define INT128_MIN (-170141183460469231731687303715884105727i128 - 1)
-
-#ifdef _WIN64
-#define INT_PTR_MIN (-9223372036854775807i64 - 1)
-#define LONG_PTR_MIN (-9223372036854775807i64 - 1)
-#define PTRDIFF_T_MIN (-9223372036854775807i64 - 1)
-#define SSIZE_T_MIN (-9223372036854775807i64 - 1)
-#else
-#define INT_PTR_MIN (-2147483647 - 1)
-#define LONG_PTR_MIN (-2147483647L - 1)
-#define PTRDIFF_T_MIN (-2147483647 - 1)
-#define SSIZE_T_MIN (-2147483647L - 1)
-#endif
-
-#define INT8_MAX 127i8
-#define UINT8_MAX 0xffui8
-#define BYTE_MAX 0xff
-#define SHORT_MAX 32767
-#define INT16_MAX 32767i16
-#define USHORT_MAX 0xffff
-#define UINT16_MAX 0xffffui16
-#define WORD_MAX 0xffff
-#ifndef INT_MAX
-#define INT_MAX 2147483647
-#endif
-#define INT32_MAX 2147483647i32
-#ifndef UINT_MAX
-#define UINT_MAX 0xffffffff
-#endif
-#define UINT32_MAX 0xffffffffui32
-#ifndef LONG_MAX
-#define LONG_MAX 2147483647L
-#endif
-#ifndef ULONG_MAX
-#define ULONG_MAX 0xffffffffUL
-#endif
-#define DWORD_MAX 0xffffffffUL
-#define LONGLONG_MAX 9223372036854775807i64
-#define LONG64_MAX 9223372036854775807i64
-#define INT64_MAX 9223372036854775807i64
-#define ULONGLONG_MAX 0xffffffffffffffffui64
-#define DWORDLONG_MAX 0xffffffffffffffffui64
-#define ULONG64_MAX 0xffffffffffffffffui64
-#define DWORD64_MAX 0xffffffffffffffffui64
-#define UINT64_MAX 0xffffffffffffffffui64
-#define INT128_MAX 170141183460469231731687303715884105727i128
-#define UINT128_MAX 0xffffffffffffffffffffffffffffffffui128
-
-#undef SIZE_T_MAX
-
-#ifdef _WIN64
-#define INT_PTR_MAX 9223372036854775807i64
-#define UINT_PTR_MAX 0xffffffffffffffffui64
-#define LONG_PTR_MAX 9223372036854775807i64
-#define ULONG_PTR_MAX 0xffffffffffffffffui64
-#define DWORD_PTR_MAX 0xffffffffffffffffui64
-#define PTRDIFF_T_MAX 9223372036854775807i64
-#define SIZE_T_MAX 0xffffffffffffffffui64
-#define SSIZE_T_MAX 9223372036854775807i64
-#define _SIZE_T_MAX 0xffffffffffffffffui64
-#else
-#define INT_PTR_MAX 2147483647
-#define UINT_PTR_MAX 0xffffffff
-#define LONG_PTR_MAX 2147483647L
-#define ULONG_PTR_MAX 0xffffffffUL
-#define DWORD_PTR_MAX 0xffffffffUL
-#define PTRDIFF_T_MAX 2147483647
-#define SIZE_T_MAX 0xffffffff
-#define SSIZE_T_MAX 2147483647L
-#define _SIZE_T_MAX 0xffffffffUL
-#endif
-
-
-//
-// It is common for -1 to be used as an error value
-//
-#define INT8_ERROR (-1i8)
-#define UINT8_ERROR 0xffui8
-#define BYTE_ERROR 0xff
-#define SHORT_ERROR (-1)
-#define INT16_ERROR (-1i16)
-#define USHORT_ERROR 0xffff
-#define UINT16_ERROR 0xffffui16
-#define WORD_ERROR 0xffff
-#define INT_ERROR (-1)
-#define INT32_ERROR (-1i32)
-#define UINT_ERROR 0xffffffff
-#define UINT32_ERROR 0xffffffffui32
-#define LONG_ERROR (-1L)
-#define ULONG_ERROR 0xffffffffUL
-#define DWORD_ERROR 0xffffffffUL
-#define LONGLONG_ERROR (-1i64)
-#define LONG64_ERROR (-1i64)
-#define INT64_ERROR (-1i64)
-#define ULONGLONG_ERROR 0xffffffffffffffffui64
-#define DWORDLONG_ERROR 0xffffffffffffffffui64
-#define ULONG64_ERROR 0xffffffffffffffffui64
-#define UINT64_ERROR 0xffffffffffffffffui64
-
-#ifdef _WIN64
-#define INT_PTR_ERROR (-1i64)
-#define UINT_PTR_ERROR 0xffffffffffffffffui64
-#define LONG_PTR_ERROR (-1i64)
-#define ULONG_PTR_ERROR 0xffffffffffffffffui64
-#define DWORD_PTR_ERROR 0xffffffffffffffffui64
-#define PTRDIFF_T_ERROR (-1i64)
-#define SIZE_T_ERROR 0xffffffffffffffffui64
-#define SSIZE_T_ERROR (-1i64)
-#define _SIZE_T_ERROR 0xffffffffffffffffui64
-#else
-#define INT_PTR_ERROR (-1)
-#define UINT_PTR_ERROR 0xffffffff
-#define LONG_PTR_ERROR (-1L)
-#define ULONG_PTR_ERROR 0xffffffffUL
-#define DWORD_PTR_ERROR 0xffffffffUL
-#define PTRDIFF_T_ERROR (-1)
-#define SIZE_T_ERROR 0xffffffff
-#define SSIZE_T_ERROR (-1L)
-#define _SIZE_T_ERROR 0xffffffffUL
-#endif
-
-
-//
-// We make some assumptions about the sizes of various types. Let's be
-// explicit about those assumptions and check them.
-//
-C_ASSERT(sizeof(USHORT) == 2);
-C_ASSERT(sizeof(INT) == 4);
-C_ASSERT(sizeof(UINT) == 4);
-C_ASSERT(sizeof(LONG) == 4);
-C_ASSERT(sizeof(ULONG) == 4);
-C_ASSERT(sizeof(UINT_PTR) == sizeof(ULONG_PTR));
-
-
-//=============================================================================
-// Conversion functions
-//
-// There are three reasons for having conversion functions:
-//
-// 1. We are converting from a signed type to an unsigned type of the same
-// size, or vice-versa.
-//
-// Since we default to only having unsigned math functions,
-// (see ENABLE_INTSAFE_SIGNED_FUNCTIONS below) we prefer people to convert
-// to unsigned, do the math, and then convert back to signed.
-//
-// 2. We are converting to a smaller type, and we could therefore possibly
-// overflow.
-//
-// 3. We are converting to a bigger type, and we are signed and the type we are
-// converting to is unsigned.
-//
-//=============================================================================
-
-
-//
-// INT8 -> UCHAR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlInt8ToUChar(
- _In_ INT8 i8Operand,
- _Out_ _Deref_out_range_(==, i8Operand) UCHAR* pch)
-{
- NTSTATUS status;
-
- if (i8Operand >= 0)
- {
- *pch = (UCHAR)i8Operand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pch = '\0';
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT8 -> UINT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlInt8ToUInt8(
- _In_ INT8 i8Operand,
- _Out_ _Deref_out_range_(==, i8Operand) UINT8* pu8Result)
-{
- NTSTATUS status;
-
- if (i8Operand >= 0)
- {
- *pu8Result = (UINT8)i8Operand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pu8Result = UINT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT8 -> BYTE conversion
-//
-#define RtlInt8ToByte RtlInt8ToUInt8
-
-//
-// INT8 -> USHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlInt8ToUShort(
- _In_ INT8 i8Operand,
- _Out_ _Deref_out_range_(==, i8Operand) USHORT* pusResult)
-{
- NTSTATUS status;
-
- if (i8Operand >= 0)
- {
- *pusResult = (USHORT)i8Operand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pusResult = USHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT8 -> UINT16 conversion
-//
-#define RtlInt8ToUInt16 RtlInt8ToUShort
-
-//
-// INT8 -> WORD conversion
-//
-#define RtlInt8ToWord RtlInt8ToUShort
-
-//
-// INT8 -> UINT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlInt8ToUInt(
- _In_ INT8 i8Operand,
- _Out_ _Deref_out_range_(==, i8Operand) UINT* puResult)
-{
- NTSTATUS status;
-
- if (i8Operand >= 0)
- {
- *puResult = (UINT)i8Operand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *puResult = UINT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT8 -> UINT32 conversion
-//
-#define RtlInt8ToUInt32 RtlInt8ToUInt
-
-//
-// INT8 -> UINT_PTR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlInt8ToUIntPtr(
- _In_ INT8 i8Operand,
- _Out_ _Deref_out_range_(==, i8Operand) UINT_PTR* puResult)
-{
- NTSTATUS status;
-
- if (i8Operand >= 0)
- {
- *puResult = (UINT_PTR)i8Operand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *puResult = UINT_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT8 -> ULONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlInt8ToULong(
- _In_ INT8 i8Operand,
- _Out_ _Deref_out_range_(==, i8Operand) ULONG* pulResult)
-{
- NTSTATUS status;
-
- if (i8Operand >= 0)
- {
- *pulResult = (ULONG)i8Operand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pulResult = ULONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT8 -> ULONG_PTR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlInt8ToULongPtr(
- _In_ INT8 i8Operand,
- _Out_ _Deref_out_range_(==, i8Operand) ULONG_PTR* pulResult)
-{
- NTSTATUS status;
-
- if (i8Operand >= 0)
- {
- *pulResult = (ULONG_PTR)i8Operand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pulResult = ULONG_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT8 -> DWORD conversion
-//
-#define RtlInt8ToDWord RtlInt8ToULong
-
-//
-// INT8 -> DWORD_PTR conversion
-//
-#define RtlInt8ToDWordPtr RtlInt8ToULongPtr
-
-//
-// INT8 -> ULONGLONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlInt8ToULongLong(
- _In_ INT8 i8Operand,
- _Out_ _Deref_out_range_(==, i8Operand) ULONGLONG* pullResult)
-{
- NTSTATUS status;
-
- if (i8Operand >= 0)
- {
- *pullResult = (ULONGLONG)i8Operand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pullResult = ULONGLONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT8 -> DWORDLONG conversion
-//
-#define RtlInt8ToDWordLong RtlInt8ToULongLong
-
-//
-// INT8 -> ULONG64 conversion
-//
-#define RtlInt8ToULong64 RtlInt8ToULongLong
-
-//
-// INT8 -> DWORD64 conversion
-//
-#define RtlInt8ToDWord64 RtlInt8ToULongLong
-
-//
-// INT8 -> UINT64 conversion
-//
-#define RtlInt8ToUInt64 RtlInt8ToULongLong
-
-//
-// INT8 -> size_t conversion
-//
-#define RtlInt8ToSizeT RtlInt8ToUIntPtr
-
-//
-// INT8 -> SIZE_T conversion
-//
-#define RtlInt8ToSIZET RtlInt8ToULongPtr
-
-//
-// UINT8 -> INT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUInt8ToInt8(
- _In_ UINT8 u8Operand,
- _Out_ _Deref_out_range_(==, u8Operand) INT8* pi8Result)
-{
- NTSTATUS status;
-
- if (u8Operand <= INT8_MAX)
- {
- *pi8Result = (INT8)u8Operand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pi8Result = INT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT8 -> CHAR conversion
-//
-__forceinline
-NTSTATUS
-RtlUInt8ToChar(
- _In_ UINT8 u8Operand,
- _Out_ _Deref_out_range_(==, u8Operand) CHAR* pch)
-{
-#ifdef _CHAR_UNSIGNED
- *pch = (CHAR)u8Operand;
- return STATUS_SUCCESS;
-#else
- return RtlUInt8ToInt8(u8Operand, (INT8*)pch);
-#endif
-}
-
-//
-// BYTE -> INT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlByteToInt8(
- _In_ BYTE bOperand,
- _Out_ _Deref_out_range_(==, bOperand) INT8* pi8Result)
-{
- NTSTATUS status;
-
- if (bOperand <= INT8_MAX)
- {
- *pi8Result = (INT8)bOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pi8Result = INT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// BYTE -> CHAR conversion
-//
-__forceinline
-NTSTATUS
-RtlByteToChar(
- _In_ BYTE bOperand,
- _Out_ _Deref_out_range_(==, bOperand) CHAR* pch)
-{
-#ifdef _CHAR_UNSIGNED
- *pch = (CHAR)bOperand;
- return STATUS_SUCCESS;
-#else
- return RtlByteToInt8(bOperand, (INT8*)pch);
-#endif
-}
-
-//
-// SHORT -> INT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlShortToInt8(
- _In_ SHORT sOperand,
- _Out_ _Deref_out_range_(==, sOperand) INT8* pi8Result)
-{
- NTSTATUS status;
-
- if ((sOperand >= INT8_MIN) && (sOperand <= INT8_MAX))
- {
- *pi8Result = (INT8)sOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pi8Result = INT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// SHORT -> UCHAR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlShortToUChar(
- _In_ SHORT sOperand,
- _Out_ _Deref_out_range_(==, sOperand) UCHAR* pch)
-{
- NTSTATUS status;
-
- if ((sOperand >= 0) && (sOperand <= 255))
- {
- *pch = (UCHAR)sOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pch = '\0';
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// SHORT -> CHAR conversion
-//
-__forceinline
-NTSTATUS
-RtlShortToChar(
- _In_ SHORT sOperand,
- _Out_ _Deref_out_range_(==, sOperand) CHAR* pch)
-{
-#ifdef _CHAR_UNSIGNED
- return RtlShortToUChar(sOperand, (UCHAR*)pch);
-#else
- return RtlShortToInt8(sOperand, (INT8*)pch);
-#endif // _CHAR_UNSIGNED
-}
-
-//
-// SHORT -> UINT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlShortToUInt8(
- _In_ SHORT sOperand,
- _Out_ _Deref_out_range_(==, sOperand) UINT8* pui8Result)
-{
- NTSTATUS status;
-
- if ((sOperand >= 0) && (sOperand <= UINT8_MAX))
- {
- *pui8Result = (UINT8)sOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pui8Result = UINT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// SHORT -> BYTE conversion
-//
-#define RtlShortToByte RtlShortToUInt8
-
-//
-// SHORT -> USHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlShortToUShort(
- _In_ SHORT sOperand,
- _Out_ _Deref_out_range_(==, sOperand) USHORT* pusResult)
-{
- NTSTATUS status;
-
- if (sOperand >= 0)
- {
- *pusResult = (USHORT)sOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pusResult = USHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// SHORT -> UINT16 conversion
-//
-#define RtlShortToUInt16 RtlShortToUShort
-
-//
-// SHORT -> WORD conversion
-//
-#define RtlShortToWord RtlShortToUShort
-
-//
-// SHORT -> UINT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlShortToUInt(
- _In_ SHORT sOperand,
- _Out_ _Deref_out_range_(==, sOperand) UINT* puResult)
-{
- NTSTATUS status;
-
- if (sOperand >= 0)
- {
- *puResult = (UINT)sOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *puResult = UINT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// SHORT -> UINT32 conversion
-//
-#define RtlShortToUInt32 RtlShortToUInt
-
-//
-// SHORT -> UINT_PTR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlShortToUIntPtr(
- _In_ SHORT sOperand,
- _Out_ _Deref_out_range_(==, sOperand) UINT_PTR* puResult)
-{
- NTSTATUS status;
-
- if (sOperand >= 0)
- {
- *puResult = (UINT_PTR)sOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *puResult = UINT_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// SHORT -> ULONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlShortToULong(
- _In_ SHORT sOperand,
- _Out_ _Deref_out_range_(==, sOperand) ULONG* pulResult)
-{
- NTSTATUS status;
-
- if (sOperand >= 0)
- {
- *pulResult = (ULONG)sOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pulResult = ULONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// SHORT -> ULONG_PTR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlShortToULongPtr(
- _In_ SHORT sOperand,
- _Out_ _Deref_out_range_(==, sOperand) ULONG_PTR* pulResult)
-{
- NTSTATUS status;
-
- if (sOperand >= 0)
- {
- *pulResult = (ULONG_PTR)sOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pulResult = ULONG_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// SHORT -> DWORD conversion
-//
-#define RtlShortToDWord RtlShortToULong
-
-//
-// SHORT -> DWORD_PTR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlShortToDWordPtr(
- _In_ SHORT sOperand,
- _Out_ _Deref_out_range_(==, sOperand) DWORD_PTR* pdwResult)
-{
- NTSTATUS status;
-
- if (sOperand >= 0)
- {
- *pdwResult = (DWORD_PTR)sOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pdwResult = DWORD_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// SHORT -> ULONGLONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlShortToULongLong(
- _In_ SHORT sOperand,
- _Out_ _Deref_out_range_(==, sOperand) ULONGLONG* pullResult)
-{
- NTSTATUS status;
-
- if (sOperand >= 0)
- {
- *pullResult = (ULONGLONG)sOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pullResult = ULONGLONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// SHORT -> DWORDLONG conversion
-//
-#define RtlShortToDWordLong RtlShortToULongLong
-
-//
-// SHORT -> ULONG64 conversion
-//
-#define RtlShortToULong64 RtlShortToULongLong
-
-//
-// SHORT -> DWORD64 conversion
-//
-#define RtlShortToDWord64 RtlShortToULongLong
-
-//
-// SHORT -> UINT64 conversion
-//
-#define RtlShortToUInt64 RtlShortToULongLong
-
-//
-// SHORT -> size_t conversion
-//
-#define RtlShortToSizeT RtlShortToUIntPtr
-
-//
-// SHORT -> SIZE_T conversion
-//
-#define RtlShortToSIZET RtlShortToULongPtr
-
-//
-// INT16 -> CHAR conversion
-//
-#define RtlInt16ToChar RtlShortToChar
-
-//
-// INT16 -> INT8 conversion
-//
-#define RtlInt16ToInt8 RtlShortToInt8
-
-//
-// INT16 -> UCHAR conversion
-//
-#define RtlInt16ToUChar RtlShortToUChar
-
-//
-// INT16 -> UINT8 conversion
-//
-#define RtlInt16ToUInt8 RtlShortToUInt8
-
-//
-// INT16 -> BYTE conversion
-//
-#define RtlInt16ToByte RtlShortToUInt8
-
-//
-// INT16 -> USHORT conversion
-//
-#define RtlInt16ToUShort RtlShortToUShort
-
-//
-// INT16 -> UINT16 conversion
-//
-#define RtlInt16ToUInt16 RtlShortToUShort
-
-//
-// INT16 -> WORD conversion
-//
-#define RtlInt16ToWord RtlShortToUShort
-
-//
-// INT16 -> UINT conversion
-//
-#define RtlInt16ToUInt RtlShortToUInt
-
-//
-// INT16 -> UINT32 conversion
-//
-#define RtlInt16ToUInt32 RtlShortToUInt
-
-//
-// INT16 -> UINT_PTR conversion
-//
-#define RtlInt16ToUIntPtr RtlShortToUIntPtr
-
-//
-// INT16 -> ULONG conversion
-//
-#define RtlInt16ToULong RtlShortToULong
-
-//
-// INT16 -> ULONG_PTR conversion
-//
-#define RtlInt16ToULongPtr RtlShortToULongPtr
-
-//
-// INT16 -> DWORD conversion
-//
-#define RtlInt16ToDWord RtlShortToULong
-
-//
-// INT16 -> DWORD_PTR conversion
-//
-#define RtlInt16ToDWordPtr RtlShortToULongPtr
-
-//
-// INT16 -> ULONGLONG conversion
-//
-#define RtlInt16ToULongLong RtlShortToULongLong
-
-//
-// INT16 -> DWORDLONG conversion
-//
-#define RtlInt16ToDWordLong RtlShortToULongLong
-
-//
-// INT16 -> ULONG64 conversion
-//
-#define RtlInt16ToULong64 RtlShortToULongLong
-
-//
-// INT16 -> DWORD64 conversion
-//
-#define RtlInt16ToDWord64 RtlShortToULongLong
-
-//
-// INT16 -> UINT64 conversion
-//
-#define RtlInt16ToUInt64 RtlShortToULongLong
-
-//
-// INT16 -> size_t conversion
-//
-#define RtlInt16ToSizeT RtlShortToUIntPtr
-
-//
-// INT16 -> SIZE_T conversion
-//
-#define RtlInt16ToSIZET RtlShortToULongPtr
-
-//
-// USHORT -> INT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUShortToInt8(
- _In_ USHORT usOperand,
- _Out_ _Deref_out_range_(==, usOperand) INT8* pi8Result)
-{
- NTSTATUS status;
-
- if (usOperand <= INT8_MAX)
- {
- *pi8Result = (INT8)usOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pi8Result = INT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// USHORT -> UCHAR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUShortToUChar(
- _In_ USHORT usOperand,
- _Out_ _Deref_out_range_(==, usOperand) UCHAR* pch)
-{
- NTSTATUS status;
-
- if (usOperand <= 255)
- {
- *pch = (UCHAR)usOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pch = '\0';
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// USHORT -> CHAR conversion
-//
-__forceinline
-NTSTATUS
-RtlUShortToChar(
- _In_ USHORT usOperand,
- _Out_ _Deref_out_range_(==, usOperand) CHAR* pch)
-{
-#ifdef _CHAR_UNSIGNED
- return RtlUShortToUChar(usOperand, (UCHAR*)pch);
-#else
- return RtlUShortToInt8(usOperand, (INT8*)pch);
-#endif // _CHAR_UNSIGNED
-}
-
-//
-// USHORT -> UINT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUShortToUInt8(
- _In_ USHORT usOperand,
- _Out_ _Deref_out_range_(==, usOperand) UINT8* pui8Result)
-{
- NTSTATUS status;
-
- if (usOperand <= UINT8_MAX)
- {
- *pui8Result = (UINT8)usOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pui8Result = UINT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// USHORT -> BYTE conversion
-//
-#define RtlUShortToByte RtlUShortToUInt8
-
-//
-// USHORT -> SHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUShortToShort(
- _In_ USHORT usOperand,
- _Out_ _Deref_out_range_(==, usOperand) SHORT* psResult)
-{
- NTSTATUS status;
-
- if (usOperand <= SHORT_MAX)
- {
- *psResult = (SHORT)usOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *psResult = SHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// USHORT -> INT16 conversion
-//
-#define RtlUShortToInt16 RtlUShortToShort
-
-//
-// UINT16 -> CHAR conversion
-//
-#define RtlUInt16ToChar RtlUShortToChar
-
-//
-// UINT16 -> INT8 conversion
-//
-#define RtlUInt16ToInt8 RtlUShortToInt8
-
-//
-// UINT16 -> UCHAR conversion
-//
-#define RtlUInt16ToUChar RtlUShortToUChar
-
-//
-// UINT16 -> UINT8 conversion
-//
-#define RtlUInt16ToUInt8 RtlUShortToUInt8
-
-//
-// UINT16 -> BYTE conversion
-//
-#define RtlUInt16ToByte RtlUShortToUInt8
-
-//
-// UINT16 -> SHORT conversion
-//
-#define RtlUInt16ToShort RtlUShortToShort
-
-//
-// UINT16 -> INT16 conversion
-//
-#define RtlUInt16ToInt16 RtlUShortToShort
-
-//
-// WORD -> INT8 conversion
-//
-#define RtlWordToInt8 RtlUShortToInt8
-
-//
-// WORD -> CHAR conversion
-//
-#define RtlWordToChar RtlUShortToChar
-
-//
-// WORD -> UCHAR conversion
-//
-#define RtlWordToUChar RtlUShortToUChar
-
-//
-// WORD -> UINT8 conversion
-//
-#define RtlWordToUInt8 RtlUShortToUInt8
-
-//
-// WORD -> BYTE conversion
-//
-#define RtlWordToByte RtlUShortToUInt8
-
-//
-// WORD -> SHORT conversion
-//
-#define RtlWordToShort RtlUShortToShort
-
-//
-// WORD -> INT16 conversion
-//
-#define RtlWordToInt16 RtlUShortToShort
-
-//
-// INT -> INT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntToInt8(
- _In_ INT iOperand,
- _Out_ _Deref_out_range_(==, iOperand) INT8* pi8Result)
-{
- NTSTATUS status;
-
- if ((iOperand >= INT8_MIN) && (iOperand <= INT8_MAX))
- {
- *pi8Result = (INT8)iOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pi8Result = INT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT -> UCHAR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntToUChar(
- _In_ INT iOperand,
- _Out_ _Deref_out_range_(==, iOperand) UCHAR* pch)
-{
- NTSTATUS status;
-
- if ((iOperand >= 0) && (iOperand <= 255))
- {
- *pch = (UCHAR)iOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pch = '\0';
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT -> CHAR conversion
-//
-__forceinline
-NTSTATUS
-RtlIntToChar(
- _In_ INT iOperand,
- _Out_ _Deref_out_range_(==, iOperand) CHAR* pch)
-{
-#ifdef _CHAR_UNSIGNED
- return RtlIntToUChar(iOperand, (UCHAR*)pch);
-#else
- return RtlIntToInt8(iOperand, (INT8*)pch);
-#endif // _CHAR_UNSIGNED
-}
-
-//
-// INT -> BYTE conversion
-//
-#define RtlIntToByte RtlIntToUInt8
-
-//
-// INT -> UINT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntToUInt8(
- _In_ INT iOperand,
- _Out_ _Deref_out_range_(==, iOperand) UINT8* pui8Result)
-{
- NTSTATUS status;
-
- if ((iOperand >= 0) && (iOperand <= UINT8_MAX))
- {
- *pui8Result = (UINT8)iOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pui8Result = UINT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT -> SHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntToShort(
- _In_ INT iOperand,
- _Out_ _Deref_out_range_(==, iOperand) SHORT* psResult)
-{
- NTSTATUS status;
-
- if ((iOperand >= SHORT_MIN) && (iOperand <= SHORT_MAX))
- {
- *psResult = (SHORT)iOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *psResult = SHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT -> INT16 conversion
-//
-#define RtlIntToInt16 RtlIntToShort
-
-//
-// INT -> USHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntToUShort(
- _In_ INT iOperand,
- _Out_ _Deref_out_range_(==, iOperand) USHORT* pusResult)
-{
- NTSTATUS status;
-
- if ((iOperand >= 0) && (iOperand <= USHORT_MAX))
- {
- *pusResult = (USHORT)iOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pusResult = USHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT -> UINT16 conversion
-//
-#define RtlIntToUInt16 RtlIntToUShort
-
-//
-// INT -> WORD conversion
-//
-#define RtlIntToWord RtlIntToUShort
-
-//
-// INT -> UINT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntToUInt(
- _In_ INT iOperand,
- _Out_ _Deref_out_range_(==, iOperand) UINT* puResult)
-{
- NTSTATUS status;
-
- if (iOperand >= 0)
- {
- *puResult = (UINT)iOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *puResult = UINT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT -> UINT_PTR conversion
-//
-#ifdef _WIN64
-#define RtlIntToUIntPtr RtlIntToULongLong
-#else
-#define RtlIntToUIntPtr RtlIntToUInt
-#endif
-
-//
-// INT -> ULONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntToULong(
- _In_ INT iOperand,
- _Out_ _Deref_out_range_(==, iOperand) ULONG* pulResult)
-{
- NTSTATUS status;
-
- if (iOperand >= 0)
- {
- *pulResult = (ULONG)iOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pulResult = ULONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT -> ULONG_PTR conversion
-//
-#ifdef _WIN64
-#define RtlIntToULongPtr RtlIntToULongLong
-#else
-#define RtlIntToULongPtr RtlIntToULong
-#endif
-
-//
-// INT -> DWORD conversion
-//
-#define RtlIntToDWord RtlIntToULong
-
-//
-// INT -> DWORD_PTR conversion
-//
-#define RtlIntToDWordPtr RtlIntToULongPtr
-
-//
-// INT -> ULONGLONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntToULongLong(
- _In_ INT iOperand,
- _Out_ _Deref_out_range_(==, iOperand) ULONGLONG* pullResult)
-{
- NTSTATUS status;
-
- if (iOperand >= 0)
- {
- *pullResult = (ULONGLONG)iOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pullResult = ULONGLONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT -> DWORDLONG conversion
-//
-#define RtlIntToDWordLong RtlIntToULongLong
-
-//
-// INT -> ULONG64 conversion
-//
-#define RtlIntToULong64 RtlIntToULongLong
-
-//
-// INT -> DWORD64 conversion
-//
-#define RtlIntToDWord64 RtlIntToULongLong
-
-//
-// INT -> UINT64 conversion
-//
-#define RtlIntToUInt64 RtlIntToULongLong
-
-//
-// INT -> size_t conversion
-//
-#define RtlIntToSizeT RtlIntToUIntPtr
-
-//
-// INT -> SIZE_T conversion
-//
-#define RtlIntToSIZET RtlIntToULongPtr
-
-//
-// INT32 -> CHAR conversion
-//
-#define RtlInt32ToChar RtlIntToChar
-
-//
-// INT32 -> INT328 conversion
-//
-#define RtlInt32ToInt8 RtlIntToInt8
-
-//
-// INT32 -> UCHAR conversion
-//
-#define RtlInt32ToUChar RtlIntToUChar
-
-//
-// INT32 -> BYTE conversion
-//
-#define RtlInt32ToByte RtlIntToUInt8
-
-//
-// INT32 -> UINT8 conversion
-//
-#define RtlInt32ToUInt8 RtlIntToUInt8
-
-//
-// INT32 -> SHORT conversion
-//
-#define RtlInt32ToShort RtlIntToShort
-
-//
-// INT32 -> INT16 conversion
-//
-#define RtlInt32ToInt16 RtlIntToShort
-
-//
-// INT32 -> USHORT conversion
-//
-#define RtlInt32ToUShort RtlIntToUShort
-
-//
-// INT32 -> UINT16 conversion
-//
-#define RtlInt32ToUInt16 RtlIntToUShort
-
-//
-// INT32 -> WORD conversion
-//
-#define RtlInt32ToWord RtlIntToUShort
-
-//
-// INT32 -> UINT conversion
-//
-#define RtlInt32ToUInt RtlIntToUInt
-
-//
-// INT32 -> UINT32 conversion
-//
-#define RtlInt32ToUInt32 RtlIntToUInt
-
-//
-// INT32 -> UINT_PTR conversion
-//
-#define RtlInt32ToUIntPtr RtlIntToUIntPtr
-
-//
-// INT32 -> ULONG conversion
-//
-#define RtlInt32ToULong RtlIntToULong
-
-//
-// INT32 -> ULONG_PTR conversion
-//
-#define RtlInt32ToULongPtr RtlIntToULongPtr
-
-//
-// INT32 -> DWORD conversion
-//
-#define RtlInt32ToDWord RtlIntToULong
-
-//
-// INT32 -> DWORD_PTR conversion
-//
-#define RtlInt32ToDWordPtr RtlIntToULongPtr
-
-//
-// INT32 -> ULONGLONG conversion
-//
-#define RtlInt32ToULongLong RtlIntToULongLong
-
-//
-// INT32 -> DWORDLONG conversion
-//
-#define RtlInt32ToDWordLong RtlIntToULongLong
-
-//
-// INT32 -> ULONG64 conversion
-//
-#define RtlInt32ToULong64 RtlIntToULongLong
-
-//
-// INT32 -> DWORD64 conversion
-//
-#define RtlInt32ToDWord64 RtlIntToULongLong
-
-//
-// INT32 -> UINT64 conversion
-//
-#define RtlInt32ToUInt64 RtlIntToULongLong
-
-//
-// INT32 -> size_t conversion
-//
-#define RtlInt32ToSizeT RtlIntToUIntPtr
-
-//
-// INT32 -> SIZE_T conversion
-//
-#define RtlInt32ToSIZET RtlIntToULongPtr
-
-//
-// INT_PTR -> INT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntPtrToInt8(
- _In_ INT_PTR iOperand,
- _Out_ _Deref_out_range_(==, iOperand) INT8* pi8Result)
-{
- NTSTATUS status;
-
- if ((iOperand >= INT8_MIN) && (iOperand <= INT8_MAX))
- {
- *pi8Result = (INT8)iOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pi8Result = INT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT_PTR -> UCHAR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntPtrToUChar(
- _In_ INT_PTR iOperand,
- _Out_ _Deref_out_range_(==, iOperand) UCHAR* pch)
-{
- NTSTATUS status;
-
- if ((iOperand >= 0) && (iOperand <= 255))
- {
- *pch = (UCHAR)iOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pch = '\0';
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT_PTR -> CHAR conversion
-//
-__forceinline
-NTSTATUS
-RtlIntPtrToChar(
- _In_ INT_PTR iOperand,
- _Out_ _Deref_out_range_(==, iOperand) CHAR* pch)
-{
-#ifdef _CHAR_UNSIGNED
- return RtlIntPtrToUChar(iOperand, (UCHAR*)pch);
-#else
- return RtlIntPtrToInt8(iOperand, (INT8*)pch);
-#endif // _CHAR_UNSIGNED
-}
-
-//
-// INT_PTR -> UINT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntPtrToUInt8(
- _In_ INT_PTR iOperand,
- _Out_ _Deref_out_range_(==, iOperand) UINT8* pui8Result)
-{
- NTSTATUS status;
-
- if ((iOperand >= 0) && (iOperand <= UINT8_MAX))
- {
- *pui8Result = (UINT8)iOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pui8Result = UINT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT_PTR -> BYTE conversion
-//
-#define RtlIntPtrToByte RtlIntPtrToUInt8
-
-//
-// INT_PTR -> SHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntPtrToShort(
- _In_ INT_PTR iOperand,
- _Out_ _Deref_out_range_(==, iOperand) SHORT* psResult)
-{
- NTSTATUS status;
-
- if ((iOperand >= SHORT_MIN) && (iOperand <= SHORT_MAX))
- {
- *psResult = (SHORT)iOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *psResult = SHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT_PTR -> INT16 conversion
-//
-#define RtlIntPtrToInt16 RtlIntPtrToShort
-
-//
-// INT_PTR -> USHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntPtrToUShort(
- _In_ INT_PTR iOperand,
- _Out_ _Deref_out_range_(==, iOperand) USHORT* pusResult)
-{
- NTSTATUS status;
-
- if ((iOperand >= 0) && (iOperand <= USHORT_MAX))
- {
- *pusResult = (USHORT)iOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pusResult = USHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// INT_PTR -> UINT16 conversion
-//
-#define RtlIntPtrToUInt16 RtlIntPtrToUShort
-
-//
-// INT_PTR -> WORD conversion
-//
-#define RtlIntPtrToWord RtlIntPtrToUShort
-
-//
-// INT_PTR -> INT conversion
-//
-#ifdef _WIN64
-#define RtlIntPtrToInt RtlLongLongToInt
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntPtrToInt(
- _In_ INT_PTR iOperand,
- _Out_ _Deref_out_range_(==, iOperand) INT* piResult)
-{
- *piResult = (INT)iOperand;
- return STATUS_SUCCESS;
-}
-#endif
-
-//
-// INT_PTR -> INT32 conversion
-//
-#define RtlIntPtrToInt32 RtlIntPtrToInt
-
-//
-// INT_PTR -> UINT conversion
-//
-#ifdef _WIN64
-#define RtlIntPtrToUInt RtlLongLongToUInt
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntPtrToUInt(
- _In_ INT_PTR iOperand,
- _Out_ _Deref_out_range_(==, iOperand) UINT* puResult)
-{
- NTSTATUS status;
-
- if (iOperand >= 0)
- {
- *puResult = (UINT)iOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *puResult = UINT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-#endif
-
-//
-// INT_PTR -> UINT32 conversion
-//
-#define RtlIntPtrToUInt32 RtlIntPtrToUInt
-
-//
-// INT_PTR -> UINT_PTR conversion
-//
-#ifdef _WIN64
-#define RtlIntPtrToUIntPtr RtlLongLongToULongLong
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntPtrToUIntPtr(
- _In_ INT_PTR iOperand,
- _Out_ _Deref_out_range_(==, iOperand) UINT_PTR* puResult)
-{
- NTSTATUS status;
-
- if (iOperand >= 0)
- {
- *puResult = (UINT_PTR)iOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *puResult = UINT_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-#endif
-
-//
-// INT_PTR -> LONG conversion
-//
-#ifdef _WIN64
-#define RtlIntPtrToLong RtlLongLongToLong
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntPtrToLong(
- _In_ INT_PTR iOperand,
- _Out_ _Deref_out_range_(==, iOperand) LONG* plResult)
-{
- *plResult = (LONG)iOperand;
- return STATUS_SUCCESS;
-}
-#endif
-
-//
-// INT_PTR -> LONG_PTR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntPtrToLongPtr(
- _In_ INT_PTR iOperand,
- _Out_ _Deref_out_range_(==, iOperand) LONG_PTR* plResult)
-{
- *plResult = (LONG_PTR)iOperand;
- return STATUS_SUCCESS;
-}
-
-//
-// INT_PTR -> ULONG conversion
-//
-#ifdef _WIN64
-#define RtlIntPtrToULong RtlLongLongToULong
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntPtrToULong(
- _In_ INT_PTR iOperand,
- _Out_ _Deref_out_range_(==, iOperand) ULONG* pulResult)
-{
- NTSTATUS status;
-
- if (iOperand >= 0)
- {
- *pulResult = (ULONG)iOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pulResult = ULONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-#endif
-
-//
-// INT_PTR -> ULONG_PTR conversion
-//
-#ifdef _WIN64
-#define RtlIntPtrToULongPtr RtlLongLongToULongLong
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntPtrToULongPtr(
- _In_ INT_PTR iOperand,
- _Out_ _Deref_out_range_(==, iOperand) ULONG_PTR* pulResult)
-{
- NTSTATUS status;
-
- if (iOperand >= 0)
- {
- *pulResult = (ULONG_PTR)iOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pulResult = ULONG_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-#endif
-
-//
-// INT_PTR -> DWORD conversion
-//
-#define RtlIntPtrToDWord RtlIntPtrToULong
-
-//
-// INT_PTR -> DWORD_PTR conversion
-//
-#define RtlIntPtrToDWordPtr RtlIntPtrToULongPtr
-
-//
-// INT_PTR -> ULONGLONG conversion
-//
-#ifdef _WIN64
-#define RtlIntPtrToULongLong RtlLongLongToULongLong
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntPtrToULongLong(
- _In_ INT_PTR iOperand,
- _Out_ _Deref_out_range_(==, iOperand) ULONGLONG* pullResult)
-{
- NTSTATUS status;
-
- if (iOperand >= 0)
- {
- *pullResult = (ULONGLONG)iOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pullResult = ULONGLONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-#endif
-
-//
-// INT_PTR -> DWORDLONG conversion
-//
-#define RtlIntPtrToDWordLong RtlIntPtrToULongLong
-
-//
-// INT_PTR -> ULONG64 conversion
-//
-#define RtlIntPtrToULong64 RtlIntPtrToULongLong
-
-//
-// INT_PTR -> DWORD64 conversion
-//
-#define RtlIntPtrToDWord64 RtlIntPtrToULongLong
-
-//
-// INT_PTR -> UINT64 conversion
-//
-#define RtlIntPtrToUInt64 RtlIntPtrToULongLong
-
-//
-// INT_PTR -> size_t conversion
-//
-#define RtlIntPtrToSizeT RtlIntPtrToUIntPtr
-
-//
-// INT_PTR -> SIZE_T conversion
-//
-#define RtlIntPtrToSIZET RtlIntPtrToULongPtr
-
-//
-// UINT -> INT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntToInt8(
- _In_ UINT uOperand,
- _Out_ _Deref_out_range_(==, uOperand) INT8* pi8Result)
-{
- NTSTATUS status;
-
- if (uOperand <= INT8_MAX)
- {
- *pi8Result = (INT8)uOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pi8Result = INT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT -> UCHAR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntToUChar(
- _In_ UINT uOperand,
- _Out_ _Deref_out_range_(==, uOperand) UCHAR* pch)
-{
- NTSTATUS status;
-
- if (uOperand <= 255)
- {
- *pch = (UCHAR)uOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pch = '\0';
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT -> CHAR conversion
-//
-__forceinline
-NTSTATUS
-RtlUIntToChar(
- _In_ UINT uOperand,
- _Out_ _Deref_out_range_(==, uOperand) CHAR* pch)
-{
-#ifdef _CHAR_UNSIGNED
- return RtlUIntToUChar(uOperand, (UCHAR*)pch);
-#else
- return RtlUIntToInt8(uOperand, (INT8*)pch);
-#endif
-}
-
-//
-// UINT -> UINT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntToUInt8(
- _In_ UINT uOperand,
- _Out_ _Deref_out_range_(==, uOperand) UINT8* pui8Result)
-{
- NTSTATUS status;
-
- if (uOperand <= UINT8_MAX)
- {
- *pui8Result = (UINT8)uOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pui8Result = UINT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT -> BYTE conversion
-//
-#define RtlUIntToByte RtlUIntToUInt8
-
-//
-// UINT -> SHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntToShort(
- _In_ UINT uOperand,
- _Out_ _Deref_out_range_(==, uOperand) SHORT* psResult)
-{
- NTSTATUS status;
-
- if (uOperand <= SHORT_MAX)
- {
- *psResult = (SHORT)uOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *psResult = SHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT -> INT16 conversion
-//
-#define RtlUIntToInt16 RtlUIntToShort
-
-//
-// UINT -> USHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntToUShort(
- _In_ UINT uOperand,
- _Out_ _Deref_out_range_(==, uOperand) USHORT* pusResult)
-{
- NTSTATUS status;
-
- if (uOperand <= USHORT_MAX)
- {
- *pusResult = (USHORT)uOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pusResult = USHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT -> UINT16 conversion
-//
-#define RtlUIntToUInt16 RtlUIntToUShort
-
-//
-// UINT -> WORD conversion
-//
-#define RtlUIntToWord RtlUIntToUShort
-
-//
-// UINT -> INT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntToInt(
- _In_ UINT uOperand,
- _Out_ _Deref_out_range_(==, uOperand) INT* piResult)
-{
- NTSTATUS status;
-
- if (uOperand <= INT_MAX)
- {
- *piResult = (INT)uOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *piResult = INT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT -> INT32 conversion
-//
-#define RtlUIntToInt32 RtlUIntToInt
-
-//
-// UINT -> INT_PTR conversion
-//
-#ifdef _WIN64
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntToIntPtr(
- _In_ UINT uOperand,
- _Out_ _Deref_out_range_(==, uOperand) INT_PTR* piResult)
-{
- *piResult = uOperand;
- return STATUS_SUCCESS;
-}
-#else
-#define RtlUIntToIntPtr RtlUIntToInt
-#endif
-
-//
-// UINT -> LONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntToLong(
- _In_ UINT uOperand,
- _Out_ _Deref_out_range_(==, uOperand) LONG* plResult)
-{
- NTSTATUS status;
-
- if (uOperand <= LONG_MAX)
- {
- *plResult = (LONG)uOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *plResult = LONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT -> LONG_PTR conversion
-//
-#ifdef _WIN64
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntToLongPtr(
- _In_ UINT uOperand,
- _Out_ _Deref_out_range_(==, uOperand) LONG_PTR* plResult)
-{
- *plResult = uOperand;
- return STATUS_SUCCESS;
-}
-#else
-#define RtlUIntToLongPtr RtlUIntToLong
-#endif
-
-//
-// UINT -> ptrdiff_t conversion
-//
-#define RtlUIntToPtrdiffT RtlUIntToIntPtr
-
-//
-// UINT -> SSIZE_T conversion
-//
-#define RtlUIntToSSIZET RtlUIntToLongPtr
-
-//
-// UINT32 -> CHAR conversion
-//
-#define RtlUInt32ToChar RtlUIntToChar
-
-//
-// UINT32 -> INT8 conversion
-//
-#define RtlUInt32ToInt8 RtlUIntToInt8
-
-//
-// UINT32 -> UCHAR conversion
-//
-#define RtlUInt32ToUChar RtlUIntToUChar
-
-//
-// UINT32 -> UINT8 conversion
-//
-#define RtlUInt32ToUInt8 RtlUIntToUInt8
-
-//
-// UINT32 -> BYTE conversion
-//
-#define RtlUInt32ToByte RtlUInt32ToUInt8
-
-//
-// UINT32 -> SHORT conversion
-//
-#define RtlUInt32ToShort RtlUIntToShort
-
-//
-// UINT32 -> INT16 conversion
-//
-#define RtlUInt32ToInt16 RtlUIntToShort
-
-//
-// UINT32 -> USHORT conversion
-//
-#define RtlUInt32ToUShort RtlUIntToUShort
-
-//
-// UINT32 -> UINT16 conversion
-//
-#define RtlUInt32ToUInt16 RtlUIntToUShort
-
-//
-// UINT32 -> WORD conversion
-//
-#define RtlUInt32ToWord RtlUIntToUShort
-
-//
-// UINT32 -> INT conversion
-//
-#define RtlUInt32ToInt RtlUIntToInt
-
-//
-// UINT32 -> INT_PTR conversion
-//
-#define RtlUInt32ToIntPtr RtlUIntToIntPtr
-
-//
-// UINT32 -> INT32 conversion
-//
-#define RtlUInt32ToInt32 RtlUIntToInt
-
-//
-// UINT32 -> LONG conversion
-//
-#define RtlUInt32ToLong RtlUIntToLong
-
-//
-// UINT32 -> LONG_PTR conversion
-//
-#define RtlUInt32ToLongPtr RtlUIntToLongPtr
-
-//
-// UINT32 -> ptrdiff_t conversion
-//
-#define RtlUInt32ToPtrdiffT RtlUIntToPtrdiffT
-
-//
-// UINT32 -> SSIZE_T conversion
-//
-#define RtlUInt32ToSSIZET RtlUIntToSSIZET
-
-//
-// UINT_PTR -> INT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntPtrToInt8(
- _In_ UINT_PTR uOperand,
- _Out_ _Deref_out_range_(==, uOperand) INT8* pi8Result)
-{
- NTSTATUS status;
-
- if (uOperand <= INT8_MAX)
- {
- *pi8Result = (INT8)uOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pi8Result = INT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT_PTR -> UCHAR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntPtrToUChar(
- _In_ UINT_PTR uOperand,
- _Out_ _Deref_out_range_(==, uOperand) UCHAR* pch)
-{
- NTSTATUS status;
-
- if (uOperand <= 255)
- {
- *pch = (UCHAR)uOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pch = '\0';
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT_PTR -> CHAR conversion
-//
-__forceinline
-NTSTATUS
-RtlUIntPtrToChar(
- _In_ UINT_PTR uOperand,
- _Out_ _Deref_out_range_(==, uOperand) CHAR* pch)
-{
-#ifdef _CHAR_UNSIGNED
- return RtlUIntPtrToUChar(uOperand, (UCHAR*)pch);
-#else
- return RtlUIntPtrToInt8(uOperand, (INT8*)pch);
-#endif
-}
-
-//
-// UINT_PTR -> UINT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntPtrToUInt8(
- _In_ UINT_PTR uOperand,
- _Out_ _Deref_out_range_(==,uOperand) UINT8* pu8Result)
-{
- NTSTATUS status;
-
- if (uOperand <= UINT8_MAX)
- {
- *pu8Result = (UINT8)uOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pu8Result = UINT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT_PTR -> BYTE conversion
-//
-#define RtlUIntPtrToByte RtlUIntPtrToUInt8
-
-//
-// UINT_PTR -> SHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntPtrToShort(
- _In_ UINT_PTR uOperand,
- _Out_ _Deref_out_range_(==, uOperand) SHORT* psResult)
-{
- NTSTATUS status;
-
- if (uOperand <= SHORT_MAX)
- {
- *psResult = (SHORT)uOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *psResult = SHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT_PTR -> INT16 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntPtrToInt16(
- _In_ UINT_PTR uOperand,
- _Out_ _Deref_out_range_(==, uOperand) INT16* pi16Result)
-{
- NTSTATUS status;
-
- if (uOperand <= INT16_MAX)
- {
- *pi16Result = (INT16)uOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pi16Result = INT16_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT_PTR -> USHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntPtrToUShort(
- _In_ UINT_PTR uOperand,
- _Out_ _Deref_out_range_(==, uOperand) USHORT* pusResult)
-{
- NTSTATUS status;
-
- if (uOperand <= USHORT_MAX)
- {
- *pusResult = (USHORT)uOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pusResult = USHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT_PTR -> UINT16 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntPtrToUInt16(
- _In_ UINT_PTR uOperand,
- _Out_ _Deref_out_range_(==, uOperand) UINT16* pu16Result)
-{
- NTSTATUS status;
-
- if (uOperand <= UINT16_MAX)
- {
- *pu16Result = (UINT16)uOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pu16Result = UINT16_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT_PTR -> WORD conversion
-//
-#define RtlUIntPtrToWord RtlUIntPtrToUShort
-
-//
-// UINT_PTR -> INT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntPtrToInt(
- _In_ UINT_PTR uOperand,
- _Out_ _Deref_out_range_(==, uOperand) INT* piResult)
-{
- NTSTATUS status;
-
- if (uOperand <= INT_MAX)
- {
- *piResult = (INT)uOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *piResult = INT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT_PTR -> INT32 conversion
-//
-#define RtlUIntPtrToInt32 RtlUIntPtrToInt
-
-//
-// UINT_PTR -> INT_PTR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntPtrToIntPtr(
- _In_ UINT_PTR uOperand,
- _Out_ _Deref_out_range_(==, uOperand) INT_PTR* piResult)
-{
- NTSTATUS status;
-
- if (uOperand <= INT_PTR_MAX)
- {
- *piResult = (INT_PTR)uOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *piResult = INT_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT_PTR -> UINT conversion
-//
-#ifdef _WIN64
-#define RtlUIntPtrToUInt RtlULongLongToUInt
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntPtrToUInt(
- _In_ UINT_PTR uOperand,
- _Out_ _Deref_out_range_(==, uOperand) UINT* puResult)
-{
- *puResult = (UINT)uOperand;
- return STATUS_SUCCESS;
-}
-#endif
-
-//
-// UINT_PTR -> UINT32 conversion
-//
-#define RtlUIntPtrToUInt32 RtlUIntPtrToUInt
-
-//
-// UINT_PTR -> LONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntPtrToLong(
- _In_ UINT_PTR uOperand,
- _Out_ _Deref_out_range_(==, uOperand) LONG* plResult)
-{
- NTSTATUS status;
-
- if (uOperand <= LONG_MAX)
- {
- *plResult = (LONG)uOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *plResult = LONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT_PTR -> LONG_PTR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntPtrToLongPtr(
- _In_ UINT_PTR uOperand,
- _Out_ _Deref_out_range_(==, uOperand) LONG_PTR* plResult)
-{
- NTSTATUS status;
-
- if (uOperand <= LONG_PTR_MAX)
- {
- *plResult = (LONG_PTR)uOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *plResult = LONG_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT_PTR -> ULONG conversion
-//
-#ifdef _WIN64
-#define RtlUIntPtrToULong RtlULongLongToULong
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntPtrToULong(
- _In_ UINT_PTR uOperand,
- _Out_ _Deref_out_range_(==, uOperand) ULONG* pulResult)
-{
- *pulResult = (ULONG)uOperand;
- return STATUS_SUCCESS;
-}
-#endif
-
-//
-// UINT_PTR -> DWORD conversion
-//
-#define RtlUIntPtrToDWord RtlUIntPtrToULong
-
-//
-// UINT_PTR -> LONGLONG conversion
-//
-#ifdef _WIN64
-#define RtlUIntPtrToLongLong RtlULongLongToLongLong
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntPtrToLongLong(
- _In_ UINT_PTR uOperand,
- _Out_ _Deref_out_range_(==, uOperand) LONGLONG* pllResult)
-{
- *pllResult = (LONGLONG)uOperand;
- return STATUS_SUCCESS;
-}
-#endif
-
-//
-// UINT_PTR -> LONG64 conversion
-//
-#define RtlUIntPtrToLong64 RtlUIntPtrToLongLong
-
-//
-// UINT_PTR -> RtlINT64 conversion
-//
-#define RtlUIntPtrToInt64 RtlUIntPtrToLongLong
-
-//
-// UINT_PTR -> ptrdiff_t conversion
-//
-#define RtlUIntPtrToPtrdiffT RtlUIntPtrToIntPtr
-
-//
-// UINT_PTR -> SSIZE_T conversion
-//
-#define RtlUIntPtrToSSIZET RtlUIntPtrToLongPtr
-
-//
-// LONG -> INT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongToInt8(
- _In_ LONG lOperand,
- _Out_ _Deref_out_range_(==, lOperand) INT8* pi8Result)
-{
- NTSTATUS status;
-
- if ((lOperand >= INT8_MIN) && (lOperand <= INT8_MAX))
- {
- *pi8Result = (INT8)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pi8Result = INT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONG -> UCHAR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongToUChar(
- _In_ LONG lOperand,
- _Out_ _Deref_out_range_(==, lOperand) UCHAR* pch)
-{
- NTSTATUS status;
-
- if ((lOperand >= 0) && (lOperand <= 255))
- {
- *pch = (UCHAR)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pch = '\0';
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONG -> CHAR conversion
-//
-__forceinline
-NTSTATUS
-RtlLongToChar(
- _In_ LONG lOperand,
- _Out_ _Deref_out_range_(==, lOperand) CHAR* pch)
-{
-#ifdef _CHAR_UNSIGNED
- return RtlLongToUChar(lOperand, (UCHAR*)pch);
-#else
- return RtlLongToInt8(lOperand, (INT8*)pch);
-#endif
-}
-
-//
-// LONG -> UINT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongToUInt8(
- _In_ LONG lOperand,
- _Out_ _Deref_out_range_(==, lOperand) UINT8* pui8Result)
-{
- NTSTATUS status;
-
- if ((lOperand >= 0) && (lOperand <= UINT8_MAX))
- {
- *pui8Result = (UINT8)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pui8Result = UINT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONG -> BYTE conversion
-//
-#define RtlLongToByte RtlLongToUInt8
-
-//
-// LONG -> SHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongToShort(
- _In_ LONG lOperand,
- _Out_ _Deref_out_range_(==, lOperand) SHORT* psResult)
-{
- NTSTATUS status;
-
- if ((lOperand >= SHORT_MIN) && (lOperand <= SHORT_MAX))
- {
- *psResult = (SHORT)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *psResult = SHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONG -> INT16 conversion
-//
-#define RtlLongToInt16 RtlLongToShort
-
-//
-// LONG -> USHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongToUShort(
- _In_ LONG lOperand,
- _Out_ _Deref_out_range_(==, lOperand) USHORT* pusResult)
-{
- NTSTATUS status;
-
- if ((lOperand >= 0) && (lOperand <= USHORT_MAX))
- {
- *pusResult = (USHORT)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pusResult = USHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONG -> UINT16 conversion
-//
-#define RtlLongToUInt16 RtlLongToUShort
-
-//
-// LONG -> WORD conversion
-//
-#define RtlLongToWord RtlLongToUShort
-
-//
-// LONG -> INT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongToInt(
- _In_ LONG lOperand,
- _Out_ _Deref_out_range_(==, lOperand) INT* piResult)
-{
- C_ASSERT(sizeof(INT) == sizeof(LONG));
- *piResult = (INT)lOperand;
- return STATUS_SUCCESS;
-}
-
-//
-// LONG -> INT32 conversion
-//
-#define RtlLongToInt32 RtlLongToInt
-
-//
-// LONG -> INT_PTR conversion
-//
-#ifdef _WIN64
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongToIntPtr(
- _In_ LONG lOperand,
- _Out_ _Deref_out_range_(==, lOperand) INT_PTR* piResult)
-{
- *piResult = lOperand;
- return STATUS_SUCCESS;
-}
-#else
-#define RtlLongToIntPtr RtlLongToInt
-#endif
-
-//
-// LONG -> UINT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongToUInt(
- _In_ LONG lOperand,
- _Out_ _Deref_out_range_(==, lOperand) UINT* puResult)
-{
- NTSTATUS status;
-
- if (lOperand >= 0)
- {
- *puResult = (UINT)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *puResult = UINT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONG -> UINT32 conversion
-//
-#define RtlLongToUInt32 RtlLongToUInt
-
-//
-// LONG -> UINT_PTR conversion
-//
-#ifdef _WIN64
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongToUIntPtr(
- _In_ LONG lOperand,
- _Out_ _Deref_out_range_(==, lOperand) UINT_PTR* puResult)
-{
- NTSTATUS status;
-
- if (lOperand >= 0)
- {
- *puResult = (UINT_PTR)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *puResult = UINT_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-#else
-#define RtlLongToUIntPtr RtlLongToUInt
-#endif
-
-//
-// LONG -> ULONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongToULong(
- _In_ LONG lOperand,
- _Out_ _Deref_out_range_(==, lOperand) ULONG* pulResult)
-{
- NTSTATUS status;
-
- if (lOperand >= 0)
- {
- *pulResult = (ULONG)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pulResult = ULONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONG -> ULONG_PTR conversion
-//
-#ifdef _WIN64
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongToULongPtr(
- _In_ LONG lOperand,
- _Out_ _Deref_out_range_(==, lOperand) ULONG_PTR* pulResult)
-{
- NTSTATUS status;
-
- if (lOperand >= 0)
- {
- *pulResult = (ULONG_PTR)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pulResult = ULONG_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-#else
-#define RtlLongToULongPtr RtlLongToULong
-#endif
-
-//
-// LONG -> DWORD conversion
-//
-#define RtlLongToDWord RtlLongToULong
-
-//
-// LONG -> DWORD_PTR conversion
-//
-#define RtlLongToDWordPtr RtlLongToULongPtr
-
-//
-// LONG -> ULONGLONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongToULongLong(
- _In_ LONG lOperand,
- _Out_ _Deref_out_range_(==, lOperand) ULONGLONG* pullResult)
-{
- NTSTATUS status;
-
- if (lOperand >= 0)
- {
- *pullResult = (ULONGLONG)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pullResult = ULONGLONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONG -> DWORDLONG conversion
-//
-#define RtlLongToDWordLong RtlLongToULongLong
-
-//
-// LONG -> ULONG64 conversion
-//
-#define RtlLongToULong64 RtlLongToULongLong
-
-//
-// LONG -> DWORD64 conversion
-//
-#define RtlLongToDWord64 RtlLongToULongLong
-
-//
-// LONG -> UINT64 conversion
-//
-#define RtlLongToUInt64 RtlLongToULongLong
-
-//
-// LONG -> ptrdiff_t conversion
-//
-#define RtlLongToPtrdiffT RtlLongToIntPtr
-
-//
-// LONG -> size_t conversion
-//
-#define RtlLongToSizeT RtlLongToUIntPtr
-
-//
-// LONG -> SIZE_T conversion
-//
-#define RtlLongToSIZET RtlLongToULongPtr
-
-//
-// LONG_PTR -> INT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongPtrToInt8(
- _In_ LONG_PTR lOperand,
- _Out_ _Deref_out_range_(==, lOperand) INT8* pi8Result)
-{
- NTSTATUS status;
-
- if ((lOperand >= INT8_MIN) && (lOperand <= INT8_MAX))
- {
- *pi8Result = (INT8)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pi8Result = INT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONG_PTR -> UCHAR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongPtrToUChar(
- _In_ LONG_PTR lOperand,
- _Out_ _Deref_out_range_(==, lOperand) UCHAR* pch)
-{
- NTSTATUS status;
-
- if ((lOperand >= 0) && (lOperand <= 255))
- {
- *pch = (UCHAR)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pch = '\0';
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONG_PTR -> CHAR conversion
-//
-__forceinline
-NTSTATUS
-RtlLongPtrToChar(
- _In_ LONG_PTR lOperand,
- _Out_ _Deref_out_range_(==, lOperand) CHAR* pch)
-{
-#ifdef _CHAR_UNSIGNED
- return RtlLongPtrToUChar(lOperand, (UCHAR*)pch);
-#else
- return RtlLongPtrToInt8(lOperand, (INT8*)pch);
-#endif
-}
-
-//
-// LONG_PTR -> UINT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongPtrToUInt8(
- _In_ LONG_PTR lOperand,
- _Out_ _Deref_out_range_(==, lOperand) UINT8* pui8Result)
-{
- NTSTATUS status;
-
- if ((lOperand >= 0) && (lOperand <= UINT8_MAX))
- {
- *pui8Result = (UINT8)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pui8Result = UINT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONG_PTR -> BYTE conversion
-//
-#define RtlLongPtrToByte RtlLongPtrToUInt8
-
-//
-// LONG_PTR -> SHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongPtrToShort(
- _In_ LONG_PTR lOperand,
- _Out_ _Deref_out_range_(==, lOperand) SHORT* psResult)
-{
- NTSTATUS status;
-
- if ((lOperand >= SHORT_MIN) && (lOperand <= SHORT_MAX))
- {
- *psResult = (SHORT)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *psResult = SHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONG_PTR -> INT16 conversion
-//
-#define RtlLongPtrToInt16 RtlLongPtrToShort
-
-//
-// LONG_PTR -> USHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongPtrToUShort(
- _In_ LONG_PTR lOperand,
- _Out_ _Deref_out_range_(==, lOperand) USHORT* pusResult)
-{
- NTSTATUS status;
-
- if ((lOperand >= 0) && (lOperand <= USHORT_MAX))
- {
- *pusResult = (USHORT)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pusResult = USHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONG_PTR -> UINT16 conversion
-//
-#define RtlLongPtrToUInt16 RtlLongPtrToUShort
-
-//
-// LONG_PTR -> WORD conversion
-//
-#define RtlLongPtrToWord RtlLongPtrToUShort
-
-//
-// LONG_PTR -> INT conversion
-//
-#ifdef _WIN64
-#define RtlLongPtrToInt RtlLongLongToInt
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongPtrToInt(
- _In_ LONG_PTR lOperand,
- _Out_ _Deref_out_range_(==, lOperand) INT* piResult)
-{
- C_ASSERT(sizeof(INT) == sizeof(LONG_PTR));
- *piResult = (INT)lOperand;
- return STATUS_SUCCESS;
-}
-#endif
-
-//
-// LONG_PTR -> INT32 conversion
-//
-#define RtlLongPtrToInt32 RtlLongPtrToInt
-
-//
-// LONG_PTR -> INT_PTR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongPtrToIntPtr(
- _In_ LONG_PTR lOperand,
- _Out_ _Deref_out_range_(==, lOperand) INT_PTR* piResult)
-{
- C_ASSERT(sizeof(LONG_PTR) == sizeof(INT_PTR));
- *piResult = (INT_PTR)lOperand;
- return STATUS_SUCCESS;
-}
-
-//
-// LONG_PTR -> UINT conversion
-//
-#ifdef _WIN64
-#define RtlLongPtrToUInt RtlLongLongToUInt
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongPtrToUInt(
- _In_ LONG_PTR lOperand,
- _Out_ _Deref_out_range_(==, lOperand) UINT* puResult)
-{
- NTSTATUS status;
-
- if (lOperand >= 0)
- {
- *puResult = (UINT)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *puResult = UINT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-#endif
-
-//
-// LONG_PTR -> UINT32 conversion
-//
-#define RtlLongPtrToUInt32 RtlLongPtrToUInt
-
-//
-// LONG_PTR -> UINT_PTR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongPtrToUIntPtr(
- _In_ LONG_PTR lOperand,
- _Out_ _Deref_out_range_(==, lOperand) UINT_PTR* puResult)
-{
- NTSTATUS status;
-
- if (lOperand >= 0)
- {
- *puResult = (UINT_PTR)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *puResult = UINT_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONG_PTR -> LONG conversion
-//
-#ifdef _WIN64
-#define RtlLongPtrToLong RtlLongLongToLong
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongPtrToLong(
- _In_ LONG_PTR lOperand,
- _Out_ _Deref_out_range_(==, lOperand) LONG* plResult)
-{
- *plResult = (LONG)lOperand;
- return STATUS_SUCCESS;
-}
-#endif
-
-//
-// LONG_PTR -> ULONG conversion
-//
-#ifdef _WIN64
-#define RtlLongPtrToULong RtlLongLongToULong
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongPtrToULong(
- _In_ LONG_PTR lOperand,
- _Out_ _Deref_out_range_(==, lOperand) ULONG* pulResult)
-{
- NTSTATUS status;
-
- if (lOperand >= 0)
- {
- *pulResult = (ULONG)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pulResult = ULONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-#endif
-
-//
-// LONG_PTR -> ULONG_PTR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongPtrToULongPtr(
- _In_ LONG_PTR lOperand,
- _Out_ _Deref_out_range_(==, lOperand) ULONG_PTR* pulResult)
-{
- NTSTATUS status;
-
- if (lOperand >= 0)
- {
- *pulResult = (ULONG_PTR)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pulResult = ULONG_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONG_PTR -> DWORD conversion
-//
-#define RtlLongPtrToDWord RtlLongPtrToULong
-
-//
-// LONG_PTR -> DWORD_PTR conversion
-//
-#define RtlLongPtrToDWordPtr RtlLongPtrToULongPtr
-
-//
-// LONG_PTR -> ULONGLONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongPtrToULongLong(
- _In_ LONG_PTR lOperand,
- _Out_ _Deref_out_range_(==, lOperand) ULONGLONG* pullResult)
-{
- NTSTATUS status;
-
- if (lOperand >= 0)
- {
- *pullResult = (ULONGLONG)lOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pullResult = ULONGLONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONG_PTR -> DWORDLONG conversion
-//
-#define RtlLongPtrToDWordLong RtlLongPtrToULongLong
-
-//
-// LONG_PTR -> ULONG64 conversion
-//
-#define RtlLongPtrToULong64 RtlLongPtrToULongLong
-
-//
-// LONG_PTR -> DWORD64 conversion
-//
-#define RtlLongPtrToDWord64 RtlLongPtrToULongLong
-
-//
-// LONG_PTR -> UINT64 conversion
-//
-#define RtlLongPtrToUInt64 RtlLongPtrToULongLong
-
-//
-// LONG_PTR -> size_t conversion
-//
-#define RtlLongPtrToSizeT RtlLongPtrToUIntPtr
-
-//
-// LONG_PTR -> SIZE_T conversion
-//
-#define RtlLongPtrToSIZET RtlLongPtrToULongPtr
-
-//
-// ULONG -> INT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongToInt8(
- _In_ ULONG ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) INT8* pi8Result)
-{
- NTSTATUS status;
-
- if (ulOperand <= INT8_MAX)
- {
- *pi8Result = (INT8)ulOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pi8Result = INT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONG -> UCHAR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongToUChar(
- _In_ ULONG ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) UCHAR* pch)
-{
- NTSTATUS status;
-
- if (ulOperand <= 255)
- {
- *pch = (UCHAR)ulOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pch = '\0';
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONG -> CHAR conversion
-//
-__forceinline
-NTSTATUS
-RtlULongToChar(
- _In_ ULONG ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) CHAR* pch)
-{
-#ifdef _CHAR_UNSIGNED
- return RtlULongToUChar(ulOperand, (UCHAR*)pch);
-#else
- return RtlULongToInt8(ulOperand, (INT8*)pch);
-#endif
-}
-
-//
-// ULONG -> UINT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongToUInt8(
- _In_ ULONG ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) UINT8* pui8Result)
-{
- NTSTATUS status;
-
- if (ulOperand <= UINT8_MAX)
- {
- *pui8Result = (UINT8)ulOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pui8Result = UINT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONG -> BYTE conversion
-//
-#define RtlULongToByte RtlULongToUInt8
-
-//
-// ULONG -> SHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongToShort(
- _In_ ULONG ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) SHORT* psResult)
-{
- NTSTATUS status;
-
- if (ulOperand <= SHORT_MAX)
- {
- *psResult = (SHORT)ulOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *psResult = SHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONG -> INT16 conversion
-//
-#define RtlULongToInt16 RtlULongToShort
-
-//
-// ULONG -> USHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongToUShort(
- _In_ ULONG ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) USHORT* pusResult)
-{
- NTSTATUS status;
-
- if (ulOperand <= USHORT_MAX)
- {
- *pusResult = (USHORT)ulOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pusResult = USHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONG -> UINT16 conversion
-//
-#define RtlULongToUInt16 RtlULongToUShort
-
-//
-// ULONG -> WORD conversion
-//
-#define RtlULongToWord RtlULongToUShort
-
-//
-// ULONG -> INT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongToInt(
- _In_ ULONG ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) INT* piResult)
-{
- NTSTATUS status;
-
- if (ulOperand <= INT_MAX)
- {
- *piResult = (INT)ulOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *piResult = INT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONG -> INT32 conversion
-//
-#define RtlULongToInt32 RtlULongToInt
-
-//
-// ULONG -> INT_PTR conversion
-//
-#ifdef _WIN64
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongToIntPtr(
- _In_ ULONG ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) INT_PTR* piResult)
-{
- *piResult = (INT_PTR)ulOperand;
- return STATUS_SUCCESS;
-}
-#else
-#define RtlULongToIntPtr RtlULongToInt
-#endif
-
-//
-// ULONG -> UINT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongToUInt(
- _In_ ULONG ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) UINT* puResult)
-{
- C_ASSERT(sizeof(ULONG) == sizeof(UINT));
- *puResult = (UINT)ulOperand;
- return STATUS_SUCCESS;
-}
-
-//
-// ULONG -> UINT32 conversion
-//
-#define RtlULongToUInt32 RtlULongToUInt
-
-//
-// ULONG -> UINT_PTR conversion
-//
-#ifdef _WIN64
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongToUIntPtr(
- _In_ ULONG ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) UINT_PTR* puiResult)
-{
- C_ASSERT(sizeof(UINT_PTR) > sizeof(ULONG));
- *puiResult = (UINT_PTR)ulOperand;
- return STATUS_SUCCESS;
-}
-#else
-#define RtlULongToUIntPtr RtlULongToUInt
-#endif
-
-//
-// ULONG -> LONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongToLong(
- _In_ ULONG ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) LONG* plResult)
-{
- NTSTATUS status;
-
- if (ulOperand <= LONG_MAX)
- {
- *plResult = (LONG)ulOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *plResult = LONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONG -> LONG_PTR conversion
-//
-#ifdef _WIN64
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongToLongPtr(
- _In_ ULONG ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) LONG_PTR* plResult)
-{
- C_ASSERT(sizeof(LONG_PTR) > sizeof(ULONG));
- *plResult = (LONG_PTR)ulOperand;
- return STATUS_SUCCESS;
-}
-#else
-#define RtlULongToLongPtr RtlULongToLong
-#endif
-
-//
-// ULONG -> ptrdiff_t conversion
-//
-#define RtlULongToPtrdiffT RtlULongToIntPtr
-
-//
-// ULONG -> SSIZE_T conversion
-//
-#define RtlULongToSSIZET RtlULongToLongPtr
-
-//
-// ULONG_PTR -> INT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongPtrToInt8(
- _In_ ULONG_PTR ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) INT8* pi8Result)
-{
- NTSTATUS status;
-
- if (ulOperand <= INT8_MAX)
- {
- *pi8Result = (INT8)ulOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pi8Result = INT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONG_PTR -> UCHAR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongPtrToUChar(
- _In_ ULONG_PTR ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) UCHAR* pch)
-{
- NTSTATUS status;
-
- if (ulOperand <= 255)
- {
- *pch = (UCHAR)ulOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pch = '\0';
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONG_PTR -> CHAR conversion
-//
-__forceinline
-NTSTATUS
-RtlULongPtrToChar(
- _In_ ULONG_PTR ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) CHAR* pch)
-{
-#ifdef _CHAR_UNSIGNED
- return RtlULongPtrToUChar(ulOperand, (UCHAR*)pch);
-#else
- return RtlULongPtrToInt8(ulOperand, (INT8*)pch);
-#endif
-}
-
-//
-// ULONG_PTR -> UINT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongPtrToUInt8(
- _In_ ULONG_PTR ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) UINT8* pui8Result)
-{
- NTSTATUS status;
-
- if (ulOperand <= UINT8_MAX)
- {
- *pui8Result = (UINT8)ulOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pui8Result = UINT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONG_PTR -> BYTE conversion
-//
-#define RtlULongPtrToByte RtlULongPtrToUInt8
-
-//
-// ULONG_PTR -> SHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongPtrToShort(
- _In_ ULONG_PTR ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) SHORT* psResult)
-{
- NTSTATUS status;
-
- if (ulOperand <= SHORT_MAX)
- {
- *psResult = (SHORT)ulOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *psResult = SHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONG_PTR -> INT16 conversion
-//
-#define RtlULongPtrToInt16 RtlULongPtrToShort
-
-//
-// ULONG_PTR -> USHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongPtrToUShort(
- _In_ ULONG_PTR ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) USHORT* pusResult)
-{
- NTSTATUS status;
-
- if (ulOperand <= USHORT_MAX)
- {
- *pusResult = (USHORT)ulOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pusResult = USHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONG_PTR -> UINT16 conversion
-//
-#define RtlULongPtrToUInt16 RtlULongPtrToUShort
-
-//
-// ULONG_PTR -> WORD conversion
-//
-#define RtlULongPtrToWord RtlULongPtrToUShort
-
-//
-// ULONG_PTR -> INT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongPtrToInt(
- _In_ ULONG_PTR ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) INT* piResult)
-{
- NTSTATUS status;
-
- if (ulOperand <= INT_MAX)
- {
- *piResult = (INT)ulOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *piResult = INT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONG_PTR -> INT32 conversion
-//
-#define RtlULongPtrToInt32 RtlULongPtrToInt
-
-//
-// ULONG_PTR -> INT_PTR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongPtrToIntPtr(
- _In_ ULONG_PTR ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) INT_PTR* piResult)
-{
- NTSTATUS status;
-
- if (ulOperand <= INT_PTR_MAX)
- {
- *piResult = (INT_PTR)ulOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *piResult = INT_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONG_PTR -> UINT conversion
-//
-#ifdef _WIN64
-#define RtlULongPtrToUInt RtlULongLongToUInt
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongPtrToUInt(
- _In_ ULONG_PTR ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) UINT* puResult)
-{
- C_ASSERT(sizeof(ULONG_PTR) == sizeof(UINT));
- *puResult = (UINT)ulOperand;
- return STATUS_SUCCESS;
-}
-#endif
-
-//
-// ULONG_PTR -> UINT32 conversion
-//
-#define RtlULongPtrToUInt32 RtlULongPtrToUInt
-
-//
-// ULONG_PTR -> UINT_PTR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongPtrToUIntPtr(
- _In_ ULONG_PTR ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) UINT_PTR* puResult)
-{
- *puResult = (UINT_PTR)ulOperand;
- return STATUS_SUCCESS;
-}
-
-//
-// ULONG_PTR -> LONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongPtrToLong(
- _In_ ULONG_PTR ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) LONG* plResult)
-{
- NTSTATUS status;
-
- if (ulOperand <= LONG_MAX)
- {
- *plResult = (LONG)ulOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *plResult = LONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONG_PTR -> LONG_PTR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongPtrToLongPtr(
- _In_ ULONG_PTR ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) LONG_PTR* plResult)
-{
- NTSTATUS status;
-
- if (ulOperand <= LONG_PTR_MAX)
- {
- *plResult = (LONG_PTR)ulOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *plResult = LONG_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONG_PTR -> ULONG conversion
-//
-#ifdef _WIN64
-#define RtlULongPtrToULong RtlULongLongToULong
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongPtrToULong(
- _In_ ULONG_PTR ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) ULONG* pulResult)
-{
- *pulResult = (ULONG)ulOperand;
- return STATUS_SUCCESS;
-}
-#endif
-
-//
-// ULONG_PTR -> DWORD conversion
-//
-#define RtlULongPtrToDWord RtlULongPtrToULong
-
-//
-// ULONG_PTR -> LONGLONG conversion
-//
-#ifdef _WIN64
-#define RtlULongPtrToLongLong RtlULongLongToLongLong
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongPtrToLongLong(
- _In_ ULONG_PTR ulOperand,
- _Out_ _Deref_out_range_(==, ulOperand) LONGLONG* pllResult)
-{
- *pllResult = (LONGLONG)ulOperand;
- return STATUS_SUCCESS;
-}
-#endif
-
-//
-// ULONG_PTR -> LONG64 conversion
-//
-#define RtlULongPtrToLong64 RtlULongPtrToLongLong
-
-//
-// ULONG_PTR -> RtlINT64
-//
-#define RtlULongPtrToInt64 RtlULongPtrToLongLong
-
-//
-// ULONG_PTR -> ptrdiff_t conversion
-//
-#define RtlULongPtrToPtrdiffT RtlULongPtrToIntPtr
-
-//
-// ULONG_PTR -> SSIZE_T conversion
-//
-#define RtlULongPtrToSSIZET RtlULongPtrToLongPtr
-
-//
-// DWORD -> INT8 conversion
-//
-#define RtlDWordToInt8 RtlULongToInt8
-
-//
-// DWORD -> CHAR conversion
-//
-#define RtlDWordToChar RtlULongToChar
-
-//
-// DWORD -> UCHAR conversion
-//
-#define RtlDWordToUChar RtlULongToUChar
-
-//
-// DWORD -> UINT8 conversion
-//
-#define RtlDWordToUInt8 RtlULongToUInt8
-
-//
-// DWORD -> BYTE conversion
-//
-#define RtlDWordToByte RtlULongToUInt8
-
-//
-// DWORD -> SHORT conversion
-//
-#define RtlDWordToShort RtlULongToShort
-
-//
-// DWORD -> INT16 conversion
-//
-#define RtlDWordToInt16 RtlULongToShort
-
-//
-// DWORD -> USHORT conversion
-//
-#define RtlDWordToUShort RtlULongToUShort
-
-//
-// DWORD -> UINT16 conversion
-//
-#define RtlDWordToUInt16 RtlULongToUShort
-
-//
-// DWORD -> WORD conversion
-//
-#define RtlDWordToWord RtlULongToUShort
-
-//
-// DWORD -> INT conversion
-//
-#define RtlDWordToInt RtlULongToInt
-
-//
-// DWORD -> INT32 conversion
-//
-#define RtlDWordToInt32 RtlULongToInt
-
-//
-// DWORD -> INT_PTR conversion
-//
-#define RtlDWordToIntPtr RtlULongToIntPtr
-
-//
-// DWORD -> UINT conversion
-//
-#define RtlDWordToUInt RtlULongToUInt
-
-//
-// DWORD -> UINT32 conversion
-//
-#define RtlDWordToUInt32 RtlULongToUInt
-
-//
-// DWORD -> UINT_PTR conversion
-//
-#define RtlDWordToUIntPtr RtlULongToUIntPtr
-
-//
-// DWORD -> LONG conversion
-//
-#define RtlDWordToLong RtlULongToLong
-
-//
-// DWORD -> LONG_PTR conversion
-//
-#define RtlDWordToLongPtr RtlULongToLongPtr
-
-//
-// DWORD -> ptrdiff_t conversion
-//
-#define RtlDWordToPtrdiffT RtlULongToIntPtr
-
-//
-// DWORD -> SSIZE_T conversion
-//
-#define RtlDWordToSSIZET RtlULongToLongPtr
-
-//
-// DWORD_PTR -> INT8 conversion
-//
-#define RtlDWordPtrToInt8 RtlULongPtrToInt8
-
-//
-// DWORD_PTR -> UCHAR conversion
-//
-#define RtlDWordPtrToUChar RtlULongPtrToUChar
-
-//
-// DWORD_PTR -> CHAR conversion
-//
-#define RtlDWordPtrToChar RtlULongPtrToChar
-
-//
-// DWORD_PTR -> UINT8 conversion
-//
-#define RtlDWordPtrToUInt8 RtlULongPtrToUInt8
-
-//
-// DWORD_PTR -> BYTE conversion
-//
-#define RtlDWordPtrToByte RtlULongPtrToUInt8
-
-//
-// DWORD_PTR -> SHORT conversion
-//
-#define RtlDWordPtrToShort RtlULongPtrToShort
-
-//
-// DWORD_PTR -> INT16 conversion
-//
-#define RtlDWordPtrToInt16 RtlULongPtrToShort
-
-//
-// DWORD_PTR -> USHORT conversion
-//
-#define RtlDWordPtrToUShort RtlULongPtrToUShort
-
-//
-// DWORD_PTR -> UINT16 conversion
-//
-#define RtlDWordPtrToUInt16 RtlULongPtrToUShort
-
-//
-// DWORD_PTR -> WORD conversion
-//
-#define RtlDWordPtrToWord RtlULongPtrToUShort
-
-//
-// DWORD_PTR -> INT conversion
-//
-#define RtlDWordPtrToInt RtlULongPtrToInt
-
-//
-// DWORD_PTR -> INT32 conversion
-//
-#define RtlDWordPtrToInt32 RtlULongPtrToInt
-
-//
-// DWORD_PTR -> INT_PTR conversion
-//
-#define RtlDWordPtrToIntPtr RtlULongPtrToIntPtr
-
-//
-// DWORD_PTR -> UINT conversion
-//
-#define RtlDWordPtrToUInt RtlULongPtrToUInt
-
-//
-// DWORD_PTR -> UINT32 conversion
-//
-#define RtlDWordPtrToUInt32 RtlULongPtrToUInt
-
-//
-// DWODR_PTR -> UINT_PTR conversion
-//
-#define RtlDWordPtrToUIntPtr RtlULongPtrToUIntPtr
-
-//
-// DWORD_PTR -> LONG conversion
-//
-#define RtlDWordPtrToLong RtlULongPtrToLong
-
-//
-// DWORD_PTR -> LONG_PTR conversion
-//
-#define RtlDWordPtrToLongPtr RtlULongPtrToLongPtr
-
-//
-// DWORD_PTR -> ULONG conversion
-//
-#define RtlDWordPtrToULong RtlULongPtrToULong
-
-//
-// DWORD_PTR -> DWORD conversion
-//
-#define RtlDWordPtrToDWord RtlULongPtrToULong
-
-//
-// DWORD_PTR -> LONGLONG conversion
-//
-#define RtlDWordPtrToLongLong RtlULongPtrToLongLong
-
-//
-// DWORD_PTR -> LONG64 conversion
-//
-#define RtlDWordPtrToLong64 RtlULongPtrToLongLong
-
-//
-// DWORD_PTR -> RtlINT64 conversion
-//
-#define RtlDWordPtrToInt64 RtlULongPtrToLongLong
-
-//
-// DWORD_PTR -> ptrdiff_t conversion
-//
-#define RtlDWordPtrToPtrdiffT RtlULongPtrToIntPtr
-
-//
-// DWORD_PTR -> SSIZE_T conversion
-//
-#define RtlDWordPtrToSSIZET RtlULongPtrToLongPtr
-
-//
-// LONGLONG -> INT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongLongToInt8(
- _In_ LONGLONG llOperand,
- _Out_ _Deref_out_range_(==, llOperand) INT8* pi8Result)
-{
- NTSTATUS status;
-
- if ((llOperand >= INT8_MIN) && (llOperand <= INT8_MAX))
- {
- *pi8Result = (INT8)llOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pi8Result = INT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONGLONG -> UCHAR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongLongToUChar(
- _In_ LONGLONG llOperand,
- _Out_ _Deref_out_range_(==, llOperand) UCHAR* pch)
-{
- NTSTATUS status;
-
- if ((llOperand >= 0) && (llOperand <= 255))
- {
- *pch = (UCHAR)llOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pch = '\0';
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONGLONG -> CHAR conversion
-//
-__forceinline
-NTSTATUS
-RtlLongLongToChar(
- _In_ LONGLONG llOperand,
- _Out_ _Deref_out_range_(==, llOperand) CHAR* pch)
-{
-#ifdef _CHAR_UNSIGNED
- return RtlLongLongToUChar(llOperand, (UCHAR*)pch);
-#else
- return RtlLongLongToInt8(llOperand, (INT8*)pch);
-#endif
-}
-
-//
-// LONGLONG -> UINT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongLongToUInt8(
- _In_ LONGLONG llOperand,
- _Out_ _Deref_out_range_(==, llOperand) UINT8* pu8Result)
-{
- NTSTATUS status;
-
- if ((llOperand >= 0) && (llOperand <= UINT8_MAX))
- {
- *pu8Result = (UINT8)llOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pu8Result = UINT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONGLONG -> BYTE conversion
-//
-#define RtlLongLongToByte RtlLongLongToUInt8
-
-//
-// LONGLONG -> SHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongLongToShort(
- _In_ LONGLONG llOperand,
- _Out_ _Deref_out_range_(==, llOperand) SHORT* psResult)
-{
- NTSTATUS status;
-
- if ((llOperand >= SHORT_MIN) && (llOperand <= SHORT_MAX))
- {
- *psResult = (SHORT)llOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *psResult = SHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONGLONG -> INT16 conversion
-//
-#define RtlLongLongToInt16 RtlLongLongToShort
-
-//
-// LONGLONG -> USHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongLongToUShort(
- _In_ LONGLONG llOperand,
- _Out_ _Deref_out_range_(==, llOperand) USHORT* pusResult)
-{
- NTSTATUS status;
-
- if ((llOperand >= 0) && (llOperand <= USHORT_MAX))
- {
- *pusResult = (USHORT)llOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pusResult = USHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONGLONG -> UINT16 conversion
-//
-#define RtlLongLongToUInt16 RtlLongLongToUShort
-
-//
-// LONGLONG -> WORD conversion
-//
-#define RtlLongLongToWord RtlLongLongToUShort
-
-//
-// LONGLONG -> INT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongLongToInt(
- _In_ LONGLONG llOperand,
- _Out_ _Deref_out_range_(==, llOperand) INT* piResult)
-{
- NTSTATUS status;
-
- if ((llOperand >= INT_MIN) && (llOperand <= INT_MAX))
- {
- *piResult = (INT)llOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *piResult = INT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONGLONG -> INT32 conversion
-//
-#define RtlLongLongToInt32 RtlLongLongToInt
-
-//
-// LONGLONG -> INT_PTR conversion
-//
-#ifdef _WIN64
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongLongToIntPtr(
- _In_ LONGLONG llOperand,
- _Out_ _Deref_out_range_(==, llOperand) INT_PTR* piResult)
-{
- *piResult = llOperand;
- return STATUS_SUCCESS;
-}
-#else
-#define RtlLongLongToIntPtr RtlLongLongToInt
-#endif
-
-//
-// LONGLONG -> UINT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongLongToUInt(
- _In_ LONGLONG llOperand,
- _Out_ _Deref_out_range_(==, llOperand) UINT* puResult)
-{
- NTSTATUS status;
-
- if ((llOperand >= 0) && (llOperand <= UINT_MAX))
- {
- *puResult = (UINT)llOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *puResult = UINT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONGLONG -> UINT32 conversion
-//
-#define RtlLongLongToUInt32 RtlLongLongToUInt
-
-//
-// LONGLONG -> UINT_PTR conversion
-//
-#ifdef _WIN64
-#define RtlLongLongToUIntPtr RtlLongLongToULongLong
-#else
-#define RtlLongLongToUIntPtr RtlLongLongToUInt
-#endif
-
-//
-// LONGLONG -> LONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongLongToLong(
- _In_ LONGLONG llOperand,
- _Out_ _Deref_out_range_(==, llOperand) LONG* plResult)
-{
- NTSTATUS status;
-
- if ((llOperand >= LONG_MIN) && (llOperand <= LONG_MAX))
- {
- *plResult = (LONG)llOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *plResult = LONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONGLONG -> LONG_PTR conversion
-//
-#ifdef _WIN64
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongLongToLongPtr(
- _In_ LONGLONG llOperand,
- _Out_ _Deref_out_range_(==, llOperand) LONG_PTR* plResult)
-{
- *plResult = (LONG_PTR)llOperand;
- return STATUS_SUCCESS;
-}
-#else
-#define RtlLongLongToLongPtr RtlLongLongToLong
-#endif
-
-//
-// LONGLONG -> ULONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongLongToULong(
- _In_ LONGLONG llOperand,
- _Out_ _Deref_out_range_(==, llOperand) ULONG* pulResult)
-{
- NTSTATUS status;
-
- if ((llOperand >= 0) && (llOperand <= ULONG_MAX))
- {
- *pulResult = (ULONG)llOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pulResult = ULONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONGLONG -> ULONG_PTR conversion
-//
-#ifdef _WIN64
-#define RtlLongLongToULongPtr RtlLongLongToULongLong
-#else
-#define RtlLongLongToULongPtr RtlLongLongToULong
-#endif
-
-//
-// LONGLONG -> DWORD conversion
-//
-#define RtlLongLongToDWord RtlLongLongToULong
-
-//
-// LONGLONG -> DWORD_PTR conversion
-//
-#define RtlLongLongToDWordPtr RtlLongLongToULongPtr
-
-//
-// LONGLONG -> ULONGLONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongLongToULongLong(
- _In_ LONGLONG llOperand,
- _Out_ _Deref_out_range_(==, llOperand) ULONGLONG* pullResult)
-{
- NTSTATUS status;
-
- if (llOperand >= 0)
- {
- *pullResult = (ULONGLONG)llOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pullResult = ULONGLONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// LONGLONG -> DWORDLONG conversion
-//
-#define RtlLongLongToDWordLong RtlLongLongToULongLong
-
-//
-// LONGLONG -> ULONG64 conversion
-//
-#define RtlLongLongToULong64 RtlLongLongToULongLong
-
-//
-// LONGLONG -> DWORD64 conversion
-//
-#define RtlLongLongToDWord64 RtlLongLongToULongLong
-
-//
-// LONGLONG -> UINT64 conversion
-//
-#define RtlLongLongToUInt64 RtlLongLongToULongLong
-
-//
-// LONGLONG -> ptrdiff_t conversion
-//
-#define RtlLongLongToPtrdiffT RtlLongLongToIntPtr
-
-//
-// LONGLONG -> size_t conversion
-//
-#define RtlLongLongToSizeT RtlLongLongToUIntPtr
-
-//
-// LONGLONG -> SSIZE_T conversion
-//
-#define RtlLongLongToSSIZET RtlLongLongToLongPtr
-
-//
-// LONGLONG -> SIZE_T conversion
-//
-#define RtlLongLongToSIZET RtlLongLongToULongPtr
-
-//
-// LONG64 -> CHAR conversion
-//
-#define RtlLong64ToChar RtlLongLongToChar
-
-//
-// LONG64 -> INT8 conversion
-//
-#define RtlLong64ToInt8 RtlLongLongToInt8
-
-//
-// LONG64 -> UCHAR conversion
-//
-#define RtlLong64ToUChar RtlLongLongToUChar
-
-//
-// LONG64 -> UINT8 conversion
-//
-#define RtlLong64ToUInt8 RtlLongLongToUInt8
-
-//
-// LONG64 -> BYTE conversion
-//
-#define RtlLong64ToByte RtlLongLongToUInt8
-
-//
-// LONG64 -> SHORT conversion
-//
-#define RtlLong64ToShort RtlLongLongToShort
-
-//
-// LONG64 -> INT16 conversion
-//
-#define RtlLong64ToInt16 RtlLongLongToShort
-
-//
-// LONG64 -> USHORT conversion
-//
-#define RtlLong64ToUShort RtlLongLongToUShort
-
-//
-// LONG64 -> UINT16 conversion
-//
-#define RtlLong64ToUInt16 RtlLongLongToUShort
-
-//
-// LONG64 -> WORD conversion
-//
-#define RtlLong64ToWord RtlLongLongToUShort
-
-//
-// LONG64 -> INT conversion
-//
-#define RtlLong64ToInt RtlLongLongToInt
-
-//
-// LONG64 -> INT32 conversion
-//
-#define RtlLong64ToInt32 RtlLongLongToInt
-
-//
-// LONG64 -> INT_PTR conversion
-//
-#define RtlLong64ToIntPtr RtlLongLongToIntPtr
-
-//
-// LONG64 -> UINT conversion
-//
-#define RtlLong64ToUInt RtlLongLongToUInt
-
-//
-// LONG64 -> UINT32 conversion
-//
-#define RtlLong64ToUInt32 RtlLongLongToUInt
-
-//
-// LONG64 -> UINT_PTR conversion
-//
-#define RtlLong64ToUIntPtr RtlLongLongToUIntPtr
-
-//
-// LONG64 -> LONG conversion
-//
-#define RtlLong64ToLong RtlLongLongToLong
-
-//
-// LONG64 -> LONG_PTR conversion
-//
-#define RtlLong64ToLongPtr RtlLongLongToLongPtr
-
-//
-// LONG64 -> ULONG conversion
-//
-#define RtlLong64ToULong RtlLongLongToULong
-
-//
-// LONG64 -> ULONG_PTR conversion
-//
-#define RtlLong64ToULongPtr RtlLongLongToULongPtr
-
-//
-// LONG64 -> DWORD conversion
-//
-#define RtlLong64ToDWord RtlLongLongToULong
-
-//
-// LONG64 -> DWORD_PTR conversion
-//
-#define RtlLong64ToDWordPtr RtlLongLongToULongPtr
-
-//
-// LONG64 -> ULONGLONG conversion
-//
-#define RtlLong64ToULongLong RtlLongLongToULongLong
-
-//
-// LONG64 -> ptrdiff_t conversion
-//
-#define RtlLong64ToPtrdiffT RtlLongLongToIntPtr
-
-//
-// LONG64 -> size_t conversion
-//
-#define RtlLong64ToSizeT RtlLongLongToUIntPtr
-
-//
-// LONG64 -> SSIZE_T conversion
-//
-#define RtlLong64ToSSIZET RtlLongLongToLongPtr
-
-//
-// LONG64 -> SIZE_T conversion
-//
-#define RtlLong64ToSIZET RtlLongLongToULongPtr
-
-//
-// RtlINT64 -> CHAR conversion
-//
-#define RtlInt64ToChar RtlLongLongToChar
-
-//
-// RtlINT64 -> INT8 conversion
-//
-#define RtlInt64ToInt8 RtlLongLongToInt8
-
-//
-// RtlINT64 -> UCHAR conversion
-//
-#define RtlInt64ToUChar RtlLongLongToUChar
-
-//
-// RtlINT64 -> UINT8 conversion
-//
-#define RtlInt64ToUInt8 RtlLongLongToUInt8
-
-//
-// RtlINT64 -> BYTE conversion
-//
-#define RtlInt64ToByte RtlLongLongToUInt8
-
-//
-// RtlINT64 -> SHORT conversion
-//
-#define RtlInt64ToShort RtlLongLongToShort
-
-//
-// RtlINT64 -> INT16 conversion
-//
-#define RtlInt64ToInt16 RtlLongLongToShort
-
-//
-// RtlINT64 -> USHORT conversion
-//
-#define RtlInt64ToUShort RtlLongLongToUShort
-
-//
-// RtlINT64 -> UINT16 conversion
-//
-#define RtlInt64ToUInt16 RtlLongLongToUShort
-
-//
-// RtlINT64 -> WORD conversion
-//
-#define RtlInt64ToWord RtlLongLongToUShort
-
-//
-// RtlINT64 -> INT conversion
-//
-#define RtlInt64ToInt RtlLongLongToInt
-
-//
-// RtlINT64 -> INT32 conversion
-//
-#define RtlInt64ToInt32 RtlLongLongToInt
-
-//
-// RtlINT64 -> INT_PTR conversion
-//
-#define RtlInt64ToIntPtr RtlLongLongToIntPtr
-
-//
-// RtlINT64 -> UINT conversion
-//
-#define RtlInt64ToUInt RtlLongLongToUInt
-
-//
-// RtlINT64 -> UINT32 conversion
-//
-#define RtlInt64ToUInt32 RtlLongLongToUInt
-
-//
-// RtlINT64 -> UINT_PTR conversion
-//
-#define RtlInt64ToUIntPtr RtlLongLongToUIntPtr
-
-//
-// RtlINT64 -> LONG conversion
-//
-#define RtlInt64ToLong RtlLongLongToLong
-
-//
-// RtlINT64 -> LONG_PTR conversion
-//
-#define RtlInt64ToLongPtr RtlLongLongToLongPtr
-
-//
-// RtlINT64 -> ULONG conversion
-//
-#define RtlInt64ToULong RtlLongLongToULong
-
-//
-// RtlINT64 -> ULONG_PTR conversion
-//
-#define RtlInt64ToULongPtr RtlLongLongToULongPtr
-
-//
-// RtlINT64 -> DWORD conversion
-//
-#define RtlInt64ToDWord RtlLongLongToULong
-
-//
-// RtlINT64 -> DWORD_PTR conversion
-//
-#define RtlInt64ToDWordPtr RtlLongLongToULongPtr
-
-//
-// RtlINT64 -> ULONGLONG conversion
-//
-#define RtlInt64ToULongLong RtlLongLongToULongLong
-
-//
-// RtlINT64 -> DWORDLONG conversion
-//
-#define RtlInt64ToDWordLong RtlLongLongToULongLong
-
-//
-// RtlINT64 -> ULONG64 conversion
-//
-#define RtlInt64ToULong64 RtlLongLongToULongLong
-
-//
-// RtlINT64 -> DWORD64 conversion
-//
-#define RtlInt64ToDWord64 RtlLongLongToULongLong
-
-//
-// RtlINT64 -> UINT64 conversion
-//
-#define RtlInt64ToUInt64 RtlLongLongToULongLong
-
-//
-// RtlINT64 -> ptrdiff_t conversion
-//
-#define RtlInt64ToPtrdiffT RtlLongLongToIntPtr
-
-//
-// RtlINT64 -> size_t conversion
-//
-#define RtlInt64ToSizeT RtlLongLongToUIntPtr
-
-//
-// RtlINT64 -> SSIZE_T conversion
-//
-#define RtlInt64ToSSIZET RtlLongLongToLongPtr
-
-//
-// RtlINT64 -> SIZE_T conversion
-//
-#define RtlInt64ToSIZET RtlLongLongToULongPtr
-
-//
-// ULONGLONG -> INT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongLongToInt8(
- _In_ ULONGLONG ullOperand,
- _Out_ _Deref_out_range_(==, ullOperand) INT8* pi8Result)
-{
- NTSTATUS status;
-
- if (ullOperand <= INT8_MAX)
- {
- *pi8Result = (INT8)ullOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pi8Result = INT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONGLONG -> UCHAR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongLongToUChar(
- _In_ ULONGLONG ullOperand,
- _Out_ _Deref_out_range_(==, ullOperand) UCHAR* pch)
-{
- NTSTATUS status;
-
- if (ullOperand <= 255)
- {
- *pch = (UCHAR)ullOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pch = '\0';
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONGLONG -> CHAR conversion
-//
-__forceinline
-NTSTATUS
-RtlULongLongToChar(
- _In_ ULONGLONG ullOperand,
- _Out_ _Deref_out_range_(==, ullOperand) CHAR* pch)
-{
-#ifdef _CHAR_UNSIGNED
- return RtlULongLongToUChar(ullOperand, (UCHAR*)pch);
-#else
- return RtlULongLongToInt8(ullOperand, (INT8*)pch);
-#endif
-}
-
-//
-// ULONGLONG -> UINT8 conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongLongToUInt8(
- _In_ ULONGLONG ullOperand,
- _Out_ _Deref_out_range_(==, ullOperand) UINT8* pu8Result)
-{
- NTSTATUS status;
-
- if (ullOperand <= UINT8_MAX)
- {
- *pu8Result = (UINT8)ullOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pu8Result = UINT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONGLONG -> BYTE conversion
-//
-#define RtlULongLongToByte RtlULongLongToUInt8
-
-//
-// ULONGLONG -> SHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongLongToShort(
- _In_ ULONGLONG ullOperand,
- _Out_ _Deref_out_range_(==, ullOperand) SHORT* psResult)
-{
- NTSTATUS status;
-
- if (ullOperand <= SHORT_MAX)
- {
- *psResult = (SHORT)ullOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *psResult = SHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONGLONG -> INT16 conversion
-//
-#define RtlULongLongToInt16 RtlULongLongToShort
-
-//
-// ULONGLONG -> USHORT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongLongToUShort(
- _In_ ULONGLONG ullOperand,
- _Out_ _Deref_out_range_(==, ullOperand) USHORT* pusResult)
-{
- NTSTATUS status;
-
- if (ullOperand <= USHORT_MAX)
- {
- *pusResult = (USHORT)ullOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pusResult = USHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONGLONG -> UINT16 conversion
-//
-#define RtlULongLongToUInt16 RtlULongLongToUShort
-
-//
-// ULONGLONG -> WORD conversion
-//
-#define RtlULongLongToWord RtlULongLongToUShort
-
-//
-// ULONGLONG -> INT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongLongToInt(
- _In_ ULONGLONG ullOperand,
- _Out_ _Deref_out_range_(==, ullOperand) INT* piResult)
-{
- NTSTATUS status;
-
- if (ullOperand <= INT_MAX)
- {
- *piResult = (INT)ullOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *piResult = INT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONGLONG -> INT32 conversion
-//
-#define RtlULongLongToInt32 RtlULongLongToInt
-
-//
-// ULONGLONG -> INT_PTR conversion
-//
-#ifdef _WIN64
-#define RtlULongLongToIntPtr RtlULongLongToLongLong
-#else
-#define RtlULongLongToIntPtr RtlULongLongToInt
-#endif
-
-//
-// ULONGLONG -> UINT conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongLongToUInt(
- _In_ ULONGLONG ullOperand,
- _Out_ _Deref_out_range_(==, ullOperand) UINT* puResult)
-{
- NTSTATUS status;
-
- if (ullOperand <= UINT_MAX)
- {
- *puResult = (UINT)ullOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *puResult = UINT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONGLONG -> UINT32 conversion
-//
-#define RtlULongLongToUInt32 RtlULongLongToUInt
-
-//
-// ULONGLONG -> UINT_PTR conversion
-//
-#ifdef _WIN64
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongLongToUIntPtr(
- _In_ ULONGLONG ullOperand,
- _Out_ _Deref_out_range_(==, ullOperand) UINT_PTR* puResult)
-{
- *puResult = ullOperand;
- return STATUS_SUCCESS;
-}
-#else
-#define RtlULongLongToUIntPtr RtlULongLongToUInt
-#endif
-
-//
-// ULONGLONG -> LONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongLongToLong(
- _In_ ULONGLONG ullOperand,
- _Out_ _Deref_out_range_(==, ullOperand) LONG* plResult)
-{
- NTSTATUS status;
-
- if (ullOperand <= LONG_MAX)
- {
- *plResult = (LONG)ullOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *plResult = LONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONGLONG -> LONG_PTR conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongLongToLongPtr(
- _In_ ULONGLONG ullOperand,
- _Out_ _Deref_out_range_(==, ullOperand) LONG_PTR* plResult)
-{
- NTSTATUS status;
-
- if (ullOperand <= LONG_PTR_MAX)
- {
- *plResult = (LONG_PTR)ullOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *plResult = LONG_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONGLONG -> ULONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongLongToULong(
- _In_ ULONGLONG ullOperand,
- _Out_ _Deref_out_range_(==, ullOperand) ULONG* pulResult)
-{
- NTSTATUS status;
-
- if (ullOperand <= ULONG_MAX)
- {
- *pulResult = (ULONG)ullOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pulResult = ULONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONGLONG -> ULONG_PTR conversion
-//
-#ifdef _WIN64
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongLongToULongPtr(
- _In_ ULONGLONG ullOperand,
- _Out_ _Deref_out_range_(==, ullOperand) ULONG_PTR* pulResult)
-{
- *pulResult = ullOperand;
- return STATUS_SUCCESS;
-}
-#else
-#define RtlULongLongToULongPtr RtlULongLongToULong
-#endif
-
-//
-// ULONGLONG -> DWORD conversion
-//
-#define RtlULongLongToDWord RtlULongLongToULong
-
-//
-// ULONGLONG -> DWORD_PTR conversion
-//
-#define RtlULongLongToDWordPtr RtlULongLongToULongPtr
-
-//
-// ULONGLONG -> LONGLONG conversion
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongLongToLongLong(
- _In_ ULONGLONG ullOperand,
- _Out_ _Deref_out_range_(==, ullOperand) LONGLONG* pllResult)
-{
- NTSTATUS status;
-
- if (ullOperand <= LONGLONG_MAX)
- {
- *pllResult = (LONGLONG)ullOperand;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pllResult = LONGLONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONGLONG -> RtlINT64 conversion
-//
-#define RtlULongLongToInt64 RtlULongLongToLongLong
-
-//
-// ULONGLONG -> LONG64 conversion
-//
-#define RtlULongLongToLong64 RtlULongLongToLongLong
-
-//
-// ULONGLONG -> ptrdiff_t conversion
-//
-#define RtlULongLongToPtrdiffT RtlULongLongToIntPtr
-
-//
-// ULONGLONG -> size_t conversion
-//
-#define RtlULongLongToSizeT RtlULongLongToUIntPtr
-
-//
-// ULONGLONG -> SSIZE_T conversion
-//
-#define RtlULongLongToSSIZET RtlULongLongToLongPtr
-
-//
-// ULONGLONG -> SIZE_T conversion
-//
-#define RtlULongLongToSIZET RtlULongLongToULongPtr
-
-//
-// DWORDLONG -> CHAR conversion
-//
-#define RtlDWordLongToChar RtlULongLongToChar
-
-//
-// DWORDLONG -> INT8 conversion
-//
-#define RtlDWordLongToInt8 RtlULongLongToInt8
-
-//
-// DWORDLONG -> UCHAR conversion
-//
-#define RtlDWordLongToUChar RtlULongLongToUChar
-
-//
-// DWORDLONG -> UINT8 conversion
-//
-#define RtlDWordLongToUInt8 RtlULongLongToUInt8
-
-//
-// DWORDLONG -> BYTE conversion
-//
-#define RtlDWordLongToByte RtlULongLongToUInt8
-
-//
-// DWORDLONG -> SHORT conversion
-//
-#define RtlDWordLongToShort RtlULongLongToShort
-
-//
-// DWORDLONG -> INT16 conversion
-//
-#define RtlDWordLongToInt16 RtlULongLongToShort
-
-//
-// DWORDLONG -> USHORT conversion
-//
-#define RtlDWordLongToUShort RtlULongLongToUShort
-
-//
-// DWORDLONG -> UINT16 conversion
-//
-#define RtlDWordLongToUInt16 RtlULongLongToUShort
-
-//
-// DWORDLONG -> WORD conversion
-//
-#define RtlDWordLongToWord RtlULongLongToUShort
-
-//
-// DWORDLONG -> INT conversion
-//
-#define RtlDWordLongToInt RtlULongLongToInt
-
-//
-// DWORDLONG -> INT32 conversion
-//
-#define RtlDWordLongToInt32 RtlULongLongToInt
-
-//
-// DWORDLONG -> INT_PTR conversion
-//
-#define RtlDWordLongToIntPtr RtlULongLongToIntPtr
-
-//
-// DWORDLONG -> UINT conversion
-//
-#define RtlDWordLongToUInt RtlULongLongToUInt
-
-//
-// DWORDLONG -> UINT32 conversion
-//
-#define RtlDWordLongToUInt32 RtlULongLongToUInt
-
-//
-// DWORDLONG -> UINT_PTR conversion
-//
-#define RtlDWordLongToUIntPtr RtlULongLongToUIntPtr
-
-//
-// DWORDLONG -> LONG conversion
-//
-#define RtlDWordLongToLong RtlULongLongToLong
-
-//
-// DWORDLONG -> LONG_PTR conversion
-//
-#define RtlDWordLongToLongPtr RtlULongLongToLongPtr
-
-//
-// DWORDLONG -> ULONG conversion
-//
-#define RtlDWordLongToULong RtlULongLongToULong
-
-//
-// DWORDLONG -> ULONG_PTR conversion
-//
-#define RtlDWordLongToULongPtr RtlULongLongToULongPtr
-
-//
-// DWORDLONG -> DWORD conversion
-//
-#define RtlDWordLongToDWord RtlULongLongToULong
-
-//
-// DWORDLONG -> DWORD_PTR conversion
-//
-#define RtlDWordLongToDWordPtr RtlULongLongToULongPtr
-
-//
-// DWORDLONG -> LONGLONG conversion
-//
-#define RtlDWordLongToLongLong RtlULongLongToLongLong
-
-//
-// DWORDLONG -> LONG64 conversion
-//
-#define RtlDWordLongToLong64 RtlULongLongToLongLong
-
-//
-// DWORDLONG -> RtlINT64 conversion
-//
-#define RtlDWordLongToInt64 RtlULongLongToLongLong
-
-//
-// DWORDLONG -> ptrdiff_t conversion
-//
-#define RtlDWordLongToPtrdiffT RtlULongLongToIntPtr
-
-//
-// DWORDLONG -> size_t conversion
-//
-#define RtlDWordLongToSizeT RtlULongLongToUIntPtr
-
-//
-// DWORDLONG -> SSIZE_T conversion
-//
-#define RtlDWordLongToSSIZET RtlULongLongToLongPtr
-
-//
-// DWORDLONG -> SIZE_T conversion
-//
-#define RtlDWordLongToSIZET RtlULongLongToULongPtr
-
-//
-// ULONG64 -> CHAR conversion
-//
-#define RtlULong64ToChar RtlULongLongToChar
-
-//
-// ULONG64 -> INT8 conversion
-//
-#define RtlULong64ToInt8 RtlULongLongToInt8
-
-//
-// ULONG64 -> UCHAR conversion
-//
-#define RtlULong64ToUChar RtlULongLongToUChar
-
-//
-// ULONG64 -> UINT8 conversion
-//
-#define RtlULong64ToUInt8 RtlULongLongToUInt8
-
-//
-// ULONG64 -> BYTE conversion
-//
-#define RtlULong64ToByte RtlULongLongToUInt8
-
-//
-// ULONG64 -> SHORT conversion
-//
-#define RtlULong64ToShort RtlULongLongToShort
-
-//
-// ULONG64 -> INT16 conversion
-//
-#define RtlULong64ToInt16 RtlULongLongToShort
-
-//
-// ULONG64 -> USHORT conversion
-//
-#define RtlULong64ToUShort RtlULongLongToUShort
-
-//
-// ULONG64 -> UINT16 conversion
-//
-#define RtlULong64ToUInt16 RtlULongLongToUShort
-
-//
-// ULONG64 -> WORD conversion
-//
-#define RtlULong64ToWord RtlULongLongToUShort
-
-//
-// ULONG64 -> INT conversion
-//
-#define RtlULong64ToInt RtlULongLongToInt
-
-//
-// ULONG64 -> INT32 conversion
-//
-#define RtlULong64ToInt32 RtlULongLongToInt
-
-//
-// ULONG64 -> INT_PTR conversion
-//
-#define RtlULong64ToIntPtr RtlULongLongToIntPtr
-
-//
-// ULONG64 -> UINT conversion
-//
-#define RtlULong64ToUInt RtlULongLongToUInt
-
-//
-// ULONG64 -> UINT32 conversion
-//
-#define RtlULong64ToUInt32 RtlULongLongToUInt
-
-//
-// ULONG64 -> UINT_PTR conversion
-//
-#define RtlULong64ToUIntPtr RtlULongLongToUIntPtr
-
-//
-// ULONG64 -> LONG conversion
-//
-#define RtlULong64ToLong RtlULongLongToLong
-
-//
-// ULONG64 -> LONG_PTR conversion
-//
-#define RtlULong64ToLongPtr RtlULongLongToLongPtr
-
-//
-// ULONG64 -> ULONG conversion
-//
-#define RtlULong64ToULong RtlULongLongToULong
-
-//
-// ULONG64 -> ULONG_PTR conversion
-//
-#define RtlULong64ToULongPtr RtlULongLongToULongPtr
-
-//
-// ULONG64 -> DWORD conversion
-//
-#define RtlULong64ToDWord RtlULongLongToULong
-
-//
-// ULONG64 -> DWORD_PTR conversion
-//
-#define RtlULong64ToDWordPtr RtlULongLongToULongPtr
-
-//
-// ULONG64 -> LONGLONG conversion
-//
-#define RtlULong64ToLongLong RtlULongLongToLongLong
-
-//
-// ULONG64 -> LONG64 conversion
-//
-#define RtlULong64ToLong64 RtlULongLongToLongLong
-
-//
-// ULONG64 -> RtlINT64 conversion
-//
-#define RtlULong64ToInt64 RtlULongLongToLongLong
-
-//
-// ULONG64 -> ptrdiff_t conversion
-//
-#define RtlULong64ToPtrdiffT RtlULongLongToIntPtr
-
-//
-// ULONG64 -> size_t conversion
-//
-#define RtlULong64ToSizeT RtlULongLongToUIntPtr
-
-//
-// ULONG64 -> SSIZE_T conversion
-//
-#define RtlULong64ToSSIZET RtlULongLongToLongPtr
-
-//
-// ULONG64 -> SIZE_T conversion
-//
-#define RtlULong64ToSIZET RtlULongLongToULongPtr
-
-//
-// DWORD64 -> CHAR conversion
-//
-#define RtlDWord64ToChar RtlULongLongToChar
-
-//
-// DWORD64 -> INT8 conversion
-//
-#define RtlDWord64ToInt8 RtlULongLongToInt8
-
-//
-// DWORD64 -> UCHAR conversion
-//
-#define RtlDWord64ToUChar RtlULongLongToUChar
-
-//
-// DWORD64 -> UINT8 conversion
-//
-#define RtlDWord64ToUInt8 RtlULongLongToUInt8
-
-//
-// DWORD64 -> BYTE conversion
-//
-#define RtlDWord64ToByte RtlULongLongToUInt8
-
-//
-// DWORD64 -> SHORT conversion
-//
-#define RtlDWord64ToShort RtlULongLongToShort
-
-//
-// DWORD64 -> INT16 conversion
-//
-#define RtlDWord64ToInt16 RtlULongLongToShort
-
-//
-// DWORD64 -> USHORT conversion
-//
-#define RtlDWord64ToUShort RtlULongLongToUShort
-
-//
-// DWORD64 -> UINT16 conversion
-//
-#define RtlDWord64ToUInt16 RtlULongLongToUShort
-
-//
-// DWORD64 -> WORD conversion
-//
-#define RtlDWord64ToWord RtlULongLongToUShort
-
-//
-// DWORD64 -> INT conversion
-//
-#define RtlDWord64ToInt RtlULongLongToInt
-
-//
-// DWORD64 -> INT32 conversion
-//
-#define RtlDWord64ToInt32 RtlULongLongToInt
-
-//
-// DWORD64 -> INT_PTR conversion
-//
-#define RtlDWord64ToIntPtr RtlULongLongToIntPtr
-
-//
-// DWORD64 -> UINT conversion
-//
-#define RtlDWord64ToUInt RtlULongLongToUInt
-
-//
-// DWORD64 -> UINT32 conversion
-//
-#define RtlDWord64ToUInt32 RtlULongLongToUInt
-
-//
-// DWORD64 -> UINT_PTR conversion
-//
-#define RtlDWord64ToUIntPtr RtlULongLongToUIntPtr
-
-//
-// DWORD64 -> LONG conversion
-//
-#define RtlDWord64ToLong RtlULongLongToLong
-
-//
-// DWORD64 -> LONG_PTR conversion
-//
-#define RtlDWord64ToLongPtr RtlULongLongToLongPtr
-
-//
-// DWORD64 -> ULONG conversion
-//
-#define RtlDWord64ToULong RtlULongLongToULong
-
-//
-// DWORD64 -> ULONG_PTR conversion
-//
-#define RtlDWord64ToULongPtr RtlULongLongToULongPtr
-
-//
-// DWORD64 -> DWORD conversion
-//
-#define RtlDWord64ToDWord RtlULongLongToULong
-
-//
-// DWORD64 -> DWORD_PTR conversion
-//
-#define RtlDWord64ToDWordPtr RtlULongLongToULongPtr
-
-//
-// DWORD64 -> LONGLONG conversion
-//
-#define RtlDWord64ToLongLong RtlULongLongToLongLong
-
-//
-// DWORD64 -> LONG64 conversion
-//
-#define RtlDWord64ToLong64 RtlULongLongToLongLong
-
-//
-// DWORD64 -> RtlINT64 conversion
-//
-#define RtlDWord64ToInt64 RtlULongLongToLongLong
-
-//
-// DWORD64 -> ptrdiff_t conversion
-//
-#define RtlDWord64ToPtrdiffT RtlULongLongToIntPtr
-
-//
-// DWORD64 -> size_t conversion
-//
-#define RtlDWord64ToSizeT RtlULongLongToUIntPtr
-
-//
-// DWORD64 -> SSIZE_T conversion
-//
-#define RtlDWord64ToSSIZET RtlULongLongToLongPtr
-
-//
-// DWORD64 -> SIZE_T conversion
-//
-#define RtlDWord64ToSIZET RtlULongLongToULongPtr
-
-//
-// UINT64 -> CHAR conversion
-//
-#define RtlUInt64ToChar RtlULongLongToChar
-
-//
-// UINT64 -> INT8 conversion
-//
-#define RtlUInt64ToInt8 RtlULongLongToInt8
-
-//
-// UINT64 -> UCHAR conversion
-//
-#define RtlUInt64ToUChar RtlULongLongToUChar
-
-//
-// UINT64 -> UINT8 conversion
-//
-#define RtlUInt64ToUInt8 RtlULongLongToUInt8
-
-//
-// UINT64 -> BYTE conversion
-//
-#define RtlUInt64ToByte RtlULongLongToUInt8
-
-//
-// UINT64 -> SHORT conversion
-//
-#define RtlUInt64ToShort RtlULongLongToShort
-
-//
-// UINT64 -> INT16 conversion
-//
-//
-#define RtlUInt64ToInt16 RtlULongLongToShort
-
-//
-// UINT64 -> USHORT conversion
-//
-#define RtlUInt64ToUShort RtlULongLongToUShort
-
-//
-// UINT64 -> UINT16 conversion
-//
-#define RtlUInt64ToUInt16 RtlULongLongToUShort
-
-//
-// UINT64 -> WORD conversion
-//
-#define RtlUInt64ToWord RtlULongLongToUShort
-
-//
-// UINT64 -> INT conversion
-//
-#define RtlUInt64ToInt RtlULongLongToInt
-
-//
-// UINT64 -> INT32 conversion
-//
-#define RtlUInt64ToInt32 RtlULongLongToInt
-
-//
-// UINT64 -> INT_PTR conversion
-//
-#define RtlUInt64ToIntPtr RtlULongLongToIntPtr
-
-//
-// UINT64 -> UINT conversion
-//
-#define RtlUInt64ToUInt RtlULongLongToUInt
-
-//
-// UINT64 -> UINT32 conversion
-//
-#define RtlUInt64ToUInt32 RtlULongLongToUInt
-
-//
-// UINT64 -> UINT_PTR conversion
-//
-#define RtlUInt64ToUIntPtr RtlULongLongToUIntPtr
-
-//
-// UINT64 -> LONG conversion
-//
-#define RtlUInt64ToLong RtlULongLongToLong
-
-//
-// UINT64 -> LONG_PTR conversion
-//
-#define RtlUInt64ToLongPtr RtlULongLongToLongPtr
-
-//
-// UINT64 -> ULONG conversion
-//
-#define RtlUInt64ToULong RtlULongLongToULong
-
-//
-// UINT64 -> ULONG_PTR conversion
-//
-#define RtlUInt64ToULongPtr RtlULongLongToULongPtr
-
-//
-// UINT64 -> DWORD conversion
-//
-#define RtlUInt64ToDWord RtlULongLongToULong
-
-//
-// UINT64 -> DWORD_PTR conversion
-//
-#define RtlUInt64ToDWordPtr RtlULongLongToULongPtr
-
-//
-// UINT64 -> LONGLONG conversion
-//
-#define RtlUInt64ToLongLong RtlULongLongToLongLong
-
-//
-// UINT64 -> LONG64 conversion
-//
-#define RtlUInt64ToLong64 RtlULongLongToLongLong
-
-//
-// UINT64 -> RtlINT64 conversion
-//
-#define RtlUInt64ToInt64 RtlULongLongToLongLong
-
-//
-// UINT64 -> ptrdiff_t conversion
-//
-#define RtlUInt64ToPtrdiffT RtlULongLongToIntPtr
-
-//
-// UINT64 -> size_t conversion
-//
-#define RtlUInt64ToSizeT RtlULongLongToUIntPtr
-
-//
-// UINT64 -> SSIZE_T conversion
-//
-#define RtlUInt64ToSSIZET RtlULongLongToLongPtr
-
-//
-// UINT64 -> SIZE_T conversion
-//
-#define RtlUInt64ToSIZET RtlULongLongToULongPtr
-
-//
-// ptrdiff_t -> CHAR conversion
-//
-#define RtlPtrdiffTToChar RtlIntPtrToChar
-
-//
-// ptrdiff_t -> INT8 conversion
-//
-#define RtlPtrdiffTToInt8 RtlIntPtrToInt8
-
-//
-// ptrdiff_t -> UCHAR conversion
-//
-#define RtlPtrdiffTToUChar RtlIntPtrToUChar
-
-//
-// ptrdiff_t -> UINT8 conversion
-//
-#define RtlPtrdiffTToUInt8 RtlIntPtrToUInt8
-
-//
-// ptrdiff_t -> BYTE conversion
-//
-#define RtlPtrdiffTToByte RtlIntPtrToUInt8
-
-//
-// ptrdiff_t -> SHORT conversion
-//
-#define RtlPtrdiffTToShort RtlIntPtrToShort
-
-//
-// ptrdiff_t -> INT16 conversion
-//
-#define RtlPtrdiffTToInt16 RtlIntPtrToShort
-
-//
-// ptrdiff_t -> USHORT conversion
-//
-#define RtlPtrdiffTToUShort RtlIntPtrToUShort
-
-//
-// ptrdiff_t -> UINT16 conversion
-//
-#define RtlPtrdiffTToUInt16 RtlIntPtrToUShort
-
-//
-// ptrdiff_t -> WORD conversion
-//
-#define RtlPtrdiffTToWord RtlIntPtrToUShort
-
-//
-// ptrdiff_t -> INT conversion
-//
-#define RtlPtrdiffTToInt RtlIntPtrToInt
-
-//
-// ptrdiff_t -> INT32 conversion
-//
-#define RtlPtrdiffTToInt32 RtlIntPtrToInt
-
-//
-// ptrdiff_t -> UINT conversion
-//
-#define RtlPtrdiffTToUInt RtlIntPtrToUInt
-
-//
-// ptrdiff_t -> UINT32 conversion
-//
-#define RtlPtrdiffTToUInt32 RtlIntPtrToUInt
-
-//
-// ptrdiff_t -> UINT_PTR conversion
-//
-#define RtlPtrdiffTToUIntPtr RtlIntPtrToUIntPtr
-
-//
-// ptrdiff_t -> LONG conversion
-//
-#define RtlPtrdiffTToLong RtlIntPtrToLong
-
-//
-// ptrdiff_t -> LONG_PTR conversion
-//
-#define RtlPtrdiffTToLongPtr RtlIntPtrToLongPtr
-
-//
-// ptrdiff_t -> ULONG conversion
-//
-#define RtlPtrdiffTToULong RtlIntPtrToULong
-
-//
-// ptrdiff_t -> ULONG_PTR conversion
-//
-#define RtlPtrdiffTToULongPtr RtlIntPtrToULongPtr
-
-//
-// ptrdiff_t -> DWORD conversion
-//
-#define RtlPtrdiffTToDWord RtlIntPtrToULong
-
-//
-// ptrdiff_t -> DWORD_PTR conversion
-//
-#define RtlPtrdiffTToDWordPtr RtlIntPtrToULongPtr
-
-//
-// ptrdiff_t -> ULONGLONG conversion
-//
-#define RtlPtrdiffTToULongLong RtlIntPtrToULongLong
-
-//
-// ptrdiff_t -> DWORDLONG conversion
-//
-#define RtlPtrdiffTToDWordLong RtlIntPtrToULongLong
-
-//
-// ptrdiff_t -> ULONG64 conversion
-//
-#define RtlPtrdiffTToULong64 RtlIntPtrToULongLong
-
-//
-// ptrdiff_t -> DWORD64 conversion
-//
-#define RtlPtrdiffTToDWord64 RtlIntPtrToULongLong
-
-//
-// ptrdiff_t -> UINT64 conversion
-//
-#define RtlPtrdiffTToUInt64 RtlIntPtrToULongLong
-
-//
-// ptrdiff_t -> size_t conversion
-//
-#define RtlPtrdiffTToSizeT RtlIntPtrToUIntPtr
-
-//
-// ptrdiff_t -> SIZE_T conversion
-//
-#define RtlPtrdiffTToSIZET RtlIntPtrToULongPtr
-
-//
-// size_t -> INT8 conversion
-//
-#define RtlSizeTToInt8 RtlUIntPtrToInt8
-
-//
-// size_t -> UCHAR conversion
-//
-#define RtlSizeTToUChar RtlUIntPtrToUChar
-
-//
-// size_t -> CHAR conversion
-//
-#define RtlSizeTToChar RtlUIntPtrToChar
-
-//
-// size_t -> UINT8 conversion
-//
-#define RtlSizeTToUInt8 RtlUIntPtrToUInt8
-
-//
-// size_t -> BYTE conversion
-//
-#define RtlSizeTToByte RtlUIntPtrToUInt8
-
-//
-// size_t -> SHORT conversion
-//
-#define RtlSizeTToShort RtlUIntPtrToShort
-
-//
-// size_t -> INT16 conversion
-//
-#define RtlSizeTToInt16 RtlUIntPtrToShort
-
-//
-// size_t -> USHORT conversion
-//
-#define RtlSizeTToUShort RtlUIntPtrToUShort
-
-//
-// size_t -> UINT16 conversion
-//
-#define RtlSizeTToUInt16 RtlUIntPtrToUShort
-
-//
-// size_t -> WORD
-//
-#define RtlSizeTToWord RtlUIntPtrToUShort
-
-//
-// size_t -> INT conversion
-//
-#define RtlSizeTToInt RtlUIntPtrToInt
-
-//
-// size_t -> INT32 conversion
-//
-#define RtlSizeTToInt32 RtlUIntPtrToInt
-
-//
-// size_t -> INT_PTR conversion
-//
-#define RtlSizeTToIntPtr RtlUIntPtrToIntPtr
-
-//
-// size_t -> UINT conversion
-//
-#define RtlSizeTToUInt RtlUIntPtrToUInt
-
-//
-// size_t -> UINT32 conversion
-//
-#define RtlSizeTToUInt32 RtlUIntPtrToUInt
-
-//
-// size_t -> LONG conversion
-//
-#define RtlSizeTToLong RtlUIntPtrToLong
-
-//
-// size_t -> LONG_PTR conversion
-//
-#define RtlSizeTToLongPtr RtlUIntPtrToLongPtr
-
-//
-// size_t -> ULONG conversion
-//
-#define RtlSizeTToULong RtlUIntPtrToULong
-
-//
-// size_t -> DWORD conversion
-//
-#define RtlSizeTToDWord RtlUIntPtrToULong
-
-//
-// size_t -> LONGLONG conversion
-//
-#define RtlSizeTToLongLong RtlUIntPtrToLongLong
-
-//
-// size_t -> LONG64 conversion
-//
-#define RtlSizeTToLong64 RtlUIntPtrToLongLong
-
-//
-// size_t -> RtlINT64
-//
-#define RtlSizeTToInt64 RtlUIntPtrToLongLong
-
-//
-// size_t -> ptrdiff_t conversion
-//
-#define RtlSizeTToPtrdiffT RtlUIntPtrToIntPtr
-
-//
-// size_t -> SSIZE_T conversion
-//
-#define RtlSizeTToSSIZET RtlUIntPtrToLongPtr
-
-//
-// SSIZE_T -> INT8 conversion
-//
-#define RtlSSIZETToInt8 RtlLongPtrToInt8
-
-//
-// SSIZE_T -> UCHAR conversion
-//
-#define RtlSSIZETToUChar RtlLongPtrToUChar
-
-//
-// SSIZE_T -> CHAR conversion
-//
-#define RtlSSIZETToChar RtlLongPtrToChar
-
-//
-// SSIZE_T -> UINT8 conversion
-//
-#define RtlSSIZETToUInt8 RtlLongPtrToUInt8
-
-//
-// SSIZE_T -> BYTE conversion
-//
-#define RtlSSIZETToByte RtlLongPtrToUInt8
-
-//
-// SSIZE_T -> SHORT conversion
-//
-#define RtlSSIZETToShort RtlLongPtrToShort
-
-//
-// SSIZE_T -> INT16 conversion
-//
-#define RtlSSIZETToInt16 RtlLongPtrToShort
-
-//
-// SSIZE_T -> USHORT conversion
-//
-#define RtlSSIZETToUShort RtlLongPtrToUShort
-
-//
-// SSIZE_T -> UINT16 conversion
-//
-#define RtlSSIZETToUInt16 RtlLongPtrToUShort
-
-//
-// SSIZE_T -> WORD conversion
-//
-#define RtlSSIZETToWord RtlLongPtrToUShort
-
-//
-// SSIZE_T -> INT conversion
-//
-#define RtlSSIZETToInt RtlLongPtrToInt
-
-//
-// SSIZE_T -> INT32 conversion
-//
-#define RtlSSIZETToInt32 RtlLongPtrToInt
-
-//
-// SSIZE_T -> INT_PTR conversion
-//
-#define RtlSSIZETToIntPtr RtlLongPtrToIntPtr
-
-//
-// SSIZE_T -> UINT conversion
-//
-#define RtlSSIZETToUInt RtlLongPtrToUInt
-
-//
-// SSIZE_T -> UINT32 conversion
-//
-#define RtlSSIZETToUInt32 RtlLongPtrToUInt
-
-//
-// SSIZE_T -> UINT_PTR conversion
-//
-#define RtlSSIZETToUIntPtr RtlLongPtrToUIntPtr
-
-//
-// SSIZE_T -> LONG conversion
-//
-#define RtlSSIZETToLong RtlLongPtrToLong
-
-//
-// SSIZE_T -> ULONG conversion
-//
-#define RtlSSIZETToULong RtlLongPtrToULong
-
-//
-// SSIZE_T -> ULONG_PTR conversion
-//
-#define RtlSSIZETToULongPtr RtlLongPtrToULongPtr
-
-//
-// SSIZE_T -> DWORD conversion
-//
-#define RtlSSIZETToDWord RtlLongPtrToULong
-
-//
-// SSIZE_T -> DWORD_PTR conversion
-//
-#define RtlSSIZETToDWordPtr RtlLongPtrToULongPtr
-
-//
-// SSIZE_T -> ULONGLONG conversion
-//
-#define RtlSSIZETToULongLong RtlLongPtrToULongLong
-
-//
-// SSIZE_T -> DWORDLONG conversion
-//
-#define RtlSSIZETToDWordLong RtlLongPtrToULongLong
-
-//
-// SSIZE_T -> ULONG64 conversion
-//
-#define RtlSSIZETToULong64 RtlLongPtrToULongLong
-
-//
-// SSIZE_T -> DWORD64 conversion
-//
-#define RtlSSIZETToDWord64 RtlLongPtrToULongLong
-
-//
-// SSIZE_T -> UINT64 conversion
-//
-#define RtlSSIZETToUInt64 RtlLongPtrToULongLong
-
-//
-// SSIZE_T -> size_t conversion
-//
-#define RtlSSIZETToSizeT RtlLongPtrToUIntPtr
-
-//
-// SSIZE_T -> SIZE_T conversion
-//
-#define RtlSSIZETToSIZET RtlLongPtrToULongPtr
-
-//
-// SIZE_T -> INT8 conversion
-//
-#define RtlSIZETToInt8 RtlULongPtrToInt8
-
-//
-// SIZE_T -> UCHAR conversion
-//
-#define RtlSIZETToUChar RtlULongPtrToUChar
-
-//
-// SIZE_T -> CHAR conversion
-//
-#define RtlSIZETToChar RtlULongPtrToChar
-
-//
-// SIZE_T -> UINT8 conversion
-//
-#define RtlSIZETToUInt8 RtlULongPtrToUInt8
-
-//
-// SIZE_T -> BYTE conversion
-//
-#define RtlSIZETToByte RtlULongPtrToUInt8
-
-//
-// SIZE_T -> SHORT conversion
-//
-#define RtlSIZETToShort RtlULongPtrToShort
-
-//
-// SIZE_T -> INT16 conversion
-//
-#define RtlSIZETToInt16 RtlULongPtrToShort
-
-//
-// SIZE_T -> USHORT conversion
-//
-#define RtlSIZETToUShort RtlULongPtrToUShort
-
-//
-// SIZE_T -> UINT16 conversion
-//
-#define RtlSIZETToUInt16 RtlULongPtrToUShort
-
-//
-// SIZE_T -> WORD
-//
-#define RtlSIZETToWord RtlULongPtrToUShort
-
-//
-// SIZE_T -> INT conversion
-//
-#define RtlSIZETToInt RtlULongPtrToInt
-
-//
-// SIZE_T -> INT32 conversion
-//
-#define RtlSIZETToInt32 RtlULongPtrToInt
-
-//
-// SIZE_T -> INT_PTR conversion
-//
-#define RtlSIZETToIntPtr RtlULongPtrToIntPtr
-
-//
-// SIZE_T -> UINT conversion
-//
-#define RtlSIZETToUInt RtlULongPtrToUInt
-
-//
-// SIZE_T -> UINT32 conversion
-//
-#define RtlSIZETToUInt32 RtlULongPtrToUInt
-
-//
-// SIZE_T -> UINT_PTR conversion
-//
-#define RtlSIZETToUIntPtr RtlULongPtrToUIntPtr
-
-//
-// SIZE_T -> LONG conversion
-//
-#define RtlSIZETToLong RtlULongPtrToLong
-
-//
-// SIZE_T -> LONG_PTR conversion
-//
-#define RtlSIZETToLongPtr RtlULongPtrToLongPtr
-
-//
-// SIZE_T -> ULONG conversion
-//
-#define RtlSIZETToULong RtlULongPtrToULong
-
-//
-// SIZE_T -> DWORD conversion
-//
-#define RtlSIZETToDWord RtlULongPtrToULong
-
-//
-// SIZE_T -> LONGLONG conversion
-//
-#define RtlSIZETToLongLong RtlULongPtrToLongLong
-
-//
-// SIZE_T -> LONG64 conversion
-//
-#define RtlSIZETToLong64 RtlULongPtrToLongLong
-
-//
-// SIZE_T -> RtlINT64
-//
-#define RtlSIZETToInt64 RtlULongPtrToLongLong
-
-//
-// SIZE_T -> ptrdiff_t conversion
-//
-#define RtlSIZETToPtrdiffT RtlULongPtrToIntPtr
-
-//
-// SIZE_T -> SSIZE_T conversion
-//
-#define RtlSIZETToSSIZET RtlULongPtrToLongPtr
-
-
-//=============================================================================
-// Addition functions
-//=============================================================================
-
-//
-// UINT8 addition
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUInt8Add(
- _In_ UINT8 u8Augend,
- _In_ UINT8 u8Addend,
- _Out_ _Deref_out_range_(==, u8Augend + u8Addend) UINT8* pu8Result)
-{
- NTSTATUS status;
-
- if (((UINT8)(u8Augend + u8Addend)) >= u8Augend)
- {
- *pu8Result = (UINT8)(u8Augend + u8Addend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *pu8Result = UINT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// USHORT addition
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUShortAdd(
- _In_ USHORT usAugend,
- _In_ USHORT usAddend,
- _Out_ _Deref_out_range_(==, usAugend + usAddend) USHORT* pusResult)
-{
- NTSTATUS status;
-
- if (((USHORT)(usAugend + usAddend)) >= usAugend)
- {
- *pusResult = (USHORT)(usAugend + usAddend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *pusResult = USHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT16 addition
-//
-#define RtlUInt16Add RtlUShortAdd
-
-//
-// WORD addtition
-//
-#define RtlWordAdd RtlUShortAdd
-
-//
-// UINT addition
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntAdd(
- _In_ UINT uAugend,
- _In_ UINT uAddend,
- _Out_ _Deref_out_range_(==, uAugend + uAddend) UINT* puResult)
-{
- NTSTATUS status;
-
- if ((uAugend + uAddend) >= uAugend)
- {
- *puResult = (uAugend + uAddend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *puResult = UINT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT32 addition
-//
-#define RtlUInt32Add RtlUIntAdd
-
-//
-// UINT_PTR addition
-//
-#ifdef _WIN64
-#define RtlUIntPtrAdd RtlULongLongAdd
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntPtrAdd(
- _In_ UINT_PTR uAugend,
- _In_ UINT_PTR uAddend,
- _Out_ _Deref_out_range_(==, uAugend + uAddend) UINT_PTR* puResult)
-{
- NTSTATUS status;
-
- if ((uAugend + uAddend) >= uAugend)
- {
- *puResult = (uAugend + uAddend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *puResult = UINT_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-#endif // _WIN64
-
-//
-// ULONG addition
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongAdd(
- _In_ ULONG ulAugend,
- _In_ ULONG ulAddend,
- _Out_ _Deref_out_range_(==, ulAugend + ulAddend) ULONG* pulResult)
-{
- NTSTATUS status;
-
- if ((ulAugend + ulAddend) >= ulAugend)
- {
- *pulResult = (ulAugend + ulAddend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *pulResult = ULONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONG_PTR addition
-//
-#ifdef _WIN64
-#define RtlULongPtrAdd RtlULongLongAdd
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongPtrAdd(
- _In_ ULONG_PTR ulAugend,
- _In_ ULONG_PTR ulAddend,
- _Out_ _Deref_out_range_(==, ulAugend + ulAddend) ULONG_PTR* pulResult)
-{
- NTSTATUS status;
-
- if ((ulAugend + ulAddend) >= ulAugend)
- {
- *pulResult = (ulAugend + ulAddend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *pulResult = ULONG_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-#endif // _WIN64
-
-//
-// DWORD addition
-//
-#define RtlDWordAdd RtlULongAdd
-
-//
-// DWORD_PTR addition
-//
-#ifdef _WIN64
-#define RtlDWordPtrAdd RtlULongLongAdd
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlDWordPtrAdd(
- _In_ DWORD_PTR dwAugend,
- _In_ DWORD_PTR dwAddend,
- _Out_ _Deref_out_range_(==, dwAugend + dwAddend) DWORD_PTR* pdwResult)
-{
- NTSTATUS status;
-
- if ((dwAugend + dwAddend) >= dwAugend)
- {
- *pdwResult = (dwAugend + dwAddend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *pdwResult = DWORD_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-#endif // _WIN64
-
-//
-// size_t addition
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlSizeTAdd(
- _In_ size_t Augend,
- _In_ size_t Addend,
- _Out_ _Deref_out_range_(==, Augend + Addend) size_t* pResult)
-{
- NTSTATUS status;
-
- if ((Augend + Addend) >= Augend)
- {
- *pResult = (Augend + Addend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *pResult = SIZE_T_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// SIZE_T addition
-//
-#ifdef _WIN64
-#define RtlSIZETAdd RtlULongLongAdd
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlSIZETAdd(
- _In_ SIZE_T Augend,
- _In_ SIZE_T Addend,
- _Out_ _Deref_out_range_(==, Augend + Addend) SIZE_T* pResult)
-{
- NTSTATUS status;
-
- if ((Augend + Addend) >= Augend)
- {
- *pResult = (Augend + Addend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *pResult = _SIZE_T_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-#endif // _WIN64
-
-//
-// ULONGLONG addition
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongLongAdd(
- _In_ ULONGLONG ullAugend,
- _In_ ULONGLONG ullAddend,
- _Out_ _Deref_out_range_(==, ullAugend + ullAddend) ULONGLONG* pullResult)
-{
- NTSTATUS status;
-
- if ((ullAugend + ullAddend) >= ullAugend)
- {
- *pullResult = (ullAugend + ullAddend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *pullResult = ULONGLONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// DWORDLONG addition
-//
-#define RtlDWordLongAdd RtlULongLongAdd
-
-//
-// ULONG64 addition
-//
-#define RtlULong64Add RtlULongLongAdd
-
-//
-// DWORD64 addition
-//
-#define RtlDWord64Add RtlULongLongAdd
-
-//
-// UINT64 addition
-//
-#define RtlUInt64Add RtlULongLongAdd
-
-
-//=============================================================================
-// Subtraction functions
-//=============================================================================
-
-//
-// UINT8 subtraction
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUInt8Sub(
- _In_ UINT8 u8Minuend,
- _In_ UINT8 u8Subtrahend,
- _Out_ _Deref_out_range_(==, u8Minuend - u8Subtrahend) UINT8* pu8Result)
-{
- NTSTATUS status;
-
- if (u8Minuend >= u8Subtrahend)
- {
- *pu8Result = (UINT8)(u8Minuend - u8Subtrahend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *pu8Result = UINT8_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// USHORT subtraction
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUShortSub(
- _In_ USHORT usMinuend,
- _In_ USHORT usSubtrahend,
- _Out_ _Deref_out_range_(==, usMinuend - usSubtrahend) USHORT* pusResult)
-{
- NTSTATUS status;
-
- if (usMinuend >= usSubtrahend)
- {
- *pusResult = (USHORT)(usMinuend - usSubtrahend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *pusResult = USHORT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT16 subtraction
-//
-#define RtlUInt16Sub RtlUShortSub
-
-//
-// WORD subtraction
-//
-#define RtlWordSub RtlUShortSub
-
-
-//
-// UINT subtraction
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntSub(
- _In_ UINT uMinuend,
- _In_ UINT uSubtrahend,
- _Out_ _Deref_out_range_(==, uMinuend - uSubtrahend) UINT* puResult)
-{
- NTSTATUS status;
-
- if (uMinuend >= uSubtrahend)
- {
- *puResult = (uMinuend - uSubtrahend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *puResult = UINT_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// UINT32 subtraction
-//
-#define RtlUInt32Sub RtlUIntSub
-
-//
-// UINT_PTR subtraction
-//
-#ifdef _WIN64
-#define RtlUIntPtrSub RtlULongLongSub
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntPtrSub(
- _In_ UINT_PTR uMinuend,
- _In_ UINT_PTR uSubtrahend,
- _Out_ _Deref_out_range_(==, uMinuend - uSubtrahend) UINT_PTR* puResult)
-{
- NTSTATUS status;
-
- if (uMinuend >= uSubtrahend)
- {
- *puResult = (uMinuend - uSubtrahend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *puResult = UINT_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-#endif // _WIN64
-
-//
-// ULONG subtraction
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongSub(
- _In_ ULONG ulMinuend,
- _In_ ULONG ulSubtrahend,
- _Out_ _Deref_out_range_(==, ulMinuend - ulSubtrahend) ULONG* pulResult)
-{
- NTSTATUS status;
-
- if (ulMinuend >= ulSubtrahend)
- {
- *pulResult = (ulMinuend - ulSubtrahend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *pulResult = ULONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// ULONG_PTR subtraction
-//
-#ifdef _WIN64
-#define RtlULongPtrSub RtlULongLongSub
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongPtrSub(
- _In_ ULONG_PTR ulMinuend,
- _In_ ULONG_PTR ulSubtrahend,
- _Out_ _Deref_out_range_(==, ulMinuend - ulSubtrahend) ULONG_PTR* pulResult)
-{
- NTSTATUS status;
-
- if (ulMinuend >= ulSubtrahend)
- {
- *pulResult = (ulMinuend - ulSubtrahend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *pulResult = ULONG_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-#endif // _WIN64
-
-
-//
-// DWORD subtraction
-//
-#define RtlDWordSub RtlULongSub
-
-//
-// DWORD_PTR subtraction
-//
-#ifdef _WIN64
-#define RtlDWordPtrSub RtlULongLongSub
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlDWordPtrSub(
- _In_ DWORD_PTR dwMinuend,
- _In_ DWORD_PTR dwSubtrahend,
- _Out_ _Deref_out_range_(==, dwMinuend - dwSubtrahend) DWORD_PTR* pdwResult)
-{
- NTSTATUS status;
-
- if (dwMinuend >= dwSubtrahend)
- {
- *pdwResult = (dwMinuend - dwSubtrahend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *pdwResult = DWORD_PTR_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-#endif // _WIN64
-
-//
-// size_t subtraction
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlSizeTSub(
- _In_ size_t Minuend,
- _In_ size_t Subtrahend,
- _Out_ _Deref_out_range_(==, Minuend - Subtrahend) size_t* pResult)
-{
- NTSTATUS status;
-
- if (Minuend >= Subtrahend)
- {
- *pResult = (Minuend - Subtrahend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *pResult = SIZE_T_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// SIZE_T subtraction
-//
-#ifdef _WIN64
-#define RtlSIZETSub RtlULongLongSub
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlSIZETSub(
- _In_ SIZE_T Minuend,
- _In_ SIZE_T Subtrahend,
- _Out_ _Deref_out_range_(==, Minuend - Subtrahend) SIZE_T* pResult)
-{
- NTSTATUS status;
-
- if (Minuend >= Subtrahend)
- {
- *pResult = (Minuend - Subtrahend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *pResult = _SIZE_T_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-#endif // _WIN64
-
-//
-// ULONGLONG subtraction
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongLongSub(
- _In_ ULONGLONG ullMinuend,
- _In_ ULONGLONG ullSubtrahend,
- _Out_ _Deref_out_range_(==, ullMinuend - ullSubtrahend) ULONGLONG* pullResult)
-{
- NTSTATUS status;
-
- if (ullMinuend >= ullSubtrahend)
- {
- *pullResult = (ullMinuend - ullSubtrahend);
- status = STATUS_SUCCESS;
- }
- else
- {
- *pullResult = ULONGLONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-
- return status;
-}
-
-//
-// DWORDLONG subtraction
-//
-#define RtlDWordLongSub RtlULongLongSub
-
-//
-// ULONG64 subtraction
-//
-#define RtlULong64Sub RtlULongLongSub
-
-//
-// DWORD64 subtraction
-//
-#define RtlDWord64Sub RtlULongLongSub
-
-//
-// UINT64 subtraction
-//
-#define RtlUInt64Sub RtlULongLongSub
-
-
-//=============================================================================
-// Multiplication functions
-//=============================================================================
-
-//
-// UINT8 multiplication
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUInt8Mult(
- _In_ UINT8 u8Multiplicand,
- _In_ UINT8 u8Multiplier,
- _Out_ _Deref_out_range_(==, u8Multiplicand * u8Multiplier) UINT8* pu8Result)
-{
- UINT uResult = ((UINT)u8Multiplicand) * ((UINT)u8Multiplier);
-
- return RtlUIntToUInt8(uResult, pu8Result);
-}
-
-//
-// USHORT multiplication
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUShortMult(
- _In_ USHORT usMultiplicand,
- _In_ USHORT usMultiplier,
- _Out_ _Deref_out_range_(==, usMultiplicand * usMultiplier) USHORT* pusResult)
-{
- ULONG ulResult = ((ULONG)usMultiplicand) * ((ULONG)usMultiplier);
-
- return RtlULongToUShort(ulResult, pusResult);
-}
-
-//
-// UINT16 multiplication
-//
-#define RtlUInt16Mult RtlUShortMult
-
-//
-// WORD multiplication
-//
-#define RtlWordMult RtlUShortMult
-
-//
-// UINT multiplication
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntMult(
- _In_ UINT uMultiplicand,
- _In_ UINT uMultiplier,
- _Out_ _Deref_out_range_(==, uMultiplicand * uMultiplier) UINT* puResult)
-{
- ULONGLONG ull64Result = UInt32x32To64(uMultiplicand, uMultiplier);
-
- return RtlULongLongToUInt(ull64Result, puResult);
-}
-
-//
-// UINT32 multiplication
-//
-#define RtlUInt32Mult RtlUIntMult
-
-//
-// UINT_PTR multiplication
-//
-#ifdef _WIN64
-#define RtlUIntPtrMult RtlULongLongMult
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlUIntPtrMult(
- _In_ UINT_PTR uMultiplicand,
- _In_ UINT_PTR uMultiplier,
- _Out_ _Deref_out_range_(==, uMultiplicand * uMultiplier) UINT_PTR* puResult)
-{
- ULONGLONG ull64Result = UInt32x32To64(uMultiplicand, uMultiplier);
-
- return RtlULongLongToUIntPtr(ull64Result, puResult);
-}
-#endif // _WIN64
-
-//
-// ULONG multiplication
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongMult(
- _In_ ULONG ulMultiplicand,
- _In_ ULONG ulMultiplier,
- _Out_ _Deref_out_range_(==, ulMultiplicand * ulMultiplier) ULONG* pulResult)
-{
- ULONGLONG ull64Result = UInt32x32To64(ulMultiplicand, ulMultiplier);
-
- return RtlULongLongToULong(ull64Result, pulResult);
-}
-
-//
-// ULONG_PTR multiplication
-//
-#ifdef _WIN64
-#define RtlULongPtrMult RtlULongLongMult
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongPtrMult(
- _In_ ULONG_PTR ulMultiplicand,
- _In_ ULONG_PTR ulMultiplier,
- _Out_ _Deref_out_range_(==, ulMultiplicand * ulMultiplier) ULONG_PTR* pulResult)
-{
- ULONGLONG ull64Result = UInt32x32To64(ulMultiplicand, ulMultiplier);
-
- return RtlULongLongToULongPtr(ull64Result, pulResult);
-}
-#endif // _WIN64
-
-//
-// DWORD multiplication
-//
-#define RtlDWordMult RtlULongMult
-
-//
-// DWORD_PTR multiplication
-//
-#ifdef _WIN64
-#define RtlDWordPtrMult RtlULongLongMult
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlDWordPtrMult(
- _In_ DWORD_PTR dwMultiplicand,
- _In_ DWORD_PTR dwMultiplier,
- _Out_ _Deref_out_range_(==, dwMultiplicand * dwMultiplier) DWORD_PTR* pdwResult)
-{
- ULONGLONG ull64Result = UInt32x32To64(dwMultiplicand, dwMultiplier);
-
- return RtlULongLongToDWordPtr(ull64Result, pdwResult);
-}
-#endif // _WIN64
-
-//
-// size_t multiplication
-//
-
-#ifdef _WIN64
-#define RtlSizeTMult RtlULongLongMult
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlSizeTMult(
- _In_ size_t Multiplicand,
- _In_ size_t Multiplier,
- _Out_ _Deref_out_range_(==, Multiplicand * Multiplier) size_t* pResult)
-{
- ULONGLONG ull64Result = UInt32x32To64(Multiplicand, Multiplier);
-
- return RtlULongLongToSizeT(ull64Result, pResult);
-}
-#endif // _WIN64
-
-//
-// SIZE_T multiplication
-//
-#ifdef _WIN64
-#define RtlSIZETMult RtlULongLongMult
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlSIZETMult(
- _In_ SIZE_T Multiplicand,
- _In_ SIZE_T Multiplier,
- _Out_ _Deref_out_range_(==, Multiplicand * Multiplier) SIZE_T* pResult)
-{
- ULONGLONG ull64Result = UInt32x32To64(Multiplicand, Multiplier);
-
- return RtlULongLongToSIZET(ull64Result, pResult);
-}
-#endif // _WIN64
-
-//
-// ULONGLONG multiplication
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlULongLongMult(
- _In_ ULONGLONG ullMultiplicand,
- _In_ ULONGLONG ullMultiplier,
- _Out_ _Deref_out_range_(==, ullMultiplicand * ullMultiplier) ULONGLONG* pullResult)
-{
- NTSTATUS status;
-#if defined(_USE_INTRINSIC_MULTIPLY128)
- ULONGLONG ullResultHigh;
- ULONGLONG ullResultLow;
-
- ullResultLow = UnsignedMultiply128(ullMultiplicand, ullMultiplier, &ullResultHigh);
- if (ullResultHigh == 0)
- {
- _Analysis_assume_(ullMultiplicand * ullMultiplier == ullResultLow);
- *pullResult = ullResultLow;
- status = STATUS_SUCCESS;
- }
- else
- {
- *pullResult = ULONGLONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
-#else
- // 64x64 into 128 is like 32.32 x 32.32.
- //
- // a.b * c.d = a*(c.d) + .b*(c.d) = a*c + a*.d + .b*c + .b*.d
- // back in non-decimal notation where A=a*2^32 and C=c*2^32:
- // A*C + A*d + b*C + b*d
- // So there are four components to add together.
- // result = (a*c*2^64) + (a*d*2^32) + (b*c*2^32) + (b*d)
- //
- // a * c must be 0 or there would be bits in the high 64-bits
- // a * d must be less than 2^32 or there would be bits in the high 64-bits
- // b * c must be less than 2^32 or there would be bits in the high 64-bits
- // then there must be no overflow of the resulting values summed up.
-
- ULONG dw_a;
- ULONG dw_b;
- ULONG dw_c;
- ULONG dw_d;
- ULONGLONG ad = 0;
- ULONGLONG bc = 0;
- ULONGLONG bd = 0;
- ULONGLONG ullResult = 0;
-
- status = STATUS_INTEGER_OVERFLOW;
-
- dw_a = (ULONG)(ullMultiplicand >> 32);
- dw_c = (ULONG)(ullMultiplier >> 32);
-
- // common case -- if high dwords are both zero, no chance for overflow
- if ((dw_a == 0) && (dw_c == 0))
- {
- dw_b = (DWORD)ullMultiplicand;
- dw_d = (DWORD)ullMultiplier;
-
- *pullResult = (((ULONGLONG)dw_b) * (ULONGLONG)dw_d);
- status = STATUS_SUCCESS;
- }
- else
- {
- // a * c must be 0 or there would be bits set in the high 64-bits
- if ((dw_a == 0) ||
- (dw_c == 0))
- {
- dw_d = (DWORD)ullMultiplier;
-
- // a * d must be less than 2^32 or there would be bits set in the high 64-bits
- ad = (((ULONGLONG)dw_a) * (ULONGLONG)dw_d);
- if ((ad & 0xffffffff00000000) == 0)
- {
- dw_b = (DWORD)ullMultiplicand;
-
- // b * c must be less than 2^32 or there would be bits set in the high 64-bits
- bc = (((ULONGLONG)dw_b) * (ULONGLONG)dw_c);
- if ((bc & 0xffffffff00000000) == 0)
- {
- // now sum them all up checking for overflow.
- // shifting is safe because we already checked for overflow above
- if (NT_SUCCESS(RtlULongLongAdd(bc << 32, ad << 32, &ullResult)))
- {
- // b * d
- bd = (((ULONGLONG)dw_b) * (ULONGLONG)dw_d);
-
- if (NT_SUCCESS(RtlULongLongAdd(ullResult, bd, &ullResult)))
- {
- *pullResult = ullResult;
- status = STATUS_SUCCESS;
- }
- }
- }
- }
- }
- }
-
- if (!NT_SUCCESS(status))
- {
- *pullResult = ULONGLONG_ERROR;
- }
-#pragma warning(suppress:26071)
-#endif // _USE_INTRINSIC_MULTIPLY128
- return status;
-}
-
-//
-// DWORDLONG multiplication
-//
-#define RtlDWordLongMult RtlULongLongMult
-
-//
-// ULONG64 multiplication
-//
-#define RtlULong64Mult RtlULongLongMult
-
-//
-// DWORD64 multiplication
-//
-#define RtlDWord64Mult RtlULongLongMult
-
-//
-// UINT64 multiplication
-//
-#define RtlUInt64Mult RtlULongLongMult
-
-
-/////////////////////////////////////////////////////////////////////////
-//
-// signed operations
-//
-// Strongly consider using unsigned numbers.
-//
-// Signed numbers are often used where unsigned numbers should be used.
-// For example file sizes and array indices should always be unsigned.
-// (File sizes should be 64bit integers; array indices should be size_t.)
-// Subtracting a larger positive signed number from a smaller positive
-// signed number with RtlIntSub will succeed, producing a negative number,
-// that then must not be used as an array index (but can occasionally be
-// used as a pointer index.) Similarly for adding a larger magnitude
-// negative number to a smaller magnitude positive number.
-//
-// intsafe.h does not protect you from such errors. It tells you if your
-// integer operations overflowed, not if you are doing the right thing
-// with your non-overflowed integers.
-//
-// Likewise you can overflow a buffer with a non-overflowed unsigned index.
-//
-#if defined(ENABLE_INTSAFE_SIGNED_FUNCTIONS)
-
-#if defined(_USE_INTRINSIC_MULTIPLY128)
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if !defined(_ARM64EC_)
-
-#define Multiply128 _mul128
-
-#else
-
-#define _mul128 Multiply128
-
-#endif // defined(_ARM64EC_)
-
-LONG64
-Multiply128(
- _In_ LONG64 Multiplier,
- _In_ LONG64 Multiplicand,
- _Out_ LONG64 *HighProduct
- );
-
-#if !defined(_ARM64EC_)
-
-#pragma intrinsic(_mul128)
-
-#endif // !defined(_ARM64EC_)
-
-#ifdef __cplusplus
-}
-#endif
-#endif // _USE_INTRINSIC_MULTIPLY128
-
-
-//=============================================================================
-// Signed addition functions
-//=============================================================================
-
-//
-// INT8 Addition
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlInt8Add(
- _In_ INT8 i8Augend,
- _In_ INT8 i8Addend,
- _Out_ _Deref_out_range_(==, i8Augend + i8Addend) INT8* pi8Result
- )
-{
- C_ASSERT(sizeof(LONG) > sizeof(INT8));
- return RtlLongToInt8(((LONG)i8Augend) + ((LONG)i8Addend), pi8Result);
-}
-
-//
-// SHORT Addition
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlShortAdd(
- _In_ SHORT sAugend,
- _In_ SHORT sAddend,
- _Out_ _Deref_out_range_(==, sAugend + sAddend) SHORT* psResult
- )
-{
- C_ASSERT(sizeof(LONG) > sizeof(SHORT));
- return RtlLongToShort(((LONG)sAugend) + ((LONG)sAddend), psResult);
-}
-
-//
-// INT16 Addition
-//
-#define RtlInt16Add RtlShortAdd
-
-//
-// INT Addition
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntAdd(
- _In_ INT iAugend,
- _In_ INT iAddend,
- _Out_ _Deref_out_range_(==, iAugend + iAddend) INT* piResult
- )
-{
- C_ASSERT(sizeof(LONGLONG) > sizeof(INT));
- return RtlLongLongToInt(((LONGLONG)iAugend) + ((LONGLONG)iAddend), piResult);
-}
-
-//
-// INT32 Addition
-//
-#define RtlInt32Add RtlIntAdd
-
-//
-// INT_PTR addition
-//
-#ifdef _WIN64
-#define RtlIntPtrAdd RtlLongLongAdd
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntPtrAdd(
- _In_ INT_PTR iAugend,
- _In_ INT_PTR iAddend,
- _Out_ _Deref_out_range_(==, iAugend + iAddend) INT_PTR* piResult
- )
-{
- C_ASSERT(sizeof(LONGLONG) > sizeof(INT_PTR));
- return RtlLongLongToIntPtr(((LONGLONG)iAugend) + ((LONGLONG)iAddend), piResult);
-}
-#endif
-
-//
-// LONG Addition
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongAdd(
- _In_ LONG lAugend,
- _In_ LONG lAddend,
- _Out_ _Deref_out_range_(==, lAugend + lAddend) LONG* plResult
- )
-{
- C_ASSERT(sizeof(LONGLONG) > sizeof(LONG));
- return RtlLongLongToLong(((LONGLONG)lAugend) + ((LONGLONG)lAddend), plResult);
-}
-
-//
-// LONG32 Addition
-//
-#define RtlLong32Add RtlIntAdd
-
-//
-// LONG_PTR Addition
-//
-#ifdef _WIN64
-#define RtlLongPtrAdd RtlLongLongAdd
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongPtrAdd(
- _In_ LONG_PTR lAugend,
- _In_ LONG_PTR lAddend,
- _Out_ _Deref_out_range_(==, lAugend + lAddend) LONG_PTR* plResult
- )
-{
- C_ASSERT(sizeof(LONGLONG) > sizeof(LONG_PTR));
- return RtlLongLongToLongPtr(((LONGLONG)lAugend) + ((LONGLONG)lAddend), plResult);
-}
-#endif
-
-//
-// LONGLONG Addition
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongLongAdd(
- _In_ LONGLONG llAugend,
- _In_ LONGLONG llAddend,
- _Out_ _Deref_out_range_(==, llAugend + llAddend) LONGLONG* pllResult
- )
-{
- NTSTATUS status;
- LONGLONG llResult = llAugend + llAddend;
-
- //
- // Adding positive to negative never overflows.
- // If you add two positive numbers, you expect a positive result.
- // If you add two negative numbers, you expect a negative result.
- // Overflow if inputs are the same sign and output is not that sign.
- //
- if (((llAugend < 0) == (llAddend < 0)) &&
- ((llAugend < 0) != (llResult < 0)))
- {
- *pllResult = LONGLONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
- else
- {
- *pllResult = llResult;
- status = STATUS_SUCCESS;
- }
-
- return status;
-}
-
-//
-// LONG64 Addition
-//
-#define RtlLong64Add RtlLongLongAdd
-
-//
-// RtlINT64 Addition
-//
-#define RtlInt64Add RtlLongLongAdd
-
-//
-// ptrdiff_t Addition
-//
-#ifdef _WIN64
-#define RtlPtrdiffTAdd RtlLongLongAdd
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlPtrdiffTAdd(
- _In_ ptrdiff_t Augend,
- _In_ ptrdiff_t Addend,
- _Out_ _Deref_out_range_(==, Augend + Addend) ptrdiff_t* pResult
- )
-{
- C_ASSERT(sizeof(LONGLONG) > sizeof(ptrdiff_t));
- return RtlLongLongToPtrdiffT(((LONGLONG)Augend) + ((LONGLONG)Addend), pResult);
-}
-#endif
-
-//
-// SSIZE_T Addition
-//
-#ifdef _WIN64
-#define RtlSSIZETAdd RtlLongLongAdd
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlSSIZETAdd(
- _In_ SSIZE_T Augend,
- _In_ SSIZE_T Addend,
- _Out_ _Deref_out_range_(==, Augend + Addend) SSIZE_T* pResult
- )
-{
- C_ASSERT(sizeof(LONGLONG) > sizeof(SSIZE_T));
- return RtlLongLongToSSIZET(((LONGLONG)Augend) + ((LONGLONG)Addend), pResult);
-}
-#endif
-
-
-//=============================================================================
-// Signed subtraction functions
-//=============================================================================
-
-//
-// INT8 Subtraction
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlInt8Sub(
- _In_ INT8 i8Minuend,
- _In_ INT8 i8Subtrahend,
- _Out_ _Deref_out_range_(==, i8Minuend - i8Subtrahend) INT8* pi8Result
- )
-{
- C_ASSERT(sizeof(LONG) > sizeof(INT8));
- return RtlLongToInt8(((LONG)i8Minuend) - ((LONG)i8Subtrahend), pi8Result);
-}
-
-//
-// SHORT Subtraction
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlShortSub(
- _In_ SHORT sMinuend,
- _In_ SHORT sSubtrahend,
- _Out_ _Deref_out_range_(==, sMinuend - sSubtrahend) SHORT* psResult
- )
-{
- C_ASSERT(sizeof(LONG) > sizeof(SHORT));
- return RtlLongToShort(((LONG)sMinuend) - ((LONG)sSubtrahend), psResult);
-}
-
-//
-// INT16 Subtraction
-//
-#define RtlInt16Sub RtlShortSub
-
-//
-// INT Subtraction
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntSub(
- _In_ INT iMinuend,
- _In_ INT iSubtrahend,
- _Out_ _Deref_out_range_(==, iMinuend - iSubtrahend) INT* piResult
- )
-{
- C_ASSERT(sizeof(LONGLONG) > sizeof(INT));
- return RtlLongLongToInt(((LONGLONG)iMinuend) - ((LONGLONG)iSubtrahend), piResult);
-}
-
-//
-// INT32 Subtraction
-//
-#define RtlInt32Sub RtlIntSub
-
-//
-// INT_PTR Subtraction
-//
-#ifdef _WIN64
-#define RtlIntPtrSub RtlLongLongSub
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntPtrSub(
- _In_ INT_PTR iMinuend,
- _In_ INT_PTR iSubtrahend,
- _Out_ _Deref_out_range_(==, iMinuend - iSubtrahend) INT_PTR* piResult
- )
-{
- C_ASSERT(sizeof(LONGLONG) > sizeof(INT_PTR));
- return RtlLongLongToIntPtr(((LONGLONG)iMinuend) - ((LONGLONG)iSubtrahend), piResult);
-}
-#endif
-
-//
-// LONG Subtraction
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongSub(
- _In_ LONG lMinuend,
- _In_ LONG lSubtrahend,
- _Out_ _Deref_out_range_(==, lMinuend - lSubtrahend) LONG* plResult
- )
-{
- C_ASSERT(sizeof(LONGLONG) > sizeof(LONG));
- return RtlLongLongToLong(((LONGLONG)lMinuend) - ((LONGLONG)lSubtrahend), plResult);
-}
-
-//
-// LONG32 Subtraction
-//
-#define RtlLong32Sub RtlIntSub
-
-//
-// LONG_PTR Subtraction
-//
-#ifdef _WIN64
-#define RtlLongPtrSub RtlLongLongSub
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongPtrSub(
- _In_ LONG_PTR lMinuend,
- _In_ LONG_PTR lSubtrahend,
- _Out_ _Deref_out_range_(==, lMinuend - lSubtrahend) LONG_PTR* plResult
- )
-{
- C_ASSERT(sizeof(LONGLONG) > sizeof(LONG_PTR));
- return RtlLongLongToLongPtr(((LONGLONG)lMinuend) - ((LONGLONG)lSubtrahend), plResult);
-}
-#endif
-
-//
-// RtlLongLongSub
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongLongSub(
- _In_ LONGLONG llMinuend,
- _In_ LONGLONG llSubtrahend,
- _Out_ _Deref_out_range_(==, llMinuend - llSubtrahend) LONGLONG* pllResult
- )
-{
- NTSTATUS status;
- LONGLONG llResult = llMinuend - llSubtrahend;
-
- //
- // Subtracting a positive number from a positive number never overflows.
- // Subtracting a negative number from a negative number never overflows.
- // If you subtract a negative number from a positive number, you expect a positive result.
- // If you subtract a positive number from a negative number, you expect a negative result.
- // Overflow if inputs vary in sign and the output does not have the same sign as the first input.
- //
- if (((llMinuend < 0) != (llSubtrahend < 0)) &&
- ((llMinuend < 0) != (llResult < 0)))
- {
- *pllResult = LONGLONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
- else
- {
- *pllResult = llResult;
- status = STATUS_SUCCESS;
- }
-
- return status;
-}
-
-//
-// LONG64 Subtraction
-//
-#define RtlLong64Sub RtlLongLongSub
-
-//
-// RtlINT64 Subtraction
-//
-#define RtlInt64Sub RtlLongLongSub
-
-//
-// ptrdiff_t Subtraction
-//
-#ifdef _WIN64
-#define RtlPtrdiffTSub RtlLongLongSub
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlPtrdiffTSub(
- _In_ ptrdiff_t Minuend,
- _In_ ptrdiff_t Subtrahend,
- _Out_ _Deref_out_range_(==, Minuend - Subtrahend) ptrdiff_t* pResult
- )
-{
- C_ASSERT(sizeof(LONGLONG) > sizeof(ptrdiff_t));
- return RtlLongLongToPtrdiffT(((LONGLONG)Minuend) - ((LONGLONG)Subtrahend), pResult);
-}
-#endif
-
-//
-// SSIZE_T Subtraction
-//
-#ifdef _WIN64
-#define RtlSSIZETSub RtlLongLongSub
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlSSIZETSub(
- _In_ SSIZE_T Minuend,
- _In_ SSIZE_T Subtrahend,
- _Out_ _Deref_out_range_(==, Minuend - Subtrahend) SSIZE_T* pResult)
-{
- C_ASSERT(sizeof(LONGLONG) > sizeof(SSIZE_T));
- return RtlLongLongToSSIZET(((LONGLONG)Minuend) - ((LONGLONG)Subtrahend), pResult);
-}
-#endif
-
-
-//=============================================================================
-// Signed multiplication functions
-//=============================================================================
-
-//
-// INT8 multiplication
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlInt8Mult(
- _In_ INT8 i8Multiplicand,
- _In_ INT8 i8Multiplier,
- _Out_ _Deref_out_range_(==, i8Multiplicand * i8Multiplier) INT8* pi8Result
- )
-{
- C_ASSERT(sizeof(LONG) > sizeof(INT8));
- return RtlLongToInt8(((LONG)i8Multiplier) * ((LONG)i8Multiplicand), pi8Result);
-}
-
-//
-// SHORT multiplication
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlShortMult(
- _In_ SHORT sMultiplicand,
- _In_ SHORT sMultiplier,
- _Out_ _Deref_out_range_(==, sMultiplicand * sMultiplier) SHORT* psResult
- )
-{
- C_ASSERT(sizeof(LONG) > sizeof(SHORT));
- return RtlLongToShort(((LONG)sMultiplicand) * ((LONG)sMultiplier), psResult);
-}
-
-//
-// INT16 multiplication
-//
-#define RtlInt16Mult RtlShortMult
-
-//
-// INT multiplication
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntMult(
- _In_ INT iMultiplicand,
- _In_ INT iMultiplier,
- _Out_ _Deref_out_range_(==, iMultiplicand * iMultiplier) INT* piResult
- )
-{
- C_ASSERT(sizeof(LONGLONG) > sizeof(INT));
- return RtlLongLongToInt(((LONGLONG)iMultiplicand) * ((LONGLONG)iMultiplier), piResult);
-}
-
-//
-// INT32 multiplication
-//
-#define RtlInt32Mult RtlIntMult
-
-//
-// INT_PTR multiplication
-//
-#ifdef _WIN64
-#define RtlIntPtrMult RtlLongLongMult
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlIntPtrMult(
- _In_ INT_PTR iMultiplicand,
- _In_ INT_PTR iMultiplier,
- _Out_ _Deref_out_range_(==, iMultiplicand * iMultiplier) INT_PTR* piResult
- )
-{
- C_ASSERT(sizeof(LONGLONG) > sizeof(INT_PTR));
- return RtlLongLongToIntPtr(((LONGLONG)iMultiplicand) * ((LONGLONG)iMultiplier), piResult);
-}
-#endif
-
-//
-// LONG multiplication
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongMult(
- _In_ LONG lMultiplicand,
- _In_ LONG lMultiplier,
- _Out_ _Deref_out_range_(==, lMultiplicand * lMultiplier) LONG* plResult
- )
-{
- C_ASSERT(sizeof(LONGLONG) > sizeof(LONG));
- return RtlLongLongToLong(((LONGLONG)lMultiplicand) * ((LONGLONG)lMultiplier), plResult);
-}
-
-//
-// LONG32 multiplication
-//
-#define RtlLong32Mult RtlIntMult
-
-//
-// LONG_PTR multiplication
-//
-#ifdef _WIN64
-#define RtlLongPtrMult RtlLongLongMult
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongPtrMult(
- _In_ LONG_PTR lMultiplicand,
- _In_ LONG_PTR lMultiplier,
- _Out_ _Deref_out_range_(==, lMultiplicand * lMultiplier) LONG_PTR* plResult
- )
-{
- C_ASSERT(sizeof(LONGLONG) > sizeof(LONG_PTR));
- return RtlLongLongToLongPtr(((LONGLONG)lMultiplicand) * ((LONGLONG)lMultiplier), plResult);
-}
-#endif
-
-//
-// LONGLONG multiplication
-//
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlLongLongMult(
- _In_ LONGLONG llMultiplicand,
- _In_ LONGLONG llMultiplier,
- _Out_ _Deref_out_range_(==, llMultiplicand * llMultiplier) LONGLONG* pllResult
- )
-{
- NTSTATUS status;
-
-#if defined(_USE_INTRINSIC_MULTIPLY128)
- LONGLONG llResultHigh;
- LONGLONG llResultLow;
-
- llResultLow = Multiply128(llMultiplicand, llMultiplier, &llResultHigh);
-
- if (((llResultLow < 0) && (llResultHigh != -1)) ||
- ((llResultLow >= 0) && (llResultHigh != 0)))
- {
- *pllResult = LONGLONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
- else
- {
- *pllResult = llResultLow;
- status = STATUS_SUCCESS;
- }
-#else // _USE_INTRINSIC_MULTIPLY128
- //
- // Split into sign and magnitude, do unsigned operation, apply sign.
- //
-
- ULONGLONG ullMultiplicand;
- ULONGLONG ullMultiplier;
- ULONGLONG ullResult;
- const ULONGLONG LONGLONG_MIN_MAGNITUDE = ((((ULONGLONG) - (LONGLONG_MIN + 1))) + 1);
-
- if (llMultiplicand < 0)
- {
- //
- // Avoid negating the most negative number.
- //
- ullMultiplicand = ((ULONGLONG)(- (llMultiplicand + 1))) + 1;
- }
- else
- {
- ullMultiplicand = (ULONGLONG)llMultiplicand;
- }
-
- if (llMultiplier < 0)
- {
- //
- // Avoid negating the most negative number.
- //
- ullMultiplier = ((ULONGLONG)(- (llMultiplier + 1))) + 1;
- }
- else
- {
- ullMultiplier = (ULONGLONG)llMultiplier;
- }
-
- status = RtlULongLongMult(ullMultiplicand, ullMultiplier, &ullResult);
- if (NT_SUCCESS(status))
- {
- if ((llMultiplicand < 0) != (llMultiplier < 0))
- {
- if (ullResult > LONGLONG_MIN_MAGNITUDE)
- {
- *pllResult = LONGLONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
- else
- {
- *pllResult = - ((LONGLONG)ullResult);
- }
- }
- else
- {
- if (ullResult > LONGLONG_MAX)
- {
- *pllResult = LONGLONG_ERROR;
- status = STATUS_INTEGER_OVERFLOW;
- }
- else
- {
- *pllResult = (LONGLONG)ullResult;
- }
- }
- }
- else
- {
- *pllResult = LONGLONG_ERROR;
- }
-#endif // _USE_INTRINSIC_MULTIPLY128
-
- return status;
-}
-
-//
-// LONG64 multiplication
-//
-#define RtlLong64Mult RtlLongLongMult
-
-//
-// RtlINT64 multiplication
-//
-#define RtlInt64Mult RtlLongLongMult
-
-//
-// ptrdiff_t multiplication
-//
-#ifdef _WIN64
-#define RtlPtrdiffTMult RtlLongLongMult
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlPtrdiffTMult(
- _In_ ptrdiff_t Multiplicand,
- _In_ ptrdiff_t Multiplier,
- _Out_ _Deref_out_range_(==, Multiplicand * Multiplier) ptrdiff_t* pResult
- )
-{
- C_ASSERT(sizeof(LONGLONG) > sizeof(ptrdiff_t));
- return RtlLongLongToPtrdiffT(((LONGLONG)Multiplicand) * ((LONGLONG)Multiplier), pResult);
-}
-#endif
-
-//
-// SSIZE_T multiplication
-//
-#ifdef _WIN64
-#define RtlSSIZETMult RtlLongLongMult
-#else
-_Must_inspect_result_
-__inline
-NTSTATUS
-RtlSSIZETMult(
- _In_ SSIZE_T Multiplicand,
- _In_ SSIZE_T Multiplier,
- _Out_ _Deref_out_range_(==, Multiplicand * Multiplier) SSIZE_T* pResult
- )
-{
- C_ASSERT(sizeof(LONGLONG) > sizeof(SSIZE_T));
- return RtlLongLongToSSIZET(((LONGLONG)Multiplicand) * ((LONGLONG)Multiplier), pResult);
-}
-#endif
-
-#endif // ENABLE_INTSAFE_SIGNED_FUNCTIONS
-
-//
-// Macros that are no longer used in this header but which clients may
-// depend on being defined here.
-//
-#ifndef LOWORD
-#define LOWORD(l) ((WORD)(((DWORD_PTR)(l)) & 0xffff))
-#endif
-#ifndef HIWORD
-#define HIWORD(l) ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff))
-#endif
-#ifndef LODWORD
-#define LODWORD(_qw) ((DWORD)(_qw))
-#endif
-#ifndef HIDWORD
-#define HIDWORD(_qw) ((DWORD)(((_qw) >> 32) & 0xffffffff))
-#endif
-
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM | WINAPI_PARTITION_GAMES) */
-#pragma endregion
-
-#endif // _NTINTSAFE_H_INCLUDED_