std::string CSysInfo::GetOsPrettyNameWithVersion(void) { static std::string osNameVer; if (!osNameVer.empty()) return osNameVer; #if defined(TARGET_FREEBSD) || defined(TARGET_DARWIN_IOS) || defined(TARGET_DARWIN_OSX) osNameVer = GetOsName() + " " + GetOsVersion(); #elif defined(TARGET_ANDROID) osNameVer = GetOsName() + " " + GetOsVersion() + " API level " + StringUtils::Format("%d", CJNIBuild::SDK_INT); #elif defined(TARGET_LINUX) osNameVer = getValueFromOs_release("PRETTY_NAME"); if (osNameVer.empty()) { osNameVer = getValueFromLsb_release(lsb_rel_description); std::string osName(GetOsName(true)); if (!osName.empty() && osNameVer.find(osName) == std::string::npos) osNameVer = osName + osNameVer; if (osNameVer.empty()) osNameVer = "Unknown Linux Distribution"; } if (osNameVer.find(GetOsVersion()) == std::string::npos) osNameVer += " " + GetOsVersion(); #endif // defined(TARGET_LINUX) if (osNameVer.empty()) osNameVer = "Unknown OS Unknown version"; return osNameVer; }
//============================================================================= BOOL CXFolderDialog::IsWin2000() //============================================================================= { if (GetOsVersion() == XFILEDIALOG_OS_VERSION_4) return FALSE; else if (GetOsVersion() == XFILEDIALOG_OS_VERSION_5) return TRUE; // auto detect if (Is2000OrGreater()) return TRUE; return FALSE; }
static void BuildSystemInfo() { str::Str<char> s(1024); GetProgramInfo(s); GetOsVersion(s); GetSystemInfo(s); gSystemInfo = s.StealData(); }
unsigned WINAPI init_safed(void * pParam) { HMODULE hNtdll; DWORD ver = GetOsVersion(); TrueLoadLibraryExW = (_NtLoadLibraryExW)GetProcAddress(GetModuleHandleW(L"kernel32.dll"),"LoadLibraryExW"); if (!TrueLoadLibraryExW) { #ifdef _LOGDEBUG logmsg("TrueLoadLibraryExW is null %lu\n",GetLastError()); #endif } hNtdll = GetModuleHandleW(L"ntdll.dll"); if (hNtdll) { TrueNtSuspendThread = (_NtSuspendThread)GetProcAddress (hNtdll, "NtSuspendThread"); TrueNtResumeThread = (_NtResumeThread)GetProcAddress (hNtdll, "NtResumeThread"); TrueNtQueryInformationProcess = (_NtQueryInformationProcess)GetProcAddress(hNtdll, "NtQueryInformationProcess"); TrueNtWriteVirtualMemory = (_NtWriteVirtualMemory)GetProcAddress(hNtdll, "NtWriteVirtualMemory"); TrueRtlNtStatusToDosError = (_RtlNtStatusToDosError)GetProcAddress(hNtdll, "RtlNtStatusToDosError"); if (ver>601) /* win8 */ { TrueNtCreateUserProcess = (_NtCreateUserProcess)GetProcAddress(hNtdll, "NtCreateUserProcess"); if (TrueNtCreateUserProcess) { Mhook_SetHook((PVOID*)&TrueNtCreateUserProcess, (PVOID)HookNtCreateUserProcess); } } else { TrueCreateProcessInternalW = (_CreateProcessInternalW)GetProcAddress(GetModuleHandleW(L"kernel32.dll"), "CreateProcessInternalW"); if (TrueCreateProcessInternalW) { Mhook_SetHook((PVOID*)&TrueCreateProcessInternalW, (PVOID)HookCreateProcessInternalW); } } } if (TrueLoadLibraryExW) { Mhook_SetHook((PVOID*)&TrueLoadLibraryExW, (PVOID)HookLoadLibraryExW); } if (TrueNtWriteVirtualMemory) { Mhook_SetHook((PVOID*)&TrueNtWriteVirtualMemory, (PVOID)HookNtWriteVirtualMemory); } return (1); }
void CWZStep3::InitControl() { CString strText; WCHAR szMailPath[MAX_PATH]; WCHAR szAddressPath[MAX_PATH]; switch(g_pSetting->DataInfo.wBackupType) { case FILE_BACKUP: GetDlgItem(IDC_TXT_MAIL_CLIENT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_RADIO1)->ShowWindow(SW_HIDE); GetDlgItem(IDC_RADIO2)->ShowWindow(SW_HIDE); GetDlgItem(IDC_RADIO3)->ShowWindow(SW_HIDE); GetDlgItem(IDC_EDIT_DIRECTORY)->ShowWindow(SW_SHOW); GetDlgItem(IDC_LIST1)->ShowWindow(SW_SHOW); GetDlgItem(IDC_REFER)->ShowWindow(SW_SHOW); GetDlgItem(IDC_ADD)->ShowWindow(SW_SHOW); GetDlgItem(IDC_REMOVE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_TXT_INDIVALDIR)->ShowWindow(SW_SHOW); GetDlgItem(IDC_TXT_SOURCE_DIR)->ShowWindow(SW_SHOW); GetDlgItem(IDC_IMAGE_PATH)->ShowWindow(SW_HIDE); GetDlgItem(IDC_REFER_IMAGE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_TXT_IMAGE)->ShowWindow(SW_HIDE); break; case OE_MAIL_BACKUP: case WIN_MAIL_BACKUP: // here should fall through // the user may user wizard to go forward and back // so we just consider the case of OE_MAIL_BACKUP case MAIL_BACKUP: GetDlgItem(IDC_TXT_MAIL_CLIENT)->ShowWindow(SW_SHOW); GetDlgItem(IDC_RADIO1)->ShowWindow(SW_SHOW); GetDlgItem(IDC_RADIO2)->ShowWindow(SW_SHOW); GetDlgItem(IDC_RADIO3)->ShowWindow(SW_SHOW); if (GetOsVersion()) strText.LoadString(IDS_WINDOWS_MAIL); else strText.LoadString(IDS_OUTLOOK_EXPRESS); GetDlgItem(IDC_RADIO1)->SetWindowText(strText); GetDlgItem(IDC_RADIO1)->EnableWindow(NewGetOutlookExpressDataPath(szMailPath,szAddressPath)); GetDlgItem(IDC_RADIO2)->EnableWindow(GetOutlookDataPath(szMailPath)); GetDlgItem(IDC_RADIO3)->EnableWindow(GetBecky2DataPath(szMailPath)); GetDlgItem(IDC_EDIT_DIRECTORY)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LIST1)->ShowWindow(SW_HIDE); GetDlgItem(IDC_REFER)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ADD)->ShowWindow(SW_HIDE); GetDlgItem(IDC_REMOVE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_TXT_INDIVALDIR)->ShowWindow(SW_HIDE); GetDlgItem(IDC_TXT_SOURCE_DIR)->ShowWindow(SW_HIDE); GetDlgItem(IDC_IMAGE_PATH)->ShowWindow(SW_HIDE); GetDlgItem(IDC_REFER_IMAGE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_TXT_IMAGE)->ShowWindow(SW_HIDE); break; case BACKUP_TYPE_DIFF: GetDlgItem(IDC_TXT_MAIL_CLIENT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_RADIO1)->ShowWindow(SW_HIDE); GetDlgItem(IDC_RADIO2)->ShowWindow(SW_HIDE); GetDlgItem(IDC_RADIO3)->ShowWindow(SW_HIDE); GetDlgItem(IDC_EDIT_DIRECTORY)->ShowWindow(SW_HIDE); GetDlgItem(IDC_LIST1)->ShowWindow(SW_HIDE); GetDlgItem(IDC_REFER)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ADD)->ShowWindow(SW_HIDE); GetDlgItem(IDC_REMOVE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_TXT_INDIVALDIR)->ShowWindow(SW_HIDE); GetDlgItem(IDC_TXT_SOURCE_DIR)->ShowWindow(SW_HIDE); GetDlgItem(IDC_IMAGE_PATH)->ShowWindow(SW_SHOW); GetDlgItem(IDC_REFER_IMAGE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_TXT_IMAGE)->ShowWindow(SW_SHOW); break; default: break; } }
LRESULT CWZStep3::OnWizardNext() { int nTotal,i; WCHAR szMailPath[MAX_PATH]; WCHAR szAddressPath[MAX_PATH]; UpdateData(TRUE); if(MAIL_BACKUP == g_pSetting->DataInfo.wBackupType ) { if( -1 == m_nMailType) { AfxMessageBox(IDS_SELECT_MAIL_CLIENT,MB_OK|MB_ICONINFORMATION,NULL); return -1; } if( 0 == m_nMailType ) // 1 is the second radio box { if (GetOsVersion()) (*g_pSetting).DataInfo.wBackupType = WIN_MAIL_BACKUP; else (*g_pSetting).DataInfo.wBackupType = OE_MAIL_BACKUP; } } // TODO: Add your specialized code here and/or call the base class if (g_pSetting->pcaSource.GetSize()) g_pSetting->pcaSource.RemoveAll(); switch(g_pSetting->DataInfo.wBackupType) { case FILE_BACKUP: nTotal = m_SourceList.GetItemCount(); if (nTotal <= 0) { AfxMessageBox(IDS_SOURCE_EMPTY,MB_OK | MB_ICONINFORMATION); return -1; } for (i = 0; i < nTotal;i ++) { CString temp = m_SourceList.GetItemText(i,0); g_pSetting->pcaSource.Add(temp); } break; case OE_MAIL_BACKUP: case WIN_MAIL_BACKUP: // here should fall through case MAIL_BACKUP: switch (m_nMailType) { case 0: // if (GetOutlookExpressDataPath(szMailPath)) if (NewGetOutlookExpressDataPath(szMailPath,szAddressPath)) { // the sequence is important // in the restore program we will use the first element // as the mail data path and check it exist or not // if not exist we will ask the user // if he want to restore the file to current mail address if (GetOsVersion()) { // wcscat(szMailPath,L"\\Local Folders"); wcscat(szAddressPath,L"\\Contacts"); } g_pSetting->pcaSource.Add(szMailPath); g_pSetting->pcaSource.Add(szAddressPath); } else { AfxMessageBox(IDS_SOURCE_EMPTY,MB_OK | MB_ICONINFORMATION); return -1; } break; case 1: if (GetOutlookDataPath(szMailPath)) g_pSetting->pcaSource.Add(szMailPath); else { AfxMessageBox(IDS_SOURCE_EMPTY,MB_OK | MB_ICONINFORMATION); return -1; } break; case 2: if (GetBecky2DataPath(szMailPath)) g_pSetting->pcaSource.Add(szMailPath); else { AfxMessageBox(IDS_SOURCE_EMPTY,MB_OK | MB_ICONINFORMATION); return -1; } break; default: break; } break; case BACKUP_TYPE_DIFF: if ((GetFileAttributes(m_ImagePath.GetBuffer(0)) == -1) || !IsValidAMGPath(m_ImagePath.GetBuffer(0))) { AfxMessageBox(IDS_INVALID_IMAGE,MB_OK | MB_ICONINFORMATION); return -1; } g_pSetting->DataInfo.wBackupType = BACKUP_TYPE_DIFF; wcscpy(g_pSetting->DataInfo.szTargetImage,(LPCTSTR)m_ImagePath); break; } // TODO: Add your specialized code here and/or call the base class return CPropertyPageEx::OnWizardNext(); }
std::string CSysInfo::GetUserAgent() { static std::string result; if (!result.empty()) return result; result = GetAppName() + "/" + CSysInfo::GetVersionShort() + " ("; #if defined(TARGET_DARWIN) #if defined(TARGET_DARWIN_IOS) std::string iDevStr(GetModelName()); // device model name with number of model version size_t iDevStrDigit = iDevStr.find_first_of("0123456789"); std::string iDev(iDevStr, 0, iDevStrDigit); // device model name without number if (iDevStrDigit == 0) iDev = "unknown"; result += iDev + "; "; std::string iOSVerison(GetOsVersion()); size_t lastDotPos = iOSVerison.rfind('.'); if (lastDotPos != std::string::npos && iOSVerison.find('.') != lastDotPos && iOSVerison.find_first_not_of('0', lastDotPos + 1) == std::string::npos) iOSVerison.erase(lastDotPos); StringUtils::Replace(iOSVerison, '.', '_'); if (iDev == "AppleTV4") result += "CPU TVOS "; else if (iDev == "iPad" || iDev == "AppleTV") result += "CPU OS "; else result += "CPU iPhone OS "; result += iOSVerison + " like Mac OS X"; #else result += "Macintosh; "; std::string cpuFam(GetBuildTargetCpuFamily()); if (cpuFam == "x86") result += "Intel "; else if (cpuFam == "PowerPC") result += "PPC "; result += "Mac OS X "; std::string OSXVersion(GetOsVersion()); StringUtils::Replace(OSXVersion, '.', '_'); result += OSXVersion; #endif #elif defined(TARGET_ANDROID) result += "Linux; Android "; std::string versionStr(GetOsVersion()); const size_t verLen = versionStr.length(); if (verLen >= 2 && versionStr.compare(verLen - 2, 2, ".0", 2) == 0) versionStr.erase(verLen - 2); // remove last ".0" if any result += versionStr; std::string deviceInfo(GetModelName()); char buildId[PROP_VALUE_MAX]; int propLen = __system_property_get("ro.build.id", buildId); if (propLen > 0 && propLen <= PROP_VALUE_MAX) { if (!deviceInfo.empty()) deviceInfo += " "; deviceInfo += "Build/"; deviceInfo.append(buildId, propLen); } if (!deviceInfo.empty()) result += "; " + deviceInfo; #elif defined(TARGET_POSIX) result += "X11; "; struct utsname un; if (uname(&un) == 0) { std::string cpuStr(un.machine); if (cpuStr == "x86_64" && GetXbmcBitness() == 32) cpuStr = "i686 (x86_64)"; result += un.sysname; result += " "; result += cpuStr; } else result += "Unknown"; #else result += "Unknown"; #endif result += ")"; if (GetAppName() != "Kodi") result += " Kodi_Fork_" + GetAppName() + "/1.0"; // default fork number is '1.0', replace it with actual number if necessary #ifdef TARGET_LINUX // Add distribution name std::string linuxOSName(GetOsName(true)); if (!linuxOSName.empty()) result += " " + linuxOSName + "/" + GetOsVersion(); #endif #ifdef TARGET_RASPBERRY_PI result += " HW_RaspberryPi/1.0"; #elif defined (TARGET_DARWIN_IOS) std::string iDevVer; if (iDevStrDigit == std::string::npos) iDevVer = "0.0"; else iDevVer.assign(iDevStr, iDevStrDigit, std::string::npos); StringUtils::Replace(iDevVer, ',', '.'); result += " HW_" + iDev + "/" + iDevVer; #endif // add more device IDs here if needed. // keep only one device ID in result! Form: // result += " HW_" + "deviceID" + "/" + "1.0"; // '1.0' if device has no version #if defined(TARGET_ANDROID) // Android has no CPU string by default, so add it as additional parameter struct utsname un1; if (uname(&un1) == 0) { std::string cpuStr(un1.machine); StringUtils::Replace(cpuStr, ' ', '_'); result += " Sys_CPU/" + cpuStr; } #endif result += " App_Bitness/" + StringUtils::Format("%d", GetXbmcBitness()); std::string fullVer(CSysInfo::GetVersion()); StringUtils::Replace(fullVer, ' ', '-'); result += " Version/" + fullVer; return result; }
std::string CSysInfo::GetOsPrettyNameWithVersion(void) { static std::string osNameVer; if (!osNameVer.empty()) return osNameVer; #if defined (TARGET_WINDOWS) OSVERSIONINFOEXW osvi = {}; osNameVer = "Windows "; if (sysGetVersionExWByRef(osvi)) { switch (GetWindowsVersion()) { case WindowsVersionVista: if (osvi.wProductType == VER_NT_WORKSTATION) osNameVer.append("Vista"); else osNameVer.append("Server 2008"); break; case WindowsVersionWin7: if (osvi.wProductType == VER_NT_WORKSTATION) osNameVer.append("7"); else osNameVer.append("Server 2008 R2"); break; case WindowsVersionWin8: if (osvi.wProductType == VER_NT_WORKSTATION) osNameVer.append("8"); else osNameVer.append("Server 2012"); break; case WindowsVersionWin8_1: if (osvi.wProductType == VER_NT_WORKSTATION) osNameVer.append("8.1"); else osNameVer.append("Server 2012 R2"); break; case WindowsVersionFuture: osNameVer.append("Unknown Future Version"); break; default: osNameVer.append("Unknown version"); break; } // Append Service Pack version if any if (osvi.wServicePackMajor > 0 || osvi.wServicePackMinor > 0) { osNameVer.append(StringUtils::Format(" SP%d", osvi.wServicePackMajor)); if (osvi.wServicePackMinor > 0) { osNameVer.append(StringUtils::Format(".%d", osvi.wServicePackMinor)); } } } else osNameVer.append(" unknown"); #elif defined(TARGET_FREEBSD) || defined(TARGET_DARWIN_IOS) || defined(TARGET_DARWIN_OSX) osNameVer = GetOsName() + " " + GetOsVersion(); #elif defined(TARGET_ANDROID) osNameVer = GetOsName() + " " + GetOsVersion() + " API level " + StringUtils::Format("%d", CJNIBuild::SDK_INT); #elif defined(TARGET_LINUX) osNameVer = getValueFromOs_release("PRETTY_NAME"); if (osNameVer.empty()) { osNameVer = getValueFromLsb_release(lsb_rel_description); std::string osName(GetOsName(true)); if (!osName.empty() && osNameVer.find(osName) == std::string::npos) osNameVer = osName + osNameVer; if (osNameVer.empty()) osNameVer = "Unknown Linux Distribution"; } if (osNameVer.find(GetOsVersion()) == std::string::npos) osNameVer += " " + GetOsVersion(); #endif // defined(TARGET_LINUX) if (osNameVer.empty()) osNameVer = "Unknown OS Unknown version"; return osNameVer; }
NTSTATUS DriverEntry ( PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryString ) /*++ Routine Description: Diver entry point. Initializes global variables and complete hook operation. Arguments: DriverObject - A pointer to this driver, provided by system. RegistryString - A pointer to register path used by this driver, provided by system. Return Value: Returns corresponding NTSTATUS to indicate success or failure. Author: xiaonie 2012/07/12 --*/ { NTSTATUS status; DbgPrint("NDIS Hook ------ start!\r\n"); // check os version if (OS_VERSION_XP != GetOsVersion()) { DbgPrint("Only XP supported!\r\n"); return STATUS_UNSUCCESSFUL; } // setup unload routine for this driver DriverObject->DriverUnload = OnUnload; // init global viaribles. KeInitializeSpinLock(&g_lock); InitializeListHead(&g_linkListHead); NdisAllocatePacketPool(&status,&g_PacketPool, 0x1000, PROTOCOL_RESERVED_SIZE_IN_PACKET); if (status != NDIS_STATUS_SUCCESS/* || g_PacketPool == NULL*/) { DbgPrint("alloc packet pool failed!\r\n"); return status; } NdisAllocateBufferPool(&status, &g_BufferPool, 0x10); if(status != NDIS_STATUS_SUCCESS/* || g_BufferPool == NULL*/) { DbgPrint("alloc buffer pool failed!\r\n"); NdisFreePacketPool(g_PacketPool); return status; } // hook nids routines status = HookNdis(); if (!NT_SUCCESS(status)) { DbgPrint("HookNdis failed!\r\n"); NdisFreeBufferPool(g_BufferPool); NdisFreePacketPool(g_PacketPool); } return status; }
void CMyServer::LaunchStandardBrowser() { __LOGSTR("CMyServer::LaunchBrowser"); TBuf<512> url; url.Format(KUrlSearchStandard,&iDrawTextOld); TBuf8<512> url8; url8.Copy(url); TUid UID_Browser_91; UID_Browser_91.iUid = 0x1020724D; TUid UID_Browser_92; UID_Browser_92.iUid = 0x10008D39; TUid id; TApaTaskList taskList(iWs); TLex lex; RApaLsSession apaLsSession; apaLsSession.Connect(); OsVersion ver; GetOsVersion(ver); __LOGSTR2("Major: %D, Minor: %D",ver.iMajor,ver.iMinor); if(ver.iMajor == 3 && ver.iMinor == 0) { //9.1 __LOGSTR("9.1"); id = UID_Browser_91; }else{ //greather __LOGSTR("9.2 or high"); id = UID_Browser_92; } TApaTask task = taskList.FindApp(id); if(task.Exists()) { task.BringToForeground(); task.SendMessage(TUid::Uid(0), url8); // UID not used } else { //if(!apaLsSession.Handle()) //{ //User::LeaveIfError(apaLsSession.Connect()); //} TApaAppInfo appInfo; TInt retVal=apaLsSession.GetAppInfo(appInfo,id); if(KErrNone == retVal) { CApaCommandLine* cmdLine = CApaCommandLine::NewLC(); cmdLine->SetExecutableNameL(appInfo.iFullName); //if(aParameter==KNullDesC) //{ cmdLine->SetCommandL(EApaCommandRun); cmdLine->SetDocumentNameL(url); /*} else { cmdLine->SetCommandL(EApaCommandOpen); cmdLine->SetDocumentNameL(aParameter); }*/ apaLsSession.StartApp(*cmdLine); _CPOPD(cmdLine); task.BringToForeground(); task.SendMessage(TUid::Uid(0), url8); // UID not used } } }
std::string CSysInfo::GetUserAgent() { static std::string result; if (!result.empty()) return result; result = "XBMC/" + g_infoManager.GetLabel(SYSTEM_BUILD_VERSION_SHORT) + " ("; #if defined(TARGET_WINDOWS) result += GetKernelName() + " " + GetKernelVersion(); BOOL bIsWow = FALSE; if (IsWow64Process(GetCurrentProcess(), &bIsWow) && bIsWow) result.append("; WOW64"); else { SYSTEM_INFO si = {}; GetSystemInfo(&si); if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) result.append("; Win64; x64"); else if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64) result.append("; Win64; IA64"); else if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_ARM) result.append("; ARM"); } #elif defined(TARGET_DARWIN) #if defined(TARGET_DARWIN_IOS) std::string iDevStr(GetModelName()); // device model name with number of model version size_t iDevStrDigit = iDevStr.find_first_of("0123456789"); std::string iDev(iDevStr, 0, iDevStrDigit); // device model name without number if (iDevStrDigit == 0) iDev = "unknown"; result += iDev + "; "; std::string iOSVerison(GetOsVersion()); size_t lastDotPos = iOSVerison.rfind('.'); if (lastDotPos != std::string::npos && iOSVerison.find('.') != lastDotPos && iOSVerison.find_first_not_of('0', lastDotPos + 1) == std::string::npos) iOSVerison.erase(lastDotPos); StringUtils::Replace(iOSVerison, '.', '_'); if (iDev == "iPad" || iDev == "AppleTV") result += "CPU OS "; else result += "CPU iPhone OS "; result += iOSVerison + " like Mac OS X"; #else result += "Macintosh; "; std::string cpuFam(GetBuildTargetCpuFamily()); if (cpuFam == "x86") result += "Intel "; else if (cpuFam == "PowerPC") result += "PPC "; result += "Mac OS X "; std::string OSXVersion(GetOsVersion()); StringUtils::Replace(OSXVersion, '.', '_'); result += OSXVersion; #endif #elif defined(TARGET_ANDROID) result += "Linux; Android "; std::string versionStr(GetOsVersion()); const size_t verLen = versionStr.length(); if (verLen >= 2 && versionStr.compare(verLen - 2, 2, ".0", 2) == 0) versionStr.erase(verLen - 2); // remove last ".0" if any result += versionStr; std::string deviceInfo(GetModelName()); char buildId[PROP_VALUE_MAX]; int propLen = __system_property_get("ro.build.id", buildId); if (propLen > 0 && propLen <= PROP_VALUE_MAX) { if (!deviceInfo.empty()) deviceInfo += " "; deviceInfo += "Build/"; deviceInfo.append(buildId, propLen); } if (!deviceInfo.empty()) result += "; " + deviceInfo; #elif defined(TARGET_POSIX) result += "X11; "; struct utsname un; if (uname(&un) == 0) { std::string cpuStr(un.machine); if (cpuStr == "x86_64" && GetXbmcBitness() == 32) cpuStr = "i686 (x86_64)"; result += un.sysname; result += " "; result += cpuStr; } else result += "Unknown"; #else result += "Unknown"; #endif result += ")"; // add fork ID here in form: // result += " XBMC_FORK_" + "forkname" + "/" + "1.0"; // default fork number is '1.0' #ifdef TARGET_RASPBERRY_PI result += " XBMC_HW_RaspberryPi/1.0"; #elif defined (TARGET_DARWIN_IOS) std::string iDevVer; if (iDevStrDigit == std::string::npos) iDevVer = "0.0"; else iDevVer.assign(iDevStr, iDevStrDigit, std::string::npos); StringUtils::Replace(iDevVer, ',', '.'); result += " XBMC_HW_" + iDev + "/" + iDevVer; #endif // add more device IDs here if needed. // keep only one device ID in result! Form: // result += " XBMC_HW_" + "deviceID" + "/" + "1.0"; // '1.0' if device has no version #if defined(TARGET_ANDROID) // Android has no CPU string by default, so add it as additional parameter struct utsname un1; if (uname(&un1) == 0) { std::string cpuStr(un1.machine); StringUtils::Replace(cpuStr, ' ', '_'); result += " XBMC_CPU/" + cpuStr; } #endif result += " XBMC_BITNESS/" + StringUtils::Format("%d", GetXbmcBitness()); std::string fullVer(g_infoManager.GetLabel(SYSTEM_BUILD_VERSION)); StringUtils::Replace(fullVer, ' ', '-'); result += " Version/" + fullVer; return result; }
JECT_EXTERN unsigned WINAPI InjectDll(void *mpara) { BOOL bRet = FALSE; LPVOID funcBuff = NULL; HANDLE hRemote = NULL; LPVOID pBuff = NULL; SIZE_T cbSize = sizeof(RemotePara); SIZE_T cbCodeSize = (LPBYTE)AfterThreadProc - (LPBYTE)ThreadProc; HMODULE hNtdll; WCHAR dll_name[VALUE_LEN+1]; RemotePara myPara; DWORD os = GetOsVersion(); PROCESS_INFORMATION pi = *(LPPROCESS_INFORMATION)mpara; if ( GetModuleFileNameW(dll_module,dll_name,VALUE_LEN) <=0 ) { return bRet; } /* when tcmalloc enabled or MinGW x64 compile time,InjectDll crash on win8/8.1 */ #if !defined(ENABLE_TCMALLOC) && !defined(__MINGW64__) if ( os > 601 ) { #ifdef _LOGDEBUG logmsg("pic inject runing\n"); #endif return pic_inject(mpara,dll_name); } #endif hNtdll = GetModuleHandleW(L"ntdll.dll"); if (!hNtdll) { return bRet; } fzero(&myPara, sizeof(myPara)); myPara.dwLoadLibraryAddr = (DWORD_PTR)GetProcAddress(hNtdll, "LdrLoadDll"); myPara.dwRtlInitUnicodeString = (DWORD_PTR)GetProcAddress(hNtdll, "RtlInitUnicodeString"); if ( (myPara.dwLoadLibraryAddr)&&(myPara.dwRtlInitUnicodeString) ) { DWORD dwThreadId = 0; wcsncpy(myPara.strDll,dll_name,VALUE_LEN); /* 在进程内分配空间 */ pBuff = VirtualAllocEx(pi.hProcess, 0, cbSize+cbCodeSize, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE); funcBuff = ((BYTE *)pBuff+cbSize); /* 写入参数空间 */ WriteProcessMemory(pi.hProcess, pBuff, (PVOID)&myPara, cbSize, NULL); /* 写入代码空间 */ WriteProcessMemory(pi.hProcess, funcBuff, (PVOID)ThreadProc, cbCodeSize, NULL); hRemote = CreateRemoteThread(pi.hProcess, NULL, 1024*1024, (LPTHREAD_START_ROUTINE)funcBuff, pBuff, CREATE_SUSPENDED, &dwThreadId); if (hRemote) { ResumeThread(hRemote); WaitForSingleObject(hRemote,1500); CloseHandle(hRemote); } if (pBuff) { VirtualFreeEx(pi.hProcess, pBuff, 0, MEM_RELEASE); } if (funcBuff) { VirtualFreeEx(pi.hProcess, funcBuff, 0, MEM_RELEASE); } } ResumeThread(pi.hThread); return bRet; }