// ----------------------------------------------------------------------------- // CWPPushMessage::ParseContentType // ----------------------------------------------------------------------------- // void CWPPushMessage::ParseContentType( TLex8& aPointer ) { // Go through the whole content type header. while( !aPointer.Eos() ) { // Each parameter might be well-known (integer) or unknown (text) if( IsIntegerValue( aPointer ) ) { // For well-known parameters, the token is an integer value TUint paramToken( I64LOW( GetIntegerValue( aPointer ) ) ); // These are filled with results from parsing. TInt resultInteger( 0 ); TPtrC8 resultString; // Make sure paramToken fits into KParameterTypes table if( paramToken < sizeof(KParameterTypes)/sizeof(TParameterCodingType)) { // Get the coding and use it to determine how we should decode // the next parameter value. We actually ignore all results // except short integer (SEC) and text-value (MAC), but the // rest of the parameters have to be parsed anyway. TParameterCodingType coding( KParameterTypes[paramToken] ); switch( coding ) { case EQValue: GetQValue( aPointer ); break; case EWellKnownCharset: GetWellKnownCharset( aPointer ); break; case EVersionValue: GetVersionValue( aPointer ); break; case EIntegerValue: GetIntegerValue( aPointer ); break; case ETextString: GetTextString( aPointer ); break; case EFieldName: GetFieldName( aPointer ); break; case EShortInteger: resultInteger = GetShortInteger( aPointer ); break; case EConstrainedEncoding: GetConstrainedEncoding( aPointer ); break; case EDeltaSecondsValue: GetDeltaSecondsValue( aPointer ); break; case ENoValue: GetNoValue( aPointer ); break; case ETextValue: resultString.Set( GetTextValue( aPointer ) ); break; case EDateValue: GetDateValue( aPointer ); break; default: break; } // We have a result. We're actually only interested in // SEC and MAC parameters, so we save them here. switch( paramToken ) { case KWSPHeaderSEC: iSEC = resultInteger; break; case KWSPHeaderMAC: iMAC.Set( resultString ); break; default: break; } } } else { // Unknown parameter. Its name is in text, and the value // might be an integer or text. GetTokenText( aPointer ); if( IsIntegerValue( aPointer ) ) { GetIntegerValue( aPointer ); } else { GetTextValue( aPointer ); } } } }
BOOL Utils::GetProcessInfo( CAtlArray< Utils::ProcessInfo > & ProcList) { HANDLE hToolHelp = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if(hToolHelp != INVALID_HANDLE_VALUE) { PROCESSENTRY32 Entry; Entry.dwSize = sizeof(Entry); if(Process32First(hToolHelp, &Entry)) { Utils::ProcessInfo Info; do { Info.PID = Entry.th32ProcessID; HANDLE hModuleHelp =CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, Info.PID); Info.Name = Entry.szExeFile; Info.CompanyName = L""; if(hModuleHelp != INVALID_HANDLE_VALUE ) { MODULEENTRY32 ModEntry = {0}; ModEntry.dwSize = sizeof(ModEntry); Module32First(hModuleHelp, &ModEntry); Info.Path = ModEntry.szExePath; CloseHandle(hModuleHelp); // file info DWORD dwHandle = 0; DWORD InfoLen = GetFileVersionInfoSize(Info.Path, &dwHandle); if(InfoLen > 0) { BYTE *VerData = new BYTE[InfoLen]; ZeroMemory(VerData, InfoLen); BOOL ret = GetFileVersionInfo(Info.Path, NULL, InfoLen, VerData); LPVOID lpvi; UINT iLen; if (VerQueryValue(VerData, _T("\\"), &lpvi, &iLen)) { memcpy(&Info.FileInfo,lpvi, iLen); if (VerQueryValue(VerData, _T("\\VarFileInfo\\Translation"), &lpvi, &iLen) && iLen >= 4) { memcpy(&Info.LangID,lpvi, 4); } CString query; LPCTSTR pVal = NULL; UINT iLenVal; #define GetVersionValue(v) query.Format(_T("\\StringFileInfo\\%04x%04x\\%s"), Info.LangID,Info.Charset,_T(#v)); \ VerQueryValue(VerData, (LPTSTR)(LPCTSTR)query, (LPVOID*)&pVal, &iLenVal) ; \ Info.##v = pVal; GetVersionValue(CompanyName); GetVersionValue(FileVersion); } delete VerData; } } ProcList.Add(Info); } while (Process32Next(hToolHelp , &Entry)); } } CloseHandle(hToolHelp); return TRUE; }