aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/um/service/src/device.cpp
diff options
context:
space:
mode:
authorEgor Tensin <egor@tensin.name>2026-06-15 14:05:29 +0200
committerEgor Tensin <egor@tensin.name>2026-06-15 14:12:29 +0200
commitb3eef140da853414776c8e03a70629a613a25ed0 (patch)
treedcdb314d2fdd92f501c09f3ae5681a731cb00dee /um/service/src/device.cpp
parentwdk10: disable the packaging target (diff)
downloadwindows7-drivers-b3eef140da853414776c8e03a70629a613a25ed0.tar.gz
windows7-drivers-b3eef140da853414776c8e03a70629a613a25ed0.zip
workflows/ci: add clang-format job
Diffstat (limited to 'um/service/src/device.cpp')
-rw-r--r--um/service/src/device.cpp161
1 files changed, 79 insertions, 82 deletions
diff --git a/um/service/src/device.cpp b/um/service/src/device.cpp
index 870930f..2634a9a 100644
--- a/um/service/src/device.cpp
+++ b/um/service/src/device.cpp
@@ -8,108 +8,105 @@
#include <Windows.h>
#include <cstddef>
-
#include <limits>
#include <stdexcept>
#include <string>
-namespace service
-{
- namespace
- {
- Handle open_device(const std::string& path)
- {
- const auto raw = CreateFileA(
- path.c_str(),
- GENERIC_READ | GENERIC_WRITE,
- 0,
- NULL,
- OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL,
- NULL);
+namespace service {
+namespace {
- if (INVALID_HANDLE_VALUE == raw)
- {
- const auto ec = GetLastError();
- throw windows_error::make(ec, __FILE__, __LINE__, __FUNCTION__);
- }
+Handle open_device(const std::string& path) {
+ const auto raw = CreateFileA(
+ path.c_str(),
+ GENERIC_READ | GENERIC_WRITE,
+ 0,
+ NULL,
+ OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL,
+ NULL
+ );
- return Handle(raw);
- }
+ if (INVALID_HANDLE_VALUE == raw) {
+ const auto ec = GetLastError();
+ throw windows_error::make(ec, __FILE__, __LINE__, __FUNCTION__);
}
- Device Device::open(const std::string& path)
- {
- return Device(open_device(path));
- }
+ return Handle(raw);
+}
- std::size_t Device::get_required_output_size(
- Code code,
- const void* in_buf,
- std::size_t in_buf_size) const
- {
- DWORD nbreq;
+} // namespace
- if (in_buf_size > std::numeric_limits<DWORD>::max())
- throw std::range_error("input buffer size is too large");
+Device Device::open(const std::string& path) {
+ return Device(open_device(path));
+}
- std::size_t nbwritten = DeviceIoControl(
- handle,
- code,
- const_cast<void*>(in_buf),
- static_cast<DWORD>(in_buf_size),
- NULL,
- 0,
- &nbreq,
- NULL);
+std::size_t Device::get_required_output_size(
+ Code code,
+ const void* in_buf,
+ std::size_t in_buf_size
+) const {
+ DWORD nbreq;
- if (0 == nbwritten)
- {
- const auto ec = GetLastError();
+ if (in_buf_size > std::numeric_limits<DWORD>::max())
+ throw std::range_error("input buffer size is too large");
- switch (ec)
- {
- case ERROR_MORE_DATA:
- return nbreq;
+ std::size_t nbwritten = DeviceIoControl(
+ handle,
+ code,
+ const_cast<void*>(in_buf),
+ static_cast<DWORD>(in_buf_size),
+ NULL,
+ 0,
+ &nbreq,
+ NULL
+ );
- default:
- throw windows_error::make(ec, __FILE__, __LINE__, __FUNCTION__);
- }
- }
+ if (0 == nbwritten) {
+ const auto ec = GetLastError();
- return nbwritten;
+ switch (ec) {
+ case ERROR_MORE_DATA:
+ return nbreq;
+
+ default:
+ throw windows_error::make(ec, __FILE__, __LINE__, __FUNCTION__);
+ }
}
- std::size_t Device::send_control_code(
- Code code,
- const void* in_buf,
- std::size_t in_buf_size,
- void* out_buf,
- std::size_t out_buf_size) const
- {
- DWORD nbreq;
+ return nbwritten;
+}
- if (in_buf_size > std::numeric_limits<DWORD>::max())
- throw std::range_error("input buffer size is too large");
- if (out_buf_size > std::numeric_limits<DWORD>::max())
- throw std::range_error("output buffer size is too large");
+std::size_t Device::send_control_code(
+ Code code,
+ const void* in_buf,
+ std::size_t in_buf_size,
+ void* out_buf,
+ std::size_t out_buf_size
+) const {
+ DWORD nbreq;
- std::size_t nbwritten = DeviceIoControl(
- handle,
- code,
- const_cast<void*>(in_buf),
- static_cast<DWORD>(in_buf_size),
- out_buf,
- static_cast<DWORD>(out_buf_size),
- &nbreq,
- NULL);
+ if (in_buf_size > std::numeric_limits<DWORD>::max())
+ throw std::range_error("input buffer size is too large");
+ if (out_buf_size > std::numeric_limits<DWORD>::max())
+ throw std::range_error("output buffer size is too large");
- if (0 == nbwritten)
- {
- const auto ec = GetLastError();
- throw windows_error::make(ec, __FILE__, __LINE__, __FUNCTION__);
- }
+ std::size_t nbwritten = DeviceIoControl(
+ handle,
+ code,
+ const_cast<void*>(in_buf),
+ static_cast<DWORD>(in_buf_size),
+ out_buf,
+ static_cast<DWORD>(out_buf_size),
+ &nbreq,
+ NULL
+ );
- return nbwritten;
+ if (0 == nbwritten) {
+ const auto ec = GetLastError();
+ throw windows_error::make(ec, __FILE__, __LINE__, __FUNCTION__);
}
+
+ return nbwritten;
}
+
+} // namespace service