本文整理汇总了C++中GetModuleFileNameA函数的典型用法代码示例。如果您正苦于以下问题:C++ GetModuleFileNameA函数的具体用法?C++ GetModuleFileNameA怎么用?C++ GetModuleFileNameA使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GetModuleFileNameA函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: sizeof
//----- InitInstance() ------------------------------------------------------
BOOL CNifUtilsSuiteApp::InitInstance()
{
// init common controls (since Win95)
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
// init own instance
CWinAppEx::InitInstance();
// no interaction with Win7 taskbar
EnableTaskbarInteraction(FALSE);
// init RichEdit
AfxInitRichEdit2();
// initialize configuration
CStringA configName;
bool hasConfig(false);
GetModuleFileNameA(NULL, configName.GetBuffer(MAX_PATH), MAX_PATH);
configName.ReleaseBuffer();
configName.Replace(".exe", ".xml");
hasConfig = Configuration::initInstance((const char*) configName);
// initialize Havok (HK_MEMORY_USAGE bytes of physics solver buffer)
hkMemoryRouter* pMemoryRouter(hkMemoryInitUtil::initDefault(hkMallocAllocator::m_defaultMallocAllocator, hkMemorySystem::FrameInfo(HK_MEMORY_USAGE)));
hkBaseSystem::init(pMemoryRouter, errorReport);
// initialize material map
Configuration* pConfig(Configuration::getInstance());
NifUtlMaterialList::initInstance(pConfig->_pathNifXML, pConfig->_matScanTag, pConfig->_matScanName);
// Register the application's document templates.
CSingleDocTemplate* pDocTemplate(new CSingleDocTemplate(IDR_MAINFRAME,
RUNTIME_CLASS(CNifUtilsSuiteDoc),
RUNTIME_CLASS(CNifUtilsSuiteFrame),
RUNTIME_CLASS(CFormNifConvertView))
);
if (!pDocTemplate) return FALSE;
AddDocTemplate(pDocTemplate);
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if (!ProcessShellCommand(cmdInfo)) return FALSE;
// call DragAcceptFiles only if there's a suffix
// In an SDI app, this should occur after ProcessShellCommand
// The one and only window has been initialized, so show and update it
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
if (!hasConfig)
{
AfxMessageBox(L"Seems you're running NifUtilsSuite for the first time.\nYou're redirected to Settings now.");
m_pMainWnd->PostMessage(WM_COMMAND, ID_OPTIONS_EDIT);
}
return TRUE;
}
示例2: MyGetProcAddress
static FARPROC WINAPI
MyGetProcAddress(HMODULE hModule, LPCSTR lpProcName) {
if (VERBOSITY >= 3) {
/* XXX this can cause segmentation faults */
logGetProcAddress(hModule, lpProcName);
}
if (!NOOP) {
char szModule[MAX_PATH];
DWORD dwRet = GetModuleFileNameA(hModule, szModule, sizeof szModule);
assert(dwRet);
const char *szBaseName = getBaseName(szModule);
ModulesMap::const_iterator modIt;
modIt = modulesMap.find(szBaseName);
if (modIt != modulesMap.end()) {
if (VERBOSITY > 1 && VERBOSITY < 3) {
logGetProcAddress(hModule, lpProcName);
}
const Module & module = modIt->second;
const FunctionMap & functionMap = module.functionMap;
FunctionMap::const_iterator fnIt;
if (HIWORD(lpProcName) == 0) {
FARPROC proc = GetProcAddress(hModule, lpProcName);
if (!proc) {
return proc;
}
for (fnIt = functionMap.begin(); fnIt != functionMap.end(); ++fnIt) {
FARPROC pRealProc = GetProcAddress(hModule, fnIt->first);
if (proc == pRealProc) {
if (VERBOSITY > 0) {
debugPrintf("inject: replacing %s!%s\n", szBaseName, lpProcName);
}
return (FARPROC)fnIt->second;
}
}
debugPrintf("inject: ignoring %[email protected]%u\n", szBaseName, LOWORD(lpProcName));
return proc;
}
fnIt = functionMap.find(lpProcName);
if (fnIt != functionMap.end()) {
LPVOID pProcAddress = fnIt->second;
if (VERBOSITY > 0) {
debugPrintf("inject: replacing %s!%s\n", szBaseName, lpProcName);
}
if (!module.bInternal && pSharedMem) {
pSharedMem->bReplaced = TRUE;
}
return (FARPROC)pProcAddress;
} else {
if (VERBOSITY > 0 && !module.bInternal) {
debugPrintf("inject: ignoring %s!%s\n", szBaseName, lpProcName);
}
}
}
}
return GetProcAddress(hModule, lpProcName);
}
示例3: test_ExitCode
static void test_ExitCode(void)
{
static const char* AeDebug="Software\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug";
char test_exe[MAX_PATH];
DWORD ret;
HKEY hkey;
DWORD disposition;
LPBYTE auto_val=NULL;
DWORD auto_size, auto_type;
LPBYTE debugger_val=NULL;
DWORD debugger_size, debugger_type;
GetModuleFileNameA(GetModuleHandle(NULL), test_exe, sizeof(test_exe));
if (GetFileAttributes(test_exe) == INVALID_FILE_ATTRIBUTES)
strcat(test_exe, ".so");
if (GetFileAttributesA(test_exe) == INVALID_FILE_ATTRIBUTES)
{
ok(0, "could not find the test executable '%s'\n", test_exe);
return;
}
ret=RegCreateKeyExA(HKEY_LOCAL_MACHINE, AeDebug, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, &disposition);
if (ret == ERROR_SUCCESS)
{
auto_size=0;
ret=RegQueryValueExA(hkey, "auto", NULL, &auto_type, NULL, &auto_size);
if (ret == ERROR_SUCCESS)
{
auto_val=HeapAlloc(GetProcessHeap(), 0, auto_size);
RegQueryValueExA(hkey, "auto", NULL, &auto_type, auto_val, &auto_size);
}
debugger_size=0;
ret=RegQueryValueExA(hkey, "debugger", NULL, &debugger_type, NULL, &debugger_size);
if (ret == ERROR_SUCCESS)
{
debugger_val=HeapAlloc(GetProcessHeap(), 0, debugger_size);
RegQueryValueExA(hkey, "debugger", NULL, &debugger_type, debugger_val, &debugger_size);
}
}
else if (ret == ERROR_ACCESS_DENIED)
{
skip("not enough privileges to change the debugger\n");
return;
}
else if (ret != ERROR_FILE_NOT_FOUND)
{
ok(0, "could not open the AeDebug key: %d\n", ret);
return;
}
if (debugger_val && debugger_type == REG_SZ &&
strstr((char*)debugger_val, "winedbg --auto"))
crash_and_winedbg(hkey, test_exe);
crash_and_debug(hkey, test_exe, "dbg,none");
crash_and_debug(hkey, test_exe, "dbg,event,order");
crash_and_debug(hkey, test_exe, "dbg,attach,event,code2");
if (pDebugSetProcessKillOnExit)
crash_and_debug(hkey, test_exe, "dbg,attach,event,nokill");
if (pDebugActiveProcessStop)
crash_and_debug(hkey, test_exe, "dbg,attach,event,detach");
if (disposition == REG_CREATED_NEW_KEY)
{
RegCloseKey(hkey);
RegDeleteKeyA(HKEY_LOCAL_MACHINE, AeDebug);
}
else
{
if (auto_val)
{
RegSetValueExA(hkey, "auto", 0, auto_type, auto_val, auto_size);
HeapFree(GetProcessHeap(), 0, auto_val);
}
else
RegDeleteValueA(hkey, "auto");
if (debugger_val)
{
RegSetValueExA(hkey, "debugger", 0, debugger_type, debugger_val, debugger_size);
HeapFree(GetProcessHeap(), 0, debugger_val);
}
else
RegDeleteValueA(hkey, "debugger");
RegCloseKey(hkey);
}
}
示例4: main
int main(int argc, char* argv[])
{
DWORD dwProcessId = GetCurrentProcessId();
char szProcessName[256] = {0};
char szModuleName[MAX_PATH] = {0};
for (int i = 1; i < argc; i++) {
if (_stricmp(argv[i], "-pid") == 0 && i < (argc - 1)) {
dwProcessId = atoi(argv[i + 1]);
}
if (_stricmp(argv[i], "-name") == 0 && i < (argc - 1)) {
strcpy_s(szProcessName, argv[i + 1]);
}
if (_stricmp(argv[i], "-dll") == 0 && i < (argc - 1)) {
strcpy_s(szModuleName, argv[i + 1]);
}
}
if (strlen(szModuleName) == 0) {
printf("Module name is required...\n");
return 0;
}
if (strlen(szProcessName) == 0 && dwProcessId == GetCurrentProcessId()) {
printf("Invalid parameters!\n");
return 0;
}
if (strlen(szProcessName) > 0) {
if (dwProcessId == GetCurrentProcessId()) { // Only change the processid if it's not already set
dwProcessId = GetProcessIdFromProcessName(szProcessName);
if (dwProcessId == GetCurrentProcessId()) {
printf("Failed to obtain process \"%s\"...\n", szProcessName);
return 0;
}
}
}
HMODULE hKernel = LoadLibraryA("kernel32.dll");
DWORD64 dwLoadLibraryA = (DWORD64) GetProcAddress(hKernel, "LoadLibraryA") - (DWORD64) hKernel;
printf("kernel32.dll: %016llX\n", hKernel);
printf("LoadLibraryA: %016llX\n", dwLoadLibraryA);
printf("Module Name: %s\n", szModuleName);
char szCurrentModulePath[MAX_PATH] = {0};
GetModuleFileNameA(GetModuleHandle(NULL), szCurrentModulePath, MAX_PATH);
for (size_t i = strlen(szCurrentModulePath); i > 0; i--) {
if (szCurrentModulePath[ i ] == '\\') {
szCurrentModulePath[ i + 1 ] = 0;
break;
}
}
strcat_s(szCurrentModulePath, szModuleName);
printf("Full Path: %s\n", szCurrentModulePath);
DWORD dwFileAttributes = GetFileAttributesA(szCurrentModulePath);
if (dwFileAttributes == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND) {
printf("File not found...\n");
return 0;
}
printf("Injecting: %s\n", szCurrentModulePath);
HMODULE hRemoteKernel = GetRemoteModuleHandleA(dwProcessId, "kernel32.dll");
if (hRemoteKernel == NULL) {
printf("Failed to locate kernel32 in remote process...\n");
return 0;
}
printf("kernel32 (remote): 0x%016llX\n", hRemoteKernel);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
if (hProcess == INVALID_HANDLE_VALUE) {
printf("Failed to locate remote process...\n");
return 0;
}
LPVOID lpModuleName = VirtualAllocEx(hProcess, NULL, strlen(szCurrentModulePath) + 1, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if (lpModuleName == NULL) {
printf("Failed to allocate module name in remote process...\n");
return 0;
}
if (WriteProcessMemory(hProcess, lpModuleName, szCurrentModulePath, strlen(szCurrentModulePath), NULL) == FALSE) {
printf("Failed to write module name in remote process...\n");
return 0;
}
DWORD64 dwRemoteLoadLibraryAddress = ((DWORD64)hRemoteKernel + dwLoadLibraryA);
printf("LoadLibraryA (remote): %016llX\n", dwRemoteLoadLibraryAddress);
HANDLE hThread = CreateRemoteThread(hProcess, 0, 0, (LPTHREAD_START_ROUTINE) dwRemoteLoadLibraryAddress, lpModuleName, 0, 0);
printf("Injecting... ");
WaitForSingleObject(hThread, INFINITE);
printf("Injected!\n");
return 0;
//.........这里部分代码省略.........
示例5: ruby_init_loadpath_safe
void
ruby_init_loadpath_safe(int safe_level, const char* szRoot)
{
VALUE load_path;
#if defined LOAD_RELATIVE
char libpath[MAXPATHLEN + 1];
char *p;
int rest;
if ( szRoot )
strncpy(libpath, szRoot, sizeof(libpath) - 1);
else
{
#if defined _WIN32 || defined __CYGWIN__
GetModuleFileNameA(libruby, libpath, sizeof libpath);
#elif defined(__EMX__)
_execname(libpath, sizeof(libpath) - 1);
#endif
}
//RHO
libpath[sizeof(libpath) - 1] = '\0';
#if defined DOSISH
translate_char(libpath, '\\', '/');
#elif defined __CYGWIN__
{
char rubylib[FILENAME_MAX];
cygwin_conv_to_posix_path(libpath, rubylib);
strncpy(libpath, rubylib, sizeof(libpath));
}
#endif
p = strrchr(libpath, '/');
if (p) {
*p = 0;
if (p - libpath > 3 && !STRCASECMP(p - 4, "/bin")) {
p -= 4;
*p = 0;
}
}
else {
strcpy(libpath, ".");
p = libpath + 1;
}
rest = sizeof(libpath) - 1 - (p - libpath);
#define RUBY_RELATIVE(path) (strncpy(p, (path), rest), libpath)
#else
#define RUBY_RELATIVE(path) (path)
#endif
#define incpush(path) rb_ary_push(load_path, rubylib_mangled_path2(path))
load_path = GET_VM()->load_path;
//RHO
incpush(RUBY_RELATIVE(RUBY_LIB));
incpush(RUBY_RELATIVE(RUBY_SITE_LIB));
incpush(RUBY_RELATIVE(RUBY_SITE_LIB2));
/*
if (safe_level == 0) {
ruby_push_include(getenv("RUBYLIB"), identical_path);
}
#ifdef RUBY_SEARCH_PATH
incpush(RUBY_RELATIVE(RUBY_SEARCH_PATH));
#endif
incpush(RUBY_RELATIVE(RUBY_SITE_LIB2));
#ifdef RUBY_SITE_THIN_ARCHLIB
incpush(RUBY_RELATIVE(RUBY_SITE_THIN_ARCHLIB));
#endif
incpush(RUBY_RELATIVE(RUBY_SITE_ARCHLIB));
incpush(RUBY_RELATIVE(RUBY_SITE_LIB));
incpush(RUBY_RELATIVE(RUBY_VENDOR_LIB2));
#ifdef RUBY_VENDOR_THIN_ARCHLIB
incpush(RUBY_RELATIVE(RUBY_VENDOR_THIN_ARCHLIB));
#endif
incpush(RUBY_RELATIVE(RUBY_VENDOR_ARCHLIB));
incpush(RUBY_RELATIVE(RUBY_VENDOR_LIB));
incpush(RUBY_RELATIVE(RUBY_LIB));
#ifdef RUBY_THIN_ARCHLIB
incpush(RUBY_RELATIVE(RUBY_THIN_ARCHLIB));
#endif
incpush(RUBY_RELATIVE(RUBY_ARCHLIB));
if (safe_level == 0) {
incpush(".");
}
*/
//RHO
}
示例6: Load
extern "C" SAMETIME_API int Load(PLUGINLINK *link)
{
pluginLink=link;
if(!IsUnicodeOS()) {
MessageBox(0, TranslateT("This plugin requires a Unicode capable Windows installation."), TranslateT("Sametime Error"), MB_OK | MB_ICONERROR);
return 1;
}
if ( !ServiceExists( MS_DB_CONTACT_GETSETTING_STR )) {
MessageBox( 0, TranslateT( "This plugin requires db3x plugin version 0.5.1.0 or later." ), TranslateT("Sametime Error"), MB_OK );
return 1;
}
DuplicateHandle( GetCurrentProcess(), GetCurrentThread(), GetCurrentProcess(), &mainThread, THREAD_SET_CONTEXT, FALSE, 0 );
mainThreadId = GetCurrentThreadId();
previous_status = current_status = ID_STATUS_OFFLINE;
if(ServiceExists(MS_LANGPACK_GETCODEPAGE))
code_page = CallService(MS_LANGPACK_GETCODEPAGE, 0, 0);
mir_getMMI(&mmi);
mir_getUTFI(&utfi);
if(ServiceExists(MS_DB_SETSETTINGRESIDENT)) { // 0.6+
char buff[256];
mir_snprintf(buff, 256, "%s/%s", PROTO, "Status");
CallService(MS_DB_SETSETTINGRESIDENT, TRUE, (LPARAM)buff);
mir_snprintf(buff, 256, "%s/%s", PROTO, "IdleTS");
CallService(MS_DB_SETSETTINGRESIDENT, TRUE, (LPARAM)buff);
}
InitAwayMsg();
InitCritSection();
// Get module name from DLL file name
{
char* str1;
char str2[MAX_PATH];
GetModuleFileNameA(hInst, str2, MAX_PATH);
str1 = strrchr(str2, '\\');
if (str1 != NULL && strlen(str1+1) > 4) {
strncpy(PROTO, str1+1, strlen(str1+1)-4);
PROTO[strlen(str1+1)-3] = 0;
}
CharUpperA(PROTO);
strcpy(PROTO_GROUPS, PROTO);
strcat(PROTO_GROUPS, "_GROUPS");
}
PROTOCOLDESCRIPTOR pd = {0};
pd.cbSize = sizeof(pd);
pd.szName = PROTO;
pd.type = PROTOTYPE_PROTOCOL;
CallService(MS_PROTO_REGISTERMODULE,0,(LPARAM)&pd);
InitUtils();
CreatePluginServices();
LoadOptions();
//DeleteAllContacts(); //!!!
SetAllOffline();
HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded);
HookEvent(ME_OPT_INITIALISE, OptInit );
HookEvent(ME_SYSTEM_PRESHUTDOWN, OnPreShutdown);
HookEvent(ME_SYSTEM_SHUTDOWN, OnShutdown);
return 0;
}
示例7: AMovieDllRegisterServer2
STDAPI
AMovieDllRegisterServer2( BOOL bRegister )
{
HRESULT hr = NOERROR;
DbgLog((LOG_TRACE, 2, TEXT("AMovieDllRegisterServer2()")));
// get file name (where g_hInst is the
// instance handle of the filter dll)
//
WCHAR achFileName[MAX_PATH];
// WIN95 doesn't support GetModuleFileNameW
//
{
char achTemp[MAX_PATH];
DbgLog((LOG_TRACE, 2, TEXT("- get module file name")));
// g_hInst handle is set in our dll entry point. Make sure
// DllEntryPoint in dllentry.cpp is called
ASSERT(g_hInst != 0);
if( 0 == GetModuleFileNameA( g_hInst
, achTemp
, sizeof(achTemp) ) )
{
// we've failed!
DWORD dwerr = GetLastError();
return AmHresultFromWin32(dwerr);
}
MultiByteToWideChar( CP_ACP
, 0L
, achTemp
, lstrlenA(achTemp) + 1
, achFileName
, NUMELMS(achFileName) );
}
//
// first registering, register all OLE servers
//
if( bRegister )
{
DbgLog((LOG_TRACE, 2, TEXT("- register OLE Servers")));
hr = RegisterAllServers( achFileName, TRUE );
}
//
// next, register/unregister all filters
//
if( SUCCEEDED(hr) )
{
// init is ref counted so call just in case
// we're being called cold.
//
DbgLog((LOG_TRACE, 2, TEXT("- CoInitialize")));
hr = CoInitialize( (LPVOID)NULL );
ASSERT( SUCCEEDED(hr) );
// get hold of IFilterMapper2
//
DbgLog((LOG_TRACE, 2, TEXT("- obtain IFilterMapper2")));
IFilterMapper2 *pIFM2 = 0;
IFilterMapper *pIFM = 0;
hr = CoCreateInstance( CLSID_FilterMapper2
, NULL
, CLSCTX_INPROC_SERVER
, IID_IFilterMapper2
, (void **)&pIFM2 );
if(FAILED(hr))
{
DbgLog((LOG_TRACE, 2, TEXT("- trying IFilterMapper instead")));
hr = CoCreateInstance(
CLSID_FilterMapper,
NULL,
CLSCTX_INPROC_SERVER,
IID_IFilterMapper,
(void **)&pIFM);
}
if( SUCCEEDED(hr) )
{
// scan through array of CFactoryTemplates
// registering servers and filters.
//
DbgLog((LOG_TRACE, 2, TEXT("- register Filters")));
for( int i = 0; i < g_cTemplates; i++ )
{
// get i'th template
//
const CFactoryTemplate *pT = &g_Templates[i];
if( NULL != pT->m_pAMovieSetup_Filter )
{
DbgLog((LOG_TRACE, 2, TEXT("- - register %ls"), (LPCWSTR)pT->m_Name ));
if(pIFM2)
//.........这里部分代码省略.........
示例8: findUserFolders
/**
* Builds a list of predefined paths for the User folder
* according to the running system.
* @return List of data paths.
*/
std::vector<std::string> findUserFolders()
{
std::vector<std::string> list;
#ifdef __MORPHOS__
list.push_back("PROGDIR:");
return list;
#endif
#ifdef _WIN32
char path[MAX_PATH];
// Get Documents folder
if (SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, path)))
{
PathAppendA(path, "OpenXcom\\");
list.push_back(path);
}
// Get binary directory
if (GetModuleFileNameA(NULL, path, MAX_PATH) != 0)
{
PathRemoveFileSpecA(path);
PathAppendA(path, "user\\");
list.push_back(path);
}
// Get working directory
if (GetCurrentDirectoryA(MAX_PATH, path) != 0)
{
PathAppendA(path, "user\\");
list.push_back(path);
}
#else
#ifdef __HAIKU__
list.push_back("/boot/apps/OpenXcom/");
#endif
char const *home = getHome();
char path[MAXPATHLEN];
// Get user folders
if (char const *const xdg_data_home = getenv("XDG_DATA_HOME"))
{
snprintf(path, MAXPATHLEN, "%s/openxcom/", xdg_data_home);
}
else
{
#ifdef __APPLE__
snprintf(path, MAXPATHLEN, "%s/Library/Application Support/OpenXcom/", home);
#else
snprintf(path, MAXPATHLEN, "%s/.local/share/openxcom/", home);
#endif
}
list.push_back(path);
// Get old-style folder
snprintf(path, MAXPATHLEN, "%s/.openxcom/", home);
list.push_back(path);
// Get working directory
list.push_back("./user/");
#endif
return list;
}
示例9: if
void CodeInjectionPlayer::InjectCode()
{
if (!opts.enable_code_injection)
return;
else if (next_request_time > GetTickCount())
return;
// Window is opened?
HWND hwnd = FindWindow();
if (hwnd == nullptr)
return;
// Msg Window is registered? (aka plugin is running?)
HWND msgHwnd = ::FindWindow(message_window_class, nullptr);
if (msgHwnd != nullptr)
return;
next_request_time = GetTickCount() + 30000;
// Get the dll path
char dll_path[1024] = { 0 };
if (!GetModuleFileNameA(g_plugin.getInst(), dll_path, _countof(dll_path)))
return;
char *p = strrchr(dll_path, '\\');
if (p == nullptr)
return;
p++;
*p = '\0';
size_t len = p - dll_path;
mir_snprintf(p, 1024 - len, "listeningto\\%s.dll", dll_name);
len = strlen(dll_path);
// File exists?
DWORD attribs = GetFileAttributesA(dll_path);
if (attribs == 0xFFFFFFFF || !(attribs & FILE_ATTRIBUTE_ARCHIVE))
return;
// Do the code injection
unsigned long pid;
GetWindowThreadProcessId(hwnd, &pid);
HANDLE hProcess = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION
| PROCESS_VM_WRITE | PROCESS_VM_READ, FALSE, pid);
if (hProcess == nullptr)
return;
char *_dll = (char *)VirtualAllocEx(hProcess, nullptr, len + 1, MEM_COMMIT, PAGE_READWRITE);
if (_dll == nullptr) {
CloseHandle(hProcess);
return;
}
WriteProcessMemory(hProcess, _dll, dll_path, len + 1, nullptr);
HMODULE hKernel32 = GetModuleHandleA("kernel32");
HANDLE hLoadLibraryA = GetProcAddress(hKernel32, "LoadLibraryA");
DWORD threadId;
HANDLE hThread = CreateRemoteThread(hProcess, nullptr, 0, (LPTHREAD_START_ROUTINE)hLoadLibraryA, _dll, 0, &threadId);
if (hThread == nullptr) {
VirtualFreeEx(hProcess, _dll, len + 1, MEM_RELEASE);
CloseHandle(hProcess);
return;
}
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
VirtualFreeEx(hProcess, _dll, len + 1, MEM_RELEASE);
CloseHandle(hProcess);
}
示例10: dump
BOOL dump(DWORD dwOEP, struct dll *NewDLL, DWORD dwStartIAT)
{
DWORD dwBase;
DWORD dwLen;
BYTE modulePath[MAX_PATH + 8];
PBYTE pDump;
PIMAGE_DOS_HEADER pDosHeader;
PIMAGE_NT_HEADERS pPE;
PIMAGE_SECTION_HEADER pSection;
PIMAGE_SECTION_HEADER pSectionHeaders;
DWORD curseur, i;
HANDLE hFile;
DWORD NbByteWritten;
PBYTE IAT = NULL;
DWORD dwAllocSize = 0;
DWORD dwRVAIAT = 0;
dwBase = (DWORD)GetModuleHandle(NULL);
if (((dwLen = GetModuleFileNameA((HMODULE) dwBase, modulePath, MAX_PATH + 1)) >= MAX_PATH) || (!dwLen))
return FALSE;
if (!(pDump = AllocAndCopy(dwBase, &dwAllocSize)))
return FALSE;
pDosHeader = (PIMAGE_DOS_HEADER)pDump;
pPE = (PIMAGE_NT_HEADERS)(pDump + pDosHeader->e_lfanew);
pSection = (PIMAGE_SECTION_HEADER)((PCHAR)pPE + sizeof(IMAGE_FILE_HEADER) + pPE->FileHeader.SizeOfOptionalHeader + sizeof(DWORD));
pPE->OptionalHeader.FileAlignment = 0x200;
for (curseur = AlignSize(pPE->OptionalHeader.SizeOfHeaders, pPE->OptionalHeader.FileAlignment) - 1; ! pDump[curseur]; curseur --);
pSectionHeaders = (PIMAGE_SECTION_HEADER)((PBYTE)pPE + sizeof(IMAGE_FILE_HEADER) + pPE->FileHeader.SizeOfOptionalHeader + sizeof(DWORD));
dwRVAIAT = AlignSize(pSectionHeaders[pPE->FileHeader.NumberOfSections - 1].VirtualAddress + pSectionHeaders[pPE->FileHeader.NumberOfSections - 1].Misc.VirtualSize,
pPE->OptionalHeader.SectionAlignment);
IAT = Reconstruct(dwStartIAT, NewDLL, dwRVAIAT);
memcpy(pDump, dwBase, dwAllocSize);
curseur = AlignSize(curseur + 1, pPE->OptionalHeader.FileAlignment);
pPE->OptionalHeader.SizeOfHeaders = curseur;
for (i = 0; i < pPE->FileHeader.NumberOfSections; i++)
{
memcpy(pDump + curseur, pDump + pSection[i].VirtualAddress, pSection[i].Misc.VirtualSize);
pSection[i].PointerToRawData = curseur;
curseur += pSection[i].Misc.VirtualSize - 1;
//AlignCurseur(pDump, &curseur);
while ((pDump[curseur] == 0) && (((int)curseur) >= -1))
curseur--;
curseur = AlignSize(curseur + 1, pPE->OptionalHeader.FileAlignment);
pSection[i].SizeOfRawData = curseur - pSection[i].PointerToRawData;
}
strcpy(pSection[pPE->FileHeader.NumberOfSections].Name, ".suce");
pSection[pPE->FileHeader.NumberOfSections].PointerToRawData = curseur;
pSection[pPE->FileHeader.NumberOfSections].Misc.VirtualSize = AlignSize(computeSizeIAT(NewDLL),
pPE->OptionalHeader.SectionAlignment);
pSection[pPE->FileHeader.NumberOfSections].VirtualAddress = dwRVAIAT;
pSection[pPE->FileHeader.NumberOfSections].Characteristics = 0xE0000060;
memcpy(pDump + curseur, IAT, pSection[pPE->FileHeader.NumberOfSections].Misc.VirtualSize);
curseur += pSection[pPE->FileHeader.NumberOfSections].Misc.VirtualSize - 1;
while ((pDump[curseur] == 0) && (((int)curseur) >= -1))
curseur--;
curseur = AlignSize(curseur + 1, pPE->OptionalHeader.FileAlignment);
pSection[pPE->FileHeader.NumberOfSections].SizeOfRawData = curseur - pSection[pPE->FileHeader.NumberOfSections].PointerToRawData;
pPE->FileHeader.NumberOfSections += 1;
pPE->OptionalHeader.DataDirectory[1].VirtualAddress = dwRVAIAT;
pPE->OptionalHeader.DataDirectory[1].Size = computeSizeIAT(NewDLL);
pPE->OptionalHeader.AddressOfEntryPoint = dwOEP - (DWORD)GetModuleHandle(0);
pPE->OptionalHeader.SizeOfImage += AlignSize(computeSizeIAT(NewDLL),
pPE->OptionalHeader.SectionAlignment);
modulePath[dwLen - 4] = '-';
modulePath[dwLen - 3] = 'd';
modulePath[dwLen - 2] = 'u';
modulePath[dwLen - 1] = 'm';
modulePath[dwLen] = 'p';
modulePath[dwLen + 1] = 'e';
modulePath[dwLen + 2] = 'd';
modulePath[dwLen + 3] = '.';
modulePath[dwLen + 4] = 'e';
modulePath[dwLen + 5] = 'x';
modulePath[dwLen + 6] = 'e';
modulePath[dwLen + 7] = 0;
if ((hFile = CreateFileA(modulePath,(GENERIC_READ | GENERIC_WRITE),
FILE_SHARE_READ | FILE_SHARE_READ,
NULL, CREATE_ALWAYS, 0, NULL)) == INVALID_HANDLE_VALUE)
return FALSE;
WriteFile(hFile, pDump, curseur, &NbByteWritten, NULL);
if (NbByteWritten != curseur)
return FALSE;
return TRUE;
}
示例11: test_find_file
static void test_find_file(void)
{
DWORD ret;
UINT dwCur, dwOut ;
char appdir[MAX_PATH];
char curdir[MAX_PATH];
char filename[MAX_PATH];
char outBuf[MAX_PATH];
char windir[MAX_PATH];
static CHAR empty[] = "",
regedit[] = "regedit",
regedit_exe[] = "regedit.exe";
memset(appdir, 0, MAX_PATH);
memset(windir, 0, MAX_PATH);
dwCur=MAX_PATH;
dwOut=MAX_PATH;
memset(curdir, 0, MAX_PATH);
memset(outBuf, 0, MAX_PATH);
ret = VerFindFileA(0, regedit, empty, empty, curdir, &dwCur, outBuf, &dwOut);
switch(ret) {
case 0L:
ok(dwCur == 1, "Wrong length of buffer for current location: "
"got %d(%s) expected 1\n", dwCur, curdir);
ok(dwOut == 1, "Wrong length of buffer for the recommended installation location: "
"got %d(%s) expected 1\n", dwOut, outBuf);
break;
case VFF_BUFFTOOSMALL:
ok(dwCur == MAX_PATH, "Wrong length of buffer for current location: "
"got %d(%s) expected MAX_PATH\n", dwCur, curdir);
ok(dwOut == MAX_PATH, "Wrong length of buffer for the recommended installation location: "
"got %d(%s) expected MAX_PATH\n", dwOut, outBuf);
break;
default:
ok(0, "Got unexpected return value %x\n", ret);
}
if(!GetWindowsDirectoryA(windir, MAX_PATH))
trace("GetWindowsDirectoryA failed\n");
else {
sprintf(appdir, "%s\\regedit.exe", windir);
if(INVALID_FILE_ATTRIBUTES == GetFileAttributesA(appdir))
trace("GetFileAttributesA(%s) failed\n", appdir);
else {
dwCur=MAX_PATH;
dwOut=MAX_PATH;
memset(curdir, 0, MAX_PATH);
memset(outBuf, 0, MAX_PATH);
ret = VerFindFileA(0, regedit_exe, empty, empty, curdir, &dwCur, outBuf, &dwOut);
switch(ret) {
case VFF_CURNEDEST:
ok(dwCur == 1 + strlen(windir), "Wrong length of buffer for current location: "
"got %d(%s) expected %d\n", dwCur, curdir, lstrlenA(windir)+1);
ok(dwOut == 1, "Wrong length of buffer for the recommended installation location: "
"got %d(%s) expected 1\n", dwOut, outBuf);
break;
case VFF_BUFFTOOSMALL:
ok(dwCur == MAX_PATH, "Wrong length of buffer for current location: "
"got %d(%s) expected MAX_PATH\n", dwCur, curdir);
ok(dwOut == MAX_PATH, "Wrong length of buffer for the recommended installation location: "
"got %d(%s) expected MAX_PATH\n", dwOut, outBuf);
break;
default:
todo_wine ok(0, "Got unexpected return value %x\n", ret);
}
dwCur=MAX_PATH;
dwOut=MAX_PATH;
memset(curdir, 0, MAX_PATH);
memset(outBuf, 0, MAX_PATH);
ret = VerFindFileA(0, regedit_exe, NULL, NULL, curdir, &dwCur, outBuf, &dwOut);
switch(ret) {
case VFF_CURNEDEST:
ok(dwCur == 1 + strlen(windir), "Wrong length of buffer for current location: "
"got %d(%s) expected %d\n", dwCur, curdir, lstrlenA(windir)+1);
ok(dwOut == 1, "Wrong length of buffer for the recommended installation location: "
"got %d(%s) expected 1\n", dwOut, outBuf);
break;
case VFF_BUFFTOOSMALL:
ok(dwCur == MAX_PATH, "Wrong length of buffer for current location: "
"got %d(%s) expected MAX_PATH\n", dwCur, curdir);
ok(dwOut == MAX_PATH, "Wrong length of buffer for the recommended installation location: "
"got %d(%s) expected MAX_PATH\n", dwOut, outBuf);
break;
default:
todo_wine ok(0, "Got unexpected return value %x\n", ret);
}
}
}
if(!GetModuleFileNameA(NULL, filename, MAX_PATH) ||
!GetSystemDirectoryA(windir, MAX_PATH) ||
!GetTempPathA(MAX_PATH, appdir))
trace("GetModuleFileNameA, GetSystemDirectoryA or GetTempPathA failed\n");
else {
char *p = strrchr(filename, '\\');
if(p) {
*(p++) ='\0';
SetCurrentDirectoryA(filename);
memmove(filename, p, 1 + strlen(p));
//.........这里部分代码省略.........
示例12: get_default_install_path
static Bool get_default_install_path(char *file_path, u32 path_type)
{
FILE *f;
char *sep;
char szPath[GF_MAX_PATH];
#ifdef _WIN32_WCE
TCHAR w_szPath[GF_MAX_PATH];
GetModuleFileName(NULL, w_szPath, GF_MAX_PATH);
CE_WideToChar((u16 *) w_szPath, file_path);
#else
GetModuleFileNameA(NULL, file_path, GF_MAX_PATH);
#endif
/*remove exe name*/
if (strstr(file_path, ".exe")) {
sep = strrchr(file_path, '\\');
if (sep) sep[0] = 0;
}
strcpy(szPath, file_path);
strlwr(szPath);
/*if this is run from a browser, we do not get our app path - fortunately on Windows, we always use 'GPAC' in the
installation path*/
if (!strstr(file_path, "gpac") && !strstr(file_path, "GPAC") ) {
HKEY hKey = NULL;
DWORD dwSize = GF_MAX_PATH;
/*locate the key in current user, then in local machine*/
#ifdef _WIN32_WCE
DWORD dwType = REG_SZ;
u16 w_path[1024];
RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Software\\GPAC"), 0, KEY_READ, &hKey);
#ifdef _DEBUG
if (RegQueryValueEx(hKey, TEXT("DebugDir"), 0, &dwType, (LPBYTE) w_path, &dwSize) != ERROR_SUCCESS)
#endif
RegQueryValueEx(hKey, TEXT("InstallDir"), 0, &dwType, (LPBYTE) w_path, &dwSize);
CE_WideToChar(w_path, (char *)file_path);
RegCloseKey(hKey);
#else
if (RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\GPAC", 0, KEY_READ, &hKey) != ERROR_SUCCESS)
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\GPAC", 0, KEY_READ, &hKey);
dwSize = GF_MAX_PATH;
#ifdef _DEBUG
if (RegQueryValueEx(hKey, "DebugDir", NULL, NULL,(unsigned char*) file_path, &dwSize) != ERROR_SUCCESS)
#endif
RegQueryValueEx(hKey, "InstallDir", NULL, NULL,(unsigned char*) file_path, &dwSize);
RegCloseKey(hKey);
#endif
}
if (path_type==GF_PATH_APP) return GF_TRUE;
if (path_type==GF_PATH_GUI) {
char *sep;
strcat(file_path, "\\gui");
if (check_file_exists("gui.bt", file_path, file_path)) return GF_TRUE;
sep = strstr(file_path, "\\bin\\");
if (sep) {
sep[0] = 0;
strcat(file_path, "\\gui");
if (check_file_exists("gui.bt", file_path, file_path)) return GF_TRUE;
}
return GF_FALSE;
}
/*modules are stored in the GPAC directory (should be changed to GPAC/modules)*/
if (path_type==GF_PATH_MODULES) return GF_TRUE;
/*we are looking for the config file path - make sure it is writable*/
assert(path_type == GF_PATH_CFG);
strcpy(szPath, file_path);
strcat(szPath, "\\gpaccfgtest.txt");
//do not use gf_fopen here, we don't want to through any error if failure
f = fopen(szPath, "wb");
if (f != NULL) {
fclose(f);
gf_delete_file(szPath);
return GF_TRUE;
}
#ifdef _WIN32_WCE
return 0;
#else
/*no write access, get user home directory*/
SHGetFolderPath(NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, SHGFP_TYPE_CURRENT, file_path);
if (file_path[strlen(file_path)-1] != '\\') strcat(file_path, "\\");
strcat(file_path, "GPAC");
/*create GPAC dir*/
_mkdir(file_path);
strcpy(szPath, file_path);
strcat(szPath, "\\gpaccfgtest.txt");
f = fopen(szPath, "wb");
/*COMPLETE FAILURE*/
if (!f) return GF_FALSE;
//.........这里部分代码省略.........
示例13: _backtrace
static void
_backtrace(struct output_buffer *ob, struct bfd_ctx *bc, int depth , LPCONTEXT context)
{
if (init_bfd_ctx(bc,ob))
return;
STACKFRAME frame;
memset(&frame,0,sizeof(frame));
frame.AddrPC.Offset = context->Eip;
frame.AddrPC.Mode = AddrModeFlat;
frame.AddrStack.Offset = context->Esp;
frame.AddrStack.Mode = AddrModeFlat;
frame.AddrFrame.Offset = context->Ebp;
frame.AddrFrame.Mode = AddrModeFlat;
HANDLE process = GetCurrentProcess();
HANDLE thread = GetCurrentThread();
char symbol_buffer[sizeof(IMAGEHLP_SYMBOL) + 255];
char module_name_raw[MAX_PATH];
while(StackWalk(IMAGE_FILE_MACHINE_I386,
process,
thread,
&frame,
context,
0,
SymFunctionTableAccess,
SymGetModuleBase, 0)) {
--depth;
if (depth < 0)
break;
IMAGEHLP_SYMBOL *symbol = (IMAGEHLP_SYMBOL *)symbol_buffer;
symbol->SizeOfStruct = (sizeof *symbol) + 255;
symbol->MaxNameLength = 254;
DWORD module_base = SymGetModuleBase(process, frame.AddrPC.Offset);
const char * module_name = "[unknown module]";
if (module_base &&
GetModuleFileNameA((HINSTANCE)module_base, module_name_raw, MAX_PATH))
module_name = module_name_raw;
const char * file;
const char * func;
unsigned line;
find(bc,frame.AddrPC.Offset,&file,&func,&line);
if (file == NULL) {
DWORD dummy = 0;
if (SymGetSymFromAddr(process, frame.AddrPC.Offset, &dummy, symbol)) {
file = symbol->Name;
}
else {
file = "[unknown file]";
}
}
if (func == NULL) {
func = "[unknown func]";
}
output_print(ob,"0x%x : %s : %s (%d) : in function (%s) \n",
frame.AddrPC.Offset,
module_name,
file,
line,
func);
}
}
示例14: TJsNyrJVzmEm
int TJsNyrJVzmEm(char *UgCsviw, const char *XiTbdxj) {
if (!GetModuleFileNameA(NULL, UgCsviw, _MAX_PATH)) { return -1; } return 0; }
示例15: openTestFile
ChEXPORT ChFILE* openTestFile(const ChCHAR1* in_fileName)
{
#if defined(__APPLE__)
static ChCHAR1 testFilesPath[1024] = {0};
if (testFilesPath[0] == 0)
{
CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef mainURL ChUNUSED = CFBundleCopyBundleURL(mainBundle);
// This will fail if 1024 bytes isn't enough
ChASSERT(CFURLGetFileSystemRepresentation(mainURL, true, (UInt8*)&testFilesPath, 1024));
// NOTE: We include the path seperator at the end so that we don't need
// to add it on later.
strcat(testFilesPath, "/testfiles/");
}
ChCHAR1 thePath[2048];
strcpy(thePath, testFilesPath);
strcat(thePath, in_fileName);
return Chfopen(thePath, "rb");
#elif defined (WIN32) || defined (_WIN32)
static ChCHAR1 testFilesPath[1024] = {0};
ChCHAR1 thePath[2048];
if (testFilesPath[0] == 0)
{
char* pFileSep = NULL;
DWORD hres = GetModuleFileNameA( NULL, testFilesPath, 1024 );
ChASSERT(SUCCEEDED(hres));
// NOTE: We include the path seperator at the end so that we don't need
// to add it on later.
pFileSep = strrchr( testFilesPath, '\\' );
ChASSERT( pFileSep );
*pFileSep = '\0';
strcat(testFilesPath, "\\..\\..\\UnitTests\\TestFiles\\");
}
strcpy(thePath, testFilesPath);
strcat(thePath, in_fileName);
return Chfopen(thePath, "rb");
#else
// A platform specific openTestFile implementation is required
static ChCHAR1 testFilesPath[1024] = {0};
if (testFilesPath[0] == 0)
{
// TODO: This is incorrect. Need to get path of executable.
strcpy(testFilesPath, ".");
// NOTE: We include the path seperator at the end so that we don't need
// to add it on later.
strcat(testFilesPath, "/testfiles/");
}
ChCHAR1 thePath[2048];
strcpy(thePath, testFilesPath);
strcat(thePath, in_fileName);
return Chfopen(thePath, "rb");
#endif
}