Blame include/ntapi/nt_tty.h

dd89bb
#ifndef _NT_TTY_H_
dd89bb
#define _NT_TTY_H_
dd89bb
dd89bb
/**
dd89bb
 *  tty api:
dd89bb
 *  -----------
dd89bb
 *  this header describes the tty interfaces that are used
dd89bb
 *  by native applications and libraries to communicate with
dd89bb
 *  ntctty, the project's native subsystem and pty server.
dd89bb
**/
dd89bb
414ad3
#include "nt_abi.h"
414ad3
#include "nt_compiler.h"
dd89bb
#include "nt_object.h"
5ea20e
#include "nt_process.h"
dd89bb
#include "nt_port.h"
dd89bb
#include "nt_termios.h"
4a2e49
#include "nt_sem.h"
dd89bb
ad6132
/* tty affiliation */
ad6132
typedef struct _nt_tty_affiliation {
ad6132
	char	group1[8];
ad6132
	char	group2[4];
ad6132
	char	group3[4];
ad6132
	char	group4[4];
ad6132
	char	group5[12];
ad6132
} nt_tty_affiliation;
ad6132
ad6132
#define NT_TTY_AFFILIATION_GUID_DEFAULT	{0xeb564abf, 0x0714,0x4cc9,{0x83,0x55,0xf9,0x89,0xdb,0xab,0x49,0x5c}}
ad6132
#define NT_TTY_AFFILIATION_GUID_POSIX	{0xe35ed272, 0x9e55,0x46c1,{0x82,0x51,0x02,0x2a,0x59,0xe6,0xc4,0x80}}
ad6132
ad6132
#define NT_TTY_AFFILIATION_DEFAULT {				\
ad6132
	{'e','b','5','6','4','a','b','f'},			\
ad6132
	{'0','7','1','4'},					\
ad6132
	{'4','c','c','9'},					\
ad6132
	{'8','3','5','5'},					\
ad6132
	{'f','9','8','9','d','b','a','b','4','9','5','c'}}
ad6132
ad6132
#define NT_TTY_AFFILIATION_POSIX {				\
ad6132
	{'e','3','5','e','d','2','7','2'},			\
ad6132
	{'9','e','5','5'},					\
ad6132
	{'4','6','c','1'},					\
ad6132
	{'8','2','5','1'},					\
ad6132
	{'0','2','2','a','5','9','e','6','c','4','8','0'}}
