winapi_ui_automation/um/
lmsvc.rs1use ctypes::c_long;
8use shared::lmcons::NET_API_STATUS;
9use shared::minwindef::{DWORD, LPBYTE, LPDWORD};
10use um::winnt::{LPCWSTR, LPWSTR};
11STRUCT!{struct SERVICE_INFO_0 {
12 svci0_name: LPWSTR,
13}}
14pub type PSERVICE_INFO_0 = *mut SERVICE_INFO_0;
15pub type LPSERVICE_INFO_0 = *mut SERVICE_INFO_0;
16STRUCT!{struct SERVICE_INFO_1 {
17 svci1_name: LPWSTR,
18 svci1_status: DWORD,
19 svci1_code: DWORD,
20 svci1_pid: DWORD,
21}}
22pub type PSERVICE_INFO_1 = *mut SERVICE_INFO_1;
23pub type LPSERVICE_INFO_1 = *mut SERVICE_INFO_1;
24STRUCT!{struct SERVICE_INFO_2 {
25 svci2_name: LPWSTR,
26 svci2_status: DWORD,
27 svci2_code: DWORD,
28 svci2_pid: DWORD,
29 svci2_text: LPWSTR,
30 svci2_specific_error: DWORD,
31 svci2_display_name: LPWSTR,
32}}
33pub type PSERVICE_INFO_2 = *mut SERVICE_INFO_2;
34pub type LPSERVICE_INFO_2 = *mut SERVICE_INFO_2;
35extern "system" {
36 pub fn NetServiceControl(
37 servername: LPCWSTR,
38 service: LPCWSTR,
39 opcode: DWORD,
40 arg: DWORD,
41 bufptr: *mut LPBYTE,
42 ) -> NET_API_STATUS;
43 pub fn NetServiceEnum(
44 servername: LPCWSTR,
45 level: DWORD,
46 bufptr: *mut LPBYTE,
47 prefmaxlen: DWORD,
48 entriesread: LPDWORD,
49 totalentries: LPDWORD,
50 resumehandle: LPDWORD,
51 ) -> NET_API_STATUS;
52 pub fn NetServiceGetInfo(
53 servername: LPCWSTR,
54 service: LPCWSTR,
55 level: DWORD,
56 bufptr: *mut LPBYTE,
57 ) -> NET_API_STATUS;
58 pub fn NetServiceInstall(
59 servername: LPCWSTR,
60 service: LPCWSTR,
61 argc: DWORD,
62 argv: *mut LPCWSTR,
63 bufptr: *mut LPBYTE,
64 ) -> NET_API_STATUS;
65}
66pub const SERVICE_INSTALL_STATE: DWORD = 0x03;
67pub const SERVICE_UNINSTALLED: DWORD = 0x00;
68pub const SERVICE_INSTALL_PENDING: DWORD = 0x01;
69pub const SERVICE_UNINSTALL_PENDING: DWORD = 0x02;
70pub const SERVICE_INSTALLED: DWORD = 0x03;
71pub const SERVICE_PAUSE_STATE: DWORD = 0x0C;
72pub const LM20_SERVICE_ACTIVE: DWORD = 0x00;
73pub const LM20_SERVICE_CONTINUE_PENDING: DWORD = 0x04;
74pub const LM20_SERVICE_PAUSE_PENDING: DWORD = 0x08;
75pub const LM20_SERVICE_PAUSED: DWORD = 0x0C;
76pub const SERVICE_NOT_UNINSTALLABLE: DWORD = 0x00;
77pub const SERVICE_UNINSTALLABLE: DWORD = 0x10;
78pub const SERVICE_NOT_PAUSABLE: DWORD = 0x00;
79pub const SERVICE_PAUSABLE: DWORD = 0x20;
80pub const SERVICE_REDIR_PAUSED: DWORD = 0x700;
81pub const SERVICE_REDIR_DISK_PAUSED: DWORD = 0x100;
82pub const SERVICE_REDIR_PRINT_PAUSED: DWORD = 0x200;
83pub const SERVICE_REDIR_COMM_PAUSED: DWORD = 0x400;
84pub const SERVICE_DOS_ENCRYPTION: &'static str = "ENCRYPT";
85pub const SERVICE_CTRL_INTERROGATE: DWORD = 0;
86pub const SERVICE_CTRL_PAUSE: DWORD = 1;
87pub const SERVICE_CTRL_CONTINUE: DWORD = 2;
88pub const SERVICE_CTRL_UNINSTALL: DWORD = 3;
89pub const SERVICE_CTRL_REDIR_DISK: DWORD = 0x1;
90pub const SERVICE_CTRL_REDIR_PRINT: DWORD = 0x2;
91pub const SERVICE_CTRL_REDIR_COMM: DWORD = 0x4;
92pub const SERVICE_IP_NO_HINT: DWORD = 0x0;
93pub const SERVICE_CCP_NO_HINT: DWORD = 0x0;
94pub const SERVICE_IP_QUERY_HINT: DWORD = 0x10000;
95pub const SERVICE_CCP_QUERY_HINT: DWORD = 0x10000;
96pub const SERVICE_IP_CHKPT_NUM: DWORD = 0x0FF;
97pub const SERVICE_CCP_CHKPT_NUM: DWORD = 0x0FF;
98pub const SERVICE_IP_WAIT_TIME: DWORD = 0x0FF00;
99pub const SERVICE_CCP_WAIT_TIME: DWORD = 0x0FF00;
100pub const SERVICE_IP_WAITTIME_SHIFT: DWORD = 8;
101pub const SERVICE_NTIP_WAITTIME_SHIFT: DWORD = 12;
102pub const UPPER_HINT_MASK: DWORD = 0x0000FF00;
103pub const LOWER_HINT_MASK: DWORD = 0x000000FF;
104pub const UPPER_GET_HINT_MASK: DWORD = 0x0FF00000;
105pub const LOWER_GET_HINT_MASK: DWORD = 0x0000FF00;
106pub const SERVICE_NT_MAXTIME: DWORD = 0x0000FFFF;
107pub const SERVICE_RESRV_MASK: DWORD = 0x0001FFFF;
108pub const SERVICE_MAXTIME: DWORD = 0x000000FF;
109pub const SERVICE_BASE: DWORD = 3050;
110pub const SERVICE_UIC_NORMAL: DWORD = 0;
111pub const SERVICE_UIC_BADPARMVAL: DWORD = SERVICE_BASE + 1;
112pub const SERVICE_UIC_MISSPARM: DWORD = SERVICE_BASE + 2;
113pub const SERVICE_UIC_UNKPARM: DWORD = SERVICE_BASE + 3;
114pub const SERVICE_UIC_RESOURCE: DWORD = SERVICE_BASE + 4;
115pub const SERVICE_UIC_CONFIG: DWORD = SERVICE_BASE + 5;
116pub const SERVICE_UIC_SYSTEM: DWORD = SERVICE_BASE + 6;
117pub const SERVICE_UIC_INTERNAL: DWORD = SERVICE_BASE + 7;
118pub const SERVICE_UIC_AMBIGPARM: DWORD = SERVICE_BASE + 8;
119pub const SERVICE_UIC_DUPPARM: DWORD = SERVICE_BASE + 9;
120pub const SERVICE_UIC_KILL: DWORD = SERVICE_BASE + 10;
121pub const SERVICE_UIC_EXEC: DWORD = SERVICE_BASE + 11;
122pub const SERVICE_UIC_SUBSERV: DWORD = SERVICE_BASE + 12;
123pub const SERVICE_UIC_CONFLPARM: DWORD = SERVICE_BASE + 13;
124pub const SERVICE_UIC_FILE: DWORD = SERVICE_BASE + 14;
125pub const SERVICE_UIC_M_NULL: DWORD = 0;
126pub const SERVICE_UIC_M_MEMORY: DWORD = SERVICE_BASE + 20;
127pub const SERVICE_UIC_M_DISK: DWORD = SERVICE_BASE + 21;
128pub const SERVICE_UIC_M_THREADS: DWORD = SERVICE_BASE + 22;
129pub const SERVICE_UIC_M_PROCESSES: DWORD = SERVICE_BASE + 23;
130pub const SERVICE_UIC_M_SECURITY: DWORD = SERVICE_BASE + 24;
131pub const SERVICE_UIC_M_LANROOT: DWORD = SERVICE_BASE + 25;
132pub const SERVICE_UIC_M_REDIR: DWORD = SERVICE_BASE + 26;
133pub const SERVICE_UIC_M_SERVER: DWORD = SERVICE_BASE + 27;
134pub const SERVICE_UIC_M_SEC_FILE_ERR: DWORD = SERVICE_BASE + 28;
135pub const SERVICE_UIC_M_FILES: DWORD = SERVICE_BASE + 29;
136pub const SERVICE_UIC_M_LOGS: DWORD = SERVICE_BASE + 30;
137pub const SERVICE_UIC_M_LANGROUP: DWORD = SERVICE_BASE + 31;
138pub const SERVICE_UIC_M_MSGNAME: DWORD = SERVICE_BASE + 32;
139pub const SERVICE_UIC_M_ANNOUNCE: DWORD = SERVICE_BASE + 33;
140pub const SERVICE_UIC_M_UAS: DWORD = SERVICE_BASE + 34;
141pub const SERVICE_UIC_M_SERVER_SEC_ERR: DWORD = SERVICE_BASE + 35;
142pub const SERVICE_UIC_M_WKSTA: DWORD = SERVICE_BASE + 37;
143pub const SERVICE_UIC_M_ERRLOG: DWORD = SERVICE_BASE + 38;
144pub const SERVICE_UIC_M_FILE_UW: DWORD = SERVICE_BASE + 39;
145pub const SERVICE_UIC_M_ADDPAK: DWORD = SERVICE_BASE + 40;
146pub const SERVICE_UIC_M_LAZY: DWORD = SERVICE_BASE + 41;
147pub const SERVICE_UIC_M_UAS_MACHINE_ACCT: DWORD = SERVICE_BASE + 42;
148pub const SERVICE_UIC_M_UAS_SERVERS_NMEMB: DWORD = SERVICE_BASE + 43;
149pub const SERVICE_UIC_M_UAS_SERVERS_NOGRP: DWORD = SERVICE_BASE + 44;
150pub const SERVICE_UIC_M_UAS_INVALID_ROLE: DWORD = SERVICE_BASE + 45;
151pub const SERVICE_UIC_M_NETLOGON_NO_DC: DWORD = SERVICE_BASE + 46;
152pub const SERVICE_UIC_M_NETLOGON_DC_CFLCT: DWORD = SERVICE_BASE + 47;
153pub const SERVICE_UIC_M_NETLOGON_AUTH: DWORD = SERVICE_BASE + 48;
154pub const SERVICE_UIC_M_UAS_PROLOG: DWORD = SERVICE_BASE + 49;
155pub const SERVICE2_BASE: DWORD = 5600;
156pub const SERVICE_UIC_M_NETLOGON_MPATH: DWORD = SERVICE2_BASE + 0;
157pub const SERVICE_UIC_M_LSA_MACHINE_ACCT: DWORD = SERVICE2_BASE + 1;
158pub const SERVICE_UIC_M_DATABASE_ERROR: DWORD = SERVICE2_BASE + 2;
159#[inline]
160pub fn SERVICE_IP_CODE(tt: DWORD, nn: DWORD) -> c_long {
161 (SERVICE_IP_QUERY_HINT | (nn | (tt << SERVICE_IP_WAITTIME_SHIFT))) as c_long
162}
163#[inline]
164pub fn SERVICE_CCP_CODE(tt: DWORD, nn: DWORD) -> c_long {
165 (SERVICE_CCP_QUERY_HINT | (nn | (tt << SERVICE_IP_WAITTIME_SHIFT))) as c_long
166}
167#[inline]
168pub fn SERVICE_UIC_CODE(cc: DWORD, mm: DWORD) -> c_long {
169 ((cc << 16) | mm) as c_long
170}
171#[inline]
172pub fn SERVICE_NT_CCP_CODE(tt: DWORD, nn: DWORD) -> c_long {
173 (SERVICE_CCP_QUERY_HINT | nn | ((tt & LOWER_HINT_MASK) << SERVICE_IP_WAITTIME_SHIFT)
174 | ((tt & UPPER_HINT_MASK) << SERVICE_NTIP_WAITTIME_SHIFT)) as c_long
175}
176#[inline]
177pub fn SERVICE_NT_WAIT_GET(code: DWORD) -> DWORD {
178 ((code & UPPER_GET_HINT_MASK) >> SERVICE_NTIP_WAITTIME_SHIFT)
179 | ((code & LOWER_GET_HINT_MASK) >> SERVICE_IP_WAITTIME_SHIFT)
180}