// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file provides a parser for PReg files which are used for storing group
// policy settings in the file system. The file format is documented here:
//
// http://msdn.microsoft.com/en-us/library/windows/desktop/aa374407(v=vs.85).aspx

#ifndef AUTHPOLICY_POLICY_PREG_PARSER_H_
#define AUTHPOLICY_POLICY_PREG_PARSER_H_

#include <memory>
#include <string>
#include <vector>

#include <base/strings/string16.h>
#include <components/policy/core/common/policy_load_status.h>

namespace base {
class FilePath;
}

namespace policy {

class RegistryDict;

namespace preg_parser {

// The magic header in PReg files: ASCII "PReg" + version (0x0001).
extern const char kPRegFileHeader[8];

// Reads the PReg file at |file_path| and writes the registry data to |dict|.
// |root| specifies the registry subtree the caller is interested in, everything
// else gets ignored. It may be empty if all keys should be returned, but it
// must NOT end with a backslash.
bool ReadFile(const base::FilePath& file_path,
              const base::string16& root,
              RegistryDict* dict,
              PolicyLoadStatusSampler* status);

// Similar to ReadFile, but reads from |preg_data| of length |preg_data_size|
// instead of a file. |debug_name| is printed out along with error messages.
// Used internally and for testing only. All other callers should use ReadFile
// instead.
bool ReadDataInternal(const uint8_t* preg_data,
                      size_t preg_data_size,
                      const base::string16& root,
                      RegistryDict* dict,
                      PolicyLoadStatusSampler* status,
                      const std::string& debug_name);

}  // namespace preg_parser
}  // namespace policy

#endif  // AUTHPOLICY_POLICY_PREG_PARSER_H_
