From ca08aa491825d476bbacf358e1713973b5748591 Mon Sep 17 00:00:00 2001 From: midipix Date: Jun 27 2020 09:56:42 +0000 Subject: daemon: ioctl: added toks_daemon_ioctl_{get|log}_service_info(). --- diff --git a/include/toksvc/toksvc.h b/include/toksvc/toksvc.h index a3d0806..334b370 100644 --- a/include/toksvc/toksvc.h +++ b/include/toksvc/toksvc.h @@ -96,9 +96,15 @@ extern "C" { #define TOKS_IOCTL_IDX_GET_TOKEN_COUNT 0 #define TOKS_IOCTL_IDX_SET_TOKEN_COUNT 1 +#define TOKS_IOCTL_IDX_GET_SERVICE_INFO 2 +#define TOKS_IOCTL_IDX_LOG_SERVICE_INFO 3 + #define TOKS_IOCTL_GET_TOKEN_COUNT TOKS_IOCTL_GET(TOKS_IOCTL_IDX_GET_TOKEN_COUNT) #define TOKS_IOCTL_SET_TOKEN_COUNT TOKS_IOCTL_GET(TOKS_IOCTL_IDX_SET_TOKEN_COUNT) +#define TOKS_IOCTL_GET_SERVICE_INFO TOKS_IOCTL_GET(TOKS_IOCTL_IDX_GET_SERVICE_INFO) +#define TOKS_IOCTL_LOG_SERVICE_INFO TOKS_IOCTL_GET(TOKS_IOCTL_IDX_LOG_SERVICE_INFO) + enum toks_custom_error { TOKS_ERR_FLOW_ERROR, TOKS_ERR_FLEE_ERROR, @@ -127,6 +133,19 @@ struct toks_token_string{ char token[128]; }; +struct toks_service_info { + struct _nt_guid uuid; + int32_t syspid; + int32_t systid; + int32_t ctrlpid; + int32_t csyspid; + int32_t allocated; + int32_t available; + int32_t used; + int32_t free; + int32_t loglevel; +}; + struct toks_error_info { const struct toks_driver_ctx * edctx; const struct toks_unit_ctx * euctx; diff --git a/src/daemon/toks_daemon_ioctl.c b/src/daemon/toks_daemon_ioctl.c index 8d60a04..ef7157b 100644 --- a/src/daemon/toks_daemon_ioctl.c +++ b/src/daemon/toks_daemon_ioctl.c @@ -10,6 +10,7 @@ #include "toksvc_daemon_impl.h" #include "toksvc_driver_impl.h" +#include "toksvc_log_impl.h" static int32_t toks_daemon_ioctl_get_token_count(struct toks_daemon_ctx * dctx) { @@ -40,6 +41,51 @@ static int32_t toks_daemon_ioctl_set_token_count(struct toks_daemon_ctx * dctx) return toks_daemon_release(dctx); } +static int32_t toks_daemon_ioctl_get_service_info(struct toks_daemon_ctx * dctx) +{ + nt_tty_port_msg * msg = &dctx->reply; + + /* uuid */ + msg->svcdata.meta[0] = (dctx->driver_ctx->cctx->uuid->data1); + + msg->svcdata.meta[1] = (dctx->driver_ctx->cctx->uuid->data2); + msg->svcdata.meta[1] |= (dctx->driver_ctx->cctx->uuid->data3 << 16); + + msg->svcdata.meta[2] = (dctx->driver_ctx->cctx->uuid->data4[0]); + msg->svcdata.meta[2] |= (dctx->driver_ctx->cctx->uuid->data4[1] << 8); + msg->svcdata.meta[2] |= (dctx->driver_ctx->cctx->uuid->data4[2] << 16); + msg->svcdata.meta[2] |= (dctx->driver_ctx->cctx->uuid->data4[3] << 24); + + msg->svcdata.meta[3] = (dctx->driver_ctx->cctx->uuid->data4[4]); + msg->svcdata.meta[3] |= (dctx->driver_ctx->cctx->uuid->data4[5] << 8); + msg->svcdata.meta[3] |= (dctx->driver_ctx->cctx->uuid->data4[6] << 16); + msg->svcdata.meta[3] |= (dctx->driver_ctx->cctx->uuid->data4[7] << 24); + + /* syspid, systid */ + msg->svcdata.data[0] = pe_get_current_process_id(); + msg->svcdata.data[1] = pe_get_current_thread_id(); + + /* ctrlpid, csyspid */ + msg->svcdata.data[2] = dctx->ctrlpid; + msg->svcdata.data[3] = dctx->csyspid; + + /* allocated, available */ + msg->svcdata.data[4] = toks_get_driver_atokens(dctx->driver_ctx); + msg->svcdata.data[5] = toks_get_driver_ntokens(dctx->driver_ctx); + + /* used, free */ + msg->svcdata.data[6] = dctx->utokens; + msg->svcdata.data[7] = dctx->ftokens; + + return NT_STATUS_SUCCESS; +} + +static int32_t toks_daemon_ioctl_log_service_info(struct toks_daemon_ctx * dctx) +{ + toks_log_service_info(dctx); + return NT_STATUS_SUCCESS; +} + int32_t __stdcall toks_daemon_ioctl(struct toks_daemon_ctx * dctx) { nt_tty_port_msg * msg; @@ -55,6 +101,12 @@ int32_t __stdcall toks_daemon_ioctl(struct toks_daemon_ctx * dctx) case TOKS_IOCTL_SET_TOKEN_COUNT: return toks_daemon_ioctl_set_token_count(dctx); + case TOKS_IOCTL_GET_SERVICE_INFO: + return toks_daemon_ioctl_get_service_info(dctx); + + case TOKS_IOCTL_LOG_SERVICE_INFO: + return toks_daemon_ioctl_log_service_info(dctx); + default: return NT_STATUS_NOT_IMPLEMENTED; }