starting commit
This commit is contained in:
parent
9914ab9985
commit
ef049233a1
4336
vnr/ntdll/ntdll.h
Normal file
4336
vnr/ntdll/ntdll.h
Normal file
File diff suppressed because it is too large
Load Diff
10
vnr/ntdll/ntdll.pri
Normal file
10
vnr/ntdll/ntdll.pri
Normal file
@ -0,0 +1,10 @@
|
||||
# ntdll.pri
|
||||
# 4/9/2012 jichi
|
||||
|
||||
DEFINES += WITH_LIB_NTDLL
|
||||
|
||||
DEPENDPATH += $$PWD
|
||||
|
||||
HEADERS += $$PWD/ntdll.h
|
||||
|
||||
# EOF
|
100
vnr/ntinspect/ntinspect.cc
Normal file
100
vnr/ntinspect/ntinspect.cc
Normal file
@ -0,0 +1,100 @@
|
||||
// ntinspect.cc
|
||||
// 4/20/2014 jichi
|
||||
#include "ntdll/ntdll.h"
|
||||
#include "ntinspect/ntinspect.h"
|
||||
|
||||
//#ifdef _MSC_VER
|
||||
//# pragma warning(disable:4018) // C4018: signed/unsigned mismatch
|
||||
//#endif // _MSC_VER
|
||||
|
||||
namespace { // unnamed
|
||||
// Replacement of wcscpy_s which is not available on Windows XP's msvcrt
|
||||
// http://sakuradite.com/topic/247
|
||||
errno_t wcscpy_safe(wchar_t *buffer, size_t bufferSize, const wchar_t *source)
|
||||
{
|
||||
size_t len = min(bufferSize - 1, wcslen(source));
|
||||
buffer[len] = 0;
|
||||
if (len)
|
||||
memcpy(buffer, source, len * 2);
|
||||
return 0;
|
||||
}
|
||||
} // unnamed namespace
|
||||
|
||||
NTINSPECT_BEGIN_NAMESPACE
|
||||
|
||||
BOOL getCurrentProcessName(LPWSTR buffer, int bufferSize)
|
||||
{
|
||||
//assert(name);
|
||||
PLDR_DATA_TABLE_ENTRY it;
|
||||
__asm
|
||||
{
|
||||
mov eax,fs:[0x30]
|
||||
mov eax,[eax+0xc]
|
||||
mov eax,[eax+0xc]
|
||||
mov it,eax
|
||||
}
|
||||
// jichi 6/4/2014: _s functions are not supported on Windows XP's msvcrt.dll
|
||||
//return 0 == wcscpy_s(buffer, bufferSize, it->BaseDllName.Buffer);
|
||||
return 0 == wcscpy_safe(buffer, bufferSize, it->BaseDllName.Buffer);
|
||||
}
|
||||
|
||||
BOOL getModuleMemoryRange(LPCWSTR moduleName, DWORD *lowerBound, DWORD *upperBound)
|
||||
{
|
||||
//assert(lower);
|
||||
//assert(upper);
|
||||
PLDR_DATA_TABLE_ENTRY it;
|
||||
LIST_ENTRY *begin;
|
||||
__asm
|
||||
{
|
||||
mov eax,fs:[0x30]
|
||||
mov eax,[eax+0xc]
|
||||
mov eax,[eax+0xc]
|
||||
mov it,eax
|
||||
mov begin,eax
|
||||
}
|
||||
|
||||
while (it->SizeOfImage) {
|
||||
if (_wcsicmp(it->BaseDllName.Buffer, moduleName) == 0) {
|
||||
DWORD lower = (DWORD)it->DllBase;
|
||||
if (lowerBound)
|
||||
*lowerBound = lower;
|
||||
|
||||
if (upperBound) {
|
||||
DWORD upper = lower;
|
||||
MEMORY_BASIC_INFORMATION mbi = {};
|
||||
DWORD size = 0;
|
||||
do {
|
||||
DWORD len;
|
||||
// Nt function is needed instead of VirtualQuery, which only works for the current process
|
||||
::NtQueryVirtualMemory(NtCurrentProcess(), (LPVOID)upper, MemoryBasicInformation, &mbi, sizeof(mbi), &len);
|
||||
if (mbi.Protect & PAGE_NOACCESS) {
|
||||
it->SizeOfImage = size;
|
||||
break;
|
||||
}
|
||||
size += mbi.RegionSize;
|
||||
upper += mbi.RegionSize;
|
||||
} while (size < it->SizeOfImage);
|
||||
|
||||
*upperBound = upper;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
it = (PLDR_DATA_TABLE_ENTRY)it->InLoadOrderModuleList.Flink;
|
||||
if (it->InLoadOrderModuleList.Flink == begin)
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL getCurrentMemoryRange(DWORD *lowerBound, DWORD *upperBound)
|
||||
{
|
||||
WCHAR procName[MAX_PATH]; // cached
|
||||
*lowerBound = 0;
|
||||
*upperBound = 0;
|
||||
return getCurrentProcessName(procName, MAX_PATH)
|
||||
&& getModuleMemoryRange(procName, lowerBound, upperBound);
|
||||
}
|
||||
|
||||
NTINSPECT_END_NAMESPACE
|
||||
|
||||
// EOF
|
31
vnr/ntinspect/ntinspect.h
Normal file
31
vnr/ntinspect/ntinspect.h
Normal file
@ -0,0 +1,31 @@
|
||||
#pragma once
|
||||
|
||||
// ntinspect.h
|
||||
// 4/20/2014 jichi
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#ifndef NTINSPECT_BEGIN_NAMESPACE
|
||||
# define NTINSPECT_BEGIN_NAMESPACE namespace NtInspect {
|
||||
#endif
|
||||
#ifndef NTINSPECT_END_NAMESPACE
|
||||
# define NTINSPECT_END_NAMESPACE } // NtInspect
|
||||
#endif
|
||||
|
||||
NTINSPECT_BEGIN_NAMESPACE
|
||||
|
||||
/// Get current module name in fs:0x30
|
||||
BOOL getCurrentProcessName(_Out_ LPWSTR buffer, _In_ int bufferSize);
|
||||
|
||||
/**
|
||||
* Get the memory range of the module if succeed
|
||||
* See: ITH FillRange
|
||||
*/
|
||||
BOOL getModuleMemoryRange(_In_ LPCWSTR moduleName, _Out_ DWORD *lowerBound, _Out_ DWORD *upperBound);
|
||||
|
||||
/// Get memory of the current process
|
||||
BOOL getCurrentMemoryRange(_Out_ DWORD *lowerBound, _Out_ DWORD *upperBound);
|
||||
|
||||
NTINSPECT_END_NAMESPACE
|
||||
|
||||
// EOF
|
16
vnr/ntinspect/ntinspect.pri
Normal file
16
vnr/ntinspect/ntinspect.pri
Normal file
@ -0,0 +1,16 @@
|
||||
# ntinspect.pri
|
||||
# 4/20/2014 jichi
|
||||
win32 {
|
||||
|
||||
DEFINES += WITH_LIB_NTINSPECT
|
||||
|
||||
DEPENDPATH += $$PWD
|
||||
|
||||
HEADERS += $$PWD/ntinspect.h
|
||||
SOURCES += $$PWD/ntinspect.cc
|
||||
|
||||
LIBS += -L$$WDK7_HOME/lib/wxp/i386 -lntdll
|
||||
|
||||
}
|
||||
|
||||
# EOF
|
46
vnr/winmaker/winmaker.cc
Normal file
46
vnr/winmaker/winmaker.cc
Normal file
@ -0,0 +1,46 @@
|
||||
// winmaker.cc
|
||||
// 2/1/2013 jichi
|
||||
|
||||
#include "winmaker/winmaker.h"
|
||||
#include <windows.h>
|
||||
//#include <commctrl.h>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
# pragma warning (disable:4800) // C4800: forcing value to bool
|
||||
#endif // _MSC_VER
|
||||
|
||||
// See: http://www.codeguru.com/cpp/w-p/dll/tips/article.php/c3635/Tip-Detecting-a-HMODULEHINSTANCE-Handle-Within-the-Module-Youre-Running-In.htm
|
||||
extern "C" IMAGE_DOS_HEADER __ImageBase;
|
||||
namespace { // unnamed
|
||||
inline HMODULE _get_module() { return reinterpret_cast<HMODULE>(&__ImageBase); }
|
||||
} // unnamed
|
||||
|
||||
bool wm_register_hidden_class(LPCWSTR className)
|
||||
{
|
||||
WNDCLASSEX wx = {};
|
||||
wx.cbSize = sizeof(wx);
|
||||
wx.lpfnWndProc = ::DefWindowProc;
|
||||
wx.hInstance = ::GetModuleHandle(nullptr);
|
||||
wx.lpszClassName = className;
|
||||
return ::RegisterClassEx(&wx);
|
||||
}
|
||||
|
||||
wm_window_t wm_create_hidden_window(LPCWSTR windowName, LPCWSTR className, wm_module_t dllHandle)
|
||||
{
|
||||
//return ::CreateWindowExA(0, className, windowName, 0, 0, 0, 0, 0, HWND_MESSAGE, nullptr, dllHandle, nullptr);
|
||||
HINSTANCE module = reinterpret_cast<HINSTANCE>(dllHandle);
|
||||
if (!module)
|
||||
module = _get_module();
|
||||
return ::CreateWindowEx(0, className, windowName, 0, 0, 0, 0, 0, 0, NULL, module, NULL);
|
||||
}
|
||||
|
||||
bool wm_destroy_window(wm_window_t hwnd)
|
||||
{ return ::DestroyWindow(reinterpret_cast<HWND>(hwnd)); }
|
||||
|
||||
|
||||
// EOF
|
||||
//
|
||||
//void wm_init() { ::InitCommonControls(); }
|
||||
//void wm_destroy() {}
|
||||
//bool wm_destroy_window() { return ::DestroyWindow(hwnd); }
|
||||
|
23
vnr/winmaker/winmaker.h
Normal file
23
vnr/winmaker/winmaker.h
Normal file
@ -0,0 +1,23 @@
|
||||
#pragma once
|
||||
|
||||
// winmaker.h
|
||||
// 2/1/2013 jichi
|
||||
|
||||
#include <windows.h>
|
||||
typedef void *wm_window_t; // HWMD
|
||||
typedef void *wm_module_t; // HMODULE
|
||||
|
||||
bool wm_register_hidden_class(LPCWSTR className = L"hidden_class");
|
||||
|
||||
wm_window_t wm_create_hidden_window(
|
||||
LPCWSTR windowName = L"hidden_window",
|
||||
LPCWSTR className = L"Button", // bust be one of the common control widgets
|
||||
wm_module_t dllHandle = nullptr);
|
||||
|
||||
bool wm_destroy_window(wm_window_t hwnd);
|
||||
|
||||
// EOF
|
||||
|
||||
//#ifdef QT_CORE_LIB
|
||||
//#include <QtGui/qwindowdefs.h>
|
||||
//WId wm_create_hidden_window(const char *className = "Button", const char *windowName = "hidden_window");
|
15
vnr/winmaker/winmaker.pri
Normal file
15
vnr/winmaker/winmaker.pri
Normal file
@ -0,0 +1,15 @@
|
||||
# wintimer.pri
|
||||
# 7/20/2011 jichi
|
||||
win32 {
|
||||
|
||||
DEFINES += WITH_LIB_WINMAKER
|
||||
|
||||
#LIBS += -lkernel32 -luser32
|
||||
|
||||
DEPENDPATH += $$PWD
|
||||
|
||||
HEADERS += $$PWD/winmaker.h
|
||||
SOURCES += $$PWD/winmaker.cc
|
||||
}
|
||||
|
||||
# EOF
|
Loading…
Reference in New Issue
Block a user