1 // SoftEther VPN Source Code - Stable Edition Repository
2 // Mayaqua Kernel
3 //
4 // SoftEther VPN Server, Client and Bridge are free software under the Apache License, Version 2.0.
5 //
6 // Copyright (c) Daiyuu Nobori.
7 // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan.
8 // Copyright (c) SoftEther Corporation.
9 // Copyright (c) all contributors on SoftEther VPN project in GitHub.
10 //
11 // All Rights Reserved.
12 //
13 // http://www.softether.org/
14 //
15 // This stable branch is officially managed by Daiyuu Nobori, the owner of SoftEther VPN Project.
16 // Pull requests should be sent to the Developer Edition Master Repository on https://github.com/SoftEtherVPN/SoftEtherVPN
17 //
18 // License: The Apache License, Version 2.0
19 // https://www.apache.org/licenses/LICENSE-2.0
20 //
21 // DISCLAIMER
22 // ==========
23 //
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
29 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30 // SOFTWARE.
31 //
32 // THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, UNDER
33 // JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, MERGE, PUBLISH,
34 // DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS SOFTWARE, THAT ANY
35 // JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS SOFTWARE OR ITS CONTENTS,
36 // AGAINST US (SOFTETHER PROJECT, SOFTETHER CORPORATION, DAIYUU NOBORI OR OTHER
37 // SUPPLIERS), OR ANY JURIDICAL DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND
38 // OF USING, COPYING, MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING,
39 // AND/OR SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
40 // CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO EXCLUSIVE
41 // JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, JAPAN. YOU MUST WAIVE
42 // ALL DEFENSES OF LACK OF PERSONAL JURISDICTION AND FORUM NON CONVENIENS.
43 // PROCESS MAY BE SERVED ON EITHER PARTY IN THE MANNER AUTHORIZED BY APPLICABLE
44 // LAW OR COURT RULE.
45 //
46 // USE ONLY IN JAPAN. DO NOT USE THIS SOFTWARE IN ANOTHER COUNTRY UNLESS YOU HAVE
47 // A CONFIRMATION THAT THIS SOFTWARE DOES NOT VIOLATE ANY CRIMINAL LAWS OR CIVIL
48 // RIGHTS IN THAT PARTICULAR COUNTRY. USING THIS SOFTWARE IN OTHER COUNTRIES IS
49 // COMPLETELY AT YOUR OWN RISK. THE SOFTETHER VPN PROJECT HAS DEVELOPED AND
50 // DISTRIBUTED THIS SOFTWARE TO COMPLY ONLY WITH THE JAPANESE LAWS AND EXISTING
51 // CIVIL RIGHTS INCLUDING PATENTS WHICH ARE SUBJECTS APPLY IN JAPAN. OTHER
52 // COUNTRIES' LAWS OR CIVIL RIGHTS ARE NONE OF OUR CONCERNS NOR RESPONSIBILITIES.
53 // WE HAVE NEVER INVESTIGATED ANY CRIMINAL REGULATIONS, CIVIL LAWS OR
54 // INTELLECTUAL PROPERTY RIGHTS INCLUDING PATENTS IN ANY OF OTHER 200+ COUNTRIES
55 // AND TERRITORIES. BY NATURE, THERE ARE 200+ REGIONS IN THE WORLD, WITH
56 // DIFFERENT LAWS. IT IS IMPOSSIBLE TO VERIFY EVERY COUNTRIES' LAWS, REGULATIONS
57 // AND CIVIL RIGHTS TO MAKE THE SOFTWARE COMPLY WITH ALL COUNTRIES' LAWS BY THE
58 // PROJECT. EVEN IF YOU WILL BE SUED BY A PRIVATE ENTITY OR BE DAMAGED BY A
59 // PUBLIC SERVANT IN YOUR COUNTRY, THE DEVELOPERS OF THIS SOFTWARE WILL NEVER BE
60 // LIABLE TO RECOVER OR COMPENSATE SUCH DAMAGES, CRIMINAL OR CIVIL
61 // RESPONSIBILITIES. NOTE THAT THIS LINE IS NOT LICENSE RESTRICTION BUT JUST A
62 // STATEMENT FOR WARNING AND DISCLAIMER.
63 //
64 // READ AND UNDERSTAND THE 'WARNING.TXT' FILE BEFORE USING THIS SOFTWARE.
65 // SOME SOFTWARE PROGRAMS FROM THIRD PARTIES ARE INCLUDED ON THIS SOFTWARE WITH
66 // LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'THIRD_PARTY.TXT' FILE.
67 //
68 //
69 // SOURCE CODE CONTRIBUTION
70 // ------------------------
71 //
72 // Your contribution to SoftEther VPN Project is much appreciated.
73 // Please send patches to us through GitHub.
74 // Read the SoftEther VPN Patch Acceptance Policy in advance:
75 // http://www.softether.org/5-download/src/9.patch
76 //
77 //
78 // DEAR SECURITY EXPERTS
79 // ---------------------
80 //
81 // If you find a bug or a security vulnerability please kindly inform us
82 // about the problem immediately so that we can fix the security problem
83 // to protect a lot of users around the world as soon as possible.
84 //
85 // Our e-mail address for security reports is:
86 // softether-vpn-security [at] softether.org
87 //
88 // Please note that the above e-mail address is not a technical support
89 // inquiry address. If you need technical assistance, please visit
90 // http://www.softether.org/ and ask your question on the users forum.
91 //
92 // Thank you for your cooperation.
93 //
94 //
95 // NO MEMORY OR RESOURCE LEAKS
96 // ---------------------------
97 //
98 // The memory-leaks and resource-leaks verification under the stress
99 // test has been passed before release this source code.
100 
101 
102 // Microsoft.h
103 // Header of Microsoft.c
104 
105 #ifdef	OS_WIN32
106 
107 // Make available the types for Windows even if windows.h is not included
108 #ifndef	_WINDEF_
109 
110 typedef void *HWND;
111 
112 #endif	// _WINDEF_
113 
114 #ifndef	MICROSOFT_H
115 #define	MICROSOFT_H
116 
117 
118 // Constant for Event log
119 #define	MS_EVENTLOG_TYPE_INFORMATION		0
120 #define	MS_EVENTLOG_TYPE_WARNING			1
121 #define	MS_EVENTLOG_TYPE_ERROR				2
122 
123 #define	MS_RC_EVENTLOG_TYPE_INFORMATION		0x40000001L
124 #define	MS_RC_EVENTLOG_TYPE_WARNING			0x80000002L
125 #define	MS_RC_EVENTLOG_TYPE_ERROR			0xC0000003L
126 
127 
128 // TCP/IP registry value
129 #define	TCP_MAX_NUM_CONNECTIONS				16777214
130 
131 #define	DEFAULT_TCP_MAX_WINDOW_SIZE_RECV	5955584
132 #define	DEFAULT_TCP_MAX_WINDOW_SIZE_SEND	131072
133 #define	DEFAULT_TCP_MAX_NUM_CONNECTIONS		16777214
134 
135 // Constant
136 #define	SVC_ARG_INSTALL				"/install"
137 #define	SVC_ARG_UNINSTALL			"/uninstall"
138 #define	SVC_ARG_START				"/start"
139 #define	SVC_ARG_STOP				"/stop"
140 #define	SVC_ARG_TEST				"/test"
141 #define	SVC_ARG_USERMODE			"/usermode"
142 #define	SVC_ARG_USERMODE_SHOWTRAY	"/usermode_showtray"
143 #define	SVC_ARG_USERMODE_HIDETRAY	"/usermode_hidetray"
144 #define	SVC_ARG_SERVICE				"/service"
145 #define	SVC_ARG_SETUP_INSTALL		"/setup_install"
146 #define	SVC_ARG_SETUP_UNINSTALL		"/setup_uninstall"
147 #define	SVC_ARG_WIN9X_SERVICE		"/win9x_service"
148 #define	SVC_ARG_WIN9X_INSTALL		"/win9x_install"
149 #define	SVC_ARG_WIN9X_UNINSTALL		"/win9x_uninstall"
150 #define	SVC_ARG_TCP					"/tcp"
151 #define	SVC_ARG_TCP_UAC				"/tcp_uac"
152 #define	SVC_ARG_TCP_UAC_W			L"/tcp_uac"
153 #define	SVC_ARG_TCP_SETUP			"/tcpsetup"
154 #define	SVC_ARG_TRAFFIC				"/traffic"
155 #define	SVC_ARG_UIHELP				"/uihelp"
156 #define	SVC_ARG_UIHELP_W			L"/uihelp"
157 #define SVC_ARG_SILENT				"/silent"
158 
159 // Time to suicide, if the service freezed
160 #define	SVC_SELFKILL_TIMEOUT		(5 * 60 * 1000)
161 
162 // The name of the device driver of the virtual LAN card for Win32 (first part)
163 #define	VLAN_ADAPTER_NAME			"VPN Client Adapter"
164 #define	VLAN_ADAPTER_NAME_OLD		"SoftEther VPN Client 2.0 Adapter"
165 
166 // The name of the device driver of the virtual LAN card for Win32 (full name)
167 #define	VLAN_ADAPTER_NAME_TAG		"VPN Client Adapter - %s"
168 #define	VLAN_ADAPTER_NAME_TAG_OLD	"SoftEther VPN Client 2.0 Adapter - %s"
169 
170 // Display name of Virtual LAN card in the [Network Connections] in Win32 (full name)
171 #define	VLAN_CONNECTION_NAME		"%s - VPN Client"
172 #define	VLAN_CONNECTION_NAME_OLD	"%s - SoftEther VPN Client 2.0"
173 
174 
175 // Suspend handler windows class name
176 #define	MS_SUSPEND_HANDLER_WNDCLASSNAME	"MS_SUSPEND_HANDLER"
177 
178 // Command line format in the service mode
179 #define	SVC_RUN_COMMANDLINE			L"\"%s\" /service"
180 
181 // Mode value
182 #define	SVC_MODE_NONE				0
183 #define	SVC_MODE_INSTALL			1
184 #define	SVC_MODE_UNINSTALL			2
185 #define	SVC_MODE_START				3
186 #define	SVC_MODE_STOP				4
187 #define	SVC_MODE_TEST				5
188 #define	SVC_MODE_USERMODE			6
189 #define	SVC_MODE_SERVICE			7
190 #define	SVC_MODE_SETUP_INSTALL		8
191 #define	SVC_MODE_SETUP_UNINSTALL	9
192 #define	SVC_MODE_WIN9X_SERVICE		10
193 #define	SVC_MODE_WIN9X_INSTALL		11
194 #define	SVC_MODE_WIN9X_UNINSTALL	12
195 #define	SVC_MODE_TCP				13
196 #define	SVC_MODE_TCPSETUP			14
197 #define	SVC_MODE_TRAFFIC			15
198 #define	SVC_MODE_UIHELP				16
199 #define	SVC_MODE_TCP_UAC			17
200 
201 
202 #define	WIN9X_SVC_REGKEY_1			"Software\\Microsoft\\Windows\\CurrentVersion\\RunServices"
203 #define	WIN9X_SVC_REGKEY_2			"Software\\Microsoft\\Windows\\CurrentVersion\\Run"
204 
205 #define	VISTA_MMCSS_KEYNAME			"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile\\Tasks"
206 #define	VISTA_MMCSS_FILENAME		"mmcss_backup.dat"
207 
208 #define	SVC_NAME					"SVC_%s_NAME"
209 #define	SVC_TITLE					"SVC_%s_TITLE"
210 #define	SVC_DESCRIPT				"SVC_%s_DESCRIPT"
211 
212 #define	SVC_USERMODE_SETTING_KEY	"Software\\" GC_REG_COMPANY_NAME "\\PacketiX VPN\\UserMode Settings"
213 #define	SVC_HIDETRAY_REG_VALUE		"HideTray_%S"
214 
215 #define	SVC_CALLING_SM_PROCESS_ID_KEY	"Software\\" GC_REG_COMPANY_NAME "\\PacketiX VPN\\Service Control\\%s"
216 #define SVC_CALLING_SM_PROCESS_ID_VALUE	"ProcessId"
217 
218 #define	SOFTETHER_FW_SCRIPT_HASH	"Software\\" GC_REG_COMPANY_NAME "\\PacketiX VPN\\FW ScriptHash"
219 
220 #define	MMCSS_PROFILE_KEYNAME		"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile"
221 
222 // Other constants
223 #define	MS_REG_TCP_SETTING_KEY		"Software\\" GC_REG_COMPANY_NAME "\\Network Settings"
224 
225 
226 
227 // Constants about driver
228 #define	DRIVER_INSTALL_SYS_NAME_TAG_NEW	"Neo_%04u.sys"
229 #define	DRIVER_INSTALL_SYS_NAME_TAG_MAXID	128				// Maximum number of install
230 
231 
232 // Vista driver installer related
233 #define	VISTA_DRIVER_INSTALLER_SRC	L"|driver_installer.exe"
234 #define	VISTA_DRIVER_INSTALLER_SRC_X64	L"|driver_installer_x64.exe"
235 #define	VISTA_DRIVER_INSTALLER_SRC_IA64	L"|driver_installer_ia64.exe"
236 #define	VISTA_DRIVER_INSTALLER_DST	L"%s\\driver_installer.exe"
237 
238 #define	DRIVER_DEVICE_ID_TAG		"NeoAdapter_%s"
239 
240 
241 #if		(defined(MICROSOFT_C) || defined(NETWORK_C)) && (defined(OS_WIN32))
242 
243 typedef enum __TCP_TABLE_CLASS {
244 	_TCP_TABLE_BASIC_LISTENER,
245 	_TCP_TABLE_BASIC_CONNECTIONS,
246 	_TCP_TABLE_BASIC_ALL,
247 	_TCP_TABLE_OWNER_PID_LISTENER,
248 	_TCP_TABLE_OWNER_PID_CONNECTIONS,
249 	_TCP_TABLE_OWNER_PID_ALL,
250 	_TCP_TABLE_OWNER_MODULE_LISTENER,
251 	_TCP_TABLE_OWNER_MODULE_CONNECTIONS,
252 	_TCP_TABLE_OWNER_MODULE_ALL
253 } _TCP_TABLE_CLASS, *_PTCP_TABLE_CLASS;
254 
255 // A pointer to the network related Win32 API function
256 typedef struct NETWORK_WIN32_FUNCTIONS
257 {
258 	HINSTANCE hIpHlpApi32;
259 	HINSTANCE hIcmp;
260 	DWORD (WINAPI *DeleteIpForwardEntry)(PMIB_IPFORWARDROW);
261 	DWORD (WINAPI *CreateIpForwardEntry)(PMIB_IPFORWARDROW);
262 	DWORD (WINAPI *GetIpForwardTable)(PMIB_IPFORWARDTABLE, PULONG, BOOL);
263 	DWORD (WINAPI *GetNetworkParams)(PFIXED_INFO, PULONG);
264 	ULONG (WINAPI *GetAdaptersAddresses)(ULONG, ULONG, PVOID, PIP_ADAPTER_ADDRESSES, PULONG);
265 	DWORD (WINAPI *GetIfTable)(PMIB_IFTABLE, PULONG, BOOL);
266 	DWORD (WINAPI *GetIfTable2)(void **);
267 	void (WINAPI *FreeMibTable)(PVOID);
268 	DWORD (WINAPI *IpRenewAddress)(PIP_ADAPTER_INDEX_MAP);
269 	DWORD (WINAPI *IpReleaseAddress)(PIP_ADAPTER_INDEX_MAP);
270 	DWORD (WINAPI *GetInterfaceInfo)(PIP_INTERFACE_INFO, PULONG);
271 	DWORD (WINAPI *GetAdaptersInfo)(PIP_ADAPTER_INFO, PULONG);
272 	DWORD (WINAPI *GetExtendedTcpTable)(PVOID, PDWORD, BOOL, ULONG, _TCP_TABLE_CLASS, ULONG);
273 	DWORD (WINAPI *AllocateAndGetTcpExTableFromStack)(PVOID *, BOOL, HANDLE, DWORD, DWORD);
274 	DWORD (WINAPI *GetTcpTable)(PMIB_TCPTABLE, PDWORD, BOOL);
275 	DWORD (WINAPI *NotifyRouteChange)(PHANDLE, LPOVERLAPPED);
276 	BOOL (WINAPI *CancelIPChangeNotify)(LPOVERLAPPED);
277 	DWORD (WINAPI *NhpAllocateAndGetInterfaceInfoFromStack)(IP_INTERFACE_NAME_INFO **,
278 		PDWORD, BOOL, HANDLE, DWORD);
279 	HANDLE (WINAPI *IcmpCreateFile)();
280 	BOOL (WINAPI *IcmpCloseHandle)(HANDLE);
281 	DWORD (WINAPI *IcmpSendEcho)(HANDLE, IPAddr, LPVOID, WORD, PIP_OPTION_INFORMATION,
282 		LPVOID, DWORD, DWORD);
283 } NETWORK_WIN32_FUNCTIONS;
284 #endif
285 
286 
287 #ifdef	MICROSOFT_C
288 // WCM related code on Windows 8
289 typedef enum _MS_WCM_PROPERTY
290 {
291 	ms_wcm_global_property_domain_policy,
292 	ms_wcm_global_property_minimize_policy,
293 	ms_wcm_global_property_roaming_policy,
294 	ms_wcm_global_property_powermanagement_policy,
295 	ms_wcm_intf_property_connection_cost,   //used to set/get cost level and flags for the connection
296 	ms_wcm_intf_property_dataplan_status,   //used by MNO to indicate plan data associated with new cost
297 	ms_wcm_intf_property_hotspot_profile,   //used to store hotspot profile (WISPr credentials)
298 } MS_WCM_PROPERTY, *MS_PWCM_PROPERTY;
299 
300 typedef struct _MS_WCM_POLICY_VALUE {
301 	BOOL fValue;
302 	BOOL fIsGroupPolicy;
303 } MS_WCM_POLICY_VALUE, *MS_PWCM_POLICY_VALUE;
304 
305 #define MS_WCM_MAX_PROFILE_NAME            256
306 
307 typedef enum _MS_WCM_MEDIA_TYPE
308 {
309 	ms_wcm_media_unknown,
310 	ms_wcm_media_ethernet,
311 	ms_wcm_media_wlan,
312 	ms_wcm_media_mbn,
313 	ms_wcm_media_invalid,
314 	ms_wcm_media_max
315 } MS_WCM_MEDIA_TYPE, *MS_PWCM_MEDIA_TYPE;
316 
317 typedef struct _MS_WCM_PROFILE_INFO {
318 	WCHAR strProfileName[MS_WCM_MAX_PROFILE_NAME];
319 	GUID AdapterGUID;
320 	MS_WCM_MEDIA_TYPE Media;
321 } MS_WCM_PROFILE_INFO, *MS_PWCM_PROFILE_INFO;
322 
323 typedef struct _MS_WCM_PROFILE_INFO_LIST {
324 	DWORD            dwNumberOfItems;
325 
326 	MS_WCM_PROFILE_INFO ProfileInfo[1];
327 
328 } MS_WCM_PROFILE_INFO_LIST, *MS_PWCM_PROFILE_INFO_LIST;
329 
330 
331 // Internal structure
332 typedef struct MS
333 {
334 	HINSTANCE hInst;
335 	HINSTANCE hKernel32;
336 	bool IsNt;
337 	bool IsAdmin;
338 	struct NT_API *nt;
339 	HANDLE hCurrentProcess;
340 	UINT CurrentProcessId;
341 	bool MiniDumpEnabled;
342 	char *ExeFileName;
343 	char *ExeFileDir;
344 	char *WindowsDir;
345 	char *System32Dir;
346 	char *TempDir;
347 	char *WinTempDir;
348 	char *WindowsDrive;
349 	char *ProgramFilesDir;
350 	char *ProgramFilesDirX86;
351 	char *ProgramFilesDirX64;
352 	char *CommonStartMenuDir;
353 	char *CommonProgramsDir;
354 	char *CommonStartupDir;
355 	char *CommonAppDataDir;
356 	char *CommonDesktopDir;
357 	char *PersonalStartMenuDir;
358 	char *PersonalProgramsDir;
359 	char *PersonalStartupDir;
360 	char *PersonalAppDataDir;
361 	char *PersonalDesktopDir;
362 	char *MyDocumentsDir;
363 	char *LocalAppDataDir;
364 	char *MyTempDir;
365 	char *UserName;
366 	char *UserNameEx;
367 	wchar_t *ExeFileNameW;
368 	wchar_t *ExeFileDirW;
369 	wchar_t *WindowsDirW;
370 	wchar_t *System32DirW;
371 	wchar_t *TempDirW;
372 	wchar_t *WinTempDirW;
373 	wchar_t *WindowsDriveW;
374 	wchar_t *ProgramFilesDirW;
375 	wchar_t *ProgramFilesDirX86W;
376 	wchar_t *ProgramFilesDirX64W;
377 	wchar_t *CommonStartMenuDirW;
378 	wchar_t *CommonProgramsDirW;
379 	wchar_t *CommonStartupDirW;
380 	wchar_t *CommonAppDataDirW;
381 	wchar_t *CommonDesktopDirW;
382 	wchar_t *PersonalStartMenuDirW;
383 	wchar_t *PersonalProgramsDirW;
384 	wchar_t *PersonalStartupDirW;
385 	wchar_t *PersonalAppDataDirW;
386 	wchar_t *PersonalDesktopDirW;
387 	wchar_t *MyDocumentsDirW;
388 	wchar_t *LocalAppDataDirW;
389 	wchar_t *MyTempDirW;
390 	wchar_t *UserNameW;
391 	wchar_t *UserNameExW;
392 	wchar_t *MinidumpBaseFileNameW;
393 	IO *LockFile;
394 	bool IsWine;
395 } MS;
396 
397 // For Windows NT API
398 typedef struct NT_API
399 {
400 	HINSTANCE hAdvapi32;
401 	HINSTANCE hShell32;
402 	HINSTANCE hNewDev;
403 	HINSTANCE hSetupApi;
404 	HINSTANCE hWtsApi32;
405 	HINSTANCE hPsApi;
406 	HINSTANCE hKernel32;
407 	HINSTANCE hSecur32;
408 	HINSTANCE hUser32;
409 	HINSTANCE hDbgHelp;
410 	HINSTANCE hWcmapi;
411 	HINSTANCE hDwmapi;
412 	BOOL (WINAPI *OpenProcessToken)(HANDLE, DWORD, PHANDLE);
413 	BOOL (WINAPI *LookupPrivilegeValue)(char *, char *, PLUID);
414 	BOOL (WINAPI *AdjustTokenPrivileges)(HANDLE, BOOL, PTOKEN_PRIVILEGES, DWORD, PTOKEN_PRIVILEGES, PDWORD);
415 	BOOL (WINAPI *InitiateSystemShutdown)(LPTSTR, LPTSTR, DWORD, BOOL, BOOL);
416 	BOOL (WINAPI *LogonUserW)(wchar_t *, wchar_t *, wchar_t *, DWORD, DWORD, HANDLE *);
417 	BOOL (WINAPI *LogonUserA)(char *, char *, char *, DWORD, DWORD, HANDLE *);
418 	BOOL (WINAPI *UpdateDriverForPlugAndPlayDevicesW)(HWND hWnd, wchar_t *hardware_id, wchar_t *inf_path, UINT flag, BOOL *need_reboot);
419 	UINT (WINAPI *CM_Get_DevNode_Status_Ex)(UINT *, UINT *, DWORD, UINT, HANDLE);
420 	UINT (WINAPI *CM_Get_Device_ID_ExA)(DWORD, char *, UINT, UINT, HANDLE);
421 	UINT (WINAPI *WTSQuerySessionInformation)(HANDLE, DWORD, WTS_INFO_CLASS, wchar_t *, DWORD *);
422 	void (WINAPI *WTSFreeMemory)(void *);
423 	BOOL (WINAPI *WTSDisconnectSession)(HANDLE, DWORD, BOOL);
424 	BOOL (WINAPI *WTSEnumerateSessions)(HANDLE, DWORD, DWORD, PWTS_SESSION_INFO *, DWORD *);
425 	BOOL (WINAPI *WTSRegisterSessionNotification)(HWND, DWORD);
426 	BOOL (WINAPI *WTSUnRegisterSessionNotification)(HWND);
427 	SC_HANDLE (WINAPI *OpenSCManager)(LPCTSTR, LPCTSTR, DWORD);
428 	SC_HANDLE (WINAPI *CreateServiceA)(SC_HANDLE, LPCTSTR, LPCTSTR, DWORD, DWORD, DWORD, DWORD, LPCTSTR, LPCTSTR, LPDWORD, LPCTSTR, LPCTSTR, LPCTSTR);
429 	SC_HANDLE (WINAPI *CreateServiceW)(SC_HANDLE, LPCWSTR, LPCWSTR, DWORD, DWORD, DWORD, DWORD, LPCWSTR, LPCWSTR, LPDWORD, LPCWSTR, LPCWSTR, LPCWSTR);
430 	BOOL (WINAPI *ChangeServiceConfig2)(SC_HANDLE, DWORD, LPVOID);
431 	BOOL (WINAPI *CloseServiceHandle)(SC_HANDLE);
432 	SC_HANDLE (WINAPI *OpenService)(SC_HANDLE, LPCTSTR, DWORD);
433 	BOOL (WINAPI *QueryServiceStatus)(SC_HANDLE, LPSERVICE_STATUS);
434 	BOOL (WINAPI *StartService)(SC_HANDLE, DWORD, LPCTSTR);
435 	BOOL (WINAPI *ControlService)(SC_HANDLE, DWORD, LPSERVICE_STATUS);
436 	BOOL (WINAPI *SetServiceStatus)(SERVICE_STATUS_HANDLE, LPSERVICE_STATUS);
437 	SERVICE_STATUS_HANDLE (WINAPI *RegisterServiceCtrlHandler)(LPCTSTR, LPHANDLER_FUNCTION);
438 	BOOL (WINAPI *StartServiceCtrlDispatcher)(CONST LPSERVICE_TABLE_ENTRY);
439 	BOOL (WINAPI *DeleteService)(SC_HANDLE);
440 	BOOL (WINAPI *EnumProcesses)(DWORD *, DWORD, DWORD *);
441 	BOOL (WINAPI *EnumProcessModules)(HANDLE, HMODULE *, DWORD, DWORD *);
442 	DWORD (WINAPI *GetModuleFileNameExA)(HANDLE, HMODULE, LPSTR, DWORD);
443 	DWORD (WINAPI *GetModuleFileNameExW)(HANDLE, HMODULE, LPWSTR, DWORD);
444 	DWORD (WINAPI *GetProcessImageFileNameA)(HANDLE, LPSTR, DWORD);
445 	DWORD (WINAPI *GetProcessImageFileNameW)(HANDLE, LPWSTR, DWORD);
446 	BOOL (WINAPI *QueryFullProcessImageNameA)(HANDLE, DWORD, LPSTR, PDWORD);
447 	BOOL (WINAPI *QueryFullProcessImageNameW)(HANDLE, DWORD, LPWSTR, PDWORD);
448 	LONG (WINAPI *RegDeleteKeyExA)(HKEY, LPCTSTR, REGSAM, DWORD);
449 	BOOL (WINAPI *IsWow64Process)(HANDLE, BOOL *);
450 	void (WINAPI *GetNativeSystemInfo)(SYSTEM_INFO *);
451 	BOOL (WINAPI *DuplicateTokenEx)(HANDLE, DWORD, SECURITY_ATTRIBUTES *, SECURITY_IMPERSONATION_LEVEL, TOKEN_TYPE, HANDLE *);
452 	BOOL (WINAPI *ConvertStringSidToSidA)(LPCSTR, PSID *);
453 	BOOL (WINAPI *SetTokenInformation)(HANDLE, TOKEN_INFORMATION_CLASS, void *, DWORD);
454 	BOOL (WINAPI *GetTokenInformation)(HANDLE, TOKEN_INFORMATION_CLASS, void *, DWORD, PDWORD);
455 	BOOL (WINAPI *CreateProcessAsUserA)(HANDLE, LPCSTR, LPSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, void *, LPCSTR, LPSTARTUPINFOA, LPPROCESS_INFORMATION);
456 	BOOL (WINAPI *CreateProcessAsUserW)(HANDLE, LPCWSTR, LPWSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, void *, LPCWSTR, LPSTARTUPINFOW, LPPROCESS_INFORMATION);
457 	BOOL (WINAPI *LookupAccountSidA)(LPCSTR,PSID,LPSTR,LPDWORD,LPSTR,LPDWORD,PSID_NAME_USE);
458 	BOOL (WINAPI *LookupAccountNameA)(LPCSTR,LPCSTR,PSID,LPDWORD,LPSTR,LPDWORD,PSID_NAME_USE);
459 	BOOL (WINAPI *GetUserNameExA)(EXTENDED_NAME_FORMAT, LPSTR, PULONG);
460 	BOOL (WINAPI *GetUserNameExW)(EXTENDED_NAME_FORMAT, LPWSTR, PULONG);
461 	BOOL (WINAPI *SwitchDesktop)(HDESK);
462 	HDESK (WINAPI *OpenDesktopA)(LPTSTR, DWORD, BOOL, ACCESS_MASK);
463 	BOOL (WINAPI *CloseDesktop)(HDESK);
464 	BOOL (WINAPI *SetProcessShutdownParameters)(DWORD, DWORD);
465 	HANDLE (WINAPI *RegisterEventSourceW)(LPCWSTR, LPCWSTR);
466 	BOOL (WINAPI *ReportEventW)(HANDLE, WORD, WORD, DWORD, PSID, WORD, DWORD, LPCWSTR *, LPVOID);
467 	BOOL (WINAPI *DeregisterEventSource)(HANDLE);
468 	BOOL (WINAPI *Wow64DisableWow64FsRedirection)(void **);
469 	BOOLEAN (WINAPI *Wow64EnableWow64FsRedirection)(BOOLEAN);
470 	BOOL (WINAPI *Wow64RevertWow64FsRedirection)(void *);
471 	BOOL (WINAPI *GetFileInformationByHandle)(HANDLE, LPBY_HANDLE_FILE_INFORMATION);
472 	HANDLE (WINAPI *GetProcessHeap)();
473 	BOOL (WINAPI *MiniDumpWriteDump)(HANDLE, DWORD, HANDLE, MINIDUMP_TYPE,
474 		PMINIDUMP_EXCEPTION_INFORMATION, PMINIDUMP_USER_STREAM_INFORMATION,
475 		PMINIDUMP_CALLBACK_INFORMATION);
476 	BOOL (WINAPI *AllocateLocallyUniqueId)(PLUID);
477 	NTSTATUS (NTAPI *LsaConnectUntrusted)(PHANDLE);
478 	NTSTATUS (NTAPI *LsaLookupAuthenticationPackage)(HANDLE, PLSA_STRING, PULONG);
479 	NTSTATUS (NTAPI *LsaLogonUser)(HANDLE, PLSA_STRING, SECURITY_LOGON_TYPE, ULONG,
480 		PVOID, ULONG, PTOKEN_GROUPS, PTOKEN_SOURCE, PVOID, PULONG, PLUID, PHANDLE,
481 		PQUOTA_LIMITS, PNTSTATUS);
482 	NTSTATUS (NTAPI *LsaDeregisterLogonProcess)(HANDLE);
483 	NTSTATUS (NTAPI *LsaFreeReturnBuffer)(PVOID);
484 	DWORD (WINAPI *WcmQueryProperty)(const GUID *, LPCWSTR, MS_WCM_PROPERTY, PVOID, PDWORD, PBYTE *);
485 	DWORD (WINAPI *WcmSetProperty)(const GUID *, LPCWSTR, MS_WCM_PROPERTY, PVOID, DWORD, const BYTE *);
486 	void (WINAPI *WcmFreeMemory)(PVOID);
487 	DWORD (WINAPI *WcmGetProfileList)(PVOID, MS_WCM_PROFILE_INFO_LIST **ppProfileList);
488 	DWORD (WINAPI *SetNamedSecurityInfoW)(LPWSTR, UINT, SECURITY_INFORMATION, PSID, PSID, PACL, PACL);
489 	BOOL (WINAPI *AddAccessAllowedAceEx)(PACL, DWORD, DWORD, DWORD, PSID);
490 	HRESULT (WINAPI *DwmIsCompositionEnabled)(BOOL *);
491 	BOOL (WINAPI *GetComputerNameExW)(COMPUTER_NAME_FORMAT, LPWSTR, LPDWORD);
492 	LONG (WINAPI *RegLoadKeyW)(HKEY, LPCWSTR, LPCWSTR);
493 	LONG (WINAPI *RegUnLoadKeyW)(HKEY, LPCWSTR);
494 } NT_API;
495 
496 typedef struct MS_EVENTLOG
497 {
498 	HANDLE hEventLog;
499 } MS_EVENTLOG;
500 
501 extern NETWORK_WIN32_FUNCTIONS *w32net;
502 
503 typedef struct MS_USERMODE_SVC_PULSE_THREAD_PARAM
504 {
505 	void *hWnd;
506 	void *GlobalPulse;
507 	volatile bool Halt;
508 } MS_USERMODE_SVC_PULSE_THREAD_PARAM;
509 
510 #endif	// MICROSOFT_C
511 
512 // Structure to suppress the warning message
513 typedef struct NO_WARNING
514 {
515 	DWORD ThreadId;
516 	THREAD *NoWarningThread;
517 	EVENT *HaltEvent;
518 	volatile bool Halt;
519 	wchar_t *SoundFileName;
520 	UINT64 StartTimer;
521 	UINT64 StartTick;
522 } NO_WARNING;
523 
524 // ID of the root key
525 #define	REG_CLASSES_ROOT		0	// HKEY_CLASSES_ROOT
526 #define	REG_LOCAL_MACHINE		1	// HKEY_LOCAL_MACHINE
527 #define	REG_CURRENT_USER		2	// HKEY_CURRENT_USER
528 #define	REG_USERS				3	// HKEY_USERS
529 
530 // Service Functions
531 typedef void (SERVICE_FUNCTION)();
532 
533 // Process list item
534 typedef struct MS_PROCESS
535 {
536 	char ExeFilename[MAX_PATH];		// EXE file name
537 	wchar_t ExeFilenameW[MAX_PATH];	// EXE file name (Unicode)
538 	UINT ProcessId;					// Process ID
539 } MS_PROCESS;
540 
541 #define	MAX_MS_ADAPTER_IP_ADDRESS	64
542 
543 // Network adapter
544 typedef struct MS_ADAPTER
545 {
546 	char Title[MAX_PATH];			// Display name
547 	wchar_t TitleW[MAX_PATH];		// Display Name (Unicode)
548 	UINT Index;						// Index
549 	UINT Type;						// Type
550 	UINT Status;					// Status
551 	UINT Mtu;						// MTU
552 	UINT Speed;						// Speed
553 	UINT AddressSize;				// Address size
554 	UCHAR Address[8];				// Address
555 	UINT64 RecvBytes;				// Number of received bytes
556 	UINT64 RecvPacketsBroadcast;	// Number of broadcast packets received
557 	UINT64 RecvPacketsUnicast;		// Number of unicast packets received
558 	UINT64 SendBytes;				// Number of bytes sent
559 	UINT64 SendPacketsBroadcast;	// Number of sent broadcast packets
560 	UINT64 SendPacketsUnicast;		// Number of sent unicast packets
561 	bool Info;						// Whether there is detailed information
562 	char Guid[MAX_SIZE];			// GUID
563 	UINT NumIpAddress;				// The number of IP addresses
564 	IP IpAddresses[MAX_MS_ADAPTER_IP_ADDRESS];	// IP address
565 	IP SubnetMasks[MAX_MS_ADAPTER_IP_ADDRESS];	// Subnet mask
566 	UINT NumGateway;				// The number of the gateway
567 	IP Gateways[MAX_MS_ADAPTER_IP_ADDRESS];	// Gateway
568 	bool UseDhcp;					// Using DHCP flag
569 	IP DhcpServer;					// DHCP Server
570 	UINT64 DhcpLeaseStart;			// DHCP lease start date and time
571 	UINT64 DhcpLeaseExpires;		// DHCP lease expiration date and time
572 	bool UseWins;					// WINS use flag
573 	IP PrimaryWinsServer;			// Primary WINS server
574 	IP SecondaryWinsServer;			// Secondary WINS server
575 	bool IsWireless;				// Whether wireless
576 	bool IsNotEthernetLan;			// Whether It isn't a Ethernet LAN
577 } MS_ADAPTER;
578 
579 // Network adapter list
580 typedef struct MS_ADAPTER_LIST
581 {
582 	UINT Num;						// Count
583 	MS_ADAPTER **Adapters;			// Content
584 } MS_ADAPTER_LIST;
585 
586 typedef struct MS_ISLOCKED
587 {
588 	HWND hWnd;
589 	THREAD *Thread;
590 	volatile bool IsLockedFlag;
591 } MS_ISLOCKED;
592 
593 // TCP setting
594 typedef struct MS_TCP
595 {
596 	UINT RecvWindowSize;			// Receive window size
597 	UINT SendWindowSize;			// Send window size
598 } MS_TCP;
599 
600 // Sleep prevention
601 typedef struct MS_NOSLEEP
602 {
603 	THREAD *Thread;					// Thread
604 	EVENT *HaltEvent;				// Halting event
605 	volatile bool Halt;				// Halting flag
606 	bool NoScreenSaver;				// Prevent Screensaver
607 
608 	// Following is for Windows Vista
609 	wchar_t ScreenSaveActive[MAX_PATH];
610 	wchar_t SCRNSAVE_EXE[MAX_PATH];
611 } MS_NOSLEEP;
612 
613 // Child window enumeration
614 typedef struct ENUM_CHILD_WINDOW_PARAM
615 {
616 	LIST *o;
617 	bool no_recursion;
618 	bool include_ipcontrol;
619 } ENUM_CHILD_WINDOW_PARAM;
620 
621 // Driver version information
622 typedef struct MS_DRIVER_VER
623 {
624 	UINT Year, Month, Day;
625 	UINT Major, Minor, Build;
626 } MS_DRIVER_VER;
627 
628 // Suspend handler
629 typedef struct MS_SUSPEND_HANDLER
630 {
631 	HWND hWnd;
632 	THREAD *Thread;
633 	volatile bool AboutToClose;
634 } MS_SUSPEND_HANDLER;
635 
636 
637 // Function prototype
638 void MsInit();
639 void MsFree();
640 char *MsCutExeNameFromCommandLine(char *str);
641 wchar_t *MsCutExeNameFromUniCommandLine(wchar_t *str);
642 
643 DWORD MsRegAccessMaskFor64Bit(bool force32bit);
644 DWORD MsRegAccessMaskFor64BitEx(bool force32bit, bool force64bit);
645 
646 bool MsRegIsKey(UINT root, char *name);
647 bool MsRegIsKeyEx(UINT root, char *name, bool force32bit);
648 bool MsRegIsKeyEx2(UINT root, char *name, bool force32bit, bool force64bit);
649 
650 bool MsRegIsValue(UINT root, char *keyname, char *valuename);
651 bool MsRegIsValueEx(UINT root, char *keyname, char *valuename, bool force32bit);
652 bool MsRegIsValueEx2(UINT root, char *keyname, char *valuename, bool force32bit, bool force64bit);
653 
654 bool MsRegGetValueTypeAndSize(UINT root, char *keyname, char *valuename, UINT *type, UINT *size);
655 bool MsRegGetValueTypeAndSizeEx(UINT root, char *keyname, char *valuename, UINT *type, UINT *size, bool force32bit);
656 bool MsRegGetValueTypeAndSizeEx2(UINT root, char *keyname, char *valuename, UINT *type, UINT *size, bool force32bit, bool force64bit);
657 bool MsRegGetValueTypeAndSizeW(UINT root, char *keyname, char *valuename, UINT *type, UINT *size);
658 bool MsRegGetValueTypeAndSizeExW(UINT root, char *keyname, char *valuename, UINT *type, UINT *size, bool force32bit);
659 bool MsRegGetValueTypeAndSizeEx2W(UINT root, char *keyname, char *valuename, UINT *type, UINT *size, bool force32bit, bool force64bit);
660 
661 bool MsRegReadValue(UINT root, char *keyname, char *valuename, void **data, UINT *type, UINT *size);
662 bool MsRegReadValueEx(UINT root, char *keyname, char *valuename, void **data, UINT *type, UINT *size, bool force32bit);
663 bool MsRegReadValueEx2(UINT root, char *keyname, char *valuename, void **data, UINT *type, UINT *size, bool force32bit, bool force64bit);
664 bool MsRegReadValueW(UINT root, char *keyname, char *valuename, void **data, UINT *type, UINT *size);
665 bool MsRegReadValueExW(UINT root, char *keyname, char *valuename, void **data, UINT *type, UINT *size, bool force32bit);
666 bool MsRegReadValueEx2W(UINT root, char *keyname, char *valuename, void **data, UINT *type, UINT *size, bool force32bit, bool force64bit);
667 
668 char *MsRegReadStr(UINT root, char *keyname, char *valuename);
669 char *MsRegReadStrEx(UINT root, char *keyname, char *valuename, bool force32bit);
670 char *MsRegReadStrEx2(UINT root, char *keyname, char *valuename, bool force32bit, bool force64bit);
671 wchar_t *MsRegReadStrW(UINT root, char *keyname, char *valuename);
672 wchar_t *MsRegReadStrExW(UINT root, char *keyname, char *valuename, bool force32bit);
673 wchar_t *MsRegReadStrEx2W(UINT root, char *keyname, char *valuename, bool force32bit, bool force64bit);
674 
675 UINT MsRegReadInt(UINT root, char *keyname, char *valuename);
676 UINT MsRegReadIntEx(UINT root, char *keyname, char *valuename, bool force32bit);
677 UINT MsRegReadIntEx2(UINT root, char *keyname, char *valuename, bool force32bit, bool force64bit);
678 LIST *MsRegReadStrList(UINT root, char *keyname, char *valuename);
679 LIST *MsRegReadStrListEx(UINT root, char *keyname, char *valuename, bool force32bit);
680 LIST *MsRegReadStrListEx2(UINT root, char *keyname, char *valuename, bool force32bit, bool force64bit);
681 
682 BUF *MsRegReadBin(UINT root, char *keyname, char *valuename);
683 BUF *MsRegReadBinEx(UINT root, char *keyname, char *valuename, bool force32bit);
684 BUF *MsRegReadBinEx2(UINT root, char *keyname, char *valuename, bool force32bit, bool force64bit);
685 
686 bool MsRegNewKey(UINT root, char *keyname);
687 bool MsRegNewKeyEx(UINT root, char *keyname, bool force32bit);
688 bool MsRegNewKeyEx2(UINT root, char *keyname, bool force32bit, bool force64bit);
689 
690 bool MsRegWriteValue(UINT root, char *keyname, char *valuename, UINT type, void *data, UINT size);
691 bool MsRegWriteValueEx(UINT root, char *keyname, char *valuename, UINT type, void *data, UINT size, bool force32bit);
692 bool MsRegWriteValueEx2(UINT root, char *keyname, char *valuename, UINT type, void *data, UINT size, bool force32bit, bool force64bit);
693 bool MsRegWriteValueW(UINT root, char *keyname, char *valuename, UINT type, void *data, UINT size);
694 bool MsRegWriteValueExW(UINT root, char *keyname, char *valuename, UINT type, void *data, UINT size, bool force32bit);
695 bool MsRegWriteValueEx2W(UINT root, char *keyname, char *valuename, UINT type, void *data, UINT size, bool force32bit, bool force64bit);
696 
697 bool MsRegWriteStr(UINT root, char *keyname, char *valuename, char *str);
698 bool MsRegWriteStrEx(UINT root, char *keyname, char *valuename, char *str, bool force32bit);
699 bool MsRegWriteStrEx2(UINT root, char *keyname, char *valuename, char *str, bool force32bit, bool force64bit);
700 bool MsRegWriteStrExpand(UINT root, char *keyname, char *valuename, char *str);
701 bool MsRegWriteStrExpandEx(UINT root, char *keyname, char *valuename, char *str, bool force32bit);
702 bool MsRegWriteStrExpandEx2(UINT root, char *keyname, char *valuename, char *str, bool force32bit, bool force64bit);
703 bool MsRegWriteStrW(UINT root, char *keyname, char *valuename, wchar_t *str);
704 bool MsRegWriteStrExW(UINT root, char *keyname, char *valuename, wchar_t *str, bool force32bit);
705 bool MsRegWriteStrEx2W(UINT root, char *keyname, char *valuename, wchar_t *str, bool force32bit, bool force64bit);
706 bool MsRegWriteStrExpandW(UINT root, char *keyname, char *valuename, wchar_t *str);
707 bool MsRegWriteStrExpandExW(UINT root, char *keyname, char *valuename, wchar_t *str, bool force32bit);
708 bool MsRegWriteStrExpandEx2W(UINT root, char *keyname, char *valuename, wchar_t *str, bool force32bit, bool force64bit);
709 
710 bool MsRegWriteInt(UINT root, char *keyname, char *valuename, UINT value);
711 bool MsRegWriteIntEx(UINT root, char *keyname, char *valuename, UINT value, bool force32bit);
712 bool MsRegWriteIntEx2(UINT root, char *keyname, char *valuename, UINT value, bool force32bit, bool force64bit);
713 bool MsRegWriteBin(UINT root, char *keyname, char *valuename, void *data, UINT size);
714 bool MsRegWriteBinEx(UINT root, char *keyname, char *valuename, void *data, UINT size, bool force32bit);
715 bool MsRegWriteBinEx2(UINT root, char *keyname, char *valuename, void *data, UINT size, bool force32bit, bool force64bit);
716 
717 TOKEN_LIST *MsRegEnumKey(UINT root, char *keyname);
718 TOKEN_LIST *MsRegEnumKeyEx(UINT root, char *keyname, bool force32bit);
719 TOKEN_LIST *MsRegEnumKeyEx2(UINT root, char *keyname, bool force32bit, bool force64bit);
720 TOKEN_LIST *MsRegEnumValue(UINT root, char *keyname);
721 TOKEN_LIST *MsRegEnumValueEx(UINT root, char *keyname, bool force32bit);
722 TOKEN_LIST *MsRegEnumValueEx2(UINT root, char *keyname, bool force32bit, bool force64bit);
723 
724 bool MsRegDeleteKey(UINT root, char *keyname);
725 bool MsRegDeleteKeyEx(UINT root, char *keyname, bool force32bit);
726 bool MsRegDeleteKeyEx2(UINT root, char *keyname, bool force32bit, bool force64bit);
727 bool MsRegDeleteValue(UINT root, char *keyname, char *valuename);
728 bool MsRegDeleteValueEx(UINT root, char *keyname, char *valuename, bool force32bit);
729 bool MsRegDeleteValueEx2(UINT root, char *keyname, char *valuename, bool force32bit, bool force64bit);
730 
731 bool MsRegLoadHive(UINT root, wchar_t *keyname, wchar_t *filename);
732 bool MsRegUnloadHive(UINT root, wchar_t *keyname);
733 
734 bool MsIsNt();
735 bool MsIsAdmin();
736 bool MsIsWine();
737 bool MsEnablePrivilege(char *name, bool enable);
738 void *MsGetCurrentProcess();
739 UINT MsGetCurrentProcessId();
740 char *MsGetExeFileName();
741 char *MsGetExeDirName();
742 wchar_t *MsGetExeDirNameW();
743 
744 void MsIsLockedThreadProc(THREAD *thread, void *param);
745 MS_ISLOCKED *MsNewIsLocked();
746 void MsFreeIsLocked(MS_ISLOCKED *d);
747 void MsStartIsLockedThread();
748 void MsStopIsLockedThread();
749 bool MsDetermineIsLockedByWtsApi();
750 
751 
752 bool MsShutdown(bool reboot, bool force);
753 bool MsShutdownEx(bool reboot, bool force, UINT time_limit, char *message);
754 bool MsCheckLogon(wchar_t *username, char *password);
755 bool MsIsPasswordEmpty(wchar_t *username);
756 TOKEN_LIST *MsEnumNetworkAdapters(char *start_with_name, char *start_with_name_2);
757 TOKEN_LIST *MsEnumNetworkAdaptersNeo();
758 bool MsGetNeoDeiverFilename(char *name, UINT size, char *instance_name);
759 bool MsMakeNewNeoDriverFilename(char *name, UINT size);
760 void MsGenerateNeoDriverFilenameFromInt(char *name, UINT size, UINT n);
761 TOKEN_LIST *MsEnumNeoDriverFilenames();
762 char *MsGetNetworkAdapterGuid(char *tag_name, char *instance_name);
763 wchar_t *MsGetNetworkConnectionName(char *guid);
764 char *MsGetNetworkConfigRegKeyNameFromGuid(char *guid);
765 char *MsGetNetworkConfigRegKeyNameFromInstanceName(char *tag_name, char *instance_name);
766 void MsSetNetworkConfig(char *tag_name, char *instance_name, char *friendly_name, bool show_icon);
767 void MsInitNetworkConfig(char *tag_name, char *instance_name, char *connection_tag_name);
768 void MsNormalizeInterfaceDefaultGatewaySettings(char *tag_name, char *instance_name);
769 
770 char *MsGetSpecialDir(int id);
771 wchar_t *MsGetSpecialDirW(int id);
772 void MsGetSpecialDirs();
773 bool MsCheckIsAdmin();
774 void MsInitTempDir();
775 void MsFreeTempDir();
776 void MsGenLockFile(wchar_t *name, UINT size, wchar_t *temp_dir);
777 void MsDeleteTempDir();
778 void MsDeleteAllFile(char *dir);
779 void MsDeleteAllFileW(wchar_t *dir);
780 char *MsCreateTempFileName(char *name);
781 char *MsCreateTempFileNameByExt(char *ext);
782 IO *MsCreateTempFile(char *name);
783 IO *MsCreateTempFileByExt(char *ext);
784 
785 bool MsInstallVLan(char *tag_name, char *connection_tag_name, char *instance_name, MS_DRIVER_VER *ver);
786 bool MsInstallVLanWithoutLock(char *tag_name, char *connection_tag_name, char *instance_name, MS_DRIVER_VER *ver);
787 bool MsInstallVLanInternal(wchar_t *infpath, wchar_t *hwid_w, char *hwid);
788 bool MsUpgradeVLan(char *tag_name, char *connection_tag_name, char *instance_name, MS_DRIVER_VER *ver);
789 bool MsUpgradeVLanWithoutLock(char *tag_name, char *connection_tag_name, char *instance_name, MS_DRIVER_VER *ver);
790 bool MsEnableVLan(char *instance_name);
791 bool MsEnableVLanWithoutLock(char *instance_name);
792 bool MsDisableVLan(char *instance_name);
793 bool MsDisableVLanWithoutLock(char *instance_name);
794 bool MsUninstallVLan(char *instance_name);
795 bool MsUninstallVLanWithoutLock(char *instance_name);
796 bool MsIsVLanEnabled(char *instance_name);
797 bool MsIsVLanEnabledWithoutLock(char *instance_name);
798 bool MsIsValidVLanInstanceNameForInfCatalog(char *instance_name);
799 void MsGetInfCatalogDir(char *dst, UINT size);
800 void MsRestartVLan(char *instance_name);
801 void MsRestartVLanWithoutLock(char *instance_name);
802 bool MsIsVLanExists(char *tag_name, char *instance_name);
803 void MsDeleteTroubleVLAN(char *tag_name, char *instance_name);
804 bool MsStartDriverInstall(char *instance_name, UCHAR *mac_address, char *neo_sys, UCHAR *ret_mac_address, MS_DRIVER_VER *ver);
805 void MsFinishDriverInstall(char *instance_name, char *neo_sys);
806 void MsGetDriverPath(char *instance_name, wchar_t *src_inf, wchar_t *src_sys, wchar_t *dest_inf, wchar_t *dest_sys, wchar_t *src_cat, wchar_t *dest_cat, char *neo_sys);
807 void MsGetDriverPathA(char *instance_name, char *src_inf, char *src_sys, char *dest_inf, char *dest_sys, char *src_cat, char *dst_cat, char *neo_sys);
808 void MsGenMacAddress(UCHAR *mac);
809 char *MsGetMacAddress(char *tag_name, char *instance_name);
810 char *MsGetNetCfgRegKeyName(char *tag_name, char *instance_name);
811 void MsSetMacAddress(char *tag_name, char *instance_name, char *mac_address);
812 char *MsGetDriverVersion(char *tag_name, char *instance_name);
813 char *MsGetDriverFileName(char *tag_name, char *instance_name);
814 void MsTest();
815 void MsInitGlobalNetworkConfig();
816 void MsDisableNetworkOffloadingEtc();
817 void MsSetThreadPriorityHigh();
818 void MsSetThreadPriorityLow();
819 void MsSetThreadPriorityIdle();
820 void MsSetThreadPriorityRealtime();
821 void MsRestoreThreadPriority();
822 char *MsGetLocalAppDataDir();
823 char *MsGetCommonAppDataDir();
824 char *MsGetWindowsDir();
825 char *MsGetSystem32Dir();
826 char *MsGetTempDir();
827 char *MsGetWindowsDrive();
828 char *MsGetProgramFilesDir();
829 char *MsGetProgramFilesDirX86();
830 char *MsGetProgramFilesDirX64();
831 char *MsGetCommonStartMenuDir();
832 char *MsGetCommonProgramsDir();
833 char *MsGetCommonStartupDir();
834 char *MsGetCommonAppDataDir();
835 char *MsGetCommonDesktopDir();
836 char *MsGetPersonalStartMenuDir();
837 char *MsGetPersonalProgramsDir();
838 char *MsGetPersonalStartupDir();
839 char *MsGetPersonalAppDataDir();
840 char *MsGetPersonalDesktopDir();
841 char *MsGetMyDocumentsDir();
842 char *MsGetMyTempDir();
843 char *MsGetUserName();
844 char *MsGetUserNameEx();
845 char *MsGetWinTempDir();
846 wchar_t *MsGetWindowsDirW();
847 wchar_t *MsGetExeFileNameW();
848 wchar_t *MsGetExeFileDirW();
849 wchar_t *MsGetWindowDirW();
850 wchar_t *MsGetSystem32DirW();
851 wchar_t *MsGetTempDirW();
852 wchar_t *MsGetWindowsDriveW();
853 wchar_t *MsGetProgramFilesDirW();
854 wchar_t *MsGetProgramFilesDirX86W();
855 wchar_t *MsGetProgramFilesDirX64W();
856 wchar_t *MsGetCommonStartMenuDirW();
857 wchar_t *MsGetCommonProgramsDirW();
858 wchar_t *MsGetCommonStartupDirW();
859 wchar_t *MsGetCommonAppDataDirW();
860 wchar_t *MsGetCommonDesktopDirW();
861 wchar_t *MsGetPersonalStartMenuDirW();
862 wchar_t *MsGetPersonalProgramsDirW();
863 wchar_t *MsGetPersonalStartupDirW();
864 wchar_t *MsGetPersonalAppDataDirW();
865 wchar_t *MsGetPersonalDesktopDirW();
866 wchar_t *MsGetMyDocumentsDirW();
867 wchar_t *MsGetLocalAppDataDirW();
868 wchar_t *MsGetMyTempDirW();
869 wchar_t *MsGetUserNameW();
870 wchar_t *MsGetUserNameExW();
871 wchar_t *MsGetWinTempDirW();
872 struct SAFE_TABLE *MsGetSafeTable();
873 UINT MsGetProcessId();
874 void MsTerminateProcess();
875 bool MsIsServiceInstalled(char *name);
876 bool MsInstallService(char *name, char *title, wchar_t *description, char *path);
877 bool MsInstallServiceExW(char *name, wchar_t *title, wchar_t *description, wchar_t *path, UINT *error_code);
878 bool MsInstallServiceW(char *name, wchar_t *title, wchar_t *description, wchar_t *path);
879 bool MsInstallDeviceDriverW(char *name, wchar_t *title, wchar_t *path, UINT *error_code);
880 bool MsUpdateServiceConfig(char *name);
881 bool MsSetServiceDescription(char *name, wchar_t *description);
882 bool MsUninstallService(char *name);
883 bool MsStartService(char *name);
884 bool MsStartServiceEx(char *name, UINT *error_code);
885 bool MsStopService(char *name);
886 bool MsIsServiceRunning(char *name);
887 bool MsIsTerminalServiceInstalled();
888 bool MsIsUserSwitchingInstalled();
889 bool MsIsTerminalServiceMultiUserInstalled();
890 UINT MsGetCurrentTerminalSessionId();
891 bool MsIsTerminalSessionActive(UINT session_id);
892 bool MsIsCurrentTerminalSessionActive();
893 bool MsIsCurrentDesktopAvailableForVnc();
894 wchar_t *MsGetSessionUserName(UINT session_id);
895 UINT MsService(char *name, SERVICE_FUNCTION *start, SERVICE_FUNCTION *stop, UINT icon, char *cmd_line);
896 void MsTestModeW(wchar_t *title, SERVICE_FUNCTION *start, SERVICE_FUNCTION *stop);
897 void MsTestMode(char *title, SERVICE_FUNCTION *start, SERVICE_FUNCTION *stop);
898 void MsServiceMode(SERVICE_FUNCTION *start, SERVICE_FUNCTION *stop);
899 void MsUserModeW(wchar_t *title, SERVICE_FUNCTION *start, SERVICE_FUNCTION *stop, UINT icon);
900 void MsUserMode(char *title, SERVICE_FUNCTION *start, SERVICE_FUNCTION *stop, UINT icon);
901 bool MsIsUserMode();
902 void MsTestOnly();
903 void MsStopUserModeFromService();
904 char *MsGetPenCoreDllFileName();
905 void MsPlaySound(char *name);
906 void MsSetThreadSingleCpu();
907 void MsWin9xTest();
908 bool MsCheckVLanDeviceIdFromRootEnum(char *name);
909 bool MsInstallVLan9x(char *instance_name, MS_DRIVER_VER *ver);
910 void MsUpdateCompatibleIDs(char *instance_name);
911 LIST *MsGetProcessList();
912 LIST *MsGetProcessList9x();
913 LIST *MsGetProcessListNt();
914 void MsFreeProcessList(LIST *o);
915 void MsPrintProcessList(LIST *o);
916 int MsCompareProcessList(void *p1, void *p2);
917 MS_PROCESS *MsSearchProcessById(LIST *o, UINT id);
918 void MsGetCurrentProcessExeName(char *name, UINT size);
919 void MsGetCurrentProcessExeNameW(wchar_t *name, UINT size);
920 bool MsKillProcess(UINT id);
921 UINT MsKillProcessByExeName(wchar_t *name);
922 void MsKillOtherInstance();
923 void MsKillOtherInstanceEx(char *exclude_svcname);
924 bool MsGetShortPathNameA(char *long_path, char *short_path, UINT short_path_size);
925 bool MsGetShortPathNameW(wchar_t *long_path, wchar_t *short_path, UINT short_path_size);
926 void MsWriteCallingServiceManagerProcessId(char *svcname, UINT pid);
927 UINT MsReadCallingServiceManagerProcessId(char *svcname, bool current_user);
928 bool MsStopIPsecService();
929 char *MsGetIPsecServiceName();
930 bool MsStartIPsecService();
931 
932 void MsGenerateUserModeSvcGlobalPulseName(char *name, UINT size, char *svc_name);
933 void *MsCreateUserModeSvcGlocalPulse(char *svc_name);
934 void MsStopUserModeSvc(char *svc_name);
935 void MsUserModeGlobalPulseRecvThread(THREAD *thread, void *param);
936 
937 MS_ADAPTER_LIST *MsCreateAdapterListInner();
938 MS_ADAPTER_LIST *MsCreateAdapterListInnerEx(bool no_info);
939 MS_ADAPTER_LIST *MsCreateAdapterListInnerExVista(bool no_info);
940 void MsFreeAdapter(MS_ADAPTER *a);
941 void MsFreeAdapterList(MS_ADAPTER_LIST *o);
942 wchar_t *MsGetAdapterTypeStr(UINT type);
943 wchar_t *MsGetAdapterStatusStr(UINT status);
944 MS_ADAPTER *MsCloneAdapter(MS_ADAPTER *a);
945 MS_ADAPTER_LIST *MsCloneAdapterList(MS_ADAPTER_LIST *o);
946 void MsInitAdapterListModule();
947 void MsFreeAdapterListModule();
948 MS_ADAPTER_LIST *MsCreateAdapterList();
949 MS_ADAPTER_LIST *MsCreateAdapterListEx(bool no_info);
950 void MsGetAdapterTcpIpInformation(MS_ADAPTER *a);
951 MS_ADAPTER *MsGetAdapter(char *title);
952 MS_ADAPTER *MsGetAdapterByGuid(char *guid);
953 MS_ADAPTER *MsGetAdapterByGuidFromList(MS_ADAPTER_LIST *o, char *guid);
954 UINT ConvertMidStatusVistaToXp(UINT st);
955 
956 void *MsLoadLibrary(char *name);
957 void *MsLoadLibraryW(wchar_t *name);
958 void *MsLoadLibraryAsDataFile(char *name);
959 void *MsLoadLibraryAsDataFileW(wchar_t *name);
960 void *MsLoadLibraryRawW(wchar_t *name);
961 void MsFreeLibrary(void *h);
962 void *MsGetProcAddress(void *h, char *name);
963 
964 void MsPrintTick();
965 bool MsDisableIme();
966 
967 void MsGetTcpConfig(MS_TCP *tcp);
968 void MsSetTcpConfig(MS_TCP *tcp);
969 void MsSaveTcpConfigReg(MS_TCP *tcp);
970 bool MsLoadTcpConfigReg(MS_TCP *tcp);
971 bool MsIsTcpConfigSupported();
972 void MsApplyTcpConfig();
973 bool MsIsShouldShowTcpConfigApp();
974 void MsDeleteTcpConfigReg();
975 
976 UINT MsGetConsoleWidth();
977 UINT MsSetConsoleWidth(UINT size);
978 NO_WARNING *MsInitNoWarning();
979 NO_WARNING *MsInitNoWarningEx(UINT start_timer);
980 void MsFreeNoWarning(NO_WARNING *nw);
981 void MsNoWarningThreadProc(THREAD *thread, void *param);
982 char *MsNoWarningSoundInit();
983 void MsNoWarningSoundFree(char *s);
984 bool MsCloseWarningWindow(NO_WARNING *nw, UINT thread_id);
985 LIST *MsEnumChildWindows(LIST *o, HWND hWnd);
986 void MsAddWindowToList(LIST *o, HWND hWnd);
987 UINT MsGetThreadLocale();
988 LIST *NewWindowList();
989 int CmpWindowList(void *p1, void *p2);
990 void AddWindow(LIST *o, HWND hWnd);
991 void FreeWindowList(LIST *o);
992 LIST *EnumAllChildWindow(HWND hWnd);
993 LIST *EnumAllChildWindowEx(HWND hWnd, bool no_recursion, bool include_ipcontrol, bool no_self);
994 LIST *EnumAllWindow();
995 LIST *EnumAllWindowEx(bool no_recursion, bool include_ipcontrol);
996 LIST *EnumAllTopWindow();
997 
998 bool MsExecDriverInstaller(char *arg);
999 bool MsIsVista();
1000 bool MsIsWin2000();
1001 bool MsIsWin2000OrGreater();
1002 bool MsIsWinXPOrGreater();
1003 void MsRegistWindowsFirewallEx(char *title, char *exe);
1004 void MsRegistWindowsFirewallEx2(char *title, char *exe, char *dir);
1005 bool MsIs64BitWindows();
1006 bool MsIsX64();
1007 bool MsIsIA64();
1008 void *MsDisableWow64FileSystemRedirection();
1009 void MsRestoreWow64FileSystemRedirection(void *p);
1010 void MsSetWow64FileSystemRedirectionEnable(bool enable);
1011 bool MsIsWindows10();
1012 bool MsIsWindows81();
1013 bool MsIsWindows8();
1014 bool MsIsWindows7();
1015 bool MsIsInfCatalogRequired();
1016 
1017 bool MsCheckFileDigitalSignature(HWND hWnd, char *name, bool *danger);
1018 bool MsCheckFileDigitalSignatureW(HWND hWnd, wchar_t *name, bool *danger);
1019 
1020 bool MsIsKB3033929RequiredAndMissing();
1021 bool MsIsSha2KernelModeSignatureSupported();
1022 
1023 
1024 bool MsGetProcessExeName(char *path, UINT size, UINT id);
1025 bool MsGetProcessExeNameW(wchar_t *path, UINT size, UINT id);
1026 bool MsGetWindowOwnerProcessExeName(char *path, UINT size, HWND hWnd);
1027 bool MsGetWindowOwnerProcessExeNameW(wchar_t *path, UINT size, HWND hWnd);
1028 
1029 void *MsRunAsUserEx(char *filename, char *arg, bool hide);
1030 void *MsRunAsUserExW(wchar_t *filename, wchar_t *arg, bool hide);
1031 void *MsRunAsUserExInner(char *filename, char *arg, bool hide);
1032 void *MsRunAsUserExInnerW(wchar_t *filename, wchar_t *arg, bool hide);
1033 
1034 UINT MsGetCursorPosHash();
1035 bool MsIsProcessExists(char *exename);
1036 bool MsIsProcessExistsW(wchar_t *exename);
1037 bool MsGetProcessNameFromId(wchar_t *exename, UINT exename_size, UINT pid);
1038 bool MsIsProcessIdExists(UINT pid);
1039 
1040 void MsGetComputerName(char *name, UINT size);
1041 void MsGetComputerNameFull(wchar_t *name, UINT size);
1042 void MsGetComputerNameFullEx(wchar_t *name, UINT size, bool with_cache);
1043 void MsNoSleepThread(THREAD *thread, void *param);
1044 void MsNoSleepThreadVista(THREAD *thread, void *param);
1045 UINT64 MsGetScreenSaverTimeout();
1046 void *MsNoSleepStart(bool no_screensaver);
1047 void MsNoSleepEnd(void *p);
1048 bool MsIsRemoteDesktopAvailable();
1049 bool MsIsRemoteDesktopCanEnableByRegistory();
1050 bool MsIsRemoteDesktopEnabled();
1051 bool MsEnableRemoteDesktop();
1052 
1053 void MsSetFileToHidden(char *name);
1054 void MsSetFileToHiddenW(wchar_t *name);
1055 bool MsGetFileVersion(char *name, UINT *v1, UINT *v2, UINT *v3, UINT *v4);
1056 bool MsGetFileVersionW(wchar_t *name, UINT *v1, UINT *v2, UINT *v3, UINT *v4);
1057 
1058 bool MsExtractCabinetFileFromExe(char *exe, char *cab);
1059 bool MsExtractCabinetFileFromExeW(wchar_t *exe, wchar_t *cab);
1060 BUF *MsExtractResourceFromExe(char *exe, char *type, char *name);
1061 BUF *MsExtractResourceFromExeW(wchar_t *exe, char *type, char *name);
1062 bool MsExtractCab(char *cab_name, char *dest_dir_name);
1063 bool MsExtractCabW(wchar_t *cab_name, wchar_t *dest_dir_name);
1064 bool MsGetCabarcExeFilename(char *name, UINT size);
1065 bool MsGetCabarcExeFilenameW(wchar_t *name, UINT size);
1066 bool MsExtractCabFromMsi(char *msi, char *cab);
1067 bool MsExtractCabFromMsiW(wchar_t *msi, wchar_t *cab);
1068 bool MsIsDirectory(char *name);
1069 bool MsIsDirectoryW(wchar_t *name);
1070 bool MsUniIsDirectory(wchar_t *name);
1071 bool MsUniFileDelete(wchar_t *name);
1072 bool MsUniDirectoryDelete(wchar_t *name);
1073 bool MsUniMakeDir(wchar_t *name);
1074 void MsUniMakeDirEx(wchar_t *name);
1075 void MsMakeDirEx(char *name);
1076 bool MsMakeDir(char *name);
1077 bool MsDirectoryDelete(char *name);
1078 bool MsFileDelete(char *name);
1079 bool MsExecute(char *exe, char *arg);
1080 bool MsExecute2(char *exe, char *arg, bool runas);
1081 bool MsExecuteW(wchar_t *exe, wchar_t *arg);
1082 bool MsExecute2W(wchar_t *exe, wchar_t *arg, bool runas);
1083 bool MsExecuteEx(char *exe, char *arg, void **process_handle);
1084 bool MsExecuteEx2(char *exe, char *arg, void **process_handle, bool runas);
1085 bool MsExecuteExW(wchar_t *exe, wchar_t *arg, void **process_handle);
1086 bool MsExecuteEx2W(wchar_t *exe, wchar_t *arg, void **process_handle, bool runas);
1087 void MsCloseHandle(void *handle);
1088 UINT MsWaitProcessExit(void *process_handle);
1089 bool MsIsFileLocked(char *name);
1090 bool MsIsFileLockedW(wchar_t *name);
1091 bool MsIsLocalDrive(char *name);
1092 bool MsIsLocalDriveW(wchar_t *name);
1093 void MsUpdateSystem();
1094 bool MsGetPhysicalMacAddressFromNetbios(void *address);
1095 bool MsGetPhysicalMacAddressFromApi(void *address);
1096 bool MsGetPhysicalMacAddress(void *address);
1097 bool MsIsUseWelcomeLogin();
1098 UINT64 MsGetHiResCounter();
1099 double MsGetHiResTimeSpan(UINT64 diff);
1100 UINT64 MsGetHiResTimeSpanUSec(UINT64 diff);
1101 BUF *MsRegSubkeysToBuf(UINT root, char *keyname, bool force32bit, bool force64bit);
1102 void MsBufToRegSubkeys(UINT root, char *keyname, BUF *b, bool overwrite, bool force32bit, bool force64bit);
1103 void MsRegDeleteSubkeys(UINT root, char *keyname, bool force32bit, bool force64bit);
1104 void MsRestartMMCSS();
1105 bool MsIsMMCSSNetworkThrottlingEnabled();
1106 void MsSetMMCSSNetworkThrottlingEnable(bool enable);
1107 void MsSetShutdownParameters(UINT level, UINT flag);
1108 void MsChangeIconOnTrayEx2(void *icon, wchar_t *tooltip, wchar_t *info_title, wchar_t *info, UINT info_flags);
1109 bool MsIsTrayInited();
1110 UINT MsGetClipboardOwnerProcessId();
1111 void MsDeleteClipboard();
1112 void *MsInitEventLog(wchar_t *src_name);
1113 void MsFreeEventLog(void *p);
1114 bool MsWriteEventLog(void *p, UINT type, wchar_t *str);
1115 bool MsIsWinXPOrWinVista();
1116 bool MsGetFileInformation(void *h, void *info);
1117 void MsSetErrorModeToSilent();
1118 void MsSetEnableMinidump(bool enabled);
1119 void MsWriteMinidump(wchar_t *filename, void *ex);
1120 
1121 
1122 void *MsInitGlobalLock(char *name, bool ts_local);
1123 void MsGlobalLock(void *p);
1124 void MsGlobalUnlock(void *p);
1125 void MsFreeGlobalLock(void *p);
1126 
1127 void *MsOpenOrCreateGlobalPulse(char *name);
1128 bool MsWaitForGlobalPulse(void *p, UINT timeout);
1129 void MsCloseGlobalPulse(void *p);
1130 void MsSendGlobalPulse(void *p);
1131 
1132 bool MsPerformMsChapV2AuthByLsa(char *username, UCHAR *challenge8, UCHAR *client_response_24, UCHAR *ret_pw_hash_hash);
1133 
1134 void MsDisableWcmNetworkMinimize();
1135 bool MsSetFileSecureAcl(wchar_t *path);
1136 
1137 bool MsGetMsiInstalledDir(char *component_code, wchar_t *dir, UINT dir_size);
1138 bool MsMsiUninstall(char *product_code, HWND hWnd, bool *reboot_required);
1139 
1140 UINT MsGetUserLocaleId();
1141 UINT MsGetSystemLocaleId();
1142 bool MsIsCurrentUserLocaleIdJapanese();
1143 
1144 TOKEN_LIST *MsEnumResources(void *hModule, char *type);
1145 void *MsGetCurrentModuleHandle();
1146 
1147 bool MsIsAeroEnabled();
1148 bool MsIsAeroColor();
1149 
1150 bool MsIsInVmMain();
1151 bool MsIsInVm();
1152 
1153 void MsTest();
1154 
1155 bool MsSaveSystemInfo(wchar_t *dst_filename);
1156 bool MsCollectVpnInfo(BUF *bat, char *tmpdir, char *svc_name, wchar_t *config_name, wchar_t *logdir_name);
1157 void MsInitProcessCallOnce(bool restricted_mode);
1158 
1159 MS_SUSPEND_HANDLER *MsNewSuspendHandler();
1160 void MsFreeSuspendHandler(MS_SUSPEND_HANDLER *h);
1161 
1162 void MsBeginVLanCard();
1163 void MsEndVLanCard();
1164 bool MsIsVLanCardShouldStop();
1165 void MsProcEnterSuspend();
1166 void MsProcLeaveSuspend();
1167 UINT64 MsGetSuspendModeBeginTick();
1168 
1169 // Inner functions
1170 #ifdef	MICROSOFT_C
1171 
1172 LONG CALLBACK MsExceptionHandler(struct _EXCEPTION_POINTERS *ExceptionInfo);
1173 HKEY MsGetRootKeyFromInt(UINT root);
1174 NT_API *MsLoadNtApiFunctions();
1175 void MsFreeNtApiFunctions(NT_API *nt);
1176 void MsDestroyDevInfo(HDEVINFO info);
1177 HDEVINFO MsGetDevInfoFromDeviceId(SP_DEVINFO_DATA *dev_info_data, char *device_id);
1178 bool MsStartDevice(HDEVINFO info, SP_DEVINFO_DATA *dev_info_data);
1179 bool MsStopDevice(HDEVINFO info, SP_DEVINFO_DATA *dev_info_data);
1180 bool MsDeleteDevice(HDEVINFO info, SP_DEVINFO_DATA *dev_info_data);
1181 bool MsIsDeviceRunning(HDEVINFO info, SP_DEVINFO_DATA *dev_info_data);
1182 void CALLBACK MsServiceDispatcher(DWORD argc, LPTSTR *argv);
1183 void CALLBACK MsServiceHandler(DWORD opcode);
1184 bool MsServiceStopProc();
1185 void MsServiceStoperMainThread(THREAD *t, void *p);
1186 void MsServiceStarterMainThread(THREAD *t, void *p);
1187 LRESULT CALLBACK MsUserModeWindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
1188 bool MsShowIconOnTray(HWND hWnd, HICON icon, wchar_t *tooltip, UINT msg);
1189 void MsRestoreIconOnTray();
1190 void MsChangeIconOnTray(HICON icon, wchar_t *tooltip);
1191 bool MsChangeIconOnTrayEx(HICON icon, wchar_t *tooltip, wchar_t *info_title, wchar_t *info, UINT info_flags, bool add);
1192 void MsHideIconOnTray();
1193 void MsUserModeTrayMenu(HWND hWnd);
1194 bool MsAppendMenu(HMENU hMenu, UINT flags, UINT_PTR id, wchar_t *str);
1195 bool MsInsertMenu(HMENU hMenu, UINT pos, UINT flags, UINT_PTR id_new_item, wchar_t *lp_new_item);
1196 bool CALLBACK MsEnumChildWindowProc(HWND hWnd, LPARAM lParam);
1197 BOOL CALLBACK EnumTopWindowProc(HWND hWnd, LPARAM lParam);
1198 bool CALLBACK MsEnumThreadWindowProc(HWND hWnd, LPARAM lParam);
1199 HANDLE MsCreateUserToken();
1200 SID *MsGetSidFromAccountName(char *name);
1201 void MsFreeSid(SID *sid);
1202 bool CALLBACK MsEnumResourcesInternalProc(HMODULE hModule, const char *type, char *name, LONG_PTR lParam);
1203 void CALLBACK MsScmDispatcher(DWORD argc, LPTSTR *argv);
1204 LRESULT CALLBACK MsSuspendHandlerWindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
1205 void MsSuspendHandlerThreadProc(THREAD *thread, void *param);
1206 
1207 
1208 
1209 #endif	// MICROSOFT_C
1210 
1211 #endif	// MICROSOFT_H
1212 
1213 #endif	// OS_WIN32
1214 
1215