- 进程实例句柄
extern "C" const IMAGE_DOS_HEADER __ImageBase; void DumpModule() { // Get bass address of the main thread HMODULE hModule = GetModuleHandle(NULL); _tprintf(TEXT("GetModuleHandle(NULL) = 0x%x\r\n"), hModule); _tprintf(TEXT("__ImageBase = 0x%x\r\n"), (HINSTANCE)&__ImageBase); hModule = NULL; GetModuleHandleEx( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (PCTSTR)DumpModule, &hModule); _tprintf(TEXT("GetModuleHandleEx = 0x%x\r\n"), hModule); // Get module full file path TCHAR str[256]; GetModuleFileName(hModule, str, sizeof(str)); _tprintf(TEXT("ModuleFileName = %s\r\n"), str); }
- 进程命令行
GetCommandLine - 进程的环境变量
GetEnvironmentVariablevoid GetEnvVariable() { // Get the whole environment settings PTSTR pEnvBlock = GetEnvironmentStrings(); TCHAR szName[MAX_PATH]; TCHAR szValue[MAX_PATH]; PTSTR pszCurrent = pEnvBlock; HRESULT hr = S_OK; PCTSTR pszPos = NULL; int current = 0; while(pszCurrent != NULL) { /* Skip meaningless strings like: "=::=::=\" */ if(*pszCurrent != TEXT('=')) { // Look for "=" separator pszPos = _tcschr(pszCurrent, TEXT('=')); ++pszPos; // Get the environment name size_t cbNameLength = (size_t)pszPos - (size_t)pszCurrent - sizeof(TEXT('=')); hr = StringCbCopyN(szName, MAX_PATH, pszCurrent, cbNameLength); if(FAILED(hr)) break; // Get the environment value hr = StringCbCopy(szValue, MAX_PATH, pszPos); if(SUCCEEDED(hr)) { _tprintf(TEXT("[%u] %s=%s\r\n"), current, szName, szValue); } else { break; } } // Move to next environment variable ++current; while(*pszCurrent++ != TEXT('\0')) ; // Check if the last string if(*pszCurrent == TEXT('\0')) break; } // Don't forget to free the memory FreeEnvironmentStrings(pEnvBlock); }
ExpandEnvironmentStrings
SetEnvironmentVariable - 进程
CreateProcess
转载于:https://my.oschina.net/freedomart/blog/129074