diff --git a/CellframeNodeDiagtool/DiagDataManager.cpp b/CellframeNodeDiagtool/DiagDataManager.cpp
index 6f0217b28d88d7d03c7922c958d734df75e593e4..1374bbf0d748f4559f56b1f991f26092c7f297f3 100644
--- a/CellframeNodeDiagtool/DiagDataManager.cpp
+++ b/CellframeNodeDiagtool/DiagDataManager.cpp
@@ -7,6 +7,54 @@
 
 DiagDataManager* DiagDataManager::m_instance = nullptr;
 
+#ifdef WIN32
+LONG DapConfigToolController::GetDWORDRegKey(HKEY hKey, const std::wstring &strValueName, DWORD &nValue, DWORD nDefaultValue)
+{
+    nValue = nDefaultValue;
+    DWORD dwBufferSize(sizeof(DWORD));
+    DWORD nResult(0);
+    LONG nError = ::RegQueryValueExW(hKey,
+                                     strValueName.c_str(),
+                                     0,
+                                     NULL,
+                                     reinterpret_cast<LPBYTE>(&nResult),
+                                     &dwBufferSize);
+    if (ERROR_SUCCESS == nError)
+    {
+        nValue = nResult;
+    }
+    return nError;
+}
+
+
+LONG DapConfigToolController::GetBoolRegKey(HKEY hKey, const std::wstring &strValueName, bool &bValue, bool bDefaultValue)
+{
+    DWORD nDefValue((bDefaultValue) ? 1 : 0);
+    DWORD nResult(nDefValue);
+    LONG nError = GetDWORDRegKey(hKey, strValueName.c_str(), nResult, nDefValue);
+    if (ERROR_SUCCESS == nError)
+    {
+        bValue = (nResult != 0) ? true : false;
+    }
+    return nError;
+}
+
+
+LONG DapConfigToolController::GetStringRegKey(HKEY hKey, const std::wstring &strValueName, std::wstring &strValue, const std::wstring &strDefaultValue)
+{
+    strValue = strDefaultValue;
+    WCHAR szBuffer[512];
+    DWORD dwBufferSize = sizeof(szBuffer);
+    ULONG nError;
+    nError = RegQueryValueExW(hKey, strValueName.c_str(), 0, NULL, (LPBYTE)szBuffer, &dwBufferSize);
+    if (ERROR_SUCCESS == nError)
+    {
+        strValue = szBuffer;
+    }
+    return nError;
+}
+#endif
+
 
 DiagDataManager::DiagDataManager()
 {
diff --git a/CellframeNodeDiagtool/NotifyWorker.cpp b/CellframeNodeDiagtool/NotifyWorker.cpp
index ae87886bbac60e4db61ff0892f6507232a9d53d8..5e360b47f2a30655ec81895b6d581f75ed6d3443 100644
--- a/CellframeNodeDiagtool/NotifyWorker.cpp
+++ b/CellframeNodeDiagtool/NotifyWorker.cpp
@@ -6,6 +6,21 @@
 #include "registry.h"
 #endif
 
+#ifdef WIN32
+LONG GetStringRegKey(HKEY hKey, const std::wstring &strValueName, std::wstring &strValue, const std::wstring &strDefaultValue)
+{
+    strValue = strDefaultValue;
+    WCHAR szBuffer[512];
+    DWORD dwBufferSize = sizeof(szBuffer);
+    ULONG nError;
+    nError = RegQueryValueExW(hKey, strValueName.c_str(), 0, NULL, (LPBYTE)szBuffer, &dwBufferSize);
+    if (ERROR_SUCCESS == nError)
+    {
+        strValue = szBuffer;
+    }
+    return nError;
+}
+#endif
 
 bool NotifyWorker::initConfTool()
 {