Home | History | Annotate | Download | only in test
      1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // This file contains the interface for an iterator over a portable executable
      6 // file's resources.
      7 
      8 #ifndef CHROME_INSTALLER_TEST_PE_IMAGE_RESOURCES_H_
      9 #define CHROME_INSTALLER_TEST_PE_IMAGE_RESOURCES_H_
     10 
     11 #include <windows.h>
     12 
     13 #include <string>
     14 #include <vector>
     15 
     16 #include "base/basictypes.h"
     17 #include "base/logging.h"
     18 
     19 namespace base { namespace win { class PEImage; } }
     20 
     21 namespace upgrade_test {
     22 
     23 // A CopyConstructible and Assignable identifier for resource directory
     24 // entries.
     25 class EntryId {
     26  public:
     27   explicit EntryId(WORD number) : number_(number) { }
     28   explicit EntryId(const std::wstring& name) : name_(name), number_() {
     29     DCHECK_NE(static_cast<std::wstring::size_type>(0), name.size());
     30   }
     31   bool IsNamed() const { return !name_.empty(); }
     32   WORD number() const { return number_; }
     33   const std::wstring& name() const { return name_; }
     34  private:
     35   std::wstring name_;
     36   WORD number_;
     37 };  // class EntryId
     38 
     39 // A sequence of identifiers comprising the path from the root of an image's
     40 // resource directory to an individual resource.
     41 typedef std::vector<EntryId> EntryPath;
     42 
     43 // A callback function invoked once for each data entry in the image's
     44 // directory of resources.
     45 // |path| - the full path of the data entry,
     46 // |data| - the address of the entry's data.
     47 // |size| - the size, in bytes, of the entry's data.
     48 // |code_page| - the code page to be used to interpret string data in the
     49 // entry's data.
     50 // |context| - the context given to EnumResources.
     51 typedef void (*EnumResource_Fn)(const EntryPath& path, uint8* data,
     52                                 DWORD size, DWORD code_page, uintptr_t context);
     53 
     54 // Enumerates all data entries in |image|'s resource directory.  |callback| is
     55 // invoked (and provided with |context|) once per entry.  Returns false if
     56 // some or all of the resource directory could not be parsed.
     57 bool EnumResources(const base::win::PEImage& image, EnumResource_Fn callback,
     58                    uintptr_t context);
     59 
     60 }  // namespace upgrade_test
     61 
     62 #endif  // CHROME_INSTALLER_TEST_PE_IMAGE_RESOURCES_H_
     63