ad6132
dd89bb
typedef enum _nt_tty_opcode {
dd89bb
	NT_TTY_CLIENT_OPCODE_BASE	= 0x40000,
dd89bb
	/* primary connection */
dd89bb
	NT_TTY_CLIENT_SESSION_CONNECT	= NT_TTY_CLIENT_OPCODE_BASE,
dd89bb
	NT_TTY_CLIENT_SESSION_DISCONNECT,
dd89bb
	NT_TTY_CLIENT_SESSION_QUERY,
dd89bb
	NT_TTY_CLIENT_SESSION_SET,
edb085
	/* server-to-server coordination */
edb085
	NT_TTY_CLIENT_SESSION_SYNCHRONIZE,
edb085
	NT_TTY_CLIENT_SESSION_TRANSFER,
dd89bb
	/* process registration */
dd89bb
	NT_TTY_CLIENT_PROCESS_REGISTER,
dd89bb
	NT_TTY_CLIENT_PROCESS_UNREGISTER,
dd89bb
	/* session information */
dd89bb
	NT_TTY_QUERY_INFORMATION_SERVER,
a1e25a
	NT_TTY_QUERY_INFORMATION_SERVICE,
dd89bb
	NT_TTY_QUERY_INFORMATION_SESSION,
dd89bb
	NT_TTY_QUERY_INFORMATION_PROCESS,
dd89bb
	NT_TTY_QUERY_INFORMATION_THREAD,
dd89bb
	NT_TTY_QUERY_INFORMATION_SECTION,
dd89bb
	NT_TTY_QUERY_INFORMATION_PTY,
4a2e49
	NT_TTY_QUERY_INFORMATION_SEMAPHORE,
dd89bb
	/* peer daemon calls */
dd89bb
	NT_TTY_REQUEST_PEER,
dd89bb
	NT_TTY_SIGNAL_PEER,
dd89bb
	/* pty */
dd89bb
	NT_TTY_PTY_OPEN,
dd89bb
	NT_TTY_PTY_CLOSE,
dd89bb
	NT_TTY_PTY_READ,
dd89bb
	NT_TTY_PTY_WRITE,
dd89bb
	NT_TTY_PTY_QUERY,
dd89bb
	NT_TTY_PTY_SET,
dd89bb
	NT_TTY_PTY_FCNTL,
dd89bb
	NT_TTY_PTY_IOCTL,
dd89bb
	NT_TTY_PTY_CANCEL,
dd89bb
	NT_TTY_PTY_PEEK,
4a2e49
	/* semaphore */
4a2e49
	NT_TTY_SEM_ALLOC,
4a2e49
	NT_TTY_SEM_FREE,
4a2e49
	NT_TTY_SEM_OPEN,
4a2e49
	NT_TTY_SEM_CLOSE,
4a2e49
	NT_TTY_SEM_QUERY,
4a2e49
	NT_TTY_SEM_SET,
4a2e49
	NT_TTY_SEM_FCNTL,
4a2e49
	NT_TTY_SEM_IOCTL,
4a2e49
	NT_TTY_SEM_CANCEL,
4a2e49
	NT_TTY_SEM_TRACE,
edb085
	NT_TTY_SEM_TRANSFER,
edb085
	NT_TTY_SEM_WAIT,
dd89bb
	/* virtual mount system */
dd89bb
	NT_TTY_VMS_QUERY,
dd89bb
	NT_TTY_VMS_REQUEST,
dd89bb
	/* exclusive upper limit */
dd89bb
	NT_TTY_CLIENT_OPCODE_CAP
dd89bb
} nt_tty_opcode;
dd89bb
dd89bb
dd89bb
typedef enum _nt_tty_session_type {
dd89bb
	NT_TTY_SESSION_PRIMARY,
f61917
	NT_TTY_SESSION_SECONDARY,
dd89bb
	NT_TTY_SESSION_PRIVATE
dd89bb
} nt_tty_session_type;
dd89bb
dd89bb
e3e5a2
typedef enum _nt_tty_session_subtype {
e3e5a2
	NT_TTY_SESSION_SUBTYPE_DEFAULT,
e3e5a2
	NT_TTY_SESSION_SUBTYPE_CAP,
e3e5a2
} nt_tty_session_subtype;
e3e5a2
e3e5a2
c16244
typedef enum _nt_tty_server_info_class {
c16244
	NT_TTY_SERVER_BASIC_INFORMATION,
c16244
	NT_TTY_SERVER_PTM_SLOT_INFORMATION,
c16244
	NT_TTY_SERVER_PTS_SLOT_INFORMATION,
c16244
	NT_TTY_SERVER_DBM_SLOT_INFORMATION,
c16244
	NT_TTY_SERVER_DBG_SLOT_INFORMATION,
4a2e49
	NT_TTY_SERVER_SEM_SLOT_INFORMATION,
c16244
	NT_TTY_SERVER_INFORMATION_CAP
c16244
} nt_tty_server_info_class;
c16244
c16244
dd89bb
typedef enum _nt_pty_info_class {
dd89bb
	NT_PTY_BASIC_INFORMATION,
dd89bb
	NT_PTY_CLIENT_INFORMATION,
efc01e
	NT_PTY_INHERIT_INFORMATION,
dd89bb
	NT_PTY_INFORMATION_CAP
dd89bb
} nt_pty_info_class;
dd89bb
dd89bb
efc01e
/* client process registration flags */
efc01e
#define NT_TTY_INHERIT_HANDLES 	0x0001
efc01e
efc01e
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_msg_info {
dd89bb
	uintptr_t	msg_id;
dd89bb
	uint32_t	opcode;
dd89bb
	int32_t		status;
dd89bb
	void *		reserved;
dd89bb
} nt_tty_msg_info;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_register_info {
dd89bb
	uintptr_t	process_id;
dd89bb
	uintptr_t	thread_id;
dd89bb
	uintptr_t	flags;
dd89bb
	uintptr_t	reserved;
dd89bb
} nt_tty_register_info;
dd89bb
dd89bb
c16244
typedef struct __attr_ptr_size_aligned__ _nt_tty_server_basic_info {
dd89bb
	nt_port_attr	attr;
dd89bb
	intptr_t	pid;
dd89bb
	intptr_t	tid;
c16244
} nt_tty_server_basic_info;
dd89bb
dd89bb
c16244
typedef struct __attr_ptr_size_aligned__ _nt_tty_server_info {
c16244
	nt_tty_server_info_class	info_class;
c16244
	uint32_t			info_length;
c16244
	uintptr_t			info_buffer[];
c16244
} nt_tty_server_info;
c16244
a1e25a
a1e25a
typedef struct __attr_ptr_size_aligned__ _nt_tty_service_info {
a1e25a
	nt_port_attr	attr;
a1e25a
	uint32_t	key;
a1e25a
	uint32_t	id;
a1e25a
} nt_tty_service_info;
a1e25a
a1e25a
1b6aec
typedef struct __attr_ptr_size_aligned__ _nt_tty_section_info {
1b6aec
	nt_port_attr	attr;
1b6aec
	void *		section;
1b6aec
	void *		section_addr;
1b6aec
	size_t		section_size;
1b6aec
} nt_tty_section_info;
1b6aec
1b6aec
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_vms_info {
dd89bb
	void *		hroot;
dd89bb
	uint32_t	hash;
dd89bb
	uint32_t	flags;
dd89bb
	int64_t		key;
dd89bb
	nt_guid		vms_guid;
dd89bb
	nt_port_keys	vms_keys;
dd89bb
} nt_tty_vms_info;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_peer_info {
dd89bb
	uint32_t	opcode;
dd89bb
	uint32_t	flags;
dd89bb
	nt_guid		service;
dd89bb
	nt_port_attr	peer;
dd89bb
} nt_tty_peer_info;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_sigctl_info {
dd89bb
	void *			hpty;
dd89bb
	nt_guid			guid;
dd89bb
	nt_luid			luid;
dd89bb
	uint32_t		ctlcode;
dd89bb
	int32_t			cccode;
dd89bb
	nt_client_id		cid;
dd89bb
	uintptr_t		ctxarg[4];
dd89bb
	struct tty_termios	terminfo;
dd89bb
	struct tty_winsize	winsize;
dd89bb
	nt_iosb			iosb;
dd89bb
} nt_tty_sigctl_info;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_pty_fd_info {
dd89bb
	void *		hpty;
dd89bb
	void *		section;
dd89bb
	void *		section_addr;
dd89bb
	size_t		section_size;
dd89bb
	nt_guid		guid;
dd89bb
	nt_luid		luid;
dd89bb
	uint32_t	access;
dd89bb
	uint32_t	flags;
dd89bb
	uint32_t	share;
dd89bb
	uint32_t	options;
dd89bb
	intptr_t	state;
dd89bb
	void *		hevent[2];
dd89bb
} nt_pty_fd_info;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_pty_io_info {
dd89bb
	void *		hpty;
dd89bb
	void *		hevent;
dd89bb
	void *		reserved;
dd89bb
	void *		apc_routine;
dd89bb
	void *		apc_context;
dd89bb
	nt_iosb *	riosb;
dd89bb
	void *		raddr;
dd89bb
	nt_iosb		iosb;
dd89bb
	off_t		offset;
dd89bb
	size_t		nbytes;
dd89bb
	uint32_t	key;
dd89bb
	uint32_t	npending;
dd89bb
	nt_guid		guid;
dd89bb
	nt_luid		luid;
dd89bb
} nt_pty_io_info;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_pty_client_info {
dd89bb
	uintptr_t	any[4];
dd89bb
} nt_pty_client_info;
dd89bb
dd89bb
efc01e
typedef struct __attr_ptr_size_aligned__ _nt_pty_inherit_info {
efc01e
	void *		hpty;
efc01e
	nt_guid		guid;
efc01e
	nt_luid		luid;
efc01e
efc01e
	union {
efc01e
		struct {
efc01e
			uint32_t	access;
efc01e
			uint32_t	flags;
efc01e
			uint32_t	share;
efc01e
			uint32_t	options;
efc01e
		};
efc01e
efc01e
		uintptr_t 		any[4];
efc01e
	};
efc01e
} nt_pty_inherit_info;
efc01e
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_session_info {
dd89bb
	int32_t		pid;
dd89bb
	int32_t		pgid;
dd89bb
	int32_t		sid;
c34b2c
	int32_t		syspid;
dd89bb
} nt_tty_session_info;
dd89bb
edb085
edb085
typedef struct __attr_ptr_size_aligned__ _nt_tty_ipc_info {
edb085
	nt_port_attr	ctrlsvc;
edb085
	uint32_t	ipckeys[6];
edb085
	void *		hevent;
edb085
	void *		apc_routine;
edb085
	void *		apc_context;
edb085
	nt_iosb *	riosb;
edb085
} nt_tty_ipc_info;
edb085
edb085
edb085
typedef struct __attr_ptr_size_aligned__ _nt_tty_sync_info {
edb085
	nt_client_id	cid;
edb085
	nt_port_attr	ipcsvc;
edb085
	uint32_t	ipckeys[6];
edb085
	void *		hevent;
edb085
	void *		apc_routine;
edb085
	void *		apc_context;
edb085
	nt_iosb *	riosb;
edb085
} nt_tty_sync_info;
edb085
edb085
edb085
edb085
typedef struct __attr_ptr_size_aligned__ _nt_tty_transfer_info {
edb085
	nt_client_id	ccid;
edb085
	nt_client_id	tcid;
edb085
	uint32_t	ipckeys[6];
edb085
	void *		hevent;
edb085
	void *		apc_routine;
edb085
	void *		apc_context;
edb085
	nt_iosb *	riosb;
edb085
} nt_tty_transfer_info;
edb085
edb085
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_register_msg {
dd89bb
	nt_port_message			header;
dd89bb
	struct {
dd89bb
		nt_tty_msg_info		ttyinfo;
dd89bb
		nt_tty_register_info	reginfo;
dd89bb
	} data;
dd89bb
} nt_tty_register_msg;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_server_msg {
dd89bb
	nt_port_message			header;
dd89bb
	struct {
dd89bb
		nt_tty_msg_info		ttyinfo;
dd89bb
		nt_tty_server_info	srvinfo;
dd89bb
	} data;
dd89bb
} nt_tty_server_msg;
dd89bb
dd89bb
a1e25a
typedef struct __attr_ptr_size_aligned__ _nt_tty_service_msg {
a1e25a
	nt_port_message			header;
a1e25a
	struct {
a1e25a
		nt_tty_msg_info		ttyinfo;
a1e25a
		nt_tty_service_info	svcinfo;
a1e25a
	} data;
a1e25a
} nt_tty_service_msg;
a1e25a
a1e25a
1b6aec
typedef struct __attr_ptr_size_aligned__ _nt_tty_section_msg {
1b6aec
	nt_port_message			header;
1b6aec
	struct {
1b6aec
		nt_tty_msg_info		ttyinfo;
1b6aec
		nt_tty_section_info	secinfo;
1b6aec
	} data;
1b6aec
} nt_tty_section_msg;
1b6aec
1b6aec
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_vms_msg {
dd89bb
	nt_port_message			header;
dd89bb
	struct {
dd89bb
		nt_tty_msg_info		ttyinfo;
dd89bb
		nt_tty_vms_info		vmsinfo;
dd89bb
	} data;
dd89bb
} nt_tty_vms_msg;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_peer_msg {
dd89bb
	nt_port_message			header;
dd89bb
	struct {
dd89bb
		nt_tty_msg_info		ttyinfo;
dd89bb
		nt_tty_peer_info	peerinfo;
dd89bb
	} data;
dd89bb
} nt_tty_peer_msg;
dd89bb
dd89bb
486c11
typedef struct __attr_ptr_size_aligned__ _nt_tty_pid_msg {
486c11
	nt_port_message			header;
486c11
	struct {
486c11
		nt_tty_msg_info		ttyinfo;
486c11
		nt_user_process_info	pidinfo;
486c11
	} data;
486c11
} nt_tty_pid_msg;
486c11
486c11
edb085
typedef struct __attr_ptr_size_aligned__ _nt_tty_ipc_msg {
edb085
	nt_port_message			header;
edb085
	struct {
edb085
		nt_tty_msg_info		ttyinfo;
edb085
		nt_tty_ipc_info		ipcinfo;
edb085
	} data;
edb085
} nt_tty_ipc_msg;
edb085
edb085
edb085
typedef struct __attr_ptr_size_aligned__ _nt_tty_sync_msg {
edb085
	nt_port_message			header;
edb085
	struct {
edb085
		nt_tty_msg_info		ttyinfo;
edb085
		nt_tty_sync_info	syncinfo;
edb085
	} data;
edb085
} nt_tty_sync_msg;
edb085
edb085
edb085
typedef struct __attr_ptr_size_aligned__ _nt_tty_transfer_msg {
edb085
	nt_port_message			header;
edb085
	struct {
edb085
		nt_tty_msg_info		ttyinfo;
edb085
		nt_tty_transfer_info	transferinfo;
edb085
	} data;
edb085
} nt_tty_transfer_msg;
edb085
edb085
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_pty_fd_msg {
dd89bb
	nt_port_message			header;
dd89bb
	struct {
dd89bb
		nt_tty_msg_info		ttyinfo;
dd89bb
		nt_pty_fd_info		fdinfo;
dd89bb
	} data;
dd89bb
} nt_pty_fd_msg;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_pty_io_msg {
dd89bb
	nt_port_message			header;
dd89bb
	struct {
dd89bb
		nt_tty_msg_info		ttyinfo;
dd89bb
		nt_pty_io_info		ioinfo;
dd89bb
	} data;
dd89bb
} nt_pty_io_msg;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_pty_sigctl_msg {
dd89bb
	nt_port_message			header;
dd89bb
	struct {
dd89bb
		nt_tty_msg_info		ttyinfo;
dd89bb
		nt_tty_sigctl_info	ctlinfo;
dd89bb
	} data;
dd89bb
} nt_pty_sigctl_msg;
dd89bb
dd89bb
4a2e49
typedef struct __attr_ptr_size_aligned__ _nt_sem_info_msg {
4a2e49
	nt_port_message			header;
4a2e49
	struct {
4a2e49
		nt_tty_msg_info		ttyinfo;
4a2e49
		nt_sem_info		seminfo;
4a2e49
	} data;
4a2e49
} nt_sem_info_msg;
4a2e49
4a2e49
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_session_msg {
dd89bb
	nt_port_message			header;
dd89bb
	struct {
dd89bb
		nt_tty_msg_info		ttyinfo;
dd89bb
		nt_tty_session_info	sessioninfo;
dd89bb
	} data;
dd89bb
} nt_tty_session_msg;
dd89bb
dd89bb
dd89bb
typedef struct __attr_ptr_size_aligned__ _nt_tty_port_msg {
dd89bb
	nt_port_message			header;
dd89bb
	nt_tty_msg_info			ttyinfo;
dd89bb
	union {
dd89bb
		nt_tty_register_info	reginfo;
dd89bb
		nt_tty_vms_info		vmsinfo;
dd89bb
		nt_tty_peer_info	peerinfo;
dd89bb
		nt_tty_sigctl_info	ctlinfo;
edb085
		nt_tty_ipc_info		ipcinfo;
edb085
		nt_tty_sync_info	syncinfo;
edb085
		nt_user_process_info	pidinfo;
edb085
		nt_tty_transfer_info	transferinfo;
dd89bb
		nt_pty_fd_info		fdinfo;
dd89bb
		nt_pty_io_info		ioinfo;
dd89bb
		nt_pty_client_info	clientinfo;
dd89bb
		nt_tty_session_info	sessioninfo;
a1e25a
		nt_tty_service_info	svcinfo;
1b6aec
		nt_tty_section_info	secinfo;
4a2e49
		nt_sem_info		seminfo;
dd89bb
	};
dd89bb
} nt_tty_port_msg;
dd89bb
dd89bb
dd89bb
__assert_aligned_size(nt_tty_msg_info,		__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_tty_register_info,	__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_tty_vms_info,		__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_tty_peer_info,		__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_tty_sigctl_info,	__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_pty_fd_info,		__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_pty_io_info,		__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_tty_register_msg,	__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_tty_vms_msg,		__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_tty_peer_msg,		__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_pty_sigctl_msg,	__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_pty_fd_msg,		__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_pty_io_msg,		__SIZEOF_POINTER__);
dd89bb
__assert_aligned_size(nt_tty_port_msg,		__SIZEOF_POINTER__);
edb085
__assert_aligned_size(nt_tty_ipc_msg,		__SIZEOF_POINTER__);
edb085
__assert_aligned_size(nt_tty_sync_msg,		__SIZEOF_POINTER__);
edb085
__assert_aligned_size(nt_tty_transfer_msg,	__SIZEOF_POINTER__);
dd89bb
dd89bb
dd89bb
/* tty session */
dd89bb
typedef int32_t __stdcall	ntapi_tty_create_session(
dd89bb
	__out	void **			hport,
dd89bb
	__out	nt_port_name *		port_name,
dd89bb
	__in	nt_tty_session_type	type,
e3e5a2
	__in	nt_tty_session_subtype	subtype,
dd89bb
	__in	const nt_guid *		guid		__optional,
1f883a
	__in	wchar16_t *		image_name,
f61917
	__in	void *			htty		__optional);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tty_join_session(
dd89bb
	__out	void **			hport,
dd89bb
	__out	nt_port_name *		port_name,
dd89bb
	__in	nt_port_attr *		port_attr,
dd89bb
	__in	nt_tty_session_type	type);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tty_connect(
dd89bb
	__out	void **			hport,
dd89bb
	__in	wchar16_t *		tty_port_name,
dd89bb
	__in	int32_t			impersonation_level);
dd89bb
dd89bb
029ed1
typedef int32_t __stdcall	ntapi_tty_client_session_disconnect(
029ed1
	__in	void *			hport);
029ed1
029ed1
dd89bb
typedef int32_t __stdcall	ntapi_tty_client_session_query(
dd89bb
	__in	void *			hport,
dd89bb
	__out	nt_tty_session_info *	sessioninfo);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tty_client_session_set(
dd89bb
	__in	void *			hport,
dd89bb
	__in	nt_tty_session_info *	sessioninfo);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tty_client_process_register(
dd89bb
	__in	void *			hport,
dd89bb
	__in	uintptr_t		process_id,
dd89bb
	__in	uintptr_t		thread_id,
dd89bb
	__in	uintptr_t		flags,
dd89bb
	__in	nt_large_integer *	reserved);
dd89bb
dd89bb
1b6aec
typedef int32_t __stdcall ntapi_tty_query_information_section(
1b6aec
	__in	void *			hport,
1b6aec
	__out	nt_io_status_block *	iosb,
1b6aec
	__out	nt_tty_section_info *	secinfo,
1b6aec
	__in	const nt_guid *		guid);
1b6aec
1b6aec
dd89bb
typedef int32_t __stdcall ntapi_tty_query_information_server(
dd89bb
	__in	void *			hport,
c16244
	__out	nt_io_status_block *	iosb,
c16244
	__out	void *			tty_info,
c16244
	__in	uint32_t		tty_info_length,
c16244
	__in	int			tty_info_class);
