mirror of
https://github.com/CHN-beta/nixos.git
synced 2024-10-22 21:18:44 +08:00
archive
This commit is contained in:
parent
e0e9ae9ad3
commit
9531f60b05
@ -86,7 +86,8 @@
|
||||
overlays = [ inputs.self.overlays.default ];
|
||||
crossOverlays = [(final: prev:
|
||||
{
|
||||
boost = prev.boost.override { zstd = null; };
|
||||
boost = (prev.boost.override { zstd = null; }).overrideAttrs (prev:
|
||||
{ patches = prev.patches or [] ++ [ ./local/pkgs/winjob/boost.patch ]; });
|
||||
magic-enum = prev.magic-enum.overrideAttrs (prev: { cmakeFlags = prev.cmakeFlags ++
|
||||
[ "-DMAGIC_ENUM_OPT_BUILD_EXAMPLES=OFF" "-DMAGIC_ENUM_OPT_BUILD_TESTS=OFF" ]; });
|
||||
range-v3 = prev.range-v3.overrideAttrs (prev: { cmakeFlags = prev.cmakeFlags ++
|
||||
@ -191,7 +192,7 @@
|
||||
packages = [ pkgs.clang-tools_18 ];
|
||||
CMAKE_EXPORT_COMPILE_COMMANDS = "1";
|
||||
};
|
||||
winjob = pkgs.mkShell.override { stdenv = pkgs.pkgsCross.mingwW64Static.gcc14Stdenv; }
|
||||
winjob = pkgs.mkShell
|
||||
{
|
||||
inputsFrom = [ pkgs.pkgsCross.mingwW64Static.winjob ];
|
||||
packages = [ pkgs.clang-tools_18 ];
|
||||
|
@ -70,7 +70,7 @@ inputs: rec
|
||||
ufo = inputs.pkgs.callPackage ./ufo
|
||||
{ inherit concurrencpp biu glad matplotplusplus zpp-bits; tbb = inputs.pkgs.tbb_2021_11; };
|
||||
chn-bsub = inputs.pkgs.callPackage ./chn-bsub { inherit biu; };
|
||||
winjob = inputs.pkgs.callPackage ./winjob { stdenv = inputs.pkgs.gcc14Stdenv; };
|
||||
winjob = inputs.pkgs.callPackage ./winjob {};
|
||||
sockpp = inputs.pkgs.callPackage ./sockpp.nix { src = inputs.topInputs.sockpp; };
|
||||
git-lfs-transfer = inputs.pkgs.callPackage ./git-lfs-transfer.nix { src = inputs.topInputs.git-lfs-transfer; };
|
||||
|
||||
|
@ -16,15 +16,14 @@ find_package(Boost REQUIRED COMPONENTS headers filesystem)
|
||||
find_package(nlohmann_json REQUIRED)
|
||||
|
||||
add_executable(winjob src/winjob.cpp src/windows.cpp)
|
||||
# target_compile_features(winjob PRIVATE cxx_std_26)
|
||||
target_compile_options(winjob PRIVATE "-std=c++26")
|
||||
target_compile_features(winjob PRIVATE cxx_std_23)
|
||||
target_include_directories(winjob PRIVATE ${PROJECT_SOURCE_DIR}/include)
|
||||
target_link_libraries(winjob PRIVATE Boost::headers Boost::filesystem ws2_32 wsock32)
|
||||
target_compile_definitions(winjob PRIVATE winjob_VERSION="${winjob_VERSION}")
|
||||
|
||||
add_executable(winjobd src/winjobd.cpp src/windows.cpp)
|
||||
# target_compile_features(winjob PRIVATE cxx_std_26)
|
||||
target_compile_options(winjobd PRIVATE "-std=c++26")
|
||||
target_compile_features(winjob PRIVATE cxx_std_23)
|
||||
target_compile_options(winjobd PRIVATE -fpermissive)
|
||||
target_include_directories(winjobd PRIVATE ${PROJECT_SOURCE_DIR}/include)
|
||||
target_link_libraries(winjobd PRIVATE Boost::headers Boost::filesystem ws2_32 wsock32)
|
||||
target_compile_definitions(winjobd PRIVATE winjob_VERSION="${winjob_VERSION}")
|
||||
|
12
local/pkgs/winjob/boost.patch
Normal file
12
local/pkgs/winjob/boost.patch
Normal file
@ -0,0 +1,12 @@
|
||||
diff --color -ur a/boost/process/v2/detail/impl/utf8.ipp b/boost/process/v2/detail/impl/utf8.ipp
|
||||
--- a/boost/process/v2/detail/impl/utf8.ipp 2024-07-26 15:50:15.844632780 +0800
|
||||
+++ b/boost/process/v2/detail/impl/utf8.ipp 2024-07-26 15:50:09.036567016 +0800
|
||||
@@ -11,7 +11,7 @@
|
||||
#include <boost/process/v2/error.hpp>
|
||||
|
||||
#if defined(BOOST_PROCESS_V2_WINDOWS)
|
||||
-#include <Windows.h>
|
||||
+#include <windows.h>
|
||||
#endif
|
||||
|
||||
BOOST_PROCESS_V2_BEGIN_NAMESPACE
|
@ -1,11 +1,9 @@
|
||||
# include <optional>
|
||||
# include <string>
|
||||
# include <utility>
|
||||
# include <boost/process/v2.hpp>
|
||||
|
||||
namespace winjob
|
||||
{
|
||||
std::optional<std::pair<std::wstring, std::wstring>> get_owner(std::wstring file_name);
|
||||
bool set_permission(std::wstring fileName);
|
||||
std::unique_ptr<boost::process::child> run_as(std::pair<std::wstring, std::wstring> user, std::wstring program);
|
||||
}
|
||||
|
@ -3,7 +3,6 @@
|
||||
# include <tchar.h>
|
||||
# include <accctrl.h>
|
||||
# include <aclapi.h>
|
||||
# include <winbase.h>
|
||||
|
||||
namespace winjob
|
||||
{
|
||||
@ -103,22 +102,4 @@ namespace winjob
|
||||
{ FreeSid(pUsersSID); LocalFree(pACL); LocalFree(pSD); return false; }
|
||||
else { FreeSid(pUsersSID); LocalFree(pACL); LocalFree(pSD); return true; }
|
||||
}
|
||||
|
||||
std::unique_ptr<boost::process::child> run_as(std::pair<std::wstring, std::wstring> user, std::wstring program)
|
||||
{
|
||||
auto password = L"";
|
||||
|
||||
// Initialize the STARTUPINFO structure
|
||||
STARTUPINFOW si = { sizeof(si) };
|
||||
PROCESS_INFORMATION pi;
|
||||
|
||||
// Create the process as the specified user
|
||||
BOOL result = CreateProcessWithLogonW
|
||||
(
|
||||
user.second.c_str(), user.first.c_str(), password, LOGON_WITH_PROFILE, program.c_str(), NULL, // args
|
||||
CREATE_UNICODE_ENVIRONMENT, NULL, NULL, &si, &pi
|
||||
);
|
||||
if (!result) return {};
|
||||
else return new boost::process::child(boost::process::detail::windows::child_handle(pi.hProcess, true));
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,11 @@
|
||||
# include <boost/asio.hpp>
|
||||
# include <winjob/windows.hpp>
|
||||
# include <boost/asio.hpp>
|
||||
# include <boost/process/v2/windows/with_logon_launcher.hpp>
|
||||
# include <boost/process/v2/process.hpp>
|
||||
# include <iostream>
|
||||
# include <filesystem>
|
||||
# include <fstream>
|
||||
# include <windows.h>
|
||||
|
||||
using namespace std::literals;
|
||||
|
||||
@ -17,18 +20,31 @@ int main()
|
||||
std::filesystem::create_directories(LR"(C:\ProgramData\winjob\auth)");
|
||||
winjob::set_permission(LR"(C:\ProgramData\winjob\auth)");
|
||||
|
||||
|
||||
// log file
|
||||
std::ofstream log(LR"(C:\ProgramData\winjob\log.txt)", std::ios::app);
|
||||
|
||||
auto user = winjob::get_owner(LR"(C:\Users\chn\Desktop\winjob.exe)");
|
||||
if (!user)
|
||||
{
|
||||
log << "Failed to get owner\n" << std::flush;
|
||||
return 1;
|
||||
}
|
||||
if (user)
|
||||
{
|
||||
log << "Owner: " << user->first << "\\" << user->second << '\n' << std::flush;
|
||||
auto launcher = boost::process::v2::windows::with_logon_launcher(user->second, L"", user->first,
|
||||
LOGON_WITH_PROFILE);
|
||||
boost::asio::io_context ctx;
|
||||
boost::process::v2::error_code ec;
|
||||
std::wstring program = LR"(C:\Users\chn\Desktop\winjob.exe)";
|
||||
auto process = launcher(ctx, ec, program, std::vector<std::wstring>{});
|
||||
}
|
||||
|
||||
boost::asio::io_context io_context;
|
||||
boost::asio::local::stream_protocol::endpoint ep(LR"(C:\ProgramData\winjob\winjobd.sock)");
|
||||
boost::asio::local::stream_protocol::endpoint ep(R"(C:\ProgramData\winjob\winjobd.sock)");
|
||||
boost::asio::local::stream_protocol::acceptor acceptor(io_context, ep, false);
|
||||
winjob::set_permission(LR"(C:\ProgramData\winjob\winjobd.sock)");
|
||||
|
||||
auto user = winjob::get_owner(LR"(C:\Users\chn\Desktop\winjob.exe)");
|
||||
if (user) winjob::run_as(*user, LR"(C:\Users\chn\Desktop\winjob.exe)");
|
||||
|
||||
std::function<void(const boost::system::error_code&, boost::asio::local::stream_protocol::socket)> func =
|
||||
[&](const boost::system::error_code& ec, boost::asio::local::stream_protocol::socket socket)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user