| use core::ptr::null_mut; |
| use crate::ntrtl::RTL_TIME_ZONE_INFORMATION; |
| use winapi::shared::basetsd::SIZE_T; |
| use winapi::shared::minwindef::{BYTE, DWORD, FILETIME}; |
| use winapi::shared::ntdef::{ |
| BOOLEAN, CHAR, HANDLE, LARGE_INTEGER, LONG, PULONG, PVOID, PWSTR, UCHAR, ULONG, UNICODE_STRING, |
| USHORT, WCHAR, |
| }; |
| use winapi::shared::windef::HWND; |
| use winapi::um::winnt::{PSID, STANDARD_RIGHTS_REQUIRED}; |
| pub const WINSTATION_QUERY: u32 = 0x00000001; |
| pub const WINSTATION_SET: u32 = 0x00000002; |
| pub const WINSTATION_RESET: u32 = 0x00000004; |
| pub const WINSTATION_VIRTUAL: u32 = 0x00000008; |
| pub const WINSTATION_SHADOW: u32 = 0x00000010; |
| pub const WINSTATION_LOGON: u32 = 0x00000020; |
| pub const WINSTATION_LOGOFF: u32 = 0x00000040; |
| pub const WINSTATION_MSG: u32 = 0x00000080; |
| pub const WINSTATION_CONNECT: u32 = 0x00000100; |
| pub const WINSTATION_DISCONNECT: u32 = 0x00000200; |
| pub const WINSTATION_GUEST_ACCESS: u32 = WINSTATION_LOGON; |
| pub const WINSTATION_CURRENT_GUEST_ACCESS: u32 = WINSTATION_VIRTUAL | WINSTATION_LOGOFF; |
| pub const WINSTATION_USER_ACCESS: u32 = |
| WINSTATION_GUEST_ACCESS | WINSTATION_QUERY | WINSTATION_CONNECT; |
| pub const WINSTATION_CURRENT_USER_ACCESS: u32 = WINSTATION_SET | WINSTATION_RESET |
| | WINSTATION_VIRTUAL | WINSTATION_LOGOFF | WINSTATION_DISCONNECT; |
| pub const WINSTATION_ALL_ACCESS: u32 = STANDARD_RIGHTS_REQUIRED | WINSTATION_QUERY | WINSTATION_SET |
| | WINSTATION_RESET | WINSTATION_VIRTUAL | WINSTATION_SHADOW | WINSTATION_LOGON | WINSTATION_MSG |
| | WINSTATION_CONNECT | WINSTATION_DISCONNECT; |
| pub const WDPREFIX_LENGTH: usize = 12; |
| pub const CALLBACK_LENGTH: usize = 50; |
| pub const DLLNAME_LENGTH: usize = 32; |
| pub const CDNAME_LENGTH: usize = 32; |
| pub const WDNAME_LENGTH: usize = 32; |
| pub const PDNAME_LENGTH: usize = 32; |
| pub const DEVICENAME_LENGTH: usize = 128; |
| pub const MODEMNAME_LENGTH: usize = DEVICENAME_LENGTH; |
| pub const STACK_ADDRESS_LENGTH: usize = 128; |
| pub const MAX_BR_NAME: usize = 65; |
| pub const DIRECTORY_LENGTH: usize = 256; |
| pub const INITIALPROGRAM_LENGTH: usize = 256; |
| pub const USERNAME_LENGTH: usize = 20; |
| pub const DOMAIN_LENGTH: usize = 17; |
| pub const PASSWORD_LENGTH: usize = 14; |
| pub const NASISPECIFICNAME_LENGTH: usize = 14; |
| pub const NASIUSERNAME_LENGTH: usize = 47; |
| pub const NASIPASSWORD_LENGTH: usize = 24; |
| pub const NASISESSIONNAME_LENGTH: usize = 16; |
| pub const NASIFILESERVER_LENGTH: usize = 47; |
| pub const CLIENTDATANAME_LENGTH: usize = 7; |
| pub const CLIENTNAME_LENGTH: usize = 20; |
| pub const CLIENTADDRESS_LENGTH: usize = 30; |
| pub const IMEFILENAME_LENGTH: usize = 32; |
| pub const CLIENTLICENSE_LENGTH: usize = 32; |
| pub const CLIENTMODEM_LENGTH: usize = 40; |
| pub const CLIENT_PRODUCT_ID_LENGTH: usize = 32; |
| pub const MAX_COUNTER_EXTENSIONS: u32 = 2; |
| pub const WINSTATIONNAME_LENGTH: usize = 32; |
| pub const TERMSRV_TOTAL_SESSIONS: u32 = 1; |
| pub const TERMSRV_DISC_SESSIONS: u32 = 2; |
| pub const TERMSRV_RECON_SESSIONS: u32 = 3; |
| pub const TERMSRV_CURRENT_ACTIVE_SESSIONS: u32 = 4; |
| pub const TERMSRV_CURRENT_DISC_SESSIONS: u32 = 5; |
| pub const TERMSRV_PENDING_SESSIONS: u32 = 6; |
| pub const TERMSRV_SUCC_TOTAL_LOGONS: u32 = 7; |
| pub const TERMSRV_SUCC_LOCAL_LOGONS: u32 = 8; |
| pub const TERMSRV_SUCC_REMOTE_LOGONS: u32 = 9; |
| pub const TERMSRV_SUCC_SESSION0_LOGONS: u32 = 10; |
| pub const TERMSRV_CURRENT_TERMINATING_SESSIONS: u32 = 11; |
| pub const TERMSRV_CURRENT_LOGGEDON_SESSIONS: u32 = 12; |
| pub type PTS_TIME_ZONE_INFORMATION = *mut RTL_TIME_ZONE_INFORMATION; |
| pub type TS_TIME_ZONE_INFORMATION = RTL_TIME_ZONE_INFORMATION; |
| pub type WINSTATIONNAME = [WCHAR; WINSTATIONNAME_LENGTH + 1]; |
| STRUCT!{struct VARDATA_WIRE { |
| Size: USHORT, |
| Offset: USHORT, |
| }} |
| pub type PVARDATA_WIRE = *mut VARDATA_WIRE; |
| ENUM!{enum WINSTATIONSTATECLASS { |
| State_Active = 0, |
| State_Connected = 1, |
| State_ConnectQuery = 2, |
| State_Shadow = 3, |
| State_Disconnected = 4, |
| State_Idle = 5, |
| State_Listen = 6, |
| State_Reset = 7, |
| State_Down = 8, |
| State_Init = 9, |
| }} |
| UNION!{union SESSIONIDW_u { |
| SessionId: ULONG, |
| LogonId: ULONG, |
| }} |
| STRUCT!{struct SESSIONIDW { |
| u: SESSIONIDW_u, |
| WinStationName: WINSTATIONNAME, |
| State: WINSTATIONSTATECLASS, |
| }} |
| pub type PSESSIONIDW = *mut SESSIONIDW; |
| ENUM!{enum WINSTATIONINFOCLASS { |
| WinStationCreateData = 0, |
| WinStationConfiguration = 1, |
| WinStationPdParams = 2, |
| WinStationWd = 3, |
| WinStationPd = 4, |
| WinStationPrinter = 5, |
| WinStationClient = 6, |
| WinStationModules = 7, |
| WinStationInformation = 8, |
| WinStationTrace = 9, |
| WinStationBeep = 10, |
| WinStationEncryptionOff = 11, |
| WinStationEncryptionPerm = 12, |
| WinStationNtSecurity = 13, |
| WinStationUserToken = 14, |
| WinStationUnused1 = 15, |
| WinStationVideoData = 16, |
| WinStationInitialProgram = 17, |
| WinStationCd = 18, |
| WinStationSystemTrace = 19, |
| WinStationVirtualData = 20, |
| WinStationClientData = 21, |
| WinStationSecureDesktopEnter = 22, |
| WinStationSecureDesktopExit = 23, |
| WinStationLoadBalanceSessionTarget = 24, |
| WinStationLoadIndicator = 25, |
| WinStationShadowInfo = 26, |
| WinStationDigProductId = 27, |
| WinStationLockedState = 28, |
| WinStationRemoteAddress = 29, |
| WinStationIdleTime = 30, |
| WinStationLastReconnectType = 31, |
| WinStationDisallowAutoReconnect = 32, |
| WinStationMprNotifyInfo = 33, |
| WinStationExecSrvSystemPipe = 34, |
| WinStationSmartCardAutoLogon = 35, |
| WinStationIsAdminLoggedOn = 36, |
| WinStationReconnectedFromId = 37, |
| WinStationEffectsPolicy = 38, |
| WinStationType = 39, |
| WinStationInformationEx = 40, |
| WinStationValidationInfo = 41, |
| }} |
| STRUCT!{struct WINSTATIONCREATE { |
| Bitfields: ULONG, |
| MaxInstanceCount: ULONG, |
| }} |
| BITFIELD!{WINSTATIONCREATE Bitfields: ULONG [ |
| fEnableWinStation set_fEnableWinStation[0..1], |
| ]} |
| pub type PWINSTATIONCREATE = *mut WINSTATIONCREATE; |
| STRUCT!{struct WINSTACONFIGWIRE { |
| Comment: [WCHAR; 61], |
| OEMId: [CHAR; 4], |
| UserConfig: VARDATA_WIRE, |
| NewFields: VARDATA_WIRE, |
| }} |
| pub type PWINSTACONFIGWIRE = *mut WINSTACONFIGWIRE; |
| ENUM!{enum CALLBACKCLASS { |
| Callback_Disable = 0, |
| Callback_Roving = 1, |
| Callback_Fixed = 2, |
| }} |
| ENUM!{enum SHADOWCLASS { |
| Shadow_Disable = 0, |
| Shadow_EnableInputNotify = 1, |
| Shadow_EnableInputNoNotify = 2, |
| Shadow_EnableNoInputNotify = 3, |
| Shadow_EnableNoInputNoNotify = 4, |
| }} |
| STRUCT!{struct USERCONFIG { |
| Bitfields: ULONG, |
| Bitfields2: ULONG, |
| UserName: [WCHAR; USERNAME_LENGTH + 1], |
| Domain: [WCHAR; DOMAIN_LENGTH + 1], |
| Password: [WCHAR; PASSWORD_LENGTH + 1], |
| WorkDirectory: [WCHAR; DIRECTORY_LENGTH + 1], |
| InitialProgram: [WCHAR; INITIALPROGRAM_LENGTH + 1], |
| CallbackNumber: [WCHAR; CALLBACK_LENGTH + 1], |
| Callback: CALLBACKCLASS, |
| Shadow: SHADOWCLASS, |
| MaxConnectionTime: ULONG, |
| MaxDisconnectionTime: ULONG, |
| MaxIdleTime: ULONG, |
| KeyboardLayout: ULONG, |
| MinEncryptionLevel: BYTE, |
| NWLogonServer: [WCHAR; NASIFILESERVER_LENGTH + 1], |
| PublishedName: [WCHAR; MAX_BR_NAME], |
| WFProfilePath: [WCHAR; DIRECTORY_LENGTH + 1], |
| WFHomeDir: [WCHAR; DIRECTORY_LENGTH + 1], |
| WFHomeDirDrive: [WCHAR; 4], |
| }} |
| BITFIELD!{USERCONFIG Bitfields: ULONG [ |
| fInheritAutoLogon set_fInheritAutoLogon[0..1], |
| fInheritResetBroken set_fInheritResetBroken[1..2], |
| fInheritReconnectSame set_fInheritReconnectSame[2..3], |
| fInheritInitialProgram set_fInheritInitialProgram[3..4], |
| fInheritCallback set_fInheritCallback[4..5], |
| fInheritCallbackNumber set_fInheritCallbackNumber[5..6], |
| fInheritShadow set_fInheritShadow[6..7], |
| fInheritMaxSessionTime set_fInheritMaxSessionTime[7..8], |
| fInheritMaxDisconnectionTime set_fInheritMaxDisconnectionTime[8..9], |
| fInheritMaxIdleTime set_fInheritMaxIdleTime[9..10], |
| fInheritAutoClient set_fInheritAutoClient[10..11], |
| fInheritSecurity set_fInheritSecurity[11..12], |
| fPromptForPassword set_fPromptForPassword[12..13], |
| fResetBroken set_fResetBroken[13..14], |
| fReconnectSame set_fReconnectSame[14..15], |
| fLogonDisabled set_fLogonDisabled[15..16], |
| fWallPaperDisabled set_fWallPaperDisabled[16..17], |
| fAutoClientDrives set_fAutoClientDrives[17..18], |
| fAutoClientLpts set_fAutoClientLpts[18..19], |
| fForceClientLptDef set_fForceClientLptDef[19..20], |
| fRequireEncryption set_fRequireEncryption[20..21], |
| fDisableEncryption set_fDisableEncryption[21..22], |
| fUnused1 set_fUnused1[22..23], |
| fHomeDirectoryMapRoot set_fHomeDirectoryMapRoot[23..24], |
| fUseDefaultGina set_fUseDefaultGina[24..25], |
| fCursorBlinkDisabled set_fCursorBlinkDisabled[25..26], |
| fPublishedApp set_fPublishedApp[26..27], |
| fHideTitleBar set_fHideTitleBar[27..28], |
| fMaximize set_fMaximize[28..29], |
| fDisableCpm set_fDisableCpm[29..30], |
| fDisableCdm set_fDisableCdm[30..31], |
| fDisableCcm set_fDisableCcm[31..32], |
| ]} |
| BITFIELD!{USERCONFIG Bitfields2: ULONG [ |
| fDisableLPT set_fDisableLPT[0..1], |
| fDisableClip set_fDisableClip[1..2], |
| fDisableExe set_fDisableExe[2..3], |
| fDisableCam set_fDisableCam[3..4], |
| fDisableAutoReconnect set_fDisableAutoReconnect[4..5], |
| ColorDepth set_ColorDepth[5..6], |
| fInheritColorDepth set_fInheritColorDepth[6..7], |
| fErrorInvalidProfile set_fErrorInvalidProfile[7..8], |
| fPasswordIsScPin set_fPasswordIsScPin[8..9], |
| fDisablePNPRedir set_fDisablePNPRedir[9..10], |
| ]} |
| pub type PUSERCONFIG = *mut USERCONFIG; |
| ENUM!{enum SDCLASS { |
| SdNone = 0, |
| SdConsole = 1, |
| SdNetwork = 2, |
| SdAsync = 3, |
| SdOemTransport = 4, |
| }} |
| pub type DEVICENAME = [WCHAR; DEVICENAME_LENGTH + 1]; |
| pub type MODEMNAME = [WCHAR; MODEMNAME_LENGTH + 1]; |
| pub type NASISPECIFICNAME = [WCHAR; NASISPECIFICNAME_LENGTH + 1]; |
| pub type NASIUSERNAME = [WCHAR; NASIUSERNAME_LENGTH + 1]; |
| pub type NASIPASSWORD = [WCHAR; NASIPASSWORD_LENGTH + 1]; |
| pub type NASISESIONNAME = [WCHAR; NASISESSIONNAME_LENGTH + 1]; |
| pub type NASIFILESERVER = [WCHAR; NASIFILESERVER_LENGTH + 1]; |
| pub type WDNAME = [WCHAR; WDNAME_LENGTH + 1]; |
| pub type WDPREFIX = [WCHAR; WDPREFIX_LENGTH + 1]; |
| pub type CDNAME = [WCHAR; CDNAME_LENGTH + 1]; |
| pub type DLLNAME = [WCHAR; DLLNAME_LENGTH + 1]; |
| pub type PDNAME = [WCHAR; PDNAME_LENGTH + 1]; |
| STRUCT!{struct NETWORKCONFIG { |
| LanAdapter: LONG, |
| NetworkName: DEVICENAME, |
| Flags: ULONG, |
| }} |
| pub type PNETWORKCONFIG = *mut NETWORKCONFIG; |
| ENUM!{enum FLOWCONTROLCLASS { |
| FlowControl_None = 0, |
| FlowControl_Hardware = 1, |
| FlowControl_Software = 2, |
| }} |
| ENUM!{enum RECEIVEFLOWCONTROLCLASS { |
| ReceiveFlowControl_None = 0, |
| ReceiveFlowControl_RTS = 1, |
| ReceiveFlowControl_DTR = 2, |
| }} |
| ENUM!{enum TRANSMITFLOWCONTROLCLASS { |
| TransmitFlowControl_None = 0, |
| TransmitFlowControl_CTS = 1, |
| TransmitFlowControl_DSR = 2, |
| }} |
| ENUM!{enum ASYNCCONNECTCLASS { |
| Connect_CTS = 0, |
| Connect_DSR = 1, |
| Connect_RI = 2, |
| Connect_DCD = 3, |
| Connect_FirstChar = 4, |
| Connect_Perm = 5, |
| }} |
| STRUCT!{struct FLOWCONTROLCONFIG { |
| Bitfields: ULONG, |
| XonChar: CHAR, |
| XoffChar: CHAR, |
| Type: FLOWCONTROLCLASS, |
| HardwareReceive: RECEIVEFLOWCONTROLCLASS, |
| HardwareTransmit: TRANSMITFLOWCONTROLCLASS, |
| }} |
| BITFIELD!{FLOWCONTROLCONFIG Bitfields: ULONG [ |
| fEnableSoftwareTx set_fEnableSoftwareTx[0..1], |
| fEnableSoftwareRx set_fEnableSoftwareRx[1..2], |
| fEnableDTR set_fEnableDTR[2..3], |
| fEnableRTS set_fEnableRTS[3..4], |
| ]} |
| pub type PFLOWCONTROLCONFIG = *mut FLOWCONTROLCONFIG; |
| STRUCT!{struct CONNECTCONFIG { |
| Type: ASYNCCONNECTCLASS, |
| Bitfields: ULONG, |
| }} |
| BITFIELD!{CONNECTCONFIG Bitfields: ULONG [ |
| fEnableBreakDisconnect set_fEnableBreakDisconnect[0..1], |
| ]} |
| pub type PCONNECTCONFIG = *mut CONNECTCONFIG; |
| STRUCT!{struct ASYNCCONFIG { |
| DeviceName: DEVICENAME, |
| ModemName: MODEMNAME, |
| BaudRate: ULONG, |
| Parity: ULONG, |
| StopBits: ULONG, |
| ByteSize: ULONG, |
| Bitfields: ULONG, |
| FlowControl: FLOWCONTROLCONFIG, |
| Connect: CONNECTCONFIG, |
| }} |
| BITFIELD!{ASYNCCONFIG Bitfields: ULONG [ |
| fEnableDsrSensitivity set_fEnableDsrSensitivity[0..1], |
| fConnectionDriver set_fConnectionDriver[1..2], |
| ]} |
| pub type PASYNCCONFIG = *mut ASYNCCONFIG; |
| STRUCT!{struct NASICONFIG { |
| SpecificName: NASISPECIFICNAME, |
| UserName: NASIUSERNAME, |
| PassWord: NASIPASSWORD, |
| SessionName: NASISESIONNAME, |
| FileServer: NASIFILESERVER, |
| GlobalSession: BOOLEAN, |
| }} |
| pub type PNASICONFIG = *mut NASICONFIG; |
| STRUCT!{struct OEMTDCONFIG { |
| Adapter: LONG, |
| DeviceName: DEVICENAME, |
| Flags: ULONG, |
| }} |
| pub type POEMTDCONFIG = *mut OEMTDCONFIG; |
| UNION!{union PDPARAMS_u { |
| Network: NETWORKCONFIG, |
| Async: ASYNCCONFIG, |
| Nasi: NASICONFIG, |
| OemTd: OEMTDCONFIG, |
| }} |
| STRUCT!{struct PDPARAMS { |
| SdClass: SDCLASS, |
| u: PDPARAMS_u, |
| }} |
| pub type PPDPARAMS = *mut PDPARAMS; |
| STRUCT!{struct WDCONFIG { |
| WdName: WDNAME, |
| WdDLL: DLLNAME, |
| WsxDLL: DLLNAME, |
| WdFlag: ULONG, |
| WdInputBufferLength: ULONG, |
| CfgDLL: DLLNAME, |
| WdPrefix: WDPREFIX, |
| }} |
| pub type PWDCONFIG = *mut WDCONFIG; |
| STRUCT!{struct PDCONFIG2 { |
| PdName: PDNAME, |
| SdClass: SDCLASS, |
| PdDLL: DLLNAME, |
| PdFlag: ULONG, |
| OutBufLength: ULONG, |
| OutBufCount: ULONG, |
| OutBufDelay: ULONG, |
| InteractiveDelay: ULONG, |
| PortNumber: ULONG, |
| KeepAliveTimeout: ULONG, |
| }} |
| pub type PPDCONFIG2 = *mut PDCONFIG2; |
| STRUCT!{struct WINSTATIONCLIENT { |
| Bitfields: ULONG, |
| ClientName: [WCHAR; CLIENTNAME_LENGTH + 1], |
| Domain: [WCHAR; DOMAIN_LENGTH + 1], |
| UserName: [WCHAR; USERNAME_LENGTH + 1], |
| Password: [WCHAR; PASSWORD_LENGTH + 1], |
| WorkDirectory: [WCHAR; DIRECTORY_LENGTH + 1], |
| InitialProgram: [WCHAR; INITIALPROGRAM_LENGTH + 1], |
| SerialNumber: ULONG, |
| EncryptionLevel: BYTE, |
| ClientAddressFamily: ULONG, |
| ClientAddress: [WCHAR; CLIENTADDRESS_LENGTH + 1], |
| HRes: USHORT, |
| VRes: USHORT, |
| ColorDepth: USHORT, |
| ProtocolType: USHORT, |
| KeyboardLayout: ULONG, |
| KeyboardType: ULONG, |
| KeyboardSubType: ULONG, |
| KeyboardFunctionKey: ULONG, |
| ImeFileName: [WCHAR; IMEFILENAME_LENGTH + 1], |
| ClientDirectory: [WCHAR; DIRECTORY_LENGTH + 1], |
| ClientLicense: [WCHAR; CLIENTLICENSE_LENGTH + 1], |
| ClientModem: [WCHAR; CLIENTMODEM_LENGTH + 1], |
| ClientBuildNumber: ULONG, |
| ClientHardwareId: ULONG, |
| ClientProductId: USHORT, |
| OutBufCountHost: USHORT, |
| OutBufCountClient: USHORT, |
| OutBufLength: USHORT, |
| AudioDriverName: [WCHAR; 9], |
| ClientTimeZone: TS_TIME_ZONE_INFORMATION, |
| ClientSessionId: ULONG, |
| ClientDigProductId: [WCHAR; CLIENT_PRODUCT_ID_LENGTH], |
| PerformanceFlags: ULONG, |
| ActiveInputLocale: ULONG, |
| }} |
| BITFIELD!{WINSTATIONCLIENT Bitfields: ULONG [ |
| fTextOnly set_fTextOnly[0..1], |
| fDisableCtrlAltDel set_fDisableCtrlAltDel[1..2], |
| fMouse set_fMouse[2..3], |
| fDoubleClickDetect set_fDoubleClickDetect[3..4], |
| fINetClient set_fINetClient[4..5], |
| fPromptForPassword set_fPromptForPassword[5..6], |
| fMaximizeShell set_fMaximizeShell[6..7], |
| fEnableWindowsKey set_fEnableWindowsKey[7..8], |
| fRemoteConsoleAudio set_fRemoteConsoleAudio[8..9], |
| fPasswordIsScPin set_fPasswordIsScPin[9..10], |
| fNoAudioPlayback set_fNoAudioPlayback[10..11], |
| fUsingSavedCreds set_fUsingSavedCreds[11..12], |
| ]} |
| pub type PWINSTATIONCLIENT = *mut WINSTATIONCLIENT; |
| STRUCT!{struct TSHARE_COUNTERS { |
| Reserved: ULONG, |
| }} |
| pub type PTSHARE_COUNTERS = *mut TSHARE_COUNTERS; |
| UNION!{union PROTOCOLCOUNTERS_Specific { |
| TShareCounters: TSHARE_COUNTERS, |
| Reserved: [ULONG; 100], |
| }} |
| STRUCT!{struct PROTOCOLCOUNTERS { |
| WdBytes: ULONG, |
| WdFrames: ULONG, |
| WaitForOutBuf: ULONG, |
| Frames: ULONG, |
| Bytes: ULONG, |
| CompressedBytes: ULONG, |
| CompressFlushes: ULONG, |
| Errors: ULONG, |
| Timeouts: ULONG, |
| AsyncFramingError: ULONG, |
| AsyncOverrunError: ULONG, |
| AsyncOverflowError: ULONG, |
| AsyncParityError: ULONG, |
| TdErrors: ULONG, |
| ProtocolType: USHORT, |
| Length: USHORT, |
| Specific: PROTOCOLCOUNTERS_Specific, |
| }} |
| pub type PPROTOCOLCOUNTERS = *mut PROTOCOLCOUNTERS; |
| STRUCT!{struct THINWIRECACHE { |
| CacheReads: ULONG, |
| CacheHits: ULONG, |
| }} |
| pub type PTHINWIRECACHE = *mut THINWIRECACHE; |
| pub const MAX_THINWIRECACHE: usize = 4; |
| STRUCT!{struct RESERVED_CACHE { |
| ThinWireCache: [THINWIRECACHE; MAX_THINWIRECACHE], |
| }} |
| pub type PRESERVED_CACHE = *mut RESERVED_CACHE; |
| STRUCT!{struct TSHARE_CACHE { |
| Reserved: ULONG, |
| }} |
| pub type PTSHARE_CACHE = *mut TSHARE_CACHE; |
| UNION!{union CACHE_STATISTICS_Specific { |
| ReservedCacheStats: RESERVED_CACHE, |
| TShareCacheStats: TSHARE_CACHE, |
| Reserved: [ULONG; 20], |
| }} |
| STRUCT!{struct CACHE_STATISTICS { |
| ProtocolType: USHORT, |
| Length: USHORT, |
| Specific: CACHE_STATISTICS_Specific, |
| }} |
| pub type PCACHE_STATISTICS = *mut CACHE_STATISTICS; |
| STRUCT!{struct PROTOCOLSTATUS { |
| Output: PROTOCOLCOUNTERS, |
| Input: PROTOCOLCOUNTERS, |
| Cache: CACHE_STATISTICS, |
| AsyncSignal: ULONG, |
| AsyncSignalMask: ULONG, |
| }} |
| pub type PPROTOCOLSTATUS = *mut PROTOCOLSTATUS; |
| STRUCT!{struct WINSTATIONINFORMATION { |
| ConnectState: WINSTATIONSTATECLASS, |
| WinStationName: WINSTATIONNAME, |
| LogonId: ULONG, |
| ConnectTime: LARGE_INTEGER, |
| DisconnectTime: LARGE_INTEGER, |
| LastInputTime: LARGE_INTEGER, |
| LogonTime: LARGE_INTEGER, |
| Status: PROTOCOLSTATUS, |
| Domain: [WCHAR; DOMAIN_LENGTH + 1], |
| UserName: [WCHAR; USERNAME_LENGTH + 1], |
| CurrentTime: LARGE_INTEGER, |
| }} |
| pub type PWINSTATIONINFORMATION = *mut WINSTATIONINFORMATION; |
| STRUCT!{struct WINSTATIONUSERTOKEN { |
| ProcessId: HANDLE, |
| ThreadId: HANDLE, |
| UserToken: HANDLE, |
| }} |
| pub type PWINSTATIONUSERTOKEN = *mut WINSTATIONUSERTOKEN; |
| STRUCT!{struct WINSTATIONVIDEODATA { |
| HResolution: USHORT, |
| VResolution: USHORT, |
| fColorDepth: USHORT, |
| }} |
| pub type PWINSTATIONVIDEODATA = *mut WINSTATIONVIDEODATA; |
| ENUM!{enum CDCLASS { |
| CdNone = 0, |
| CdModem = 1, |
| CdClass_Maximum = 2, |
| }} |
| STRUCT!{struct CDCONFIG { |
| CdClass: CDCLASS, |
| CdName: CDNAME, |
| CdDLL: DLLNAME, |
| CdFlag: ULONG, |
| }} |
| pub type PCDCONFIG = *mut CDCONFIG; |
| pub type CLIENTDATANAME = [CHAR; CLIENTDATANAME_LENGTH + 1]; |
| pub type PCLIENTDATANAME = *mut CHAR; |
| STRUCT!{struct WINSTATIONCLIENTDATA { |
| DataName: CLIENTDATANAME, |
| fUnicodeData: BOOLEAN, |
| }} |
| pub type PWINSTATIONCLIENTDATA = *mut WINSTATIONCLIENTDATA; |
| ENUM!{enum LOADFACTORTYPE { |
| ErrorConstraint = 0, |
| PagedPoolConstraint = 1, |
| NonPagedPoolConstraint = 2, |
| AvailablePagesConstraint = 3, |
| SystemPtesConstraint = 4, |
| CPUConstraint = 5, |
| }} |
| STRUCT!{struct WINSTATIONLOADINDICATORDATA { |
| RemainingSessionCapacity: ULONG, |
| LoadFactor: LOADFACTORTYPE, |
| TotalSessions: ULONG, |
| DisconnectedSessions: ULONG, |
| IdleCPU: LARGE_INTEGER, |
| TotalCPU: LARGE_INTEGER, |
| RawSessionCapacity: ULONG, |
| reserved: [ULONG; 9], |
| }} |
| pub type PWINSTATIONLOADINDICATORDATA = *mut WINSTATIONLOADINDICATORDATA; |
| ENUM!{enum SHADOWSTATECLASS { |
| State_NoShadow = 0, |
| State_Shadowing = 1, |
| State_Shadowed = 2, |
| }} |
| STRUCT!{struct WINSTATIONSHADOW { |
| ShadowState: SHADOWSTATECLASS, |
| ShadowClass: SHADOWCLASS, |
| SessionId: ULONG, |
| ProtocolType: ULONG, |
| }} |
| pub type PWINSTATIONSHADOW = *mut WINSTATIONSHADOW; |
| STRUCT!{struct WINSTATIONPRODID { |
| DigProductId: [WCHAR; CLIENT_PRODUCT_ID_LENGTH], |
| ClientDigProductId: [WCHAR; CLIENT_PRODUCT_ID_LENGTH], |
| OuterMostDigProductId: [WCHAR; CLIENT_PRODUCT_ID_LENGTH], |
| CurrentSessionId: ULONG, |
| ClientSessionId: ULONG, |
| OuterMostSessionId: ULONG, |
| }} |
| pub type PWINSTATIONPRODID = *mut WINSTATIONPRODID; |
| STRUCT!{struct WINSTATIONREMOTEADDRESS_u_ipv4 { |
| sin_port: USHORT, |
| sin_addr: ULONG, |
| sin_zero: [UCHAR; 8], |
| }} |
| STRUCT!{struct WINSTATIONREMOTEADDRESS_u_ipv6 { |
| sin6_port: USHORT, |
| sin6_flowinfo: ULONG, |
| sin6_addr: [USHORT; 8], |
| sin6_scope_id: ULONG, |
| }} |
| UNION!{union WINSTATIONREMOTEADDRESS_u { |
| ipv4: WINSTATIONREMOTEADDRESS_u_ipv4, |
| ipv6: WINSTATIONREMOTEADDRESS_u_ipv6, |
| }} |
| STRUCT!{struct WINSTATIONREMOTEADDRESS { |
| sin_family: USHORT, |
| u: WINSTATIONREMOTEADDRESS_u, |
| }} |
| pub type PWINSTATIONREMOTEADDRESS = *mut WINSTATIONREMOTEADDRESS; |
| STRUCT!{struct WINSTATIONINFORMATIONEX_LEVEL1 { |
| SessionId: ULONG, |
| SessionState: WINSTATIONSTATECLASS, |
| SessionFlags: LONG, |
| WinStationName: WINSTATIONNAME, |
| UserName: [WCHAR; USERNAME_LENGTH + 1], |
| DomainName: [WCHAR; DOMAIN_LENGTH + 1], |
| LogonTime: LARGE_INTEGER, |
| ConnectTime: LARGE_INTEGER, |
| DisconnectTime: LARGE_INTEGER, |
| LastInputTime: LARGE_INTEGER, |
| CurrentTime: LARGE_INTEGER, |
| ProtocolStatus: PROTOCOLSTATUS, |
| }} |
| pub type PWINSTATIONINFORMATIONEX_LEVEL1 = *mut WINSTATIONINFORMATIONEX_LEVEL1; |
| STRUCT!{struct WINSTATIONINFORMATIONEX_LEVEL2 { |
| SessionId: ULONG, |
| SessionState: WINSTATIONSTATECLASS, |
| SessionFlags: LONG, |
| WinStationName: WINSTATIONNAME, |
| SamCompatibleUserName: [WCHAR; USERNAME_LENGTH + 1], |
| SamCompatibleDomainName: [WCHAR; DOMAIN_LENGTH + 1], |
| LogonTime: LARGE_INTEGER, |
| ConnectTime: LARGE_INTEGER, |
| DisconnectTime: LARGE_INTEGER, |
| LastInputTime: LARGE_INTEGER, |
| CurrentTime: LARGE_INTEGER, |
| ProtocolStatus: PROTOCOLSTATUS, |
| UserName: [WCHAR; 257], |
| DomainName: [WCHAR; 256], |
| }} |
| pub type PWINSTATIONINFORMATIONEX_LEVEL2 = *mut WINSTATIONINFORMATIONEX_LEVEL2; |
| UNION!{union WINSTATIONINFORMATIONEX_LEVEL { |
| WinStationInfoExLevel1: WINSTATIONINFORMATIONEX_LEVEL1, |
| WinStationInfoExLevel2: WINSTATIONINFORMATIONEX_LEVEL2, |
| }} |
| pub type PWINSTATIONINFORMATIONEX_LEVEL = *mut WINSTATIONINFORMATIONEX_LEVEL; |
| STRUCT!{struct WINSTATIONINFORMATIONEX { |
| Level: ULONG, |
| Data: WINSTATIONINFORMATIONEX_LEVEL, |
| }} |
| pub type PWINSTATIONINFORMATIONEX = *mut WINSTATIONINFORMATIONEX; |
| pub const TS_PROCESS_INFO_MAGIC_NT4: u32 = 0x23495452; |
| STRUCT!{struct TS_PROCESS_INFORMATION_NT4 { |
| MagicNumber: ULONG, |
| LogonId: ULONG, |
| ProcessSid: PVOID, |
| Pad: ULONG, |
| }} |
| pub type PTS_PROCESS_INFORMATION_NT4 = *mut TS_PROCESS_INFORMATION_NT4; |
| pub const SIZEOF_TS4_SYSTEM_THREAD_INFORMATION: u32 = 64; |
| pub const SIZEOF_TS4_SYSTEM_PROCESS_INFORMATION: u32 = 136; |
| STRUCT!{struct TS_SYS_PROCESS_INFORMATION { |
| NextEntryOffset: ULONG, |
| NumberOfThreads: ULONG, |
| SpareLi1: LARGE_INTEGER, |
| SpareLi2: LARGE_INTEGER, |
| SpareLi3: LARGE_INTEGER, |
| CreateTime: LARGE_INTEGER, |
| UserTime: LARGE_INTEGER, |
| KernelTime: LARGE_INTEGER, |
| ImageName: UNICODE_STRING, |
| BasePriority: LONG, |
| UniqueProcessId: ULONG, |
| InheritedFromUniqueProcessId: ULONG, |
| HandleCount: ULONG, |
| SessionId: ULONG, |
| SpareUl3: ULONG, |
| PeakVirtualSize: SIZE_T, |
| VirtualSize: SIZE_T, |
| PageFaultCount: ULONG, |
| PeakWorkingSetSize: ULONG, |
| WorkingSetSize: ULONG, |
| QuotaPeakPagedPoolUsage: SIZE_T, |
| QuotaPagedPoolUsage: SIZE_T, |
| QuotaPeakNonPagedPoolUsage: SIZE_T, |
| QuotaNonPagedPoolUsage: SIZE_T, |
| PagefileUsage: SIZE_T, |
| PeakPagefileUsage: SIZE_T, |
| PrivatePageCount: SIZE_T, |
| }} |
| pub type PTS_SYS_PROCESS_INFORMATION = *mut TS_SYS_PROCESS_INFORMATION; |
| STRUCT!{struct TS_ALL_PROCESSES_INFO { |
| pTsProcessInfo: PTS_SYS_PROCESS_INFORMATION, |
| SizeOfSid: ULONG, |
| pSid: PSID, |
| }} |
| pub type PTS_ALL_PROCESSES_INFO = *mut TS_ALL_PROCESSES_INFO; |
| STRUCT!{struct TS_COUNTER_HEADER { |
| dwCounterID: DWORD, |
| bResult: BOOLEAN, |
| }} |
| pub type PTS_COUNTER_HEADER = *mut TS_COUNTER_HEADER; |
| STRUCT!{struct TS_COUNTER { |
| CounterHead: TS_COUNTER_HEADER, |
| dwValue: DWORD, |
| StartTime: LARGE_INTEGER, |
| }} |
| pub type PTS_COUNTER = *mut TS_COUNTER; |
| pub const WSD_LOGOFF: ULONG = 0x1; |
| pub const WSD_SHUTDOWN: ULONG = 0x2; |
| pub const WSD_REBOOT: ULONG = 0x4; |
| pub const WSD_POWEROFF: ULONG = 0x8; |
| pub const WEVENT_NONE: ULONG = 0x0; |
| pub const WEVENT_CREATE: ULONG = 0x1; |
| pub const WEVENT_DELETE: ULONG = 0x2; |
| pub const WEVENT_RENAME: ULONG = 0x4; |
| pub const WEVENT_CONNECT: ULONG = 0x8; |
| pub const WEVENT_DISCONNECT: ULONG = 0x10; |
| pub const WEVENT_LOGON: ULONG = 0x20; |
| pub const WEVENT_LOGOFF: ULONG = 0x40; |
| pub const WEVENT_STATECHANGE: ULONG = 0x80; |
| pub const WEVENT_LICENSE: ULONG = 0x100; |
| pub const WEVENT_ALL: ULONG = 0x7fffffff; |
| pub const WEVENT_FLUSH: ULONG = 0x80000000; |
| pub const KBDSHIFT: USHORT = 0x1; |
| pub const KBDCTRL: USHORT = 0x2; |
| pub const KBDALT: USHORT = 0x4; |
| pub const WNOTIFY_ALL_SESSIONS: ULONG = 0x1; |
| pub const LOGONID_CURRENT: i32 = -1; |
| pub const SERVERNAME_CURRENT: PWSTR = null_mut(); |
| EXTERN!{extern "system" { |
| fn WinStationFreeMemory( |
| Buffer: PVOID, |
| ) -> BOOLEAN; |
| fn WinStationOpenServerW( |
| ServerName: PWSTR, |
| ) -> HANDLE; |
| fn WinStationCloseServer( |
| ServerHandle: HANDLE, |
| ) -> BOOLEAN; |
| fn WinStationServerPing( |
| ServerHandle: HANDLE, |
| ) -> BOOLEAN; |
| fn WinStationGetTermSrvCountersValue( |
| ServerHandle: HANDLE, |
| Count: ULONG, |
| Counters: PTS_COUNTER, |
| ) -> BOOLEAN; |
| fn WinStationShutdownSystem( |
| ServerHandle: HANDLE, |
| ShutdownFlags: ULONG, |
| ) -> BOOLEAN; |
| fn WinStationWaitSystemEvent( |
| ServerHandle: HANDLE, |
| EventMask: ULONG, |
| EventFlags: PULONG, |
| ) -> BOOLEAN; |
| fn WinStationRegisterConsoleNotification( |
| ServerHandle: HANDLE, |
| WindowHandle: HWND, |
| Flags: ULONG, |
| ) -> BOOLEAN; |
| fn WinStationUnRegisterConsoleNotification( |
| ServerHandle: HANDLE, |
| WindowHandle: HWND, |
| ) -> BOOLEAN; |
| fn WinStationEnumerateW( |
| ServerHandle: HANDLE, |
| SessionIds: *mut PSESSIONIDW, |
| Count: PULONG, |
| ) -> BOOLEAN; |
| fn WinStationQueryInformationW( |
| ServerHandle: HANDLE, |
| SessionId: ULONG, |
| WinStationInformationClass: WINSTATIONINFOCLASS, |
| pWinStationInformation: PVOID, |
| WinStationInformationLength: ULONG, |
| pReturnLength: PULONG, |
| ) -> BOOLEAN; |
| fn WinStationSetInformationW( |
| ServerHandle: HANDLE, |
| SessionId: ULONG, |
| WinStationInformationClass: WINSTATIONINFOCLASS, |
| pWinStationInformation: PVOID, |
| WinStationInformationLength: ULONG, |
| ) -> BOOLEAN; |
| fn WinStationNameFromLogonIdW( |
| ServerHandle: HANDLE, |
| SessionId: ULONG, |
| pWinStationName: PWSTR, |
| ) -> BOOLEAN; |
| fn WinStationSendMessageW( |
| ServerHandle: HANDLE, |
| SessionId: ULONG, |
| Title: PWSTR, |
| TitleLength: ULONG, |
| Message: PWSTR, |
| MessageLength: ULONG, |
| Style: ULONG, |
| Timeout: ULONG, |
| Response: PULONG, |
| DoNotWait: BOOLEAN, |
| ) -> BOOLEAN; |
| fn WinStationConnectW( |
| ServerHandle: HANDLE, |
| SessionId: ULONG, |
| TargetSessionId: ULONG, |
| pPassword: PWSTR, |
| bWait: BOOLEAN, |
| ) -> BOOLEAN; |
| fn WinStationDisconnect( |
| ServerHandle: HANDLE, |
| SessionId: ULONG, |
| bWait: BOOLEAN, |
| ) -> BOOLEAN; |
| fn WinStationReset( |
| ServerHandle: HANDLE, |
| SessionId: ULONG, |
| bWait: BOOLEAN, |
| ) -> BOOLEAN; |
| fn WinStationShadow( |
| ServerHandle: HANDLE, |
| TargetServerName: PWSTR, |
| TargetSessionId: ULONG, |
| HotKeyVk: UCHAR, |
| HotkeyModifiers: USHORT, |
| ) -> BOOLEAN; |
| fn WinStationShadowStop( |
| ServerHandle: HANDLE, |
| SessionId: ULONG, |
| bWait: BOOLEAN, |
| ) -> BOOLEAN; |
| fn WinStationEnumerateProcesses( |
| ServerHandle: HANDLE, |
| Processes: *mut PVOID, |
| ) -> BOOLEAN; |
| fn WinStationGetAllProcesses( |
| ServerHandle: HANDLE, |
| Level: ULONG, |
| NumberOfProcesses: PULONG, |
| Processes: *mut PTS_ALL_PROCESSES_INFO, |
| ) -> BOOLEAN; |
| fn WinStationFreeGAPMemory( |
| Level: ULONG, |
| Processes: PTS_ALL_PROCESSES_INFO, |
| NumberOfProcesses: ULONG, |
| ) -> BOOLEAN; |
| fn WinStationTerminateProcess( |
| ServerHandle: HANDLE, |
| ProcessId: ULONG, |
| ExitCode: ULONG, |
| ) -> BOOLEAN; |
| fn WinStationGetProcessSid( |
| ServerHandle: HANDLE, |
| ProcessId: ULONG, |
| ProcessStartTime: FILETIME, |
| pProcessUserSid: PVOID, |
| dwSidSize: PULONG, |
| ) -> BOOLEAN; |
| fn WinStationSwitchToServicesSession() -> BOOLEAN; |
| fn WinStationRevertFromServicesSession() -> BOOLEAN; |
| fn _WinStationWaitForConnect() -> BOOLEAN; |
| }} |