// SoftEther VPN Source Code - Developer Edition Master Branch // Mayaqua Kernel // Microsoft.h // Header of Microsoft.c #ifdef OS_WIN32 // Make available the types for Windows even if windows.h is not included #ifndef _WINDEF_ typedef void *HWND; typedef unsigned long DWORD; #endif // _WINDEF_ #ifndef MICROSOFT_H #define MICROSOFT_H // Constant for Event log #define MS_EVENTLOG_TYPE_INFORMATION 0 #define MS_EVENTLOG_TYPE_WARNING 1 #define MS_EVENTLOG_TYPE_ERROR 2 #define MS_RC_EVENTLOG_TYPE_INFORMATION 0x40000001L #define MS_RC_EVENTLOG_TYPE_WARNING 0x80000002L #define MS_RC_EVENTLOG_TYPE_ERROR 0xC0000003L // TCP/IP registry value #define TCP_MAX_NUM_CONNECTIONS 16777214 #define DEFAULT_TCP_MAX_WINDOW_SIZE_RECV 5955584 #define DEFAULT_TCP_MAX_WINDOW_SIZE_SEND 131072 #define DEFAULT_TCP_MAX_NUM_CONNECTIONS 16777214 // Constant #define SVC_ARG_INSTALL "/install" #define SVC_ARG_UNINSTALL "/uninstall" #define SVC_ARG_START "/start" #define SVC_ARG_STOP "/stop" #define SVC_ARG_TEST "/test" #define SVC_ARG_USERMODE "/usermode" #define SVC_ARG_USERMODE_SHOWTRAY "/usermode_showtray" #define SVC_ARG_USERMODE_HIDETRAY "/usermode_hidetray" #define SVC_ARG_SERVICE "/service" #define SVC_ARG_SETUP_INSTALL "/setup_install" #define SVC_ARG_SETUP_UNINSTALL "/setup_uninstall" #define SVC_ARG_TCP "/tcp" #define SVC_ARG_TCP_UAC "/tcp_uac" #define SVC_ARG_TCP_UAC_W L"/tcp_uac" #define SVC_ARG_TCP_SETUP "/tcpsetup" #define SVC_ARG_TRAFFIC "/traffic" #define SVC_ARG_UIHELP "/uihelp" #define SVC_ARG_UIHELP_W L"/uihelp" #define SVC_ARG_SILENT "/silent" // Time to suicide, if the service freezed #define SVC_SELFKILL_TIMEOUT (5 * 60 * 1000) // The name of the device driver of the virtual LAN card for Win32 (first part) #define VLAN_ADAPTER_NAME "VPN Client Adapter" #define VLAN_ADAPTER_NAME_OLD "SoftEther VPN Client 2.0 Adapter" // The name of the device driver of the virtual LAN card for Win32 (full name) #define VLAN_ADAPTER_NAME_TAG "VPN Client Adapter - %s" #define VLAN_ADAPTER_NAME_TAG_OLD "SoftEther VPN Client 2.0 Adapter - %s" // Display name of Virtual LAN card in the [Network Connections] in Win32 (full name) #define VLAN_CONNECTION_NAME "%s - VPN Client" #define VLAN_CONNECTION_NAME_OLD "%s - SoftEther VPN Client 2.0" // Suspend handler windows class name #define MS_SUSPEND_HANDLER_WNDCLASSNAME "MS_SUSPEND_HANDLER" // Command line format in the service mode #define SVC_RUN_COMMANDLINE L"\"%s\" /service" // Mode value #define SVC_MODE_NONE 0 #define SVC_MODE_INSTALL 1 #define SVC_MODE_UNINSTALL 2 #define SVC_MODE_START 3 #define SVC_MODE_STOP 4 #define SVC_MODE_TEST 5 #define SVC_MODE_USERMODE 6 #define SVC_MODE_SERVICE 7 #define SVC_MODE_SETUP_INSTALL 8 #define SVC_MODE_SETUP_UNINSTALL 9 #define SVC_MODE_TCP 13 #define SVC_MODE_TCPSETUP 14 #define SVC_MODE_TRAFFIC 15 #define SVC_MODE_UIHELP 16 #define SVC_MODE_TCP_UAC 17 #define VISTA_MMCSS_KEYNAME "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile\\Tasks" #define VISTA_MMCSS_FILENAME "mmcss_backup.dat" #define SVC_NAME "SVC_%s_NAME" #define SVC_TITLE "SVC_%s_TITLE" #define SVC_DESCRIPT "SVC_%s_DESCRIPT" #define SVC_USERMODE_SETTING_KEY "Software\\" GC_REG_COMPANY_NAME "\\PacketiX VPN\\UserMode Settings" #define SVC_HIDETRAY_REG_VALUE "HideTray_%S" #define SVC_CALLING_SM_PROCESS_ID_KEY "Software\\" GC_REG_COMPANY_NAME "\\PacketiX VPN\\Service Control\\%s" #define SVC_CALLING_SM_PROCESS_ID_VALUE "ProcessId" #define SOFTETHER_FW_SCRIPT_HASH "Software\\" GC_REG_COMPANY_NAME "\\PacketiX VPN\\FW ScriptHash" #define MMCSS_PROFILE_KEYNAME "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile" // Other constants #define MS_REG_TCP_SETTING_KEY "Software\\" GC_REG_COMPANY_NAME "\\Network Settings" // Constants about driver #define DRIVER_INSTALL_SYS_NAME_TAG_NEW "Neo_%04u.sys" #define DRIVER_INSTALL_SYS_NAME_TAG_MAXID 128 // Maximum number of install // Vista driver installer related #define VISTA_DRIVER_INSTALLER_SRC L"|vpndrvinst.exe" #define VISTA_DRIVER_INSTALLER_DST L"%s\\vpndrvinst.exe" #define DRIVER_DEVICE_ID_TAG "NeoAdapter_%s" #ifdef MICROSOFT_C // WCM related code on Windows 8 typedef enum _MS_WCM_PROPERTY { ms_wcm_global_property_domain_policy, ms_wcm_global_property_minimize_policy, ms_wcm_global_property_roaming_policy, ms_wcm_global_property_powermanagement_policy, ms_wcm_intf_property_connection_cost, //used to set/get cost level and flags for the connection ms_wcm_intf_property_dataplan_status, //used by MNO to indicate plan data associated with new cost ms_wcm_intf_property_hotspot_profile, //used to store hotspot profile (WISPr credentials) } MS_WCM_PROPERTY, * MS_PWCM_PROPERTY; typedef struct _MS_WCM_POLICY_VALUE { BOOL fValue; BOOL fIsGroupPolicy; } MS_WCM_POLICY_VALUE, * MS_PWCM_POLICY_VALUE; #define MS_WCM_MAX_PROFILE_NAME 256 typedef enum _MS_WCM_MEDIA_TYPE { ms_wcm_media_unknown, ms_wcm_media_ethernet, ms_wcm_media_wlan, ms_wcm_media_mbn, ms_wcm_media_invalid, ms_wcm_media_max } MS_WCM_MEDIA_TYPE, * MS_PWCM_MEDIA_TYPE; typedef struct _MS_WCM_PROFILE_INFO { WCHAR strProfileName[MS_WCM_MAX_PROFILE_NAME]; GUID AdapterGUID; MS_WCM_MEDIA_TYPE Media; } MS_WCM_PROFILE_INFO, * MS_PWCM_PROFILE_INFO; typedef struct _MS_WCM_PROFILE_INFO_LIST { UINT dwNumberOfItems; MS_WCM_PROFILE_INFO ProfileInfo[1]; } MS_WCM_PROFILE_INFO_LIST, * MS_PWCM_PROFILE_INFO_LIST; // Internal structure typedef struct MS { HINSTANCE hInst; HINSTANCE hKernel32; bool IsNt; bool IsAdmin; HANDLE hCurrentProcess; UINT CurrentProcessId; bool MiniDumpEnabled; char *ExeFileName; char *ExeFileDir; char *WindowsDir; char *System32Dir; char *TempDir; char *WinTempDir; char *WindowsDrive; char *ProgramFilesDir; char *ProgramFilesDirX86; char *ProgramFilesDirX64; char *CommonStartMenuDir; char *CommonProgramsDir; char *CommonStartupDir; char *CommonAppDataDir; char *CommonDesktopDir; char *PersonalStartMenuDir; char *PersonalProgramsDir; char *PersonalStartupDir; char *PersonalAppDataDir; char *PersonalDesktopDir; char *MyDocumentsDir; char *LocalAppDataDir; char *MyTempDir; char *UserName; char *UserNameEx; wchar_t *ExeFileNameW; wchar_t *ExeFileDirW; wchar_t *WindowsDirW; wchar_t *System32DirW; wchar_t *TempDirW; wchar_t *WinTempDirW; wchar_t *WindowsDriveW; wchar_t *ProgramFilesDirW; wchar_t *ProgramFilesDirX86W; wchar_t *ProgramFilesDirX64W; wchar_t *CommonStartMenuDirW; wchar_t *CommonProgramsDirW; wchar_t *CommonStartupDirW; wchar_t *CommonAppDataDirW; wchar_t *CommonDesktopDirW; wchar_t *PersonalStartMenuDirW; wchar_t *PersonalProgramsDirW; wchar_t *PersonalStartupDirW; wchar_t *PersonalAppDataDirW; wchar_t *PersonalDesktopDirW; wchar_t *MyDocumentsDirW; wchar_t *LocalAppDataDirW; wchar_t *MyTempDirW; wchar_t *UserNameW; wchar_t *UserNameExW; wchar_t *MinidumpBaseFileNameW; IO *LockFile; bool IsWine; } MS; typedef struct MS_EVENTLOG { HANDLE hEventLog; } MS_EVENTLOG; typedef struct MS_USERMODE_SVC_PULSE_THREAD_PARAM { void *hWnd; void *GlobalPulse; volatile bool Halt; } MS_USERMODE_SVC_PULSE_THREAD_PARAM; #endif // MICROSOFT_C // Structure to suppress the warning message typedef struct NO_WARNING { UINT ThreadId; THREAD *NoWarningThread; EVENT *HaltEvent; volatile bool Halt; wchar_t *SoundFileName; UINT64 StartTimer; UINT64 StartTick; } NO_WARNING; // ID of the root key #define REG_CLASSES_ROOT 0 // HKEY_CLASSES_ROOT #define REG_LOCAL_MACHINE 1 // HKEY_LOCAL_MACHINE #define REG_CURRENT_USER 2 // HKEY_CURRENT_USER #define REG_USERS 3 // HKEY_USERS // Service Functions typedef void (SERVICE_FUNCTION)(); // Process list item typedef struct MS_PROCESS { char ExeFilename[MAX_PATH]; // EXE file name wchar_t ExeFilenameW[MAX_PATH]; // EXE file name (Unicode) UINT ProcessId; // Process ID } MS_PROCESS; #define MAX_MS_ADAPTER_IP_ADDRESS 64 // Network adapter typedef struct MS_ADAPTER { char Title[MAX_PATH]; // Display name wchar_t TitleW[MAX_PATH]; // Display Name (Unicode) UINT Index; // Index UINT Type; // Type UINT Status; // Status UINT Mtu; // MTU UINT Speed; // Speed UINT AddressSize; // Address size UCHAR Address[8]; // Address UINT64 RecvBytes; // Number of received bytes UINT64 RecvPacketsBroadcast; // Number of broadcast packets received UINT64 RecvPacketsUnicast; // Number of unicast packets received UINT64 SendBytes; // Number of bytes sent UINT64 SendPacketsBroadcast; // Number of sent broadcast packets UINT64 SendPacketsUnicast; // Number of sent unicast packets bool Info; // Whether there is detailed information char Guid[MAX_SIZE]; // GUID UINT NumIpAddress; // The number of IP addresses IP IpAddresses[MAX_MS_ADAPTER_IP_ADDRESS]; // IP address IP SubnetMasks[MAX_MS_ADAPTER_IP_ADDRESS]; // Subnet mask UINT NumGateway; // The number of the gateway IP Gateways[MAX_MS_ADAPTER_IP_ADDRESS]; // Gateway bool UseDhcp; // Using DHCP flag IP DhcpServer; // DHCP Server UINT64 DhcpLeaseStart; // DHCP lease start date and time UINT64 DhcpLeaseExpires; // DHCP lease expiration date and time bool UseWins; // WINS use flag IP PrimaryWinsServer; // Primary WINS server IP SecondaryWinsServer; // Secondary WINS server bool IsWireless; // Whether wireless bool IsNotEthernetLan; // Whether It isn't a Ethernet LAN } MS_ADAPTER; // Network adapter list typedef struct MS_ADAPTER_LIST { UINT Num; // Count MS_ADAPTER **Adapters; // Content } MS_ADAPTER_LIST; typedef struct MS_ISLOCKED { HWND hWnd; THREAD *Thread; volatile bool IsLockedFlag; } MS_ISLOCKED; // TCP setting typedef struct MS_TCP { UINT RecvWindowSize; // Receive window size UINT SendWindowSize; // Send window size } MS_TCP; // Sleep prevention typedef struct MS_NOSLEEP { THREAD *Thread; // Thread EVENT *HaltEvent; // Halting event volatile bool Halt; // Halting flag bool NoScreenSaver; // Prevent Screensaver // Following is for Windows Vista wchar_t ScreenSaveActive[MAX_PATH]; wchar_t SCRNSAVE_EXE[MAX_PATH]; } MS_NOSLEEP; // Child window enumeration typedef struct ENUM_CHILD_WINDOW_PARAM { LIST *o; bool no_recursion; bool include_ipcontrol; } ENUM_CHILD_WINDOW_PARAM; // Driver version information typedef struct MS_DRIVER_VER { UINT Year, Month, Day; UINT Major, Minor, Build; } MS_DRIVER_VER; // Suspend handler typedef struct MS_SUSPEND_HANDLER { HWND hWnd; THREAD *Thread; volatile bool AboutToClose; } MS_SUSPEND_HANDLER; // Function prototype void MsInit(); void MsFree(); char *MsCutExeNameFromCommandLine(char *str); wchar_t *MsCutExeNameFromUniCommandLine(wchar_t *str); UINT MsRegAccessMaskFor64BitEx(bool force32bit, bool force64bit); bool MsRegIsKey(UINT root, char *name); bool MsRegIsKeyEx(UINT root, char *name, bool force32bit); bool MsRegIsKeyEx2(UINT root, char *name, bool force32bit, bool force64bit); bool MsRegIsValue(UINT root, char *keyname, char *valuename); bool MsRegIsValueEx(UINT root, char *keyname, char *valuename, bool force32bit); bool MsRegIsValueEx2(UINT root, char *keyname, char *valuename, bool force32bit, bool force64bit); bool MsRegReadValueEx2(UINT root, char *keyname, char *valuename, void **data, DWORD *type, DWORD *size, bool force32bit, bool force64bit); bool MsRegReadValueEx2W(UINT root, char *keyname, char *valuename, void **data, DWORD *type, DWORD *size, bool force32bit, bool force64bit); char *MsRegReadStr(UINT root, char *keyname, char *valuename); char *MsRegReadStrEx(UINT root, char *keyname, char *valuename, bool force32bit); char *MsRegReadStrEx2(UINT root, char *keyname, char *valuename, bool force32bit, bool force64bit); wchar_t *MsRegReadStrW(UINT root, char *keyname, char *valuename); wchar_t *MsRegReadStrExW(UINT root, char *keyname, char *valuename, bool force32bit); wchar_t *MsRegReadStrEx2W(UINT root, char *keyname, char *valuename, bool force32bit, bool force64bit); UINT MsRegReadInt(UINT root, char *keyname, char *valuename); UINT MsRegReadIntEx(UINT root, char *keyname, char *valuename, bool force32bit); UINT MsRegReadIntEx2(UINT root, char *keyname, char *valuename, bool force32bit, bool force64bit); LIST *MsRegReadStrList(UINT root, char *keyname, char *valuename); LIST *MsRegReadStrListEx(UINT root, char *keyname, char *valuename, bool force32bit); LIST *MsRegReadStrListEx2(UINT root, char *keyname, char *valuename, bool force32bit, bool force64bit); BUF *MsRegReadBin(UINT root, char *keyname, char *valuename); BUF *MsRegReadBinEx(UINT root, char *keyname, char *valuename, bool force32bit); BUF *MsRegReadBinEx2(UINT root, char *keyname, char *valuename, bool force32bit, bool force64bit); bool MsRegNewKeyEx2(UINT root, char *keyname, bool force32bit, bool force64bit); bool MsRegWriteValueEx2(UINT root, char *keyname, char *valuename, UINT type, void *data, UINT size, bool force32bit, bool force64bit); bool MsRegWriteValueEx2W(UINT root, char *keyname, char *valuename, UINT type, void *data, UINT size, bool force32bit, bool force64bit); bool MsRegWriteStr(UINT root, char *keyname, char *valuename, char *str); bool MsRegWriteStrEx(UINT root, char *keyname, char *valuename, char *str, bool force32bit); bool MsRegWriteStrEx2(UINT root, char *keyname, char *valuename, char *str, bool force32bit, bool force64bit); bool MsRegWriteStrExpand(UINT root, char *keyname, char *valuename, char *str); bool MsRegWriteStrExpandEx(UINT root, char *keyname, char *valuename, char *str, bool force32bit); bool MsRegWriteStrExpandEx2(UINT root, char *keyname, char *valuename, char *str, bool force32bit, bool force64bit); bool MsRegWriteStrW(UINT root, char *keyname, char *valuename, wchar_t *str); bool MsRegWriteStrExW(UINT root, char *keyname, char *valuename, wchar_t *str, bool force32bit); bool MsRegWriteStrEx2W(UINT root, char *keyname, char *valuename, wchar_t *str, bool force32bit, bool force64bit); bool MsRegWriteStrExpandW(UINT root, char *keyname, char *valuename, wchar_t *str); bool MsRegWriteStrExpandExW(UINT root, char *keyname, char *valuename, wchar_t *str, bool force32bit); bool MsRegWriteStrExpandEx2W(UINT root, char *keyname, char *valuename, wchar_t *str, bool force32bit, bool force64bit); bool MsRegWriteInt(UINT root, char *keyname, char *valuename, UINT value); bool MsRegWriteIntEx(UINT root, char *keyname, char *valuename, UINT value, bool force32bit); bool MsRegWriteIntEx2(UINT root, char *keyname, char *valuename, UINT value, bool force32bit, bool force64bit); bool MsRegWriteBin(UINT root, char *keyname, char *valuename, void *data, UINT size); bool MsRegWriteBinEx(UINT root, char *keyname, char *valuename, void *data, UINT size, bool force32bit); bool MsRegWriteBinEx2(UINT root, char *keyname, char *valuename, void *data, UINT size, bool force32bit, bool force64bit); TOKEN_LIST *MsRegEnumKey(UINT root, char *keyname); TOKEN_LIST *MsRegEnumKeyEx(UINT root, char *keyname, bool force32bit); TOKEN_LIST *MsRegEnumKeyEx2(UINT root, char *keyname, bool force32bit, bool force64bit); TOKEN_LIST *MsRegEnumValue(UINT root, char *keyname); TOKEN_LIST *MsRegEnumValueEx(UINT root, char *keyname, bool force32bit); TOKEN_LIST *MsRegEnumValueEx2(UINT root, char *keyname, bool force32bit, bool force64bit); bool MsRegDeleteKey(UINT root, char *keyname); bool MsRegDeleteKeyEx(UINT root, char *keyname, bool force32bit); bool MsRegDeleteKeyEx2(UINT root, char *keyname, bool force32bit, bool force64bit); bool MsRegDeleteValue(UINT root, char *keyname, char *valuename); bool MsRegDeleteValueEx(UINT root, char *keyname, char *valuename, bool force32bit); bool MsRegDeleteValueEx2(UINT root, char *keyname, char *valuename, bool force32bit, bool force64bit); bool MsRegLoadHive(UINT root, wchar_t *keyname, wchar_t *filename); bool MsRegUnloadHive(UINT root, wchar_t *keyname); bool MsIsAdmin(); bool MsIsWine(); bool MsEnablePrivilege(char *name, bool enable); void *MsGetCurrentProcess(); UINT MsGetCurrentProcessId(); char *MsGetExeFileName(); char *MsGetExeDirName(); wchar_t *MsGetExeDirNameW(); void MsStartIsLockedThread(); void MsStopIsLockedThread(); bool MsShutdown(bool reboot, bool force); bool MsCheckLogon(wchar_t *username, char *password); TOKEN_LIST *MsEnumNetworkAdapters(char *start_with_name, char *start_with_name_2); TOKEN_LIST *MsEnumNetworkAdaptersNeo(); bool MsGetNeoDriverFilename(char *name, UINT size, char *instance_name); bool MsMakeNewNeoDriverFilename(char *name, UINT size); void MsGenerateNeoDriverFilenameFromInt(char *name, UINT size, UINT n); TOKEN_LIST *MsEnumNeoDriverFilenames(); char *MsGetNetworkAdapterGuid(char *tag_name, char *instance_name); wchar_t *MsGetNetworkConnectionName(char *guid); char *MsGetNetworkConfigRegKeyNameFromGuid(char *guid); char *MsGetNetworkConfigRegKeyNameFromInstanceName(char *tag_name, char *instance_name); void MsSetNetworkConfig(char *tag_name, char *instance_name, char *friendly_name, bool show_icon); void MsInitNetworkConfig(char *tag_name, char *instance_name, char *connection_tag_name); void MsNormalizeInterfaceDefaultGatewaySettings(char *tag_name, char *instance_name); char *MsGetSpecialDir(int id); wchar_t *MsGetSpecialDirW(int id); void MsGetSpecialDirs(); bool MsCheckIsAdmin(); void MsInitTempDir(); void MsFreeTempDir(); void MsGenLockFile(wchar_t *name, UINT size, wchar_t *temp_dir); void MsDeleteTempDir(); void MsDeleteAllFile(char *dir); void MsDeleteAllFileW(wchar_t *dir); bool MsInstallVLan(char *tag_name, char *connection_tag_name, char *instance_name, MS_DRIVER_VER *ver); bool MsInstallVLanWithoutLock(char *tag_name, char *connection_tag_name, char *instance_name, MS_DRIVER_VER *ver); bool MsInstallVLanInternal(wchar_t *infpath, wchar_t *hwid_w, char *hwid); bool MsUpgradeVLan(char *tag_name, char *connection_tag_name, char *instance_name, MS_DRIVER_VER *ver); bool MsUpgradeVLanWithoutLock(char *tag_name, char *connection_tag_name, char *instance_name, MS_DRIVER_VER *ver); bool MsEnableVLan(char *instance_name); bool MsEnableVLanWithoutLock(char *instance_name); bool MsDisableVLan(char *instance_name); bool MsDisableVLanWithoutLock(char *instance_name); bool MsUninstallVLan(char *instance_name); bool MsUninstallVLanWithoutLock(char *instance_name); bool MsIsVLanEnabled(char *instance_name); bool MsIsVLanEnabledWithoutLock(char *instance_name); bool MsIsValidVLanInstanceNameForInfCatalog(char *instance_name); void MsGetInfCatalogDir(char *dst, UINT size); void MsRestartVLan(char *instance_name); void MsRestartVLanWithoutLock(char *instance_name); bool MsIsVLanExists(char *tag_name, char *instance_name); void MsDeleteTroubleVLAN(char *tag_name, char *instance_name); bool MsStartDriverInstall(char *instance_name, UCHAR *mac_address, char *neo_sys, UCHAR *ret_mac_address, MS_DRIVER_VER *ver); void MsFinishDriverInstall(char *instance_name, char *neo_sys); 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); 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); void MsGenMacAddress(UCHAR *mac); char *MsGetMacAddress(char *tag_name, char *instance_name); void MsSetMacAddress(char *tag_name, char *instance_name, char *mac_address); char *MsGetDriverVersion(char *tag_name, char *instance_name); char *MsGetDriverFileName(char *tag_name, char *instance_name); void MsTest(); void MsInitGlobalNetworkConfig(); void MsDisableNetworkOffloadingEtc(); void MsSetThreadPriorityHigh(); void MsSetThreadPriorityIdle(); void MsSetThreadPriorityRealtime(); void MsRestoreThreadPriority(); char *MsGetWindowsDir(); char *MsGetSystem32Dir(); char *MsGetTempDir(); char *MsGetProgramFilesDir(); char *MsGetCommonStartupDir(); char *MsGetMyTempDir(); wchar_t *MsGetWindowsDirW(); wchar_t *MsGetExeFileNameW(); wchar_t *MsGetExeFileDirW(); wchar_t *MsGetSystem32DirW(); wchar_t *MsGetTempDirW(); wchar_t *MsGetProgramFilesDirX64W(); wchar_t *MsGetCommonStartMenuDirW(); wchar_t *MsGetCommonProgramsDirW(); wchar_t *MsGetCommonStartupDirW(); wchar_t *MsGetCommonDesktopDirW(); wchar_t *MsGetPersonalStartMenuDirW(); wchar_t *MsGetPersonalProgramsDirW(); wchar_t *MsGetPersonalStartupDirW(); wchar_t *MsGetPersonalAppDataDirW(); wchar_t *MsGetPersonalDesktopDirW(); wchar_t *MsGetMyTempDirW(); wchar_t *MsGetUserNameW(); struct SAFE_TABLE *MsGetSafeTable(); UINT MsGetProcessId(); void MsTerminateProcess(); bool MsIsServiceInstalled(char *name); bool MsInstallServiceExW(char *name, wchar_t *title, wchar_t *description, wchar_t *path, UINT *error_code); bool MsInstallServiceW(char *name, wchar_t *title, wchar_t *description, wchar_t *path); bool MsInstallDeviceDriverW(char *name, wchar_t *title, wchar_t *path, UINT *error_code); bool MsUpdateServiceConfig(char *name); bool MsSetServiceDescription(char *name, wchar_t *description); bool MsUninstallService(char *name); bool MsStartService(char *name); bool MsStartServiceEx(char *name, UINT *error_code); bool MsStopService(char *name); bool MsIsServiceRunning(char *name); bool MsIsTerminalServiceInstalled(); bool MsIsUserSwitchingInstalled(); UINT MsGetCurrentTerminalSessionId(); bool MsIsTerminalSessionActive(UINT session_id); bool MsIsCurrentTerminalSessionActive(); wchar_t *MsGetSessionUserName(UINT session_id); UINT MsService(char *name, SERVICE_FUNCTION *start, SERVICE_FUNCTION *stop, UINT icon, char *cmd_line); void MsTestModeW(wchar_t *title, SERVICE_FUNCTION *start, SERVICE_FUNCTION *stop); void MsTestMode(char *title, SERVICE_FUNCTION *start, SERVICE_FUNCTION *stop); void MsServiceMode(SERVICE_FUNCTION *start, SERVICE_FUNCTION *stop); void MsUserModeW(wchar_t *title, SERVICE_FUNCTION *start, SERVICE_FUNCTION *stop, UINT icon); bool MsIsUserMode(); void MsTestOnly(); void MsPlaySound(char *name); void MsSetThreadSingleCpu(); bool MsCheckVLanDeviceIdFromRootEnum(char *name); LIST *MsGetProcessList(); LIST *MsGetProcessList9x(); LIST *MsGetProcessListNt(); void MsFreeProcessList(LIST *o); int MsCompareProcessList(void *p1, void *p2); MS_PROCESS *MsSearchProcessById(LIST *o, UINT id); void MsGetCurrentProcessExeNameW(wchar_t *name, UINT size); bool MsKillProcess(UINT id); UINT MsKillProcessByExeName(wchar_t *name); void MsKillOtherInstance(); void MsKillOtherInstanceEx(char *exclude_svcname); bool MsGetShortPathNameA(char *long_path, char *short_path, UINT short_path_size); bool MsGetShortPathNameW(wchar_t *long_path, wchar_t *short_path, UINT short_path_size); void MsWriteCallingServiceManagerProcessId(char *svcname, UINT pid); UINT MsReadCallingServiceManagerProcessId(char *svcname, bool current_user); bool MsStopIPsecService(); char *MsGetIPsecServiceName(); bool MsStartIPsecService(); void MsGenerateUserModeSvcGlobalPulseName(char *name, UINT size, char *svc_name); void *MsCreateUserModeSvcGlocalPulse(char *svc_name); void MsStopUserModeSvc(char *svc_name); void MsUserModeGlobalPulseRecvThread(THREAD *thread, void *param); MS_ADAPTER_LIST *MsCreateAdapterListInner(); MS_ADAPTER_LIST *MsCreateAdapterListInnerEx(bool no_info); MS_ADAPTER_LIST *MsCreateAdapterListInnerExVista(bool no_info); void MsFreeAdapter(MS_ADAPTER *a); void MsFreeAdapterList(MS_ADAPTER_LIST *o); wchar_t *MsGetAdapterTypeStr(UINT type); wchar_t *MsGetAdapterStatusStr(UINT status); MS_ADAPTER *MsCloneAdapter(MS_ADAPTER *a); MS_ADAPTER_LIST *MsCloneAdapterList(MS_ADAPTER_LIST *o); void MsInitAdapterListModule(); void MsFreeAdapterListModule(); MS_ADAPTER_LIST *MsCreateAdapterList(); MS_ADAPTER_LIST *MsCreateAdapterListEx(bool no_info); void MsGetAdapterTcpIpInformation(MS_ADAPTER *a); MS_ADAPTER *MsGetAdapter(char *title); MS_ADAPTER *MsGetAdapterByGuid(char *guid); MS_ADAPTER *MsGetAdapterByGuidFromList(MS_ADAPTER_LIST *o, char *guid); UINT ConvertMidStatusVistaToXp(UINT st); void *MsLoadLibrary(char *name); void *MsLoadLibraryW(wchar_t *name); void *MsLoadLibraryAsDataFile(char *name); void *MsLoadLibraryAsDataFileW(wchar_t *name); void MsPrintTick(); bool MsDisableIme(); void MsGetTcpConfig(MS_TCP *tcp); void MsSetTcpConfig(MS_TCP *tcp); void MsSaveTcpConfigReg(MS_TCP *tcp); bool MsLoadTcpConfigReg(MS_TCP *tcp); bool MsIsTcpConfigSupported(); void MsApplyTcpConfig(); bool MsIsShouldShowTcpConfigApp(); void MsDeleteTcpConfigReg(); UINT MsGetConsoleWidth(); UINT MsSetConsoleWidth(UINT size); NO_WARNING *MsInitNoWarning(); NO_WARNING *MsInitNoWarningEx(UINT start_timer); void MsFreeNoWarning(NO_WARNING *nw); void MsNoWarningThreadProc(THREAD *thread, void *param); char *MsNoWarningSoundInit(); void MsNoWarningSoundFree(char *s); bool MsCloseWarningWindow(NO_WARNING *nw, UINT thread_id); LIST *MsEnumChildWindows(LIST *o, HWND hWnd); void MsAddWindowToList(LIST *o, HWND hWnd); UINT MsGetThreadLocale(); LIST *NewWindowList(); int CmpWindowList(void *p1, void *p2); void AddWindow(LIST *o, HWND hWnd); void FreeWindowList(LIST *o); LIST *EnumAllChildWindow(HWND hWnd); LIST *EnumAllChildWindowEx(HWND hWnd, bool no_recursion, bool include_ipcontrol, bool no_self); LIST *EnumAllTopWindow(); bool MsExecDriverInstaller(char *arg); void MsRegistWindowsFirewallEx(char *title, char *exe); void MsRegistWindowsFirewallEx2(char *title, char *exe, char *dir); bool MsIs64BitWindows(); bool MsIsX64(); bool MsIsIA64(); void *MsDisableWow64FileSystemRedirection(); void MsRestoreWow64FileSystemRedirection(void *p); bool MsIsWindows10(); bool MsIsWindows81(); bool MsIsWindows8(); bool MsIsWindows7(); bool MsIsInfCatalogRequired(); bool MsCheckFileDigitalSignatureW(HWND hWnd, wchar_t *name, bool *danger); bool MsIsKB3033929RequiredAndMissing(); bool MsIsSha2KernelModeSignatureSupported(); bool MsGetProcessExeName(char *path, UINT size, UINT id); bool MsGetWindowOwnerProcessExeName(char *path, UINT size, HWND hWnd); void *MsRunAsUserExW(wchar_t *filename, wchar_t *arg, bool hide); void *MsRunAsUserExInnerW(wchar_t *filename, wchar_t *arg, bool hide); UINT MsGetCursorPosHash(); void MsGetComputerName(char *name, UINT size); void MsGetComputerNameFullEx(wchar_t *name, UINT size, bool with_cache); UINT64 MsGetScreenSaverTimeout(); bool MsUniMakeDir(wchar_t *name); void MsUniMakeDirEx(wchar_t *name); bool MsMakeDir(char *name); bool MsExecute(char *exe, char *arg); bool MsExecute2(char *exe, char *arg, bool runas); bool MsExecuteW(wchar_t *exe, wchar_t *arg); bool MsExecute2W(wchar_t *exe, wchar_t *arg, bool runas); bool MsExecuteEx(char *exe, char *arg, void **process_handle); bool MsExecuteEx2(char *exe, char *arg, void **process_handle, bool runas); bool MsExecuteEx2W(wchar_t *exe, wchar_t *arg, void **process_handle, bool runas); void MsCloseHandle(void *handle); UINT MsWaitProcessExit(void *process_handle); void MsUpdateSystem(); UINT64 MsGetHiResCounter(); double MsGetHiResTimeSpan(UINT64 diff); UINT64 MsGetHiResTimeSpanUSec(UINT64 diff); void MsRestartMMCSS(); bool MsIsMMCSSNetworkThrottlingEnabled(); void MsSetMMCSSNetworkThrottlingEnable(bool enable); void MsSetShutdownParameters(UINT level, UINT flag); bool MsIsWinXPOrWinVista(); bool MsGetFileInformation(void *h, void *info); void MsSetErrorModeToSilent(); void MsSetEnableMinidump(bool enabled); bool MsIsMinidumpEnabled(); void MsWriteMinidump(wchar_t *filename, void *ex); void *MsInitGlobalLock(char *name, bool ts_local); void MsGlobalLock(void *p); void MsGlobalUnlock(void *p); void MsFreeGlobalLock(void *p); void *MsOpenOrCreateGlobalPulse(char *name); bool MsWaitForGlobalPulse(void *p, UINT timeout); void MsCloseGlobalPulse(void *p); void MsSendGlobalPulse(void *p); bool MsPerformMsChapV2AuthByLsa(char *username, UCHAR *challenge8, UCHAR *client_response_24, UCHAR *ret_pw_hash_hash); void MsDisableWcmNetworkMinimize(); bool MsSetFileSecureAcl(wchar_t *path); bool MsGetMsiInstalledDir(char *component_code, wchar_t *dir, UINT dir_size); bool MsMsiUninstall(char *product_code, HWND hWnd, bool *reboot_required); UINT MsGetUserLocaleId(); bool MsIsCurrentUserLocaleIdJapanese(); TOKEN_LIST *MsEnumResources(void *hModule, char *type); void *MsGetCurrentModuleHandle(); bool MsIsAeroEnabled(); bool MsIsAeroColor(); bool MsIsInVmMain(); bool MsIsInVm(); void MsTest(); bool MsSaveSystemInfo(wchar_t *dst_filename); bool MsCollectVpnInfo(BUF *bat, char *tmpdir, char *svc_name, wchar_t *config_name, wchar_t *logdir_name); void MsInitProcessCallOnce(); MS_SUSPEND_HANDLER *MsNewSuspendHandler(); void MsFreeSuspendHandler(MS_SUSPEND_HANDLER *h); void MsBeginVLanCard(); void MsEndVLanCard(); bool MsIsVLanCardShouldStop(); void MsProcEnterSuspend(); void MsProcLeaveSuspend(); UINT64 MsGetSuspendModeBeginTick(); // Inner functions #ifdef MICROSOFT_C LONG CALLBACK MsExceptionHandler(struct _EXCEPTION_POINTERS *ExceptionInfo); HKEY MsGetRootKeyFromInt(UINT root); void MsDestroyDevInfo(HDEVINFO info); HDEVINFO MsGetDevInfoFromDeviceId(SP_DEVINFO_DATA *dev_info_data, char *device_id); bool MsStartDevice(HDEVINFO info, SP_DEVINFO_DATA *dev_info_data); bool MsStopDevice(HDEVINFO info, SP_DEVINFO_DATA *dev_info_data); bool MsDeleteDevice(HDEVINFO info, SP_DEVINFO_DATA *dev_info_data); bool MsIsDeviceRunning(HDEVINFO info, SP_DEVINFO_DATA *dev_info_data); void CALLBACK MsServiceDispatcher(DWORD argc, LPTSTR *argv); void CALLBACK MsServiceHandler(DWORD opcode); bool MsServiceStopProc(); void MsServiceStoperMainThread(THREAD *t, void *p); void MsServiceStarterMainThread(THREAD *t, void *p); LRESULT CALLBACK MsUserModeWindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); bool MsShowIconOnTray(HWND hWnd, HICON icon, wchar_t *tooltip, UINT msg); void MsRestoreIconOnTray(); void MsChangeIconOnTray(HICON icon, wchar_t *tooltip); bool MsChangeIconOnTrayEx(HICON icon, wchar_t *tooltip, wchar_t *info_title, wchar_t *info, UINT info_flags, bool add); void MsHideIconOnTray(); void MsUserModeTrayMenu(HWND hWnd); bool MsAppendMenu(HMENU hMenu, UINT flags, UINT_PTR id, wchar_t *str); bool MsInsertMenu(HMENU hMenu, UINT pos, UINT flags, UINT_PTR id_new_item, wchar_t *lp_new_item); BOOL CALLBACK MsEnumChildWindowProc(HWND hWnd, LPARAM lParam); BOOL CALLBACK EnumTopWindowProc(HWND hWnd, LPARAM lParam); BOOL CALLBACK MsEnumThreadWindowProc(HWND hWnd, LPARAM lParam); HANDLE MsCreateUserToken(); SID *MsGetSidFromAccountName(char *name); void MsFreeSid(SID *sid); BOOL CALLBACK MsEnumResourcesInternalProc(HMODULE hModule, const char *type, char *name, LONG_PTR lParam); LRESULT CALLBACK MsSuspendHandlerWindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); void MsSuspendHandlerThreadProc(THREAD *thread, void *param); #endif // MICROSOFT_C #endif // MICROSOFT_H #endif // OS_WIN32