| /* ********************************************************** |
| * Copyright (c) 2011-2014 Google, Inc. All rights reserved. |
| * Copyright (c) 2009-2010 Derek Bruening All rights reserved. |
| * **********************************************************/ |
| |
| /* |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are met: |
| * |
| * * Redistributions of source code must retain the above copyright notice, |
| * this list of conditions and the following disclaimer. |
| * |
| * * 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. |
| * |
| * * Neither the name of Google, Inc. nor the names of its contributors may be |
| * used to endorse or promote products derived from this software without |
| * specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 GOOGLE, INC. OR CONTRIBUTORS 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. |
| */ |
| |
| /* kernel32 and kernelbase redirection routines. |
| * We initially target the union of the imports of C++ apps, msvcrt, |
| * and dbghelp. |
| */ |
| |
| #ifndef _KERNEL32_REDIR_H_ |
| #define _KERNEL32_REDIR_H_ 1 |
| |
| #ifdef _WIN32_WINNT |
| # error Must include kernel32_redir.h before globals.h |
| #endif |
| |
| #define _WIN32_WINNT 0x0600 /* for FILE_INFO_BY_HANDLE_CLASS */ |
| #define WIN32_LEAN_AND_MEAN 1 |
| #include <windows.h> |
| #undef _WIN32_WINNT |
| #undef WIN32_LEAN_AND_MEAN |
| |
| #include "../../globals.h" |
| #include "../../module_shared.h" |
| |
| /********************************************************************** |
| * support older VS versions |
| */ |
| |
| #ifndef __drv_interlocked |
| # define __drv_interlocked /* nothing */ |
| #endif |
| |
| #if _MSC_VER <= 1400 /* VS2005- */ |
| enum { |
| HeapEnableTerminationOnCorruption = 1, |
| }; |
| |
| /* wincon.h */ |
| typedef struct _CONSOLE_READCONSOLE_CONTROL { |
| ULONG nLength; |
| ULONG nInitialChars; |
| ULONG dwCtrlWakeupMask; |
| ULONG dwControlKeyState; |
| } CONSOLE_READCONSOLE_CONTROL, *PCONSOLE_READCONSOLE_CONTROL; |
| |
| /* winbase.h */ |
| typedef enum _FILE_INFO_BY_HANDLE_CLASS { |
| FileBasicInfo, |
| FileStandardInfo, |
| FileNameInfo, |
| FileRenameInfo, |
| FileDispositionInfo, |
| FileAllocationInfo, |
| FileEndOfFileInfo, |
| FileStreamInfo, |
| FileCompressionInfo, |
| FileAttributeTagInfo, |
| FileIdBothDirectoryInfo, |
| FileIdBothDirectoryRestartInfo, |
| FileIoPriorityHintInfo, |
| FileRemoteProtocolInfo, |
| MaximumFileInfoByHandleClass |
| } FILE_INFO_BY_HANDLE_CLASS, *PFILE_INFO_BY_HANDLE_CLASS; |
| #endif |
| |
| #if defined(X64) && !defined(UNWIND_HISTORY_TABLE_SIZE) |
| #define UNWIND_HISTORY_TABLE_SIZE 12 |
| |
| typedef struct _UNWIND_HISTORY_TABLE_ENTRY { |
| DWORD64 ImageBase; |
| PRUNTIME_FUNCTION FunctionEntry; |
| } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY; |
| |
| typedef struct _UNWIND_HISTORY_TABLE { |
| DWORD Count; |
| BYTE LocalHint; |
| BYTE GlobalHint; |
| BYTE Search; |
| BYTE Once; |
| DWORD64 LowAddress; |
| DWORD64 HighAddress; |
| UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE]; |
| } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE; |
| |
| typedef struct _KNONVOLATILE_CONTEXT_POINTERS { |
| union { |
| PM128A FloatingContext[16]; |
| struct { |
| PM128A Xmm0; |
| PM128A Xmm1; |
| PM128A Xmm2; |
| PM128A Xmm3; |
| PM128A Xmm4; |
| PM128A Xmm5; |
| PM128A Xmm6; |
| PM128A Xmm7; |
| PM128A Xmm8; |
| PM128A Xmm9; |
| PM128A Xmm10; |
| PM128A Xmm11; |
| PM128A Xmm12; |
| PM128A Xmm13; |
| PM128A Xmm14; |
| PM128A Xmm15; |
| } DUMMYSTRUCTNAME; |
| } DUMMYUNIONNAME; |
| |
| union { |
| PDWORD64 IntegerContext[16]; |
| struct { |
| PDWORD64 Rax; |
| PDWORD64 Rcx; |
| PDWORD64 Rdx; |
| PDWORD64 Rbx; |
| PDWORD64 Rsp; |
| PDWORD64 Rbp; |
| PDWORD64 Rsi; |
| PDWORD64 Rdi; |
| PDWORD64 R8; |
| PDWORD64 R9; |
| PDWORD64 R10; |
| PDWORD64 R11; |
| PDWORD64 R12; |
| PDWORD64 R13; |
| PDWORD64 R14; |
| PDWORD64 R15; |
| } DUMMYSTRUCTNAME; |
| } DUMMYUNIONNAME2; |
| |
| } KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS; |
| #endif |
| |
| #ifndef RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO |
| # define RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO 0x01000000 |
| #endif |
| |
| /***************************************************************************/ |
| |
| void |
| kernel32_redir_init(void); |
| |
| void |
| kernel32_redir_exit(void); |
| |
| void |
| kernel32_redir_onload(privmod_t *mod); |
| |
| app_pc |
| kernel32_redir_lookup(const char *name); |
| |
| /* Note that we keep the declarations for these redirect_* routines |
| * matching the Windows header style, rather than DR's internal style, |
| * to make it easier to compare to Windows headers and docs. |
| */ |
| |
| /*************************************************************************** |
| * Processes and threads |
| */ |
| |
| void |
| kernel32_redir_init_proc(void); |
| |
| void |
| kernel32_redir_exit_proc(void); |
| |
| void |
| kernel32_redir_onload_proc(privmod_t *mod, strhash_table_t *kernel32_table); |
| |
| DWORD WINAPI |
| redirect_FlsAlloc(PFLS_CALLBACK_FUNCTION cb); |
| |
| HANDLE |
| WINAPI |
| redirect_GetCurrentProcess( |
| VOID |
| ); |
| |
| DWORD |
| WINAPI |
| redirect_GetCurrentProcessId( |
| VOID |
| ); |
| |
| __out |
| HANDLE |
| WINAPI |
| redirect_GetCurrentThread( |
| VOID |
| ); |
| |
| DWORD |
| WINAPI |
| redirect_GetCurrentThreadId( |
| VOID |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_CreateProcessA( |
| __in_opt LPCSTR lpApplicationName, |
| __inout_opt LPSTR lpCommandLine, |
| __in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes, |
| __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes, |
| __in BOOL bInheritHandles, |
| __in DWORD dwCreationFlags, |
| __in_opt LPVOID lpEnvironment, |
| __in_opt LPCSTR lpCurrentDirectory, |
| __in LPSTARTUPINFOA lpStartupInfo, |
| __out LPPROCESS_INFORMATION lpProcessInformation |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_CreateProcessW( |
| __in_opt LPCWSTR lpApplicationName, |
| __inout_opt LPWSTR lpCommandLine, |
| __in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes, |
| __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes, |
| __in BOOL bInheritHandles, |
| __in DWORD dwCreationFlags, |
| __in_opt LPVOID lpEnvironment, |
| __in_opt LPCWSTR lpCurrentDirectory, |
| __in LPSTARTUPINFOW lpStartupInfo, |
| __out LPPROCESS_INFORMATION lpProcessInformation |
| ); |
| |
| __out |
| HANDLE |
| WINAPI |
| redirect_CreateThread( |
| __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes, |
| __in SIZE_T dwStackSize, |
| __in LPTHREAD_START_ROUTINE lpStartAddress, |
| __in_opt LPVOID lpParameter, |
| __in DWORD dwCreationFlags, |
| __out_opt LPDWORD lpThreadId |
| ); |
| |
| DECLSPEC_NORETURN |
| VOID |
| WINAPI |
| redirect_ExitProcess( |
| __in UINT uExitCode |
| ); |
| |
| DECLSPEC_NORETURN |
| VOID |
| WINAPI |
| redirect_ExitThread( |
| __in DWORD dwExitCode |
| ); |
| |
| VOID |
| WINAPI |
| redirect_FatalAppExitA( |
| __in UINT uAction, |
| __in LPCSTR lpMessageText |
| ); |
| |
| DWORD |
| WINAPI |
| redirect_FlsAlloc( |
| __in_opt PFLS_CALLBACK_FUNCTION lpCallback |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_FlsFree( |
| __in DWORD dwFlsIndex |
| ); |
| |
| PVOID |
| WINAPI |
| redirect_FlsGetValue( |
| __in DWORD dwFlsIndex |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_FlsSetValue( |
| __in DWORD dwFlsIndex, |
| __in_opt PVOID lpFlsData |
| ); |
| |
| __out |
| LPSTR |
| WINAPI |
| redirect_GetCommandLineA( |
| VOID |
| ); |
| |
| __out |
| LPWSTR |
| WINAPI |
| redirect_GetCommandLineW( |
| VOID |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_GetExitCodeProcess( |
| __in HANDLE hProcess, |
| __out LPDWORD lpExitCode |
| ); |
| |
| VOID |
| WINAPI |
| redirect_GetStartupInfoA( |
| __out LPSTARTUPINFOA lpStartupInfo |
| ); |
| |
| VOID |
| WINAPI |
| redirect_GetStartupInfoW( |
| __out LPSTARTUPINFOW lpStartupInfo |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_GetThreadContext( |
| __in HANDLE hThread, |
| __inout LPCONTEXT lpContext |
| ); |
| |
| int |
| WINAPI |
| redirect_GetThreadPriority( |
| __in HANDLE hThread |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_GetThreadSelectorEntry( |
| __in HANDLE hThread, |
| __in DWORD dwSelector, |
| __out LPLDT_ENTRY lpSelectorEntry |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_GetThreadTimes( |
| __in HANDLE hThread, |
| __out LPFILETIME lpCreationTime, |
| __out LPFILETIME lpExitTime, |
| __out LPFILETIME lpKernelTime, |
| __out LPFILETIME lpUserTime |
| ); |
| |
| __out |
| HANDLE |
| WINAPI |
| redirect_OpenProcess( |
| __in DWORD dwDesiredAccess, |
| __in BOOL bInheritHandle, |
| __in DWORD dwProcessId |
| ); |
| |
| DWORD |
| WINAPI |
| redirect_ResumeThread( |
| __in HANDLE hThread |
| ); |
| |
| VOID |
| NTAPI |
| redirect_RtlCaptureContext ( |
| __out PCONTEXT ContextRecord |
| ); |
| |
| DWORD |
| WINAPI |
| redirect_SuspendThread( |
| __in HANDLE hThread |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_TerminateProcess( |
| __in HANDLE hProcess, |
| __in UINT uExitCode |
| ); |
| |
| /* XXX i#1229: if DR watches this syscall we should also redirect it */ |
| BOOL |
| WINAPI |
| redirect_TerminateJobObject( |
| __in HANDLE hJob, |
| __in UINT uExitCode |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_TerminateThread( |
| __in HANDLE hThread, |
| __in DWORD dwExitCode |
| ); |
| |
| DWORD |
| WINAPI |
| redirect_TlsAlloc( |
| VOID |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_TlsFree( |
| __in DWORD dwTlsIndex |
| ); |
| |
| LPVOID |
| WINAPI |
| redirect_TlsGetValue( |
| __in DWORD dwTlsIndex |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_TlsSetValue( |
| __in DWORD dwTlsIndex, |
| __in_opt LPVOID lpTlsValue |
| ); |
| |
| /*************************************************************************** |
| * Libraries |
| */ |
| |
| void |
| kernel32_redir_onload_lib(privmod_t *mod); |
| |
| FARPROC |
| WINAPI |
| redirect_DelayLoadFailureHook( |
| __in LPCSTR pszDllName, |
| __in LPCSTR pszProcName |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_FreeLibrary( |
| __in HMODULE hLibModule |
| ); |
| |
| DWORD |
| WINAPI |
| redirect_GetModuleFileNameA( |
| __in_opt HMODULE hModule, |
| __out_ecount_part(nSize, return + 1) LPCH lpFilename, |
| __in DWORD nSize |
| ); |
| |
| DWORD |
| WINAPI |
| redirect_GetModuleFileNameW( |
| __in_opt HMODULE hModule, |
| __out_ecount_part(nSize, return + 1) LPWCH lpFilename, |
| __in DWORD nSize |
| ); |
| |
| __out |
| HMODULE |
| WINAPI |
| redirect_GetModuleHandleA( |
| __in_opt LPCSTR lpModuleName |
| ); |
| |
| __out |
| HMODULE |
| WINAPI |
| redirect_GetModuleHandleW( |
| __in_opt LPCWSTR lpModuleName |
| ); |
| |
| FARPROC |
| WINAPI |
| redirect_GetProcAddress ( |
| __in HMODULE hModule, |
| __in LPCSTR lpProcName |
| ); |
| |
| __out |
| HMODULE |
| WINAPI |
| redirect_LoadLibraryA( |
| __in LPCSTR lpLibFileName |
| ); |
| |
| __out |
| HMODULE |
| WINAPI |
| redirect_LoadLibraryW( |
| __in LPCWSTR lpLibFileName |
| ); |
| |
| __out |
| HMODULE |
| WINAPI |
| redirect_LoadLibraryExA( |
| __in LPCSTR lpLibFileName, |
| __reserved HANDLE hFile, |
| __in DWORD dwFlags |
| ); |
| |
| __out |
| HMODULE |
| WINAPI |
| redirect_LoadLibraryExW( |
| __in LPCWSTR lpLibFileName, |
| __reserved HANDLE hFile, |
| __in DWORD dwFlags |
| ); |
| |
| /*************************************************************************** |
| * Memory |
| */ |
| |
| void |
| kernel32_redir_init_mem(void); |
| |
| void |
| kernel32_redir_exit_mem(void); |
| |
| PVOID |
| WINAPI |
| redirect_DecodePointer( |
| __in_opt PVOID Ptr |
| ); |
| |
| PVOID |
| WINAPI |
| redirect_EncodePointer ( |
| __in_opt PVOID Ptr |
| ); |
| |
| HANDLE |
| WINAPI |
| redirect_GetProcessHeap(VOID); |
| |
| __bcount(dwBytes) |
| LPVOID |
| WINAPI |
| redirect_HeapAlloc( |
| __in HANDLE hHeap, |
| __in DWORD dwFlags, |
| __in SIZE_T dwBytes |
| ); |
| |
| SIZE_T |
| WINAPI |
| redirect_HeapCompact( |
| __in HANDLE hHeap, |
| __in DWORD dwFlags |
| ); |
| |
| HANDLE |
| WINAPI |
| redirect_HeapCreate( |
| __in DWORD flOptions, |
| __in SIZE_T dwInitialSize, |
| __in SIZE_T dwMaximumSize |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_HeapDestroy( |
| __in HANDLE hHeap |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_HeapFree( |
| __inout HANDLE hHeap, |
| __in DWORD dwFlags, |
| __deref LPVOID lpMem |
| ); |
| |
| __bcount(dwBytes) |
| LPVOID |
| WINAPI |
| redirect_HeapReAlloc( |
| __inout HANDLE hHeap, |
| __in DWORD dwFlags, |
| __deref LPVOID lpMem, |
| __in SIZE_T dwBytes |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_HeapSetInformation ( |
| __in_opt HANDLE HeapHandle, |
| __in HEAP_INFORMATION_CLASS HeapInformationClass, |
| __in_bcount_opt(HeapInformationLength) PVOID HeapInformation, |
| __in SIZE_T HeapInformationLength |
| ); |
| |
| SIZE_T |
| WINAPI |
| redirect_HeapSize( |
| __in HANDLE hHeap, |
| __in DWORD dwFlags, |
| __in LPCVOID lpMem |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_HeapValidate( |
| __in HANDLE hHeap, |
| __in DWORD dwFlags, |
| __in_opt LPCVOID lpMem |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_HeapWalk( |
| __in HANDLE hHeap, |
| __inout LPPROCESS_HEAP_ENTRY lpEntry |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_IsBadReadPtr( |
| __in_opt CONST VOID *lp, |
| __in UINT_PTR ucb |
| ); |
| |
| HLOCAL |
| WINAPI |
| redirect_LocalAlloc( |
| __in UINT uFlags, |
| __in SIZE_T uBytes |
| ); |
| |
| HLOCAL |
| WINAPI |
| redirect_LocalFree( |
| __deref HLOCAL hMem |
| ); |
| |
| /* These next 6 Local* routines are not part of the set we're directly |
| * targeting, but we have to provide a complete Local* replacement. |
| */ |
| HLOCAL |
| WINAPI |
| redirect_LocalReAlloc( |
| __in HLOCAL hMem, |
| __in SIZE_T uBytes, |
| __in UINT uFlags |
| ); |
| |
| LPVOID |
| WINAPI |
| redirect_LocalLock( |
| __in HLOCAL hMem |
| ); |
| |
| HLOCAL |
| WINAPI |
| redirect_LocalHandle( |
| __in LPCVOID pMem |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_LocalUnlock( |
| __in HLOCAL hMem |
| ); |
| |
| SIZE_T |
| WINAPI |
| redirect_LocalSize( |
| __in HLOCAL hMem |
| ); |
| |
| UINT |
| WINAPI |
| redirect_LocalFlags( |
| __in HLOCAL hMem |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_ReadProcessMemory( |
| __in HANDLE hProcess, |
| __in LPCVOID lpBaseAddress, |
| __out_bcount_part(nSize, *lpNumberOfBytesRead) LPVOID lpBuffer, |
| __in SIZE_T nSize, |
| __out_opt SIZE_T * lpNumberOfBytesRead |
| ); |
| |
| __bcount(dwSize) |
| LPVOID |
| WINAPI |
| redirect_VirtualAlloc( |
| __in_opt LPVOID lpAddress, |
| __in SIZE_T dwSize, |
| __in DWORD flAllocationType, |
| __in DWORD flProtect |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_VirtualFree( |
| __in LPVOID lpAddress, |
| __in SIZE_T dwSize, |
| __in DWORD dwFreeType |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_VirtualProtect( |
| __in LPVOID lpAddress, |
| __in SIZE_T dwSize, |
| __in DWORD flNewProtect, |
| __out PDWORD lpflOldProtect |
| ); |
| |
| SIZE_T |
| WINAPI |
| redirect_VirtualQuery( |
| __in_opt LPCVOID lpAddress, |
| __out_bcount_part(dwLength, return) PMEMORY_BASIC_INFORMATION lpBuffer, |
| __in SIZE_T dwLength |
| ); |
| |
| SIZE_T |
| WINAPI |
| redirect_VirtualQueryEx( |
| __in HANDLE hProcess, |
| __in_opt LPCVOID lpAddress, |
| __out_bcount_part(dwLength, return) PMEMORY_BASIC_INFORMATION lpBuffer, |
| __in SIZE_T dwLength |
| ); |
| |
| /*************************************************************************** |
| * Files |
| */ |
| |
| void |
| kernel32_redir_init_file(void); |
| |
| void |
| kernel32_redir_exit_file(void); |
| |
| void |
| kernel32_redir_onload_file(privmod_t *mod); |
| |
| BOOL |
| WINAPI |
| redirect_CreateDirectoryA( |
| __in LPCSTR lpPathName, |
| __in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_CreateDirectoryW( |
| __in LPCWSTR lpPathName, |
| __in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_RemoveDirectoryA( |
| __in LPCSTR lpPathName |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_RemoveDirectoryW( |
| __in LPCWSTR lpPathName |
| ); |
| |
| DWORD |
| WINAPI |
| redirect_GetCurrentDirectoryA( |
| __in DWORD nBufferLength, |
| __out_ecount_part_opt(nBufferLength, return + 1) LPSTR lpBuffer |
| ); |
| |
| DWORD |
| WINAPI |
| redirect_GetCurrentDirectoryW( |
| __in DWORD nBufferLength, |
| __out_ecount_part_opt(nBufferLength, return + 1) LPWSTR lpBuffer |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_SetCurrentDirectoryA( |
| __in LPCSTR lpPathName |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_SetCurrentDirectoryW( |
| __in LPCWSTR lpPathName |
| ); |
| |
| HANDLE |
| WINAPI |
| redirect_CreateFileA( |
| __in LPCSTR lpFileName, |
| __in DWORD dwDesiredAccess, |
| __in DWORD dwShareMode, |
| __in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes, |
| __in DWORD dwCreationDisposition, |
| __in DWORD dwFlagsAndAttributes, |
| __in_opt HANDLE hTemplateFile |
| ); |
| |
| __out |
| HANDLE |
| WINAPI |
| redirect_CreateFileW( |
| __in LPCWSTR lpFileName, |
| __in DWORD dwDesiredAccess, |
| __in DWORD dwShareMode, |
| __in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes, |
| __in DWORD dwCreationDisposition, |
| __in DWORD dwFlagsAndAttributes, |
| __in_opt HANDLE hTemplateFile |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_DeleteFileA( |
| __in LPCSTR lpFileName |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_DeleteFileW( |
| __in LPCWSTR lpFileName |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_ReadFile( |
| __in HANDLE hFile, |
| __out_bcount_part(nNumberOfBytesToRead, *lpNumberOfBytesRead) LPVOID lpBuffer, |
| __in DWORD nNumberOfBytesToRead, |
| __out_opt LPDWORD lpNumberOfBytesRead, |
| __inout_opt LPOVERLAPPED lpOverlapped |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_WriteFile( |
| __in HANDLE hFile, |
| __in_bcount(nNumberOfBytesToWrite) LPCVOID lpBuffer, |
| __in DWORD nNumberOfBytesToWrite, |
| __out_opt LPDWORD lpNumberOfBytesWritten, |
| __inout_opt LPOVERLAPPED lpOverlapped |
| ); |
| |
| HANDLE |
| WINAPI |
| redirect_CreateFileMappingA( |
| __in HANDLE hFile, |
| __in_opt LPSECURITY_ATTRIBUTES lpFileMappingAttributes, |
| __in DWORD flProtect, |
| __in DWORD dwMaximumSizeHigh, |
| __in DWORD dwMaximumSizeLow, |
| __in_opt LPCSTR lpName |
| ); |
| |
| HANDLE |
| WINAPI |
| redirect_CreateFileMappingW( |
| __in HANDLE hFile, |
| __in_opt LPSECURITY_ATTRIBUTES lpFileMappingAttributes, |
| __in DWORD flProtect, |
| __in DWORD dwMaximumSizeHigh, |
| __in DWORD dwMaximumSizeLow, |
| __in_opt LPCWSTR lpName |
| ); |
| |
| LPVOID |
| WINAPI |
| redirect_MapViewOfFile( |
| __in HANDLE hFileMappingObject, |
| __in DWORD dwDesiredAccess, |
| __in DWORD dwFileOffsetHigh, |
| __in DWORD dwFileOffsetLow, |
| __in SIZE_T dwNumberOfBytesToMap |
| ); |
| |
| LPVOID |
| WINAPI |
| redirect_MapViewOfFileEx( |
| __in HANDLE hFileMappingObject, |
| __in DWORD dwDesiredAccess, |
| __in DWORD dwFileOffsetHigh, |
| __in DWORD dwFileOffsetLow, |
| __in SIZE_T dwNumberOfBytesToMap, |
| __in_opt LPVOID lpBaseAddress |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_UnmapViewOfFile( |
| __in LPCVOID lpBaseAddress |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_FlushViewOfFile( |
| __in LPCVOID lpBaseAddress, |
| __in SIZE_T dwNumberOfBytesToFlush |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_CreatePipe( |
| __out_ecount_full(1) PHANDLE hReadPipe, |
| __out_ecount_full(1) PHANDLE hWritePipe, |
| __in_opt LPSECURITY_ATTRIBUTES lpPipeAttributes, |
| __in DWORD nSize |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_DeviceIoControl( |
| __in HANDLE hDevice, |
| __in DWORD dwIoControlCode, |
| __in_bcount_opt(nInBufferSize) LPVOID lpInBuffer, |
| __in DWORD nInBufferSize, |
| __out_bcount_part_opt(nOutBufferSize, *lpBytesReturned) LPVOID lpOutBuffer, |
| __in DWORD nOutBufferSize, |
| __out_opt LPDWORD lpBytesReturned, |
| __inout_opt LPOVERLAPPED lpOverlapped |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_CloseHandle( |
| __in HANDLE hObject |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_DuplicateHandle( |
| __in HANDLE hSourceProcessHandle, |
| __in HANDLE hSourceHandle, |
| __in HANDLE hTargetProcessHandle, |
| __deref_out LPHANDLE lpTargetHandle, |
| __in DWORD dwDesiredAccess, |
| __in BOOL bInheritHandle, |
| __in DWORD dwOptions |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_FileTimeToLocalFileTime( |
| __in CONST FILETIME *lpFileTime, |
| __out LPFILETIME lpLocalFileTime |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_LocalFileTimeToFileTime( |
| __in CONST FILETIME *lpLocalFileTime, |
| __out LPFILETIME lpFileTime |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_FileTimeToSystemTime( |
| __in CONST FILETIME *lpFileTime, |
| __out LPSYSTEMTIME lpSystemTime |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_SystemTimeToFileTime( |
| __in CONST SYSTEMTIME *lpSystemTime, |
| __out LPFILETIME lpFileTime |
| ); |
| |
| VOID |
| WINAPI |
| redirect_GetSystemTimeAsFileTime( |
| __out LPFILETIME lpSystemTimeAsFileTime |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_GetFileTime( |
| __in HANDLE hFile, |
| __out_opt LPFILETIME lpCreationTime, |
| __out_opt LPFILETIME lpLastAccessTime, |
| __out_opt LPFILETIME lpLastWriteTime |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_SetFileTime( |
| __in HANDLE hFile, |
| __in_opt CONST FILETIME *lpCreationTime, |
| __in_opt CONST FILETIME *lpLastAccessTime, |
| __in_opt CONST FILETIME *lpLastWriteTime |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_FindClose( |
| __inout HANDLE hFindFile |
| ); |
| |
| HANDLE |
| WINAPI |
| redirect_FindFirstFileA( |
| __in LPCSTR lpFileName, |
| __out LPWIN32_FIND_DATAA lpFindFileData |
| ); |
| |
| HANDLE |
| WINAPI |
| redirect_FindFirstFileW( |
| __in LPCWSTR lpFileName, |
| __out LPWIN32_FIND_DATAW lpFindFileData |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_FindNextFileA( |
| __in HANDLE hFindFile, |
| __out LPWIN32_FIND_DATAA lpFindFileData |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_FindNextFileW( |
| __in HANDLE hFindFile, |
| __out LPWIN32_FIND_DATAW lpFindFileData |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_FlushFileBuffers( |
| __in HANDLE hFile |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_GetDiskFreeSpaceA( |
| __in_opt LPCSTR lpRootPathName, |
| __out_opt LPDWORD lpSectorsPerCluster, |
| __out_opt LPDWORD lpBytesPerSector, |
| __out_opt LPDWORD lpNumberOfFreeClusters, |
| __out_opt LPDWORD lpTotalNumberOfClusters |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_GetDiskFreeSpaceW( |
| __in_opt LPCWSTR lpRootPathName, |
| __out_opt LPDWORD lpSectorsPerCluster, |
| __out_opt LPDWORD lpBytesPerSector, |
| __out_opt LPDWORD lpNumberOfFreeClusters, |
| __out_opt LPDWORD lpTotalNumberOfClusters |
| ); |
| |
| UINT |
| WINAPI |
| redirect_GetDriveTypeA( |
| __in_opt LPCSTR lpRootPathName |
| ); |
| |
| UINT |
| WINAPI |
| redirect_GetDriveTypeW( |
| __in_opt LPCWSTR lpRootPathName |
| ); |
| |
| DWORD |
| WINAPI |
| redirect_GetFileAttributesA( |
| __in LPCSTR lpFileName |
| ); |
| |
| DWORD |
| WINAPI |
| redirect_GetFileAttributesW( |
| __in LPCWSTR lpFileName |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_GetFileInformationByHandle( |
| __in HANDLE hFile, |
| __out LPBY_HANDLE_FILE_INFORMATION lpFileInformation |
| ); |
| |
| DWORD |
| WINAPI |
| redirect_GetFileSize( |
| __in HANDLE hFile, |
| __out_opt LPDWORD lpFileSizeHigh |
| ); |
| |
| DWORD |
| WINAPI |
| redirect_GetFileType( |
| __in HANDLE hFile |
| ); |
| |
| |
| /* XXX: when implemented, use in redirect_SetCurrentDirectoryW() */ |
| DWORD |
| WINAPI |
| redirect_GetFullPathNameA( |
| __in LPCSTR lpFileName, |
| __in DWORD nBufferLength, |
| __out_ecount_part_opt(nBufferLength, return + 1) LPSTR lpBuffer, |
| __deref_opt_out LPSTR *lpFilePart |
| ); |
| |
| DWORD |
| WINAPI |
| redirect_GetFullPathNameW( |
| __in LPCWSTR lpFileName, |
| __in DWORD nBufferLength, |
| __out_ecount_part_opt(nBufferLength, return + 1) LPWSTR lpBuffer, |
| __deref_opt_out LPWSTR *lpFilePart |
| ); |
| |
| HANDLE |
| WINAPI |
| redirect_GetStdHandle( |
| __in DWORD nStdHandle |
| ); |
| |
| DWORD |
| WINAPI |
| redirect_GetLogicalDrives( |
| VOID |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_LockFile( |
| __in HANDLE hFile, |
| __in DWORD dwFileOffsetLow, |
| __in DWORD dwFileOffsetHigh, |
| __in DWORD nNumberOfBytesToLockLow, |
| __in DWORD nNumberOfBytesToLockHigh |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_PeekConsoleInputA( |
| IN HANDLE hConsoleInput, |
| OUT PINPUT_RECORD lpBuffer, |
| IN DWORD nLength, |
| OUT LPDWORD lpNumberOfEventsRead |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_PeekNamedPipe( |
| __in HANDLE hNamedPipe, |
| __out_bcount_part_opt(nBufferSize, *lpBytesRead) LPVOID lpBuffer, |
| __in DWORD nBufferSize, |
| __out_opt LPDWORD lpBytesRead, |
| __out_opt LPDWORD lpTotalBytesAvail, |
| __out_opt LPDWORD lpBytesLeftThisMessage |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_ReadConsoleInputA( |
| IN HANDLE hConsoleInput, |
| OUT PINPUT_RECORD lpBuffer, |
| IN DWORD nLength, |
| OUT LPDWORD lpNumberOfEventsRead |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_ReadConsoleInputW( |
| IN HANDLE hConsoleInput, |
| OUT PINPUT_RECORD lpBuffer, |
| IN DWORD nLength, |
| OUT LPDWORD lpNumberOfEventsRead |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_ReadConsoleW( |
| __in HANDLE hConsoleInput, |
| __out_ecount_part(nNumberOfCharsToRead, *lpNumberOfCharsRead) |
| LPVOID lpBuffer, |
| __in DWORD nNumberOfCharsToRead, |
| __out LPDWORD lpNumberOfCharsRead, |
| __in_opt PCONSOLE_READCONSOLE_CONTROL pInputControl |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_SetEndOfFile( |
| __in HANDLE hFile |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_SetFileAttributesA( |
| __in LPCSTR lpFileName, |
| __in DWORD dwFileAttributes |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_SetFileAttributesW( |
| __in LPCWSTR lpFileName, |
| __in DWORD dwFileAttributes |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_SetFileInformationByHandle( |
| __in HANDLE hFile, |
| __in FILE_INFO_BY_HANDLE_CLASS FileInformationClass, |
| __in_bcount(dwBufferSize) LPVOID lpFileInformation, |
| __in DWORD dwBufferSize |
| ); |
| |
| /* XXX: once we have redirect_SetFilePointer, replace SetFilePointer in unit test */ |
| DWORD |
| WINAPI |
| redirect_SetFilePointer( |
| __in HANDLE hFile, |
| __in LONG lDistanceToMove, |
| __in_opt PLONG lpDistanceToMoveHigh, |
| __in DWORD dwMoveMethod |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_SetStdHandle( |
| __in DWORD nStdHandle, |
| __in HANDLE hHandle |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_UnlockFile( |
| __in HANDLE hFile, |
| __in DWORD dwFileOffsetLow, |
| __in DWORD dwFileOffsetHigh, |
| __in DWORD nNumberOfBytesToUnlockLow, |
| __in DWORD nNumberOfBytesToUnlockHigh |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_WriteConsoleA( |
| IN HANDLE hConsoleOutput, |
| IN CONST VOID *lpBuffer, |
| IN DWORD nNumberOfCharsToWrite, |
| OUT LPDWORD lpNumberOfCharsWritten, |
| IN LPVOID lpReserved |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_WriteConsoleW( |
| IN HANDLE hConsoleOutput, |
| IN CONST VOID *lpBuffer, |
| IN DWORD nNumberOfCharsToWrite, |
| OUT LPDWORD lpNumberOfCharsWritten, |
| IN LPVOID lpReserved |
| ); |
| |
| /*************************************************************************** |
| * Synchronization |
| */ |
| |
| VOID |
| WINAPI |
| redirect_InitializeCriticalSection( |
| __out LPCRITICAL_SECTION lpCriticalSection |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_InitializeCriticalSectionAndSpinCount( |
| __out LPCRITICAL_SECTION lpCriticalSection, |
| __in DWORD dwSpinCount |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_InitializeCriticalSectionEx( |
| __out LPCRITICAL_SECTION lpCriticalSection, |
| __in DWORD dwSpinCount, |
| __in DWORD Flags |
| ); |
| |
| VOID |
| WINAPI |
| redirect_DeleteCriticalSection( |
| __inout LPCRITICAL_SECTION lpCriticalSection |
| ); |
| |
| VOID |
| WINAPI |
| redirect_EnterCriticalSection( |
| __inout LPCRITICAL_SECTION lpCriticalSection |
| ); |
| |
| VOID |
| WINAPI |
| redirect_LeaveCriticalSection( |
| __inout LPCRITICAL_SECTION lpCriticalSection |
| ); |
| |
| LONG |
| WINAPI |
| redirect_InterlockedCompareExchange ( |
| __inout __drv_interlocked LONG volatile *Destination, |
| __in LONG ExChange, |
| __in LONG Comperand |
| ); |
| |
| LONG |
| WINAPI |
| redirect_InterlockedDecrement( |
| __inout __drv_interlocked LONG volatile *Addend |
| ); |
| |
| LONG |
| WINAPI |
| redirect_InterlockedExchange( |
| __inout __drv_interlocked LONG volatile *Target, |
| __in LONG Value |
| ); |
| |
| LONG |
| WINAPI |
| redirect_InterlockedIncrement( |
| __inout __drv_interlocked LONG volatile *Addend |
| ); |
| |
| DWORD |
| WINAPI |
| redirect_WaitForSingleObject( |
| __in HANDLE hHandle, |
| __in DWORD dwMilliseconds |
| ); |
| |
| /*************************************************************************** |
| * Miscellaneous |
| */ |
| |
| DWORD |
| WINAPI |
| redirect_GetLastError( |
| VOID |
| ); |
| |
| VOID |
| WINAPI |
| redirect_SetLastError( |
| __in DWORD dwErrCode |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_Beep( |
| __in DWORD dwFreq, |
| __in DWORD dwDuration |
| ); |
| |
| int |
| WINAPI |
| redirect_CompareStringA( |
| __in LCID Locale, |
| __in DWORD dwCmpFlags, |
| __in LPCSTR lpString1, |
| __in int cchCount1, |
| __in LPCSTR lpString2, |
| __in int cchCount2); |
| |
| int |
| WINAPI |
| redirect_CompareStringW( |
| __in LCID Locale, |
| __in DWORD dwCmpFlags, |
| __in LPCWSTR lpString1, |
| __in int cchCount1, |
| __in LPCWSTR lpString2, |
| __in int cchCount2); |
| |
| VOID |
| WINAPI |
| redirect_DebugBreak( |
| VOID |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_EnumSystemLocalesA( |
| __in LOCALE_ENUMPROCA lpLocaleEnumProc, |
| __in DWORD dwFlags); |
| |
| DWORD |
| WINAPI |
| redirect_FormatMessageW( |
| DWORD dwFlags, |
| LPCVOID lpSource, |
| DWORD dwMessageId, |
| DWORD dwLanguageId, |
| LPWSTR lpBuffer, |
| DWORD nSize, |
| va_list *Arguments |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_FreeEnvironmentStringsA( |
| __in __nullnullterminated LPCH |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_FreeEnvironmentStringsW( |
| __in __nullnullterminated LPWCH |
| ); |
| |
| UINT |
| WINAPI |
| redirect_GetACP(void); |
| |
| UINT |
| WINAPI |
| redirect_GetConsoleCP( VOID ); |
| |
| BOOL |
| WINAPI |
| redirect_SetConsoleCP( |
| IN UINT wCodePageID |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_GetConsoleMode( |
| IN HANDLE hConsoleHandle, |
| OUT LPDWORD lpMode |
| ); |
| |
| UINT |
| WINAPI |
| redirect_GetConsoleOutputCP( VOID ); |
| |
| BOOL |
| WINAPI |
| redirect_GetCPInfo( |
| __in UINT CodePage, |
| __out LPCPINFO lpCPInfo); |
| |
| int |
| WINAPI |
| redirect_GetDateFormatA( |
| __in LCID Locale, |
| __in DWORD dwFlags, |
| __in_opt CONST SYSTEMTIME *lpDate, |
| __in_opt LPCSTR lpFormat, |
| __out_ecount_opt(cchDate) LPSTR lpDateStr, |
| __in int cchDate); |
| |
| int |
| WINAPI |
| redirect_GetDateFormatW( |
| __in LCID Locale, |
| __in DWORD dwFlags, |
| __in_opt CONST SYSTEMTIME *lpDate, |
| __in_opt LPCWSTR lpFormat, |
| __out_ecount_opt(cchDate) LPWSTR lpDateStr, |
| __in int cchDate); |
| |
| __nullnullterminated |
| LPCH |
| WINAPI |
| redirect_GetEnvironmentStrings( |
| VOID |
| ); |
| |
| __out |
| __nullnullterminated |
| LPWCH |
| WINAPI |
| redirect_GetEnvironmentStringsW( |
| VOID |
| ); |
| |
| int |
| WINAPI |
| redirect_GetLocaleInfoA( |
| __in LCID Locale, |
| __in LCTYPE LCType, |
| __out_ecount_opt(cchData) LPSTR lpLCData, |
| __in int cchData); |
| |
| int |
| WINAPI |
| redirect_GetLocaleInfoW( |
| __in LCID Locale, |
| __in LCTYPE LCType, |
| __out_ecount_opt(cchData) LPWSTR lpLCData, |
| __in int cchData); |
| |
| VOID |
| WINAPI |
| redirect_GetLocalTime( |
| __out LPSYSTEMTIME lpSystemTime |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_GetNumberOfConsoleInputEvents( |
| IN HANDLE hConsoleInput, |
| OUT LPDWORD lpNumberOfEvents |
| ); |
| |
| UINT |
| WINAPI |
| redirect_GetOEMCP(void); |
| |
| DWORD |
| WINAPI |
| redirect_GetPriorityClass( |
| __in HANDLE hProcess |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_GetStringTypeA( |
| __in LCID Locale, |
| __in DWORD dwInfoType, |
| __in LPCSTR lpSrcStr, |
| __in int cchSrc, |
| __out LPWORD lpCharType); |
| |
| BOOL |
| WINAPI |
| redirect_GetStringTypeW( |
| __in DWORD dwInfoType, |
| __in LPCWSTR lpSrcStr, |
| __in int cchSrc, |
| __out LPWORD lpCharType); |
| |
| VOID |
| WINAPI |
| redirect_GetSystemInfo( |
| __out LPSYSTEM_INFO lpSystemInfo |
| ); |
| |
| int |
| WINAPI |
| redirect_GetTimeFormatA( |
| __in LCID Locale, |
| __in DWORD dwFlags, |
| __in_opt CONST SYSTEMTIME *lpTime, |
| __in_opt LPCSTR lpFormat, |
| __out_ecount_opt(cchTime) LPSTR lpTimeStr, |
| __in int cchTime); |
| |
| int |
| WINAPI |
| redirect_GetTimeFormatW( |
| __in LCID Locale, |
| __in DWORD dwFlags, |
| __in_opt CONST SYSTEMTIME *lpTime, |
| __in_opt LPCWSTR lpFormat, |
| __out_ecount_opt(cchTime) LPWSTR lpTimeStr, |
| __in int cchTime); |
| |
| DWORD |
| WINAPI |
| redirect_GetTimeZoneInformation( |
| __out LPTIME_ZONE_INFORMATION lpTimeZoneInformation |
| ); |
| |
| LCID |
| WINAPI |
| redirect_GetUserDefaultLCID(void); |
| |
| DWORD |
| WINAPI |
| redirect_GetVersion ( |
| VOID |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_GetVersionExA( |
| __inout LPOSVERSIONINFOA lpVersionInformation |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_GetVersionExW( |
| __inout LPOSVERSIONINFOW lpVersionInformation |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_IsDBCSLeadByte( |
| __in BYTE TestChar); |
| |
| BOOL |
| WINAPI |
| redirect_IsDebuggerPresent( |
| VOID |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_IsValidCodePage( |
| __in UINT CodePage); |
| |
| BOOL |
| WINAPI |
| redirect_IsValidLocale( |
| __in LCID Locale, |
| __in DWORD dwFlags); |
| |
| int |
| WINAPI |
| redirect_LCMapStringA( |
| __in LCID Locale, |
| __in DWORD dwMapFlags, |
| __in LPCSTR lpSrcStr, |
| __in int cchSrc, |
| __out_ecount_opt(cchDest) LPSTR lpDestStr, |
| __in int cchDest); |
| |
| int |
| WINAPI |
| redirect_LCMapStringW( |
| __in LCID Locale, |
| __in DWORD dwMapFlags, |
| __in LPCWSTR lpSrcStr, |
| __in int cchSrc, |
| __out_ecount_opt(cchDest) LPWSTR lpDestStr, |
| __in int cchDest); |
| |
| int |
| WINAPI |
| redirect_lstrlenA( |
| __in LPCSTR lpString |
| ); |
| |
| int |
| WINAPI |
| redirect_MultiByteToWideChar( |
| __in UINT CodePage, |
| __in DWORD dwFlags, |
| __in LPCSTR lpMultiByteStr, |
| __in int cbMultiByte, |
| __out_ecount_opt(cchWideChar) LPWSTR lpWideCharStr, |
| __in int cchWideChar); |
| |
| VOID |
| WINAPI |
| redirect_OutputDebugStringA( |
| __in LPCSTR lpOutputString |
| ); |
| |
| VOID |
| WINAPI |
| redirect_OutputDebugStringW( |
| __in LPCWSTR lpOutputString |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_QueryPerformanceCounter( |
| __out LARGE_INTEGER *lpPerformanceCount |
| ); |
| |
| VOID |
| WINAPI |
| redirect_RaiseException( |
| __in DWORD dwExceptionCode, |
| __in DWORD dwExceptionFlags, |
| __in DWORD nNumberOfArguments, |
| __in_ecount_opt(nNumberOfArguments) CONST ULONG_PTR *lpArguments |
| ); |
| |
| VOID |
| NTAPI |
| redirect_RtlGetNtVersionNumbers ( |
| LPDWORD major, |
| LPDWORD minor, |
| LPDWORD build |
| ); |
| |
| #ifdef X64 |
| PRUNTIME_FUNCTION |
| NTAPI |
| redirect_RtlLookupFunctionEntry ( |
| __in DWORD64 ControlPc, |
| __out PDWORD64 ImageBase, |
| __inout_opt PUNWIND_HISTORY_TABLE HistoryTable |
| ); |
| #endif |
| |
| VOID |
| NTAPI |
| redirect_RtlUnwind ( |
| __in_opt PVOID TargetFrame, |
| __in_opt PVOID TargetIp, |
| __in_opt PEXCEPTION_RECORD ExceptionRecord, |
| __in PVOID ReturnValue |
| ); |
| |
| #ifdef X64 |
| VOID |
| NTAPI |
| redirect_RtlUnwindEx ( |
| __in_opt PVOID TargetFrame, |
| __in_opt PVOID TargetIp, |
| __in_opt PEXCEPTION_RECORD ExceptionRecord, |
| __in PVOID ReturnValue, |
| __in PCONTEXT ContextRecord, |
| __in_opt PUNWIND_HISTORY_TABLE HistoryTable |
| ); |
| |
| ULONGLONG |
| NTAPI |
| redirect_RtlVirtualUnwind ( |
| __in DWORD HandlerType, |
| __in DWORD64 ImageBase, |
| __in DWORD64 ControlPc, |
| __in PRUNTIME_FUNCTION FunctionEntry, |
| __inout PCONTEXT ContextRecord, |
| __out PVOID *HandlerData, |
| __out PDWORD64 EstablisherFrame, |
| __inout_opt PKNONVOLATILE_CONTEXT_POINTERS ContextPointers |
| ); |
| #endif |
| |
| BOOL |
| WINAPI |
| redirect_SetConsoleCtrlHandler( |
| IN PHANDLER_ROUTINE HandlerRoutine, |
| IN BOOL Add |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_SetConsoleMode( |
| IN HANDLE hConsoleHandle, |
| IN DWORD dwMode |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_SetEnvironmentVariableA( |
| __in LPCSTR lpName, |
| __in_opt LPCSTR lpValue |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_SetEnvironmentVariableW( |
| __in LPCWSTR lpName, |
| __in_opt LPCWSTR lpValue |
| ); |
| |
| UINT |
| WINAPI |
| redirect_SetErrorMode( |
| __in UINT uMode |
| ); |
| |
| UINT |
| WINAPI |
| redirect_SetHandleCount( |
| __in UINT uNumber |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_SetLocalTime( |
| __in CONST SYSTEMTIME *lpSystemTime |
| ); |
| |
| BOOL |
| WINAPI |
| redirect_SetThreadStackGuarantee ( |
| __inout PULONG StackSizeInBytes |
| ); |
| |
| LPTOP_LEVEL_EXCEPTION_FILTER |
| WINAPI |
| redirect_SetUnhandledExceptionFilter( |
| __in LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter |
| ); |
| |
| VOID |
| WINAPI |
| redirect_Sleep( |
| __in DWORD dwMilliseconds |
| ); |
| |
| LONG |
| WINAPI |
| redirect_UnhandledExceptionFilter( |
| __in struct _EXCEPTION_POINTERS *ExceptionInfo |
| ); |
| |
| int |
| WINAPI |
| redirect_WideCharToMultiByte( |
| __in UINT CodePage, |
| __in DWORD dwFlags, |
| __in_opt LPCWSTR lpWideCharStr, |
| __in int cchWideChar, |
| __out_bcount_opt(cbMultiByte) LPSTR lpMultiByteStr, |
| __in int cbMultiByte, |
| __in_opt LPCSTR lpDefaultChar, |
| __out_opt LPBOOL lpUsedDefaultChar); |
| |
| |
| #endif /* _KERNEL32_REDIR_H_ */ |