aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/main.cpp11
-rw-r--r--src/main.rc12
-rw-r--r--src/resource.hpp31
-rw-r--r--src/resource_ids.h16
4 files changed, 62 insertions, 8 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 2045ef6..c2ffb21 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,6 +1,7 @@
#include "error.hpp"
#include "os.hpp"
#include "process.hpp"
+#include "resource.hpp"
#include "resource_ids.h"
#include "sid.hpp"
#include "token.hpp"
@@ -108,6 +109,14 @@ BOOL on_init_dialog(HWND wnd, HWND, LPARAM)
return TRUE;
}
+void report_already_elevated(HWND wnd)
+{
+ MessageBoxW(wnd,
+ resource::load_string(IDS_ALREADY_ELEVATED).c_str(),
+ resource::load_string(IDS_ELEVATION_CAPTION).c_str(),
+ MB_OK);
+}
+
void on_button_elevate_click(HWND wnd)
{
bool as_admin = false;
@@ -124,7 +133,7 @@ void on_button_elevate_click(HWND wnd)
if (as_admin)
{
- MessageBoxW(wnd, L"Already elevated!", L"Elevation", MB_OK);
+ report_already_elevated(wnd);
return;
}
diff --git a/src/main.rc b/src/main.rc
index 70c04e5..28cb4f2 100644
--- a/src/main.rc
+++ b/src/main.rc
@@ -95,6 +95,18 @@ END
#endif // APSTUDIO_INVOKED
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE
+BEGIN
+ IDS_ELEVATION_CAPTION "Privilege test"
+ IDS_ALREADY_ELEVATED "Already elevated."
+END
+
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////
diff --git a/src/resource.hpp b/src/resource.hpp
new file mode 100644
index 0000000..602541f
--- /dev/null
+++ b/src/resource.hpp
@@ -0,0 +1,31 @@
+#pragma once
+
+#include "error.hpp"
+
+#include <cstddef>
+
+#include <string>
+
+namespace resource
+{
+ HMODULE load_exe_module()
+ {
+ const auto module = GetModuleHandle(NULL);
+ if (module == NULL)
+ error::raise("GetModuleHandle");
+ return module;
+ }
+
+ std::wstring load_string(unsigned int id)
+ {
+ wchar_t* s = nullptr;
+
+ const auto ret = LoadStringW(
+ load_exe_module(), id, reinterpret_cast<wchar_t*>(&s), 0);
+
+ if (ret <= 0)
+ error::raise("LoadStringW");
+
+ return {s, static_cast<std::size_t>(ret)};
+ }
+}
diff --git a/src/resource_ids.h b/src/resource_ids.h
index 4c6d90f..8c12cf8 100644
--- a/src/resource_ids.h
+++ b/src/resource_ids.h
@@ -1,21 +1,23 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
-// Used by resource.rc
+// Used by main.rc
//
#define IDD_MAINDIALOG 100
+#define IDS_ELEVATION_CAPTION 2000
+#define IDS_ALREADY_ELEVATED 2001
#define IDC_BUTTON_ELEVATE 1000
-#define IDC_ADMINISTRATOR 1001
-#define IDC_RUN_AS_ADMINISTRATOR 1002
-#define IDC_ELEVATED 1003
-#define IDC_INTEGRITY_LEVEL 1004
+#define IDC_ADMINISTRATOR 1001
+#define IDC_RUN_AS_ADMINISTRATOR 1002
+#define IDC_ELEVATED 1003
+#define IDC_INTEGRITY_LEVEL 1004
#define IDC_STATIC -1
// Next default values for new objects
-//
+//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 1
-#define _APS_NEXT_RESOURCE_VALUE 129
+#define _APS_NEXT_RESOURCE_VALUE 130
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1005
#define _APS_NEXT_SYMED_VALUE 110