aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/um/wrappers
diff options
context:
space:
mode:
Diffstat (limited to 'um/wrappers')
-rw-r--r--um/wrappers/CMakeLists.txt2
-rw-r--r--um/wrappers/simple/CMakeLists.txt9
-rw-r--r--um/wrappers/simple/README.md43
-rw-r--r--um/wrappers/simple/include/libsimple/all.hpp8
-rw-r--r--um/wrappers/simple/include/libsimple/device.hpp19
-rw-r--r--um/wrappers/simple/src/device.cpp37
-rw-r--r--um/wrappers/simple/utils/CMakeLists.txt2
-rw-r--r--um/wrappers/simple/utils/exchange_ints.cpp44
-rw-r--r--um/wrappers/special/CMakeLists.txt1
-rw-r--r--um/wrappers/special/nt_path_converter/CMakeLists.txt10
-rw-r--r--um/wrappers/special/nt_path_converter/README.md31
-rw-r--r--um/wrappers/special/nt_path_converter/include/libnt_path_converter/all.hpp8
-rw-r--r--um/wrappers/special/nt_path_converter/include/libnt_path_converter/device.hpp21
-rw-r--r--um/wrappers/special/nt_path_converter/src/device.cpp48
-rw-r--r--um/wrappers/special/nt_path_converter/utils/CMakeLists.txt2
-rw-r--r--um/wrappers/special/nt_path_converter/utils/convert_nt_path.cpp26
16 files changed, 311 insertions, 0 deletions
diff --git a/um/wrappers/CMakeLists.txt b/um/wrappers/CMakeLists.txt
new file mode 100644
index 0000000..834a76b
--- /dev/null
+++ b/um/wrappers/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_subdirectory(simple)
+add_subdirectory(special)
diff --git a/um/wrappers/simple/CMakeLists.txt b/um/wrappers/simple/CMakeLists.txt
new file mode 100644
index 0000000..ff61bd7
--- /dev/null
+++ b/um/wrappers/simple/CMakeLists.txt
@@ -0,0 +1,9 @@
+file(GLOB_RECURSE libsimple_headers "include/*.hpp")
+file(GLOB libsimple_sources "src/*.cpp")
+add_library(libsimple
+ ${libsimple_sources}
+ ${libsimple_headers})
+target_link_libraries(libsimple libservice)
+target_include_directories(libsimple PUBLIC include/)
+
+add_subdirectory(utils)
diff --git a/um/wrappers/simple/README.md b/um/wrappers/simple/README.md
new file mode 100644
index 0000000..51a46cb
--- /dev/null
+++ b/um/wrappers/simple/README.md
@@ -0,0 +1,43 @@
+simple driver utilities
+=======================
+
+[simple] driver usage examples.
+
+[simple]: ../../../km/src/simple
+
+Usage
+-----
+
+### exchange_ints.exe
+
+```
+Usage: exchange_ints.exe N
+```
+
+Parses its argument as an `unsigned int` and exchanges it with the one stored
+in [simple] driver's memory.
+For example:
+
+```
+> exchange_ints.exe 1
+42
+```
+
+```
+> exchange_ints.exe 32
+1
+```
+
+```
+> exchange_ints.exe 100500
+32
+```
+
+See also
+--------
+
+* [Building the utilities]
+* [License]
+
+[Building the utilities]: ../../README.md#building-the-utilities
+[License]: ../../../README.md#license
diff --git a/um/wrappers/simple/include/libsimple/all.hpp b/um/wrappers/simple/include/libsimple/all.hpp
new file mode 100644
index 0000000..474b802
--- /dev/null
+++ b/um/wrappers/simple/include/libsimple/all.hpp
@@ -0,0 +1,8 @@
+// Copyright (c) 2015 Egor Tensin <Egor.Tensin@gmail.com>
+// This file is part of the "Windows 7 drivers" project.
+// For details, see https://github.com/egor-tensin/windows7-drivers.
+// Distributed under the MIT License.
+
+#pragma once
+
+#include "device.hpp"
diff --git a/um/wrappers/simple/include/libsimple/device.hpp b/um/wrappers/simple/include/libsimple/device.hpp
new file mode 100644
index 0000000..3318818
--- /dev/null
+++ b/um/wrappers/simple/include/libsimple/device.hpp
@@ -0,0 +1,19 @@
+// Copyright (c) 2015 Egor Tensin <Egor.Tensin@gmail.com>
+// This file is part of the "Windows 7 drivers" project.
+// For details, see https://github.com/egor-tensin/windows7-drivers.
+// Distributed under the MIT License.
+
+#pragma once
+
+#include "libservice/all.hpp"
+
+namespace libsimple
+{
+ class Device : libservice::Device
+ {
+ public:
+ Device();
+
+ unsigned int exchange_ints(unsigned int) const;
+ };
+}
diff --git a/um/wrappers/simple/src/device.cpp b/um/wrappers/simple/src/device.cpp
new file mode 100644
index 0000000..57e6963
--- /dev/null
+++ b/um/wrappers/simple/src/device.cpp
@@ -0,0 +1,37 @@
+// Copyright (c) 2015 Egor Tensin <Egor.Tensin@gmail.com>
+// This file is part of the "Windows 7 drivers" project.
+// For details, see https://github.com/egor-tensin/windows7-drivers.
+// Distributed under the MIT License.
+
+#include "libsimple/all.hpp"
+
+#include "libservice/all.hpp"
+
+#include <Windows.h>
+
+namespace libsimple
+{
+ namespace
+ {
+ const char* const device_path = "\\\\.\\simple_device1";
+ const auto exchange_ints_ctl_code = CTL_CODE(0x8001, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS);
+ }
+
+ Device::Device()
+ : libservice::Device(libservice::Device::open(device_path))
+ { }
+
+ unsigned int Device::exchange_ints(unsigned int src) const
+ {
+ unsigned int dest;
+
+ send_control_code(
+ exchange_ints_ctl_code,
+ &src,
+ sizeof(src),
+ &dest,
+ sizeof(dest));
+
+ return dest;
+ }
+}
diff --git a/um/wrappers/simple/utils/CMakeLists.txt b/um/wrappers/simple/utils/CMakeLists.txt
new file mode 100644
index 0000000..8824e3e
--- /dev/null
+++ b/um/wrappers/simple/utils/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_executable(exchange_ints exchange_ints.cpp)
+target_link_libraries(exchange_ints libsimple)
diff --git a/um/wrappers/simple/utils/exchange_ints.cpp b/um/wrappers/simple/utils/exchange_ints.cpp
new file mode 100644
index 0000000..2935b2f
--- /dev/null
+++ b/um/wrappers/simple/utils/exchange_ints.cpp
@@ -0,0 +1,44 @@
+// Copyright (c) 2015 Egor Tensin <Egor.Tensin@gmail.com>
+// This file is part of the "Windows 7 drivers" project.
+// For details, see https://github.com/egor-tensin/windows7-drivers.
+// Distributed under the MIT License.
+
+#include "libsimple/all.hpp"
+
+#include <exception>
+#include <iostream>
+#include <sstream>
+#include <string>
+
+namespace
+{
+ bool parse_int(unsigned int& dest, const std::string& src)
+ {
+ std::istringstream iss(src);
+ char c;
+ return iss >> dest && !iss.get(c);
+ }
+}
+
+int main(int argc, char* argv[])
+{
+ try
+ {
+ unsigned int src;
+
+ if (argc != 2 || !parse_int(src, argv[1]))
+ {
+ std::cout << "Usage: " << argv[0] << " N\n";
+ return 1;
+ }
+
+ std::cout << libsimple::Device().exchange_ints(src) << "\n";
+ }
+ catch (const std::exception& e)
+ {
+ std::cerr << e.what() << "\n";
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/um/wrappers/special/CMakeLists.txt b/um/wrappers/special/CMakeLists.txt
new file mode 100644
index 0000000..ed48e00
--- /dev/null
+++ b/um/wrappers/special/CMakeLists.txt
@@ -0,0 +1 @@
+add_subdirectory(nt_path_converter)
diff --git a/um/wrappers/special/nt_path_converter/CMakeLists.txt b/um/wrappers/special/nt_path_converter/CMakeLists.txt
new file mode 100644
index 0000000..69f85d0
--- /dev/null
+++ b/um/wrappers/special/nt_path_converter/CMakeLists.txt
@@ -0,0 +1,10 @@
+project(libnt_path_converter)
+file(GLOB libnt_path_converter_sources "src/*.cpp")
+file(GLOB_RECURSE libnt_path_converter_headers "include/*.hpp")
+add_library(libnt_path_converter
+ ${libnt_path_converter_sources}
+ ${libnt_path_converter_headers})
+target_link_libraries(libnt_path_converter libservice)
+target_include_directories(libnt_path_converter PUBLIC include/)
+
+add_subdirectory(utils)
diff --git a/um/wrappers/special/nt_path_converter/README.md b/um/wrappers/special/nt_path_converter/README.md
new file mode 100644
index 0000000..71b4948
--- /dev/null
+++ b/um/wrappers/special/nt_path_converter/README.md
@@ -0,0 +1,31 @@
+nt_path_converter driver utilities
+==================================
+
+[nt_path_converter] driver usage examples.
+
+[nt_path_converter]: ../../../../km/src/special/nt_path_converter
+
+Usage
+-----
+
+### convert_nt_path.exe
+
+ Usage: convert_nt_path.exe [NT_PATH...]
+
+Converts a NT-style path to a DOS-style path.
+The NT namespace can be explored using the [WinObj] utility.
+For example:
+
+ > convert_nt_path.exe \Device\HarddiskVolume2\Windows
+ C:\Windows
+
+[WinObj]: https://technet.microsoft.com/en-us/library/bb896657.aspx
+
+See also
+--------
+
+* [Building the utilities]
+* [License]
+
+[Building the utilities]: ../../../README.md#building-the-utilities
+[License]: ../../../../README.md#license
diff --git a/um/wrappers/special/nt_path_converter/include/libnt_path_converter/all.hpp b/um/wrappers/special/nt_path_converter/include/libnt_path_converter/all.hpp
new file mode 100644
index 0000000..474b802
--- /dev/null
+++ b/um/wrappers/special/nt_path_converter/include/libnt_path_converter/all.hpp
@@ -0,0 +1,8 @@
+// Copyright (c) 2015 Egor Tensin <Egor.Tensin@gmail.com>
+// This file is part of the "Windows 7 drivers" project.
+// For details, see https://github.com/egor-tensin/windows7-drivers.
+// Distributed under the MIT License.
+
+#pragma once
+
+#include "device.hpp"
diff --git a/um/wrappers/special/nt_path_converter/include/libnt_path_converter/device.hpp b/um/wrappers/special/nt_path_converter/include/libnt_path_converter/device.hpp
new file mode 100644
index 0000000..e1d75fb
--- /dev/null
+++ b/um/wrappers/special/nt_path_converter/include/libnt_path_converter/device.hpp
@@ -0,0 +1,21 @@
+// Copyright (c) 2015 Egor Tensin <Egor.Tensin@gmail.com>
+// This file is part of the "Windows 7 drivers" project.
+// For details, see https://github.com/egor-tensin/windows7-drivers.
+// Distributed under the MIT License.
+
+#pragma once
+
+#include "libservice/all.hpp"
+
+#include <string>
+
+namespace libnt_path_converter
+{
+ class Device : libservice::Device
+ {
+ public:
+ Device();
+
+ std::wstring convert_nt_path(const std::wstring&);
+ };
+}
diff --git a/um/wrappers/special/nt_path_converter/src/device.cpp b/um/wrappers/special/nt_path_converter/src/device.cpp
new file mode 100644
index 0000000..90cd12f
--- /dev/null
+++ b/um/wrappers/special/nt_path_converter/src/device.cpp
@@ -0,0 +1,48 @@
+// Copyright (c) 2015 Egor Tensin <Egor.Tensin@gmail.com>
+// This file is part of the "Windows 7 drivers" project.
+// For details, see https://github.com/egor-tensin/windows7-drivers.
+// Distributed under the MIT License.
+
+#include "libnt_path_converter/device.hpp"
+
+#include "libservice/all.hpp"
+
+#include <Windows.h>
+
+#include <string>
+#include <vector>
+
+namespace libnt_path_converter
+{
+ namespace
+ {
+ const char* const device_path = "\\\\.\\nt_path_converter";
+ const auto control_code = CTL_CODE(0x8000, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS);
+ }
+
+ Device::Device()
+ : libservice::Device(libservice::Device::open(device_path))
+ { }
+
+ std::wstring Device::convert_nt_path(const std::wstring& src)
+ {
+ const auto in_buf = src.c_str();
+ const auto in_buf_size = (src.size() + 1) * sizeof(wchar_t);
+
+ const auto nbreq = get_required_output_size(
+ control_code,
+ in_buf,
+ in_buf_size);
+
+ std::vector<unsigned char> output(nbreq);
+
+ send_control_code(
+ control_code,
+ in_buf,
+ in_buf_size,
+ output.data(),
+ nbreq);
+
+ return reinterpret_cast<wchar_t*>(output.data());
+ }
+}
diff --git a/um/wrappers/special/nt_path_converter/utils/CMakeLists.txt b/um/wrappers/special/nt_path_converter/utils/CMakeLists.txt
new file mode 100644
index 0000000..9915995
--- /dev/null
+++ b/um/wrappers/special/nt_path_converter/utils/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_executable(convert_nt_path convert_nt_path.cpp)
+target_link_libraries(convert_nt_path libnt_path_converter)
diff --git a/um/wrappers/special/nt_path_converter/utils/convert_nt_path.cpp b/um/wrappers/special/nt_path_converter/utils/convert_nt_path.cpp
new file mode 100644
index 0000000..0055db2
--- /dev/null
+++ b/um/wrappers/special/nt_path_converter/utils/convert_nt_path.cpp
@@ -0,0 +1,26 @@
+// Copyright (c) 2015 Egor Tensin <Egor.Tensin@gmail.com>
+// This file is part of the "Windows 7 drivers" project.
+// For details, see https://github.com/egor-tensin/windows7-drivers.
+// Distributed under the MIT License.
+
+#include "libnt_path_converter/all.hpp"
+
+#include <exception>
+#include <iostream>
+
+int wmain(int argc, wchar_t* argv[])
+{
+ try
+ {
+ libnt_path_converter::Device dev;
+ for (int i = 1; i < argc; ++i)
+ std::wcout << dev.convert_nt_path(argv[i]) << L"\n";
+ }
+ catch (const std::exception& e)
+ {
+ std::wcerr << e.what() << "\n";
+ return 1;
+ }
+
+ return 0;
+}