// -----------------------------------------------------------------------------
// 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 );
                }
            }
        }
    }
Esempio n. 2
0
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;
	
}