diff --git a/project/common.mk b/project/common.mk index 75aee5d..699f2a3 100644 --- a/project/common.mk +++ b/project/common.mk @@ -5,6 +5,7 @@ INTERNAL_SRCS = \ src/client/toks_client_connect.c \ src/client/toks_client_release.c \ src/client/toks_client_token.c \ + src/daemon/toks_daemon_abort.c \ src/daemon/toks_daemon_acquire.c \ src/daemon/toks_daemon_cancel.c \ src/daemon/toks_daemon_connect.c \ diff --git a/src/daemon/toks_daemon_abort.c b/src/daemon/toks_daemon_abort.c new file mode 100644 index 0000000..3668958 --- /dev/null +++ b/src/daemon/toks_daemon_abort.c @@ -0,0 +1,25 @@ +/*********************************************************/ +/* toksvc: a framework-native token broker service */ +/* Copyright (C) 2020 Z. Gilboa */ +/* Released under GPLv2 and GPLv3; see COPYING.TOKSVC. */ +/*********************************************************/ + +#include +#include +#include + +#include "toksvc_daemon_impl.h" +#include "toksvc_driver_impl.h" + +int32_t __stdcall toks_daemon_abort(struct toks_daemon_ctx * dctx) +{ + ntapi->zw_reply_port( + dctx->hport_daemon, + &dctx->reply.header); + + ntapi->zw_terminate_process( + NT_CURRENT_PROCESS_HANDLE, + NT_STATUS_REQUEST_ABORTED); + + return NT_STATUS_INTERNAL_ERROR; +} diff --git a/src/daemon/toks_daemon_loop.c b/src/daemon/toks_daemon_loop.c index 343e41c..8054e06 100644 --- a/src/daemon/toks_daemon_loop.c +++ b/src/daemon/toks_daemon_loop.c @@ -24,6 +24,7 @@ static toks_daemon_routine * toks_daemon_vtbl[TOKS_VTBL_ELEMENTS] = { TOKS_HANDLER(ACQUIRE, toks_daemon_acquire), TOKS_HANDLER(RELEASE, toks_daemon_release), TOKS_HANDLER(CANCEL, toks_daemon_cancel), + TOKS_HANDLER(ABORT, toks_daemon_abort), }; int32_t __stdcall toks_daemon_loop(void * ctx) diff --git a/src/internal/toksvc_daemon_impl.h b/src/internal/toksvc_daemon_impl.h index 24569e4..5e46deb 100644 --- a/src/internal/toksvc_daemon_impl.h +++ b/src/internal/toksvc_daemon_impl.h @@ -15,6 +15,7 @@ enum toks_daemon_opcodes { TOKS_DAEMON_ACQUIRE, TOKS_DAEMON_RELEASE, TOKS_DAEMON_CANCEL, + TOKS_DAEMON_ABORT, TOKS_DAEMON_OPCODE_CAP }; @@ -78,5 +79,6 @@ int32_t __stdcall toks_daemon_acquire(struct toks_daemon_ctx *); int32_t __stdcall toks_daemon_pidopen(struct toks_daemon_ctx *); int32_t __stdcall toks_daemon_release(struct toks_daemon_ctx *); int32_t __stdcall toks_daemon_cancel(struct toks_daemon_ctx *); +int32_t __stdcall toks_daemon_abort(struct toks_daemon_ctx *); #endif