blob: 04688d447794368964ea065b09f41b0eb3ede159 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
#ifndef _NT_DAEMON_H_
#define _NT_DAEMON_H_
/**
* daemon start-up routines
* -----------------------
* upon successful return from dsr_init(),
* an LPC-based daemon will have entered its
* main service loop in a dedicated thread,
* having already established an internal
* connection.
*
* remarks
* -------
* 1) in the larger-scale midipix project, three
* different daemons are initialized using the
* below api, namely the optional tty server,
* the optional virtual mount server, and the
* posix system call layer internal daemon.
*
* 2) the initialization routines make use of two
* events: a 'damon-is-ready' event, and an
* 'internal-client-is-ready' event. if these
* events are not provided by the application
* then they will be created by this library,
* in which case each of the two handles may
* optionally be saved to a caller-provided
* address.
*
* 3) the dedicated thread of a well-designed
* daemon should be able to use a stack that
* is relatively very small; to fine-tune
* the stack size of the daemon's dedicated
* thread, use the appropriate members of
* the nt_daemon_params structure.
**/
#include "nt_abi.h"
#include "nt_thread.h"
#include "nt_port.h"
/* NT_DSR_INIT_FLAGS */
#define NT_DSR_INIT_DEFAULT 0x0000
#define NT_DSR_INIT_GENERATE_KEYS 0x0001
#define NT_DSR_INIT_FORMAT_KEYS 0x0002
#define NT_DSR_INIT_CLOSE_EVENTS 0x0004
/* daemon start: max wait: 156 seconds (twelve bonobo couples) */
#define NT_DSR_INIT_MAX_WAIT 156 * (-1) * 10 * 1000 * 1000
typedef int32_t __stdcall nt_daemon_routine(void * context);
typedef struct _nt_daemon_params {
wchar16_t * port_name;
nt_port_keys * port_keys;
nt_port_name_keys * port_name_keys;
nt_sd * port_sd;
uintptr_t port_msg_size;
nt_daemon_routine * daemon_once_routine;
nt_daemon_routine * daemon_loop_routine;
void * daemon_loop_context;
void * hport_daemon;
void ** pport_daemon;
void * hport_internal_client;
void ** pport_internal_client;
void * hevent_daemon_port;
void ** pevent_daemon_port;
void * hevent_daemon_ready;
void ** pevent_daemon_ready;
void * hevent_internal_client_ready;
void ** pevent_internal_client_ready;
void * hthread_daemon_loop;
void * hthread_internal_client;
int32_t exit_code_daemon_start;
int32_t exit_code_daemon_loop;
int32_t exit_code_internal_client;
uint32_t flags;
size_t stack_size_commit;
size_t stack_size_reserve;
nt_user_stack * stack_info;
} nt_daemon_params, nt_dsr_params;
typedef int32_t __stdcall ntapi_dsr_init(nt_daemon_params *);
typedef int32_t __stdcall ntapi_dsr_create_port(nt_daemon_params *);
typedef int32_t __stdcall ntapi_dsr_loop(void *);
#endif
|