diff --git a/README.md b/README.md
index f65720c..b7338ef 100644
--- a/README.md
+++ b/README.md
@@ -55,6 +55,7 @@ You're free to use this in any manner you please. You do not need to use this en
| HashFileByMsiFileHashTable | smelly__vx | Cryptography Related |
| GetLastErrorFromTeb | smelly__vx | Error Handling |
| GetLastNtStatusFromTeb | smelly__vx | Error Handling |
+| RtlNtStatusToDosErrorViaImport | ReactOS | Error Handling |
| GetLastErrorFromTeb | smelly__vx | Error Handling |
| SetLastErrorInTeb | smelly__vx | Error Handling |
| SetLastNtStatusInTeb | smelly__vx | Error Handling |
diff --git a/VX-API/ByteArrayToCharArray.cpp b/VX-API/ByteArrayToCharArray.cpp
index e24946c..48df580 100644
--- a/VX-API/ByteArrayToCharArray.cpp
+++ b/VX-API/ByteArrayToCharArray.cpp
@@ -1,6 +1,6 @@
#include "StringManipulation.h"
-VOID ByteArrayToCharArrayA(PCHAR Destination, PBYTE Source, DWORD Length)
+VOID ByteArrayToCharArrayA(_Inout_ PCHAR Destination, _In_ PBYTE Source, _In_ DWORD Length)
{
for (DWORD dwX = 0; dwX < Length; dwX++)
{
@@ -8,7 +8,7 @@ VOID ByteArrayToCharArrayA(PCHAR Destination, PBYTE Source, DWORD Length)
}
}
-VOID ByteArrayToCharArrayW(PWCHAR Destination, PBYTE Source, DWORD Length)
+VOID ByteArrayToCharArrayW(_Inout_ PWCHAR Destination, _In_ PBYTE Source, _In_ DWORD Length)
{
for (DWORD dwX = 0; dwX < Length; dwX++)
{
diff --git a/VX-API/CaplockString.cpp b/VX-API/CaplockString.cpp
index 2df152c..f63f78b 100644
--- a/VX-API/CaplockString.cpp
+++ b/VX-API/CaplockString.cpp
@@ -1,6 +1,6 @@
#include "StringManipulation.h"
-PCHAR CaplockStringA(PCHAR Ptr)
+PCHAR CaplockStringA(_In_ PCHAR Ptr)
{
PCHAR sv = Ptr;
while (*sv != '\0')
@@ -13,7 +13,7 @@ PCHAR CaplockStringA(PCHAR Ptr)
return Ptr;
}
-PWCHAR CaplockStringW(PWCHAR Ptr)
+PWCHAR CaplockStringW(_In_ PWCHAR Ptr)
{
PWCHAR sv = Ptr;
while (*sv != '\0')
diff --git a/VX-API/CharArrayToByteArray.cpp b/VX-API/CharArrayToByteArray.cpp
index 87cd668..d5c3262 100644
--- a/VX-API/CharArrayToByteArray.cpp
+++ b/VX-API/CharArrayToByteArray.cpp
@@ -1,6 +1,6 @@
#include "StringManipulation.h"
-VOID CharArrayToByteArrayA(PCHAR Char, PBYTE Byte, DWORD Length)
+VOID CharArrayToByteArrayA(_In_ PCHAR Char, _Inout_ PBYTE Byte, _In_ DWORD Length)
{
for (DWORD dwX = 0; dwX < Length; dwX++)
{
@@ -8,7 +8,7 @@ VOID CharArrayToByteArrayA(PCHAR Char, PBYTE Byte, DWORD Length)
}
}
-VOID CharArrayToByteArrayW(PWCHAR Char, PBYTE Byte, DWORD Length)
+VOID CharArrayToByteArrayW(_In_ PWCHAR Char, _Inout_ PBYTE Byte, _In_ DWORD Length)
{
for (DWORD dwX = 0; dwX < Length; dwX++)
{
diff --git a/VX-API/CharStringToWCharString.cpp b/VX-API/CharStringToWCharString.cpp
index 0f77e69..7def2e9 100644
--- a/VX-API/CharStringToWCharString.cpp
+++ b/VX-API/CharStringToWCharString.cpp
@@ -1,6 +1,6 @@
#include "StringManipulation.h"
-SIZE_T CharStringToWCharString(PWCHAR Destination, PCHAR Source, SIZE_T MaximumAllowed)
+SIZE_T CharStringToWCharString(_Inout_ PWCHAR Destination, _In_ PCHAR Source, SIZE_T _In_ MaximumAllowed)
{
INT Length = (INT)MaximumAllowed;
diff --git a/VX-API/CopyMemoryEx.cpp b/VX-API/CopyMemoryEx.cpp
index 2f660be..f0e6a7b 100644
--- a/VX-API/CopyMemoryEx.cpp
+++ b/VX-API/CopyMemoryEx.cpp
@@ -1,6 +1,6 @@
#include "StringManipulation.h"
-PVOID CopyMemoryEx(PVOID Destination, CONST PVOID Source, SIZE_T Length)
+PVOID CopyMemoryEx(_Inout_ PVOID Destination, _In_ CONST PVOID Source, _In_ SIZE_T Length)
{
PBYTE D = (PBYTE)Destination;
PBYTE S = (PBYTE)Source;
diff --git a/VX-API/GetCurrentWindowText.cpp b/VX-API/GetCurrentWindowTextFromUserProcessParameter.cpp
similarity index 100%
rename from VX-API/GetCurrentWindowText.cpp
rename to VX-API/GetCurrentWindowTextFromUserProcessParameter.cpp
diff --git a/VX-API/Main.cpp b/VX-API/Main.cpp
index 262fae5..e111e04 100644
--- a/VX-API/Main.cpp
+++ b/VX-API/Main.cpp
@@ -14,12 +14,13 @@ TODO:
- Profit!!!!11
KNOWN ISSUES
- - Implement RtlNtStatusToDosError
- Work on In / Out / Inout in function calls
- Various logic improvements
*/
+
+
int main(VOID)
{
DWORD dwError = ERROR_SUCCESS;
diff --git a/VX-API/RtlNtStatusToDosErrorViaImport.cpp b/VX-API/RtlNtStatusToDosErrorViaImport.cpp
new file mode 100644
index 0000000..2d42c2a
--- /dev/null
+++ b/VX-API/RtlNtStatusToDosErrorViaImport.cpp
@@ -0,0 +1,23 @@
+#include "Win32Helper.h"
+
+DWORD RtlNtStatusToDosErrorViaImport(_In_ NTSTATUS Status)
+{
+ typedef ULONG(NTAPI* RTLNTSTATUSTODOSERROR)(NTSTATUS);
+ RTLNTSTATUSTODOSERROR RtlNtStatusToDosError;
+ HMODULE hModule = NULL;
+ DWORD dwError = ERROR_SUCCESS;
+
+ hModule = GetModuleHandleEx2W(L"ntdll.dll");
+ if (hModule == NULL)
+ return -1;
+
+ RtlNtStatusToDosError = (RTLNTSTATUSTODOSERROR)GetProcAddressA((DWORD64)hModule, "RtlNtStatusToDosError");
+ if (!RtlNtStatusToDosError)
+ return -1;
+
+ dwError = RtlNtStatusToDosError(Status);
+
+ RtlNtStatusToDosError = NULL;
+
+ return dwError;
+}
\ No newline at end of file
diff --git a/VX-API/SecureStringCopy.cpp b/VX-API/SecureStringCopy.cpp
index e7daca1..aec2c90 100644
--- a/VX-API/SecureStringCopy.cpp
+++ b/VX-API/SecureStringCopy.cpp
@@ -1,6 +1,6 @@
#include "StringManipulation.h"
-PCHAR SecureStringCopyA(PCHAR String1, LPCSTR String2, SIZE_T Size)
+PCHAR SecureStringCopyA(_Inout_ PCHAR String1, _In_ LPCSTR String2, _In_ SIZE_T Size)
{
PCHAR pChar = String1;
@@ -9,7 +9,7 @@ PCHAR SecureStringCopyA(PCHAR String1, LPCSTR String2, SIZE_T Size)
return pChar;
}
-PWCHAR SecureStringCopyW(PWCHAR String1, LPCWSTR String2, SIZE_T Size)
+PWCHAR SecureStringCopyW(_Inout_ PWCHAR String1, _In_ LPCWSTR String2, _In_ SIZE_T Size)
{
PWCHAR pChar = String1;
diff --git a/VX-API/StringCompare.cpp b/VX-API/StringCompare.cpp
index 780df7f..ea85d79 100644
--- a/VX-API/StringCompare.cpp
+++ b/VX-API/StringCompare.cpp
@@ -1,6 +1,6 @@
#include "StringManipulation.h"
-INT StringCompareA(LPCSTR String1, LPCSTR String2)
+INT StringCompareA(_In_ LPCSTR String1, _In_ LPCSTR String2)
{
for (; *String1 == *String2; String1++, String2++)
{
@@ -11,7 +11,7 @@ INT StringCompareA(LPCSTR String1, LPCSTR String2)
return ((*(LPCSTR)String1 < *(LPCSTR)String2) ? -1 : +1);
}
-INT StringCompareW(LPCWSTR String1, LPCWSTR String2)
+INT StringCompareW(_In_ LPCWSTR String1, _In_ LPCWSTR String2)
{
for (; *String1 == *String2; String1++, String2++)
{
diff --git a/VX-API/StringConcat.cpp b/VX-API/StringConcat.cpp
index b063450..e39d92b 100644
--- a/VX-API/StringConcat.cpp
+++ b/VX-API/StringConcat.cpp
@@ -1,13 +1,13 @@
#include "StringManipulation.h"
-PWCHAR StringConcatW(PWCHAR String, PWCHAR String2)
+PWCHAR StringConcatW(_Inout_ PWCHAR String, _In_ PWCHAR String2)
{
StringCopyW(&String[StringLengthW(String)], String2);
return String;
}
-PCHAR StringConcatA(PCHAR String, PCHAR String2)
+PCHAR StringConcatA(_Inout_ PCHAR String, _In_ PCHAR String2)
{
StringCopyA(&String[StringLengthA(String)], String2);
diff --git a/VX-API/StringCopy.cpp b/VX-API/StringCopy.cpp
index de6214b..226c9de 100644
--- a/VX-API/StringCopy.cpp
+++ b/VX-API/StringCopy.cpp
@@ -1,6 +1,6 @@
#include "StringManipulation.h"
-PCHAR StringCopyA(PCHAR String1, PCHAR String2)
+PCHAR StringCopyA(_Inout_ PCHAR String1, _In_ PCHAR String2)
{
PCHAR p = String1;
@@ -9,7 +9,7 @@ PCHAR StringCopyA(PCHAR String1, PCHAR String2)
return String1;
}
-PWCHAR StringCopyW(PWCHAR String1, PWCHAR String2)
+PWCHAR StringCopyW(_Inout_ PWCHAR String1, _In_ PWCHAR String2)
{
PWCHAR p = String1;
diff --git a/VX-API/StringFindSubstring.cpp b/VX-API/StringFindSubstring.cpp
index 564e45a..dc54439 100644
--- a/VX-API/StringFindSubstring.cpp
+++ b/VX-API/StringFindSubstring.cpp
@@ -36,7 +36,7 @@ INT StringCompareStringRegionW(PWCHAR String1, PWCHAR String2, SIZE_T Count)
return 0;
}
-PCHAR StringFindSubstringA(PCHAR String1, PCHAR String2)
+PCHAR StringFindSubstringA(_In_ PCHAR String1, _In_ PCHAR String2)
{
PCHAR pPointer = String1;
DWORD Length = (DWORD)StringLengthA(String2);
@@ -50,7 +50,7 @@ PCHAR StringFindSubstringA(PCHAR String1, PCHAR String2)
return NULL;
}
-PWCHAR StringFindSubstringW(PWCHAR String1, PWCHAR String2)
+PWCHAR StringFindSubstringW(_In_ PWCHAR String1, _In_ PWCHAR String2)
{
PWCHAR pPointer = String1;
DWORD Length = (DWORD)StringLengthW(String2);
diff --git a/VX-API/StringLength.cpp b/VX-API/StringLength.cpp
index d80295b..0960bac 100644
--- a/VX-API/StringLength.cpp
+++ b/VX-API/StringLength.cpp
@@ -1,6 +1,6 @@
#include "StringManipulation.h"
-SIZE_T StringLengthA(LPCSTR String)
+SIZE_T StringLengthA(_In_ LPCSTR String)
{
LPCSTR String2;
@@ -9,7 +9,7 @@ SIZE_T StringLengthA(LPCSTR String)
return (String2 - String);
}
-SIZE_T StringLengthW(LPCWSTR String)
+SIZE_T StringLengthW(_In_ LPCWSTR String)
{
LPCWSTR String2;
diff --git a/VX-API/StringLocateChar.cpp b/VX-API/StringLocateChar.cpp
index 52c62f1..fcbec3e 100644
--- a/VX-API/StringLocateChar.cpp
+++ b/VX-API/StringLocateChar.cpp
@@ -1,6 +1,6 @@
#include "StringManipulation.h"
-PCHAR StringLocateCharA(PCHAR String, INT Character)
+PCHAR StringLocateCharA(_Inout_ PCHAR String, _In_ INT Character)
{
do
{
@@ -12,7 +12,7 @@ PCHAR StringLocateCharA(PCHAR String, INT Character)
return NULL;
}
-PWCHAR StringLocateCharW(PWCHAR String, INT Character)
+PWCHAR StringLocateCharW(_Inout_ PWCHAR String, _In_ INT Character)
{
do
{
diff --git a/VX-API/StringManipulation.h b/VX-API/StringManipulation.h
index 2a68fa7..7e52939 100644
--- a/VX-API/StringManipulation.h
+++ b/VX-API/StringManipulation.h
@@ -1,35 +1,35 @@
#pragma once
#include "Internal.h"
-PCHAR CaplockStringA(PCHAR Ptr);
-PWCHAR CaplockStringW(PWCHAR Ptr);
-PVOID CopyMemoryEx(PVOID Destination, CONST PVOID Source, SIZE_T Length);
-VOID ZeroMemoryEx(PVOID Destination, SIZE_T Size);
-PCHAR SecureStringCopyA(PCHAR String1, LPCSTR String2, SIZE_T Size);
-PWCHAR SecureStringCopyW(PWCHAR String1, LPCWSTR String2, SIZE_T Size);
-INT StringCompareA(LPCSTR String1, LPCSTR String2);
-INT StringCompareW(LPCWSTR String1, LPCWSTR String2);
-PWCHAR StringConcatW(PWCHAR String, PWCHAR String2);
-PCHAR StringConcatA(PCHAR String, PCHAR String2);
-PCHAR StringCopyA(PCHAR String1, PCHAR String2);
-PWCHAR StringCopyW(PWCHAR String1, PWCHAR String2);
-PCHAR StringFindSubstringA(PCHAR String1, PCHAR String2);
-PWCHAR StringFindSubstringW(PWCHAR String1, PWCHAR String2);
-SIZE_T StringLengthA(LPCSTR String);
-SIZE_T StringLengthW(LPCWSTR String);
-PCHAR StringLocateCharA(PCHAR String, INT Character);
-PWCHAR StringLocateCharW(PWCHAR String, INT Character);
-PCHAR StringRemoveSubstringA(PCHAR String, CONST PCHAR Substring);
-PWCHAR StringRemoveSubstringW(PWCHAR String, CONST PWCHAR Substring);
-PCHAR StringTerminateStringAtCharA(PCHAR String, INT Character);
-PWCHAR StringTerminateStringAtCharW(PWCHAR String, INT Character);
-PCHAR StringTokenA(PCHAR String, CONST PCHAR Delim);
-PWCHAR StringTokenW(PWCHAR String, CONST PWCHAR Delim);
+PCHAR CaplockStringA(_In_ PCHAR Ptr);
+PWCHAR CaplockStringW(_In_ PWCHAR Ptr);
+PVOID CopyMemoryEx(_Inout_ PVOID Destination, _In_ CONST PVOID Source, _In_ SIZE_T Length);
+VOID ZeroMemoryEx(_Inout_ PVOID Destination, _In_ SIZE_T Size);
+PCHAR SecureStringCopyA(_Inout_ PCHAR String1, _In_ LPCSTR String2, _In_ SIZE_T Size);
+PWCHAR SecureStringCopyW(_Inout_ PWCHAR String1, _In_ LPCWSTR String2, _In_ SIZE_T Size);
+INT StringCompareA(_In_ LPCSTR String1, _In_ LPCSTR String2);
+INT StringCompareW(_In_ LPCWSTR String1, _In_ LPCWSTR String2);
+PWCHAR StringConcatW(_Inout_ PWCHAR String, _In_ PWCHAR String2);
+PCHAR StringConcatA(_Inout_ PCHAR String, _In_ PCHAR String2);
+PCHAR StringCopyA(_Inout_ PCHAR String1, _In_ PCHAR String2);
+PWCHAR StringCopyW(_Inout_ PWCHAR String1, _In_ PWCHAR String2);
+PCHAR StringFindSubstringA(_In_ PCHAR String1, _In_ PCHAR String2);
+PWCHAR StringFindSubstringW(_In_ PWCHAR String1, _In_ PWCHAR String2);
+SIZE_T StringLengthA(_In_ LPCSTR String);
+SIZE_T StringLengthW(_In_ LPCWSTR String);
+PCHAR StringLocateCharA(_Inout_ PCHAR String, _In_ INT Character);
+PWCHAR StringLocateCharW(_Inout_ PWCHAR String, _In_ INT Character);
+PCHAR StringRemoveSubstringA(_Inout_ PCHAR String, _In_ CONST PCHAR Substring);
+PWCHAR StringRemoveSubstringW(_Inout_ PWCHAR String, _In_ CONST PWCHAR Substring);
+PCHAR StringTerminateStringAtCharA(_Inout_ PCHAR String, _In_ INT Character);
+PWCHAR StringTerminateStringAtCharW(_Inout_ PWCHAR String, _In_ INT Character);
+PCHAR StringTokenA(_In_ PCHAR String, _In_ CONST PCHAR Delim);
+PWCHAR StringTokenW(_In_ PWCHAR String, _In_ CONST PWCHAR Delim);
VOID CharArrayToByteArrayA(PCHAR Char, PBYTE Byte, DWORD Length);
VOID CharArrayToByteArrayW(PWCHAR Char, PBYTE Byte, DWORD Length);
-VOID RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString);
-VOID RtlInitEmptyUnicodeString(PUNICODE_STRING UnicodeString, PWCHAR Buffer, USHORT BufferSize);
-SIZE_T CharStringToWCharString(PWCHAR Destination, PCHAR Source, SIZE_T MaximumAllowed);
-SIZE_T WCharStringToCharString(PCHAR Destination, PWCHAR Source, SIZE_T MaximumAllowed);
-VOID ByteArrayToCharArrayA(PCHAR Destination, PBYTE Source, DWORD Length);
-VOID ByteArrayToCharArrayW(PWCHAR Destination, PBYTE Source, DWORD Length);
\ No newline at end of file
+VOID RtlInitUnicodeString(_Inout_ PUNICODE_STRING DestinationString, _In_ PCWSTR SourceString);
+VOID RtlInitEmptyUnicodeString(_Inout_ PUNICODE_STRING UnicodeString, _In_ PWCHAR Buffer, _In_ USHORT BufferSize);
+SIZE_T CharStringToWCharString(_Inout_ PWCHAR Destination, _In_ PCHAR Source, _In_ SIZE_T MaximumAllowed);
+SIZE_T WCharStringToCharString(_Inout_ PCHAR Destination, _In_ PWCHAR Source, _In_ SIZE_T MaximumAllowed);
+VOID ByteArrayToCharArrayA(_Inout_ PCHAR Destination, _In_ PBYTE Source, _In_ DWORD Length);
+VOID ByteArrayToCharArrayW(_Inout_ PWCHAR Destination, _In_ PBYTE Source, _In_ DWORD Length);
\ No newline at end of file
diff --git a/VX-API/StringRemoveSubstring.cpp b/VX-API/StringRemoveSubstring.cpp
index abee2ab..d947390 100644
--- a/VX-API/StringRemoveSubstring.cpp
+++ b/VX-API/StringRemoveSubstring.cpp
@@ -1,6 +1,6 @@
#include "StringManipulation.h"
-PCHAR StringRemoveSubstringA(PCHAR String, CONST PCHAR Substring)
+PCHAR StringRemoveSubstringA(_Inout_ PCHAR String, _In_ CONST PCHAR Substring)
{
DWORD Length = (DWORD)StringLengthA(Substring);
PCHAR pPointer = String;
@@ -14,7 +14,7 @@ PCHAR StringRemoveSubstringA(PCHAR String, CONST PCHAR Substring)
return String;
}
-PWCHAR StringRemoveSubstringW(PWCHAR String, CONST PWCHAR Substring)
+PWCHAR StringRemoveSubstringW(_Inout_ PWCHAR String, _In_ CONST PWCHAR Substring)
{
DWORD Length = (DWORD)StringLengthW(Substring);
PWCHAR pPointer = String;
diff --git a/VX-API/StringTerminateStringAtChar.cpp b/VX-API/StringTerminateStringAtChar.cpp
index 965b516..9fd0c76 100644
--- a/VX-API/StringTerminateStringAtChar.cpp
+++ b/VX-API/StringTerminateStringAtChar.cpp
@@ -1,6 +1,6 @@
#include "StringManipulation.h"
-PCHAR StringTerminateStringAtCharA(PCHAR String, INT Character)
+PCHAR StringTerminateStringAtCharA(_Inout_ PCHAR String, _In_ INT Character)
{
DWORD Length = (DWORD)StringLengthA(String);
@@ -16,7 +16,7 @@ PCHAR StringTerminateStringAtCharA(PCHAR String, INT Character)
return NULL;
}
-PWCHAR StringTerminateStringAtCharW(PWCHAR String, INT Character)
+PWCHAR StringTerminateStringAtCharW(_Inout_ PWCHAR String, _In_ INT Character)
{
DWORD Length = (DWORD)StringLengthW(String);
diff --git a/VX-API/StringToken.cpp b/VX-API/StringToken.cpp
index efcf889..2a0620a 100644
--- a/VX-API/StringToken.cpp
+++ b/VX-API/StringToken.cpp
@@ -1,6 +1,6 @@
#include "StringManipulation.h"
-PCHAR StringTokenA(PCHAR String, CONST PCHAR Delim)
+PCHAR StringTokenA(_In_ PCHAR String, _In_ CONST PCHAR Delim)
{
PCHAR Last;
PCHAR SpanP, Token;
@@ -46,7 +46,7 @@ CONTINUE:
}
-PWCHAR StringTokenW(PWCHAR String, CONST PWCHAR Delim)
+PWCHAR StringTokenW(_In_ PWCHAR String, _In_ CONST PWCHAR Delim)
{
PWCHAR Last;
PWCHAR SpanP, Token;
diff --git a/VX-API/VX-API.vcxproj b/VX-API/VX-API.vcxproj
index 902a3c0..1582559 100644
--- a/VX-API/VX-API.vcxproj
+++ b/VX-API/VX-API.vcxproj
@@ -153,7 +153,7 @@
-
+
@@ -199,13 +199,13 @@
-
+
@@ -230,6 +230,9 @@
+
+
+
diff --git a/VX-API/VX-API.vcxproj.filters b/VX-API/VX-API.vcxproj.filters
index 4a90111..aa6df70 100644
--- a/VX-API/VX-API.vcxproj.filters
+++ b/VX-API/VX-API.vcxproj.filters
@@ -222,7 +222,7 @@
Source Files\Windows API Helper Functions\Helper Functions
-
+
Source Files\Windows API Helper Functions\Helper Functions
@@ -312,9 +312,6 @@
Source Files\Windows API Helper Functions\Evasion
-
- Source Files\String Manipulation
-
Source Files\Windows API Helper Functions\Cryptography Related
@@ -342,8 +339,11 @@
Source Files\Windows API Helper Functions\Evasion
-
- Source Files\Windows API Helper Functions\Malicious Capabilities
+
+ Source Files\String Manipulation\String Conversion
+
+
+ Source Files\Windows API Helper Functions\Error Handling
@@ -357,4 +357,7 @@
Header Files
+
+
+
\ No newline at end of file
diff --git a/VX-API/WCharStringToCharString.cpp b/VX-API/WCharStringToCharString.cpp
index 9214e22..c6286ce 100644
--- a/VX-API/WCharStringToCharString.cpp
+++ b/VX-API/WCharStringToCharString.cpp
@@ -1,6 +1,6 @@
#include "StringManipulation.h"
-SIZE_T WCharStringToCharString(PCHAR Destination, PWCHAR Source, SIZE_T MaximumAllowed)
+SIZE_T WCharStringToCharString(_Inout_ PCHAR Destination, _In_ PWCHAR Source, _In_ SIZE_T MaximumAllowed)
{
INT Length = (INT)MaximumAllowed;
diff --git a/VX-API/Win32Helper.h b/VX-API/Win32Helper.h
index a023d06..0d636bb 100644
--- a/VX-API/Win32Helper.h
+++ b/VX-API/Win32Helper.h
@@ -18,6 +18,7 @@ NTSTATUS GetLastNtStatusFromTeb(VOID);
VOID SetLastErrorInTeb(_In_ DWORD ErrorCode);
VOID SetLastNtStatusInTeb(_In_ NTSTATUS Status);
DWORD Win32FromHResult(_In_ HRESULT Result);
+DWORD RtlNtStatusToDosErrorViaImport(_In_ NTSTATUS Status);
//cryptography related
DWORD HashStringDjb2A(_In_ PCHAR String);
diff --git a/VX-API/ZeroMemoryEx.cpp b/VX-API/ZeroMemoryEx.cpp
index 723422b..c8bd3ad 100644
--- a/VX-API/ZeroMemoryEx.cpp
+++ b/VX-API/ZeroMemoryEx.cpp
@@ -1,6 +1,6 @@
#include "StringManipulation.h"
-VOID ZeroMemoryEx(PVOID Destination, SIZE_T Size)
+VOID ZeroMemoryEx(_Inout_ PVOID Destination, _In_ SIZE_T Size)
{
PULONG Dest = (PULONG)Destination;
SIZE_T Count = Size / sizeof(ULONG);