diff --git a/analyzer/guard.hpp b/analyzer/guard.hpp
new file mode 100644
index 0000000..d3cabdd
--- /dev/null
+++ b/analyzer/guard.hpp
@@ -0,0 +1,60 @@
+#pragma once
+
+#include <map>
+#include <string>
+
+namespace analyzer
+{
+
+/**
+ * @brief A service event requiring hardware to be guarded.
+ */
+class Guard
+{
+  public:
+    /** Supported guard types. */
+    enum class Type
+    {
+        NONE,      ///< Do not guard
+        FATAL,     ///< Guard on fatal error (cannot recover resource)
+        NON_FATAL, ///< Guard on non-fatal error (can recover resource)
+    };
+
+  public:
+    /**
+     * @brief Constructor from components.
+     * @param i_path The hardware path to guard.
+     * @param i_type The guard type.
+     */
+    Guard(const std::string& i_path, Type i_type) :
+        iv_path(i_path), iv_type(i_type)
+    {}
+
+  private:
+    /** The hardware path to guard. */
+    const std::string iv_path;
+
+    /** The guard type. */
+    const Type iv_type;
+
+  public:
+    /** @brief Writes guard record to persistent storage. */
+    void apply() const;
+
+    /** @return A string representation of the guard type enum. */
+    std::string getString() const
+    {
+        // clang-format off
+        static const std::map<Type, std::string> m =
+        {
+            {Type::NONE,      "NONE"},
+            {Type::FATAL,     "FATAL"},
+            {Type::NON_FATAL, "NON_FATAL"},
+        };
+        // clang-format on
+
+        return m.at(iv_type);
+    }
+};
+
+} // namespace analyzer