dd89bb
dd89bb
a1e25a
typedef int32_t __stdcall ntapi_tty_query_information_service(
a1e25a
	__in	void *			hport,
a1e25a
	__out	nt_io_status_block *	iosb,
a1e25a
	__out	nt_tty_service_info *	svcinfo,
a1e25a
	__in	const nt_guid *		guid,
a1e25a
	__in	uint32_t		key,
a1e25a
	__in	uint32_t		id);
a1e25a
a1e25a
dd89bb
/* pty api */
dd89bb
typedef struct nt_pty_context nt_pty;
dd89bb
dd89bb
typedef int32_t	__stdcall ntapi_pty_open(
dd89bb
	__in	void *			hport,
dd89bb
	__out	nt_pty **		pty,
dd89bb
	__in	uint32_t		desired_access,
dd89bb
	__in	nt_object_attributes*	obj_attr,
dd89bb
	__out	nt_iosb *		iosb,
dd89bb
	__in	uint32_t		share_access,
dd89bb
	__in	uint32_t		open_options);
dd89bb
dd89bb
47aaf2
typedef int32_t	__stdcall ntapi_pty_open_pair(
47aaf2
	__in	void *			hport,
47aaf2
	__out	nt_pty **		pty,
47aaf2
	__in	uint32_t		desired_access,
47aaf2
	__in	nt_object_attributes*	obj_attr,
47aaf2
	__out	nt_iosb *		iosb,
47aaf2
	__in	uint32_t		share_access,
47aaf2
	__in	uint32_t		open_options);
47aaf2
47aaf2
dd89bb
typedef int32_t	__stdcall ntapi_pty_reopen(
dd89bb
	__in	void *			hport,
dd89bb
	__in	nt_pty *		pty);
dd89bb
dd89bb
efc01e
typedef int32_t	__stdcall ntapi_pty_inherit(
efc01e
	__in	void *			hport,
efc01e
	__out	nt_pty **		pty,
efc01e
	__in 	nt_pty_client_info * 	client_info);
efc01e
efc01e
5ea20e
typedef int32_t	__stdcall ntapi_pty_inherit_runtime_ctty(
5ea20e
	__in	void *			hport,
5ea20e
     __in_out	nt_runtime_data *	rtdata);
5ea20e
5ea20e
dd89bb
typedef int32_t __stdcall ntapi_pty_close(
dd89bb
	__in	nt_pty *		pty);
dd89bb
dd89bb
dd89bb
typedef int32_t	__stdcall ntapi_pty_read(
dd89bb
	__in	nt_pty *		pty,
dd89bb
	__in	void *			hevent		__optional,
dd89bb
	__in	nt_io_apc_routine *	apc_routine	__optional,
dd89bb
	__in	void *			apc_context	__optional,
dd89bb
	__out	nt_iosb *		iosb,
dd89bb
	__out	void *			buffer,
dd89bb
	__in	uint32_t		nbytes,
dd89bb
	__in	nt_large_integer *	offset		__optional,
dd89bb
	__in	uint32_t *		key		__optional);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_pty_write(
dd89bb
	__in	nt_pty *		pty,
dd89bb
	__in 	void *			hevent		__optional,
dd89bb
	__in	nt_io_apc_routine *	apc_routine	__optional,
dd89bb
	__in	void * 			apc_context	__optional,
dd89bb
	__out	nt_iosb *		iosb,
dd89bb
	__in	void * 			buffer,
dd89bb
	__in	uint32_t		nbytes,
dd89bb
	__in	nt_large_integer *	offset		__optional,
dd89bb
	__in	uint32_t *		key		__optional);
dd89bb
dd89bb
dd89bb
typedef int32_t	__stdcall ntapi_pty_fcntl(
dd89bb
	__in	nt_pty *		pty,
dd89bb
	__in	void *			hevent			__optional,
dd89bb
	__in	nt_io_apc_routine *	apc_routine		__optional,
dd89bb
	__in	void *			apc_context		__optional,
dd89bb
	__out	nt_iosb *		iosb,
dd89bb
	__in	uint32_t		fs_control_code,
dd89bb
	__in	void *			input_buffer		__optional,
dd89bb
	__in	uint32_t		input_buffer_length,
dd89bb
	__out	void *			output_buffer		__optional,
dd89bb
	__in	uint32_t		output_buffer_length);
dd89bb
dd89bb
dd89bb
typedef int32_t	__stdcall ntapi_pty_ioctl(
dd89bb
	__in	nt_pty *		pty,
dd89bb
	__in	void *			hevent			__optional,
dd89bb
	__in	nt_io_apc_routine *	apc_routine		__optional,
dd89bb
	__in	void *			apc_context		__optional,
dd89bb
	__out	nt_iosb *		iosb,
dd89bb
	__in	uint32_t		io_control_code,
dd89bb
	__in	void *			input_buffer		__optional,
dd89bb
	__in	uint32_t		input_buffer_length,
dd89bb
	__out	void *			output_buffer		__optional,
dd89bb
	__in	uint32_t		output_buffer_length);
dd89bb
dd89bb
dd89bb
typedef int32_t	__stdcall ntapi_pty_query(
dd89bb
	__in	nt_pty *		pty,
dd89bb
	__out	nt_io_status_block *	iosb,
dd89bb
	__out	void *			pty_info,
dd89bb
	__in	uint32_t		pty_info_length,
dd89bb
	__in	nt_pty_info_class	pty_info_class);
dd89bb
dd89bb
dd89bb
typedef int32_t	__stdcall ntapi_pty_set(
dd89bb
	__in	nt_pty *		hfile,
dd89bb
	__out	nt_io_status_block *	iosb,
dd89bb
	__in	void *			pty_info,
dd89bb
	__in	uint32_t		pty_info_length,
dd89bb
	__in	nt_pty_info_class	pty_info_class);
dd89bb
dd89bb
dd89bb
typedef int32_t	__stdcall ntapi_pty_cancel(
dd89bb
	__in	nt_pty *		pty,
dd89bb
	__out	nt_iosb *		iosb);
dd89bb
dd89bb
dd89bb
/* peer daemon calls */
dd89bb
typedef int32_t __stdcall ntapi_tty_request_peer(
dd89bb
	__in	void *		hport,
dd89bb
	__in	int32_t		opcode,
dd89bb
	__in	uint32_t	flags,
dd89bb
	__in	const nt_guid *	service,
dd89bb
	__in	nt_port_attr *	peer);
dd89bb
dd89bb
dd89bb
/* virtual mount system */
dd89bb
typedef int32_t __stdcall	ntapi_tty_vms_query(
dd89bb
	__in	void *			hport,
dd89bb
	__in	nt_tty_vms_info *	vmsinfo);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tty_vms_request(
dd89bb
	__in	void *			hport,
dd89bb
	__in	nt_tty_vms_info *	vmsinfo);
dd89bb
dd89bb
#endif