summaryrefslogtreecommitdiffhomepage
path: root/src/tty/ntapi_tty_join_session.c
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2015-07-27 04:01:18 -0400
committermidipix <writeonce@midipix.org>2015-07-27 04:01:18 -0400
commitdd89bb8ad4fe184a34b5dbdda237e640fc82121b (patch)
tree5e80d2da35f5892f92be29f57982b2708e6bd99b /src/tty/ntapi_tty_join_session.c
parentdcdadc2702712fa750ed255ed1dfa354522797a0 (diff)
downloadntapi-dd89bb8ad4fe184a34b5dbdda237e640fc82121b.tar.bz2
ntapi-dd89bb8ad4fe184a34b5dbdda237e640fc82121b.tar.xz
entered advanced internal development stage.
Diffstat (limited to 'src/tty/ntapi_tty_join_session.c')
-rw-r--r--src/tty/ntapi_tty_join_session.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/tty/ntapi_tty_join_session.c b/src/tty/ntapi_tty_join_session.c
new file mode 100644
index 0000000..e88b9cb
--- /dev/null
+++ b/src/tty/ntapi_tty_join_session.c
@@ -0,0 +1,53 @@
+/********************************************************/
+/* ntapi: Native API core library */
+/* Copyright (C) 2013,2014,2015 Z. Gilboa */
+/* Released under GPLv2 and GPLv3; see COPYING.NTAPI. */
+/********************************************************/
+
+#include <psxtypes/psxtypes.h>
+#include <ntapi/ntapi.h>
+#include "ntapi_impl.h"
+
+int32_t __stdcall __ntapi_tty_join_session(
+ __out void ** hport,
+ __out nt_port_name * port_name,
+ __in nt_port_attr * port_attr,
+ __in nt_tty_session_type type)
+{
+ nt_status status;
+ ntapi_internals * __internals;
+
+ /* init */
+ __internals = __ntapi_internals();
+
+ if (type == NT_TTY_SESSION_PRIMARY) {
+ hport = hport ? hport : &__internals->hport_tty_session;
+ port_name = port_name ? port_name : __internals->subsystem;
+ }
+
+ /* port name */
+ __ntapi->tt_port_name_from_attributes(
+ port_name,
+ port_attr);
+
+ /* connect to subsystem */
+ if ((status = __ntapi->tty_connect(
+ hport,
+ (wchar16_t *)port_name,
+ NT_SECURITY_IMPERSONATION)))
+ return status;
+
+ /* finalize primary session */
+ if (type == NT_TTY_SESSION_PRIMARY) {
+ if (hport != &__internals->hport_tty_session)
+ __internals->hport_tty_session = *hport;
+
+ if (port_name != __internals->subsystem)
+ __ntapi->tt_memcpy_utf16(
+ __internals->subsystem->base_named_objects,
+ port_name->base_named_objects,
+ sizeof(*port_name));
+ };
+
+ return status;
+}