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