- Created include/libs and moved all library headers there.
[reactos.git] / reactos / include / libs / sm / api.h
1 /* $Id$ */
2 #ifndef __SM_API_H
3 #define __SM_API_H
4
5 #include <sm/ns.h>
6
7 /*** DATA TYPES ******************************************************/
8
9 #define SM_SB_NAME_MAX_LENGTH 120
10
11 #include <pshpack4.h>
12
13 /* SmConnectApiPort (SS->SM) */
14 typedef struct _SM_CONNECT_DATA
15 {
16 USHORT SubSystemId;
17 WORD Unused;
18 WCHAR SbName [SM_SB_NAME_MAX_LENGTH];
19
20 } SM_CONNECT_DATA, *PSM_CONNECT_DATA;
21
22 /* SmpConnectSbApiPort (SM->SS) */
23 typedef struct _SB_CONNECT_DATA
24 {
25 ULONG SmApiMax;
26 } SB_CONNECT_DATA, *PSB_CONNECT_DATA;
27
28
29 /*** SM API ***/
30
31 /*** 1 ****************************************************************/
32
33 #define SM_API_COMPLETE_SESSION 1 /* complete a session initialization */
34
35 typedef struct _SM_PORT_MESSAGE_COMPSES
36 {
37 HANDLE hApiPort;
38 HANDLE hSbApiPort;
39
40 } SM_PORT_MESSAGE_COMPSES, *PSM_PORT_MESSAGE_COMPSES;
41
42 /*** 2 ****************************************************************/
43
44 #define SM_API_2 2
45
46 /* obsolete */
47
48 /*** 3 ****************************************************************/
49
50 #define SM_API_3 3
51
52 /* unknown */
53
54 /*** 4 ****************************************************************/
55
56 #define SM_API_EXECUTE_PROGRAMME 4 /* start a subsystem (server) */
57
58 #define SM_EXEXPGM_MAX_LENGTH 32 /* max count of wide string */
59
60 typedef struct _SM_PORT_MESSAGE_EXECPGM
61 {
62 ULONG NameLength;
63 WCHAR Name [SM_EXEXPGM_MAX_LENGTH];
64
65 } SM_PORT_MESSAGE_EXECPGM, *PSM_PORT_MESSAGE_EXECPGM;
66
67 /*** 5 ****************************************************************/
68
69 #define SM_API_QUERY_INFORMATION 5 /* ask SM to send back some data */
70 /* Note: this is not in NT */
71 #define SM_QRYINFO_MAX_SS_COUNT 8
72 #define SM_QRYINFO_MAX_ROOT_NODE 30
73
74 typedef enum {
75 SmBasicInformation = 0,
76 SmSubSystemInformation = 1,
77 } SM_INFORMATION_CLASS;
78
79 typedef struct _SM_BASIC_INFORMATION
80 {
81 USHORT SubSystemCount;
82 WORD Unused;
83 struct {
84 WORD Id;
85 WORD Flags;
86 DWORD ProcessId;
87 } SubSystem [SM_QRYINFO_MAX_SS_COUNT];
88 } SM_BASIC_INFORMATION, *PSM_BASIC_INFORMATION;
89
90 typedef struct _SM_SUBSYSTEM_INFORMATION
91 {
92 WORD SubSystemId;
93 WORD Flags;
94 DWORD ProcessId;
95 WCHAR NameSpaceRootNode [SM_QRYINFO_MAX_ROOT_NODE];
96 } SM_SUBSYSTEM_INFORMATION, *PSM_SUBSYSTEM_INFORMATION;
97
98 typedef struct _SM_PORT_MESSAGE_QRYINFO
99 {
100 SM_INFORMATION_CLASS SmInformationClass;
101 ULONG DataLength;
102 union {
103 SM_BASIC_INFORMATION BasicInformation;
104 SM_SUBSYSTEM_INFORMATION SubSystemInformation;
105 };
106 } SM_PORT_MESSAGE_QRYINFO, * PSM_PORT_MESSAGE_QRYINFO;
107
108 /*** | ****************************************************************/
109
110 typedef union _SM_PORT_MESSAGE
111 {
112 /*** LPC common header ***/
113 LPC_MESSAGE Header;
114 struct {
115 UCHAR LpcHeader[LPC_MESSAGE_BASE_SIZE];
116 /*** SM common header ***/
117 struct {
118 DWORD ApiIndex;
119 NTSTATUS Status;
120 } SmHeader;
121 /*** SM per API arguments ***/
122 union {
123 union {
124 SM_PORT_MESSAGE_COMPSES CompSes;
125 SM_PORT_MESSAGE_EXECPGM ExecPgm;
126 SM_PORT_MESSAGE_QRYINFO QryInfo;
127 } Request;
128 union {
129 SM_PORT_MESSAGE_COMPSES CompSes;
130 SM_PORT_MESSAGE_EXECPGM ExecPgm;
131 SM_PORT_MESSAGE_QRYINFO QryInfo;
132 } Reply;
133 };
134 };
135 } SM_PORT_MESSAGE, * PSM_PORT_MESSAGE;
136
137 #include <poppack.h>
138
139 /*** MACRO ***********************************************************/
140
141 #define SM_CONNECT_DATA_SIZE(m) ((m).Header.DataSize-sizeof(USHORT)-sizeof(WORD))
142 #define SM_PORT_DATA_SIZE(c) (sizeof(DWORD)+sizeof(NTSTATUS)+sizeof(c))
143 #define SM_PORT_MESSAGE_SIZE (sizeof(SM_PORT_MESSAGE))
144
145
146 #endif /* !def __SM_API_H */