diff --git a/include/toksvc/toksvc.h b/include/toksvc/toksvc.h index dd1b8a0..2cfcd67 100644 --- a/include/toksvc/toksvc.h +++ b/include/toksvc/toksvc.h @@ -55,6 +55,10 @@ extern "C" { #define TOKS_DRIVER_ACTION_RELEASE 0X200000 #define TOKS_DRIVER_ACTION_ABORT 0X400000 +/* message options */ +#define TOKS_OPT_SYSTEM_PID 0x0000 +#define TOKS_OPT_FRAMEWORK_PID 0x0001 + /* error flags */ #define TOKS_ERROR_TOP_LEVEL 0x0001 #define TOKS_ERROR_NESTED 0x0002 diff --git a/src/client/toks_client_acquire.c b/src/client/toks_client_acquire.c index c4e0344..ea0783f 100644 --- a/src/client/toks_client_acquire.c +++ b/src/client/toks_client_acquire.c @@ -53,9 +53,12 @@ int32_t toks_client_acquire(struct toks_driver_ctx * dctx) msg.header.data_size = sizeof(msg.data); msg.header.msg_size = sizeof(msg); msg.data.ttyinfo.opcode = TOKS_DAEMON_ACQUIRE; + msg.data.ipcinfo.hevent = toks_get_driver_hevent(dctx); - msg.data.ipcinfo.ctrlsvc.keys.reserved = toks_get_driver_tokpid(dctx); - msg.data.ipcinfo.hevent = toks_get_driver_hevent(dctx); + if (toks_get_driver_tokpid(dctx)) { + msg.data.ipcinfo.ctrlsvc.keys.reserved = toks_get_driver_tokpid(dctx); + msg.data.ipcinfo.ctrlsvc.options = TOKS_OPT_FRAMEWORK_PID; + } if (refstr && (reflen = toks_strlen(refstr))) { if (reflen > sizeof(msg.data.ipcinfo.ctrlsvc.keys.key)) diff --git a/src/daemon/toks_daemon_acquire.c b/src/daemon/toks_daemon_acquire.c index 5612d11..2367f8a 100644 --- a/src/daemon/toks_daemon_acquire.c +++ b/src/daemon/toks_daemon_acquire.c @@ -236,8 +236,12 @@ int32_t __stdcall toks_daemon_acquire(struct toks_daemon_ctx * dctx) if (dctx->opcode == TOKS_DAEMON_ACQUIRE) { if ((dctx->reqtokpid = msg->ipcinfo.ctrlsvc.keys.reserved)) { - if ((status = toks_daemon_pidopen(dctx))) - return status; + if (msg->ipcinfo.ctrlsvc.options & TOKS_OPT_FRAMEWORK_PID) { + if ((status = toks_daemon_pidopen(dctx))) + return status; + } else { + dctx->reqsyspid = dctx->reqtokpid; + } client.tokpid = dctx->reqtokpid; client.cid.process_id = dctx->reqsyspid;