/*************************************************************************** * * WINSTA.H * * This module contains external window station defines and structures * * Copyright Microsoft Corporation, 1998 * * ****************************************************************************/ #ifndef _INC_WINSTAH #define _INC_WINSTAH #ifdef __cplusplus extern "C" { #endif #ifndef WINAPI #define WINAPI __stdcall #endif #ifndef BYTE #define BYTE unsigned char #endif #include #include /*********** * Defines ***********/ #define PROTOCOL_DISCONNECT 0xffff // disconnected session. #define PROTOCOL_CONSOLE 0 // local console #define PROTOCOL_ICA 1 // ICA Protocol #define PROTOCOL_TSHARE 2 // RDP Protocol (old name T.Share) #define PROTOCOL_RDP 2 // RDP protocol #define PDNAME_LENGTH 32 #define WDNAME_LENGTH 32 #define CDNAME_LENGTH 32 #define DEVICENAME_LENGTH 128 #define MODEMNAME_LENGTH DEVICENAME_LENGTH #define CALLBACK_LENGTH 50 #define LICENSE_PASSWORD_LENGTH 16 #define DLLNAME_LENGTH 32 #define PRINTERNAME_LENGTH 32 #define WINSTATIONCOMMENT_LENGTH 60 #define APPSERVERNAME_LENGTH 17 #define WDPREFIX_LENGTH 12 #define CLIENT_PRODUCT_ID_LENGTH 32 #define NASISPECIFICNAME_LENGTH 14 #define NASIUSERNAME_LENGTH 47 #define NASIPASSWORD_LENGTH 24 #define NASISESSIONNAME_LENGTH 16 #define NASIFILESERVER_LENGTH 47 #define LOGONID_CURRENT ((ULONG)-1) #define LOGONID_NONE ((ULONG)-2) #define SERVERNAME_CURRENT ((HANDLE)NULL) #define MAX_PDCONFIG 10 // maximum number of PDs per WinStation #define MAX_UI_MODULES 5 // maximum client user interface modules #define PSZ_ANONYMOUS TEXT("Anonymous") #define WINFRAME_SOFTKEY_CLASS L"WinFrameSoftkey" #define WINFRAME_SOFTKEY_APPLICATION L"wfskey.exe" #define OEM_ID_LENGTH 3 // TermSrv Counters #define TERMSRV_TOTAL_SESSIONS 1 // total number of sessions ever connected #define TERMSRV_DISC_SESSIONS 2 // total number of disconnected sessions #define TERMSRV_RECON_SESSIONS 3 // total number of reconnected sessions #define TERMSRV_CURRENT_ACTIVE_SESSIONS 4 // total of currently active sessions #define TERMSRV_CURRENT_DISC_SESSIONS 5 // total of currently disconnected sessions #define TERMSRV_PENDING_SESSIONS 6 // total number of Pending Sessions #define TERMSRV_SUCC_TOTAL_LOGONS 7 // total number of successful logons #define TERMSRV_SUCC_LOCAL_LOGONS 8 // total number of successful local logons #define TERMSRV_SUCC_REMOTE_LOGONS 9 // total number of successful remote logons #define TERMSRV_SUCC_SESSION0_LOGONS 10 // total number of successful session 0 logons // Color depth setting #define TS_CLIENT_COMPAT_BPP_SUPPORT 0x3e7 // decimal 999 #define TS_24BPP_SUPPORT 0x04 #define TS_16BPP_SUPPORT 0x03 #define TS_15BPP_SUPPORT 0x02 #define TS_8BPP_SUPPORT 0x01 /********************************* * WinStationOpen access values *********************************/ #define WINSTATION_QUERY 0x00000001 // WinStationQueryInformation() #define WINSTATION_SET 0x00000002 // WinStationSetInformation() #define WINSTATION_RESET 0x00000004 // WinStationReset() #define WINSTATION_VIRTUAL 0x00000008 // read/write direct data #define WINSTATION_SHADOW 0x00000010 // WinStationShadow() #define WINSTATION_LOGON 0x00000020 // logon to WinStation #define WINSTATION_LOGOFF 0x00000040 // WinStationLogoff() #define WINSTATION_MSG 0x00000080 // WinStationMsg() #define WINSTATION_CONNECT 0x00000100 // WinStationConnect() #define WINSTATION_DISCONNECT 0x00000200 // WinStationDisconnect() #define WINSTATION_GUEST_ACCESS (WINSTATION_LOGON) #define WINSTATION_CURRENT_GUEST_ACCESS (WINSTATION_VIRTUAL | WINSTATION_LOGOFF) #define WINSTATION_USER_ACCESS (WINSTATION_GUEST_ACCESS | \ WINSTATION_QUERY | WINSTATION_CONNECT ) #define WINSTATION_CURRENT_USER_ACCESS (WINSTATION_SET | WINSTATION_RESET \ WINSTATION_VIRTUAL | WINSTATION_LOGOFF \ WINSTATION_DISCONNECT) #define WINSTATION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | WINSTATION_QUERY | \ WINSTATION_SET | WINSTATION_RESET | \ WINSTATION_VIRTUAL | WINSTATION_SHADOW | \ WINSTATION_LOGON | \ WINSTATION_MSG | \ WINSTATION_CONNECT | WINSTATION_DISCONNECT) /************ * Typedefs ************/ #define LOGONIDW SESSIONIDW //externalized LogonID as SessionID in ctxapi.h #define PLOGONIDW PSESSIONIDW #define LOGONIDA SESSIONIDA #define PLOGONIDA PSESSIONIDA #ifdef UNICODE #define LOGONID LOGONIDW #define PLOGONID PLOGONIDW #else #define LOGONID LOGONIDA #define PLOGONID PLOGONIDA #endif /* UNICODE */ /*------------------------------------------------*/ typedef WCHAR PDNAMEW[ PDNAME_LENGTH + 1 ]; typedef WCHAR * PPDNAMEW; typedef CHAR PDNAMEA[ PDNAME_LENGTH + 1 ]; typedef CHAR * PPDNAMEA; #ifdef UNICODE #define PDNAME PDNAMEW #define PPDNAME PPDNAMEW #else #define PDNAME PDNAMEA #define PPDNAME PPDNAMEA #endif /* UNICODE */ /*------------------------------------------------*/ typedef WCHAR WDNAMEW[ WDNAME_LENGTH + 1 ]; typedef WCHAR * PWDNAMEW; typedef CHAR WDNAMEA[ WDNAME_LENGTH + 1 ]; typedef CHAR * PWDNAMEA; #ifdef UNICODE #define WDNAME WDNAMEW #define PWDNAME PWDNAMEW #else #define WDNAME WDNAMEA #define PWDNAME PWDNAMEA #endif /* UNICODE */ /*------------------------------------------------*/ typedef WCHAR CDNAMEW[ CDNAME_LENGTH + 1 ]; typedef WCHAR * PCDNAMEW; typedef CHAR CDNAMEA[ CDNAME_LENGTH + 1 ]; typedef CHAR * PCDNAMEA; #ifdef UNICODE #define CDNAME CDNAMEW #define PCDNAME PCDNAMEW #else #define CDNAME CDNAMEA #define PCDNAME PCDNAMEA #endif /* UNICODE */ /*------------------------------------------------*/ typedef WCHAR DEVICENAMEW[ DEVICENAME_LENGTH + 1 ]; typedef WCHAR * PDEVICENAMEW; typedef CHAR DEVICENAMEA[ DEVICENAME_LENGTH + 1 ]; typedef CHAR * PDEVICENAMEA; #ifdef UNICODE #define DEVICENAME DEVICENAMEW #define PDEVICENAME PDEVICENAMEW #else #define DEVICENAME DEVICENAMEA #define PDEVICENAME PDEVICENAMEA #endif /* UNICODE */ /*------------------------------------------------*/ typedef WCHAR MODEMNAMEW[ MODEMNAME_LENGTH + 1 ]; typedef WCHAR * PMODEMNAMEW; typedef CHAR MODEMNAMEA[ MODEMNAME_LENGTH + 1 ]; typedef CHAR * PMODEMNAMEA; #ifdef UNICODE #define MODEMNAME MODEMNAMEW #define PMODEMNAME PMODEMNAMEW #else #define MODEMNAME MODEMNAMEA #define PMODEMNAME PMODEMNAMEA #endif /* UNICODE */ /*------------------------------------------------*/ typedef WCHAR DLLNAMEW[ DLLNAME_LENGTH + 1 ]; typedef WCHAR * PDLLNAMEW; typedef CHAR DLLNAMEA[ DLLNAME_LENGTH + 1 ]; typedef CHAR * PDLLNAMEA; #ifdef UNICODE #define DLLNAME DLLNAMEW #define PDLLNAME PDLLNAMEW #else #define DLLNAME DLLNAMEA #define PDLLNAME PDLLNAMEA #endif /* UNICODE */ /*------------------------------------------------*/ typedef WCHAR PRINTERNAMEW[ PRINTERNAME_LENGTH + 1 ]; typedef WCHAR * PPRINTERNAMEW; typedef CHAR PRINTERNAMEA[ PRINTERNAME_LENGTH + 1 ]; typedef CHAR * PPRINTERNAMEA; #ifdef UNICODE #define PRINTERNAME PRINTERNAMEW #define PPRINTERNAME PPRINTERNAMEW #else #define PRINTERNAME PRINTERNAMEA #define PPRINTERNAME PPRINTERNAMEA #endif /* UNICODE */ /*------------------------------------------------*/ typedef WCHAR WDPREFIXW[ WDPREFIX_LENGTH + 1 ]; typedef WCHAR * PWDPREFIXW; typedef CHAR WDPREFIXA[ WDPREFIX_LENGTH + 1 ]; typedef CHAR * PWDPREFIXA; #ifdef UNICODE #define WDPREFIX WDPREFIXW #define PWDPREFIX PWDPREFIXW #else #define WDPREFIX WDPREFIXA #define PWDPREFIX PWDPREFIXA #endif /* UNICODE */ /*------------------------------------------------*/ #ifdef UNICODE #define NASISPECIFICNAME NASISPECIFICNAMEW #define PNASISPECIFICNAME PNASISPECIFICNAMEW #define NASIUSERNAME NASIUSERNAMEW #define PNASIUSERNAME PNASIUSERNAMEW #define NASIPASSWORD NASIPASSWORDW #define PNASIPASSWORD PNASIPASSWORDW #define NASISESSIONNAME NASISESSIONNAMEW #define PNASISESSIONNAME PNASISESSIONNAMEW #define NASIFILESERVER NASIFILESERVERW #define PNASIFILESERVER PNASIFILESERVERW #else #define NASISPECIFICNAME NASISPECIFICNAMEA #define PNASISPECIFICNAME PNASISPECIFICNAMEA #define NASIUSERNAME NASIUSERNAMEA #define PNASIUSERNAME PNASIUSERNAMEA #define NASIPASSWORD NASIPASSWORDA #define PNASIPASSWORD PNASIPASSWORDA #define NASISESSIONNAME NASISESSIONNAMEA #define PNASISESSIONNAME PNASISESSIONNAMEA #define NASIFILESERVER NASIFILESERVERA #define PNASIFILESERVER PNASIFILESERVERA #endif /* UNICODE */ typedef WCHAR NASISPECIFICNAMEW[ NASISPECIFICNAME_LENGTH + 1 ]; typedef WCHAR NASIUSERNAMEW[ NASIUSERNAME_LENGTH + 1 ]; typedef WCHAR NASIPASSWORDW[ NASIPASSWORD_LENGTH + 1 ]; typedef WCHAR NASISESIONNAMEW[ NASISESSIONNAME_LENGTH + 1 ]; typedef WCHAR NASIFILESERVERW[ NASIFILESERVER_LENGTH + 1 ]; typedef CHAR NASISPECIFICNAMEA[ NASISPECIFICNAME_LENGTH + 1 ]; typedef CHAR NASIUSERNAMEA[ NASIUSERNAME_LENGTH + 1 ]; typedef CHAR NASIPASSWORDA[ NASIPASSWORD_LENGTH + 1 ]; typedef CHAR NASISESIONNAMEA[ NASISESSIONNAME_LENGTH + 1 ]; typedef CHAR NASIFILESERVERA[ NASIFILESERVER_LENGTH + 1 ]; /*------------------------------------------------*/ #define STACK_ADDRESS_LENGTH 128 /* * Stack address structure */ typedef struct _ICA_STACK_ADDRESS { BYTE Address[ STACK_ADDRESS_LENGTH ]; // bytes 0,1 family, 2-n address } ICA_STACK_ADDRESS, *PICA_STACK_ADDRESS; // Support for long Username, Password and Domain during autologon #define EXTENDED_USERNAME_LEN 255 #define EXTENDED_PASSWORD_LEN 255 #define EXTENDED_DOMAIN_LEN 255 /* * Structure to hold the longer UserName and Password */ typedef struct _ExtendedClientCredentials { WCHAR UserName[EXTENDED_USERNAME_LEN + 1]; WCHAR Password[EXTENDED_PASSWORD_LEN + 1]; WCHAR Domain[EXTENDED_DOMAIN_LEN + 1] ; }ExtendedClientCredentials, *pExtendedClientCredentials; // Type of info queried from TermSrv to RdpWsx via WlxEscape // add more to this INFO_TYPE as need arises later on typedef enum { GET_LONG_USERNAME, GET_CLIENT_RANDOM, GET_CS_AUTORECONNECT_INFO, //arc verifier GET_SC_AUTORECONNECT_INFO, //arc random } INFO_TYPE ; /********************************* * User Configuration structures *********************************/ /*------------------------------------------------*/ typedef WCHAR APPLICATIONNAMEW[ MAX_BR_NAME ]; typedef WCHAR *PAPPLICATIONNAMEW; typedef CHAR APPLICATIONNAMEA[ MAX_BR_NAME ]; typedef CHAR *PAPPLICATIONNAMEA; #ifdef UNICODE #define APPLICATIONNAME APPLICATIONNAMEW #define PAPPLICATIONNAME PAPPLICATIONNAMEW #else #define APPLICATIONNAME APPLICATIONNAMEA #define PAPPLICATIONNAME PAPPLICATIONNAMEA #endif /* UNICODE */ /*------------------------------------------------*/ /* * Shadow options */ typedef enum _SHADOWCLASS { Shadow_Disable, Shadow_EnableInputNotify, Shadow_EnableInputNoNotify, Shadow_EnableNoInputNotify, Shadow_EnableNoInputNoNotify, } SHADOWCLASS; /*------------------------------------------------*/ /* * Callback options */ typedef enum _CALLBACKCLASS { Callback_Disable, Callback_Roving, Callback_Fixed, } CALLBACKCLASS; /*------------------------------------------------*/ // // These are flags that if set, then data from the policy tree is avalible. // If flag is not set, then there was no corresponding data item from the policy tree. // // At this time, the actual data is stored in a copy of userconfigw used as a scrath pad // for the values found under group policy. The debate of what belongs to group policy has not // been fully settled, and once that is resolved, I will probably move the data into this struct too. // AraBern, March 29, 2000 (2 days away from code complete !) // // typedef struct _POLICY_TS_USER { // ------------------------------------------------------------------------------ // Some notes, March 11, 2000 // // // fInheritAutoLogon // fPromptForPassword // UserName // Domain // Password // Used in WsxInitializeClientData() // of \\index1\src\newnt\termsrv\rdpwsx\rdpex\tsrvwsx.c // This is NOT exposed thru Group Policy // fInheritAutoClient // There are 3 items which are individually being set thru Group Policy // fDisableEncryption // MinEncryptionLevel; // The policy for these is set thru fPolicyInheritSecurity, but no UI for these... // fWorkDirectory // fInitialProgram // fPolicyInheritInitialProgram // will take care of these: // These seem to be used without being overriden by machine wide data // KeyboardLayout // fMaximize // fHideTitleBar // used in // \\index1\src\newnt\termsrv\rdpwsx\rdpex\tsrvwsx.c // These seem to be used by RDP, but are not overriden by any // Potentially stale WTS API stuff: // PublishedName // used by WTSQuerySessionInformationW(), in response to // request of WTSApplicationName. It's not used elsewhere! // These are set and retrieved, but play no meaningful roles. // fUseDefaultGina // fRequireEncryption // These are probably meaningless // fHomeDirectoryMapRoot // NWLogonServer // \\index1\src\newnt\termsrv\tsuserex\tsusrsht.cpp // and NETWARE ifdef'd in \\index1\src\newnt\termsrv\wtsapi\config.c // These are not used AT ALL, are only present in .w or .h files // fPublishedApp // // ULONG fPolicyDisableCpm : 1; // Printer, exposed thru TSCC // // Equivalent to ClientLptDef // // ULONG fPolicyDisableCdm : 1; // Drive, exposed thru TSCC // // Equivalent to ClientDrives. // // ULONG fPolicyDisableLPT : 1; // LPTPort, exposed thru TSCC // // Equivalent to ClientLPT // // Protocol wide in NT2195 for Ccm, Clip, and Cam // Make these machine policy // ULONG fPolicyDisableCcm : 1; // ComPort, exposed thru TSCC // // ULONG fPolicyDisableClip: 1; // Clipboad, exposed thru TSCC // // ULONG fPolicyDisableCam : 1; // Audio, exposed thru TSCC // // OLD..................................... // ULONG fPolicyDisableExe : 1; // not exposed thru TSCC, OLD tsCFG had it // ........................................ ULONG fPolicyResetBroken : 1 ; ULONG fPolicyReconnectSame : 1 ; ULONG fPolicyInitialProgram : 1 ; ULONG fPolicyCallback : 1 ; ULONG fPolicyCallbackNumber : 1 ; ULONG fPolicyShadow : 1 ; ULONG fPolicyMaxSessionTime : 1 ; ULONG fPolicyMaxDisconnectionTime:1; ULONG fPolicyMaxIdleTime : 1 ; ULONG fPolicyAutoClientDrives : 1 ; ULONG fPolicyAutoClientLpts : 1 ; ULONG fPolicyForceClientLptDef : 1 ; } POLICY_TS_USER, * PPOLICY_TS_USER; // // // The USERCONFIGW struct contained both machine and user config data. We have split the // data into two kinds of policies, a user policy and a machine policy. // // The below struct is the machine policy, which includes both a flag to indicate the policy is // present, and a value for that policy. // // // And finally, why am I not using arays? Well I should have, but, originally, the design was // to user winstation->Config->User->User as the central repository for all data, which meant that all // I needed here were policy-present bits, not the policy data. However, the Product "feature" has // gone thru 3 mutations, and when it finally got to this point, I had very little time to make // any changes. // // I will consider to create a class that encapsulates all policy related bits. // AraBern, March 29, 2000 (2 days away from code complete ! // typedef struct _POLICY_TS_MACHINE { ULONG fPolicyDisableClip : 1 ; ULONG fPolicyDisableCam : 1 ; ULONG fPolicyDisableCcm : 1 ; ULONG fPolicyDisableLPT : 1; ULONG fPolicyDisableCpm : 1; ULONG fPolicyPromptForPassword : 1 ; ULONG fPolicyMaxInstanceCount : 1; ULONG fPolicyMinEncryptionLevel : 1 ; ULONG fPolicyFipsEnabled : 1; ULONG fPolicyDisableAutoReconnect : 1; // These are new and used as machine-wide, so in a sense they are machine config data // especially that USERCONFIGW has entries for these ULONG fPolicyWFProfilePath: 1 ; ULONG fPolicyWFHomeDir: 1 ; ULONG fPolicyWFHomeDirDrive: 1 ; // this is new, and is present in here for the sake of consistancey. However, there is a special // func that is used by th's main connection loop to just look for this single item, in order // to save time. ULONG fPolicyDenyTSConnections : 1; // if set, TS is basically OFF in the sense that nobody can connect. // these are not part of TS machine config data struct, but winlogn does use these and treats // them as per machine type of a policy ULONG fPolicyTempFoldersPerSession : 1; // Use tmp folder per each session, instead of one common tmp folder ULONG fPolicyDeleteTempFoldersOnExit: 1; // on exit, do a cleanup of tmp folders ULONG fPolicyColorDepth : 1; ULONG fPolicySessionDirectoryActive : 1; ULONG fPolicySessionDirectoryLocation : 1; ULONG fPolicySessionDirectoryClusterName : 1; ULONG fPolicySessionDirectoryAdditionalParams : 1; ULONG fPolicySessionDirectoryExposeServerIP : 1; ULONG fPolicyPreventLicenseUpgrade : 1; ULONG fPolicySecureLicensing : 1; ULONG fPolicyWritableTSCCPermissionsTAB : 1; ULONG fPolicyDisableCdm : 1; ULONG fPolicyForceClientLptDef : 1; ULONG fPolicyShadow : 1 ; ULONG fPolicyResetBroken : 1 ; ULONG fPolicyReconnectSame : 1 ; ULONG fPolicyMaxSessionTime : 1 ; ULONG fPolicyMaxDisconnectionTime:1; ULONG fPolicyMaxIdleTime : 1 ; ULONG fPolicyInitialProgram : 1 ; ULONG fPolicySingleSessionPerUser : 1; ULONG fPolicyDisableWallpaper : 1; ULONG fPolicyKeepAlive : 1; ULONG fPolicyEnableTimeZoneRedirection : 1; ULONG fPolicyDisableForcibleLogoff : 1; //ULONG fPolicyProtectAgainstDOSAttack : 1; //This policy isn't currently used but may be added at some point //ULONG fPolicyRequireCredentialsDuringConnection : 1; //This policy isn't currently used but may be added at some point // // And now the data if policy is set. Not all items get data, some are just flags. // // Bit-fields first. // // ULONG fDisableClip : 1 ; ULONG fDisableCam : 1 ; ULONG fDisableCcm : 1 ; ULONG fDisableLPT : 1; ULONG fDisableCpm : 1; ULONG fPromptForPassword : 1 ; ULONG ColorDepth : 3; ULONG fDenyTSConnections : 1; // if set, TS is basically OFF in the sense that nobody can connect. // these are not part of TS machine config data struct, but winlogn does use these and treats // them as per machine type of a policy ULONG fTempFoldersPerSession : 1; // Use tmp folder per each session, instead of one common tmp folder ULONG fDeleteTempFoldersOnExit: 1; // on exit, do a cleanup of tmp folders ULONG fWritableTSCCPermissionsTAB : 1; // if set, then admins can change the per connection security descriptor. ULONG fDisableCdm : 1; ULONG fForceClientLptDef : 1; ULONG fResetBroken : 1 ; ULONG fReconnectSame : 1 ; ULONG fSingleSessionPerUser:1; ULONG fDisableWallpaper : 1; ULONG fKeepAliveEnable : 1; ULONG fPreventLicenseUpgrade:1; ULONG fSecureLicensing:1; ULONG fEnableTimeZoneRedirection : 1; ULONG fDisableAutoReconnect : 1; ULONG fDisableForcibleLogoff : 1; //ULONG fProtectAgainstDOSAttack : 1; //This policy isn't currently used but may be added at some point //ULONG fRequireCredentialsDuringConnection : 1; ULONG fPolicyEncryptRPCTraffic : 1; ULONG fEncryptRPCTraffic : 1; // //Different error flags // ULONG fErrorInvalidProfile : 1; //Set if WFProfilePath, WFHomeDir, or WFHomeDirDrive are invalid (too long). // // Non bit-fields next // ULONG MaxInstanceCount; BYTE MinEncryptionLevel; WCHAR WFProfilePath[ DIRECTORY_LENGTH + 1 ]; WCHAR WFHomeDir[ DIRECTORY_LENGTH + 1 ]; WCHAR WFHomeDirDrive[ 4 ]; ULONG SessionDirectoryActive; WCHAR SessionDirectoryLocation[DIRECTORY_LENGTH+1]; WCHAR SessionDirectoryClusterName[DIRECTORY_LENGTH+1]; WCHAR SessionDirectoryAdditionalParams[DIRECTORY_LENGTH+1]; ULONG SessionDirectoryExposeServerIP; ULONG KeepAliveInterval; SHADOWCLASS Shadow; ULONG MaxConnectionTime; ULONG MaxDisconnectionTime; ULONG MaxIdleTime; // Start program Policy WCHAR WorkDirectory[ DIRECTORY_LENGTH + 1 ]; WCHAR InitialProgram[ INITIALPROGRAM_LENGTH + 1 ]; // these have nothing to do with the USERCONFIGW data structure , not sure if I will keep them here. // ULONG fHideUserTabInTaskMan : 1; // When set, the new Users TAB in task man is hidden. // ULONG fDenyTSCCUsage : 1; // When set, you can't use TSCC // ULONG fHideTSCCPermissionsTAB : 1; // allow TSCC to surface the permissions dialog, so that each connection // gets it's own permissions list // No UI for setting these in NT2195. Do we want to make these policies? // ULONG fPolicyInheritSecurity : 1 ; // ULONG fDisableEncryption : 1; // } POLICY_TS_MACHINE, *PPOLICY_TS_MACHINE; /* * User Configuration data */ typedef struct _USERCONFIGW { /* if flag is set inherit parameter from user or client configuration */ ULONG fInheritAutoLogon : 1; ULONG fInheritResetBroken : 1; ULONG fInheritReconnectSame : 1; ULONG fInheritInitialProgram : 1; ULONG fInheritCallback : 1; ULONG fInheritCallbackNumber : 1; ULONG fInheritShadow : 1; ULONG fInheritMaxSessionTime : 1; ULONG fInheritMaxDisconnectionTime : 1; ULONG fInheritMaxIdleTime : 1; ULONG fInheritAutoClient : 1; ULONG fInheritSecurity : 1; ULONG fPromptForPassword : 1; // fInheritAutoLogon ULONG fResetBroken : 1; ULONG fReconnectSame : 1; ULONG fLogonDisabled : 1; ULONG fWallPaperDisabled : 1; ULONG fAutoClientDrives : 1; ULONG fAutoClientLpts : 1; ULONG fForceClientLptDef : 1; ULONG fRequireEncryption : 1; ULONG fDisableEncryption : 1; ULONG fUnused1 : 1; // old fDisableIniFileMapping ULONG fHomeDirectoryMapRoot : 1; ULONG fUseDefaultGina : 1; ULONG fCursorBlinkDisabled : 1; ULONG fPublishedApp : 1; ULONG fHideTitleBar : 1; ULONG fMaximize : 1; ULONG fDisableCpm : 1; ULONG fDisableCdm : 1; ULONG fDisableCcm : 1; ULONG fDisableLPT : 1; ULONG fDisableClip : 1; ULONG fDisableExe : 1; ULONG fDisableCam : 1; ULONG fDisableAutoReconnect : 1; /* fInheritColorDepth */ ULONG ColorDepth : 3; //NA 2/19/01 ULONG fInheritColorDepth: 1; // //Different error flags // ULONG fErrorInvalidProfile : 1; //Set if WFProfilePath, WFHomeDir, or WFHomeDirDrive are invalid (too long). /* fInheritAutoLogon */ WCHAR UserName[ USERNAME_LENGTH + 1 ]; WCHAR Domain[ DOMAIN_LENGTH + 1 ]; WCHAR Password[ PASSWORD_LENGTH + 1 ]; /* fInheritInitialProgram */ WCHAR WorkDirectory[ DIRECTORY_LENGTH + 1 ]; WCHAR InitialProgram[ INITIALPROGRAM_LENGTH + 1 ]; /* fInheritCallback */ WCHAR CallbackNumber[ CALLBACK_LENGTH + 1 ]; CALLBACKCLASS Callback; /* fInheritShadow */ SHADOWCLASS Shadow; ULONG MaxConnectionTime; ULONG MaxDisconnectionTime; ULONG MaxIdleTime; ULONG KeyboardLayout; // 0 = inherit /* fInheritSecurity */ BYTE MinEncryptionLevel; WCHAR NWLogonServer[ NASIFILESERVER_LENGTH + 1 ]; APPLICATIONNAMEW PublishedName; /* WinFrame Profile Path - Overrides standard profile path */ WCHAR WFProfilePath[ DIRECTORY_LENGTH + 1 ]; /* WinFrame Home Directory - Overrides standard Home Directory */ WCHAR WFHomeDir[ DIRECTORY_LENGTH + 1 ]; /* WinFrame Home Directory Drive - Overrides standard Home Directory Drive*/ WCHAR WFHomeDirDrive[ 4 ]; } USERCONFIGW, * PUSERCONFIGW; typedef struct _USERCONFIGA { /* if flag is set inherit parameter from user or client configuration */ ULONG fInheritAutoLogon : 1; ULONG fInheritResetBroken : 1; ULONG fInheritReconnectSame : 1; ULONG fInheritInitialProgram : 1; ULONG fInheritCallback : 1; ULONG fInheritCallbackNumber : 1; ULONG fInheritShadow : 1; ULONG fInheritMaxSessionTime : 1; ULONG fInheritMaxDisconnectionTime : 1; ULONG fInheritMaxIdleTime : 1; ULONG fInheritAutoClient : 1; ULONG fInheritSecurity : 1; ULONG fPromptForPassword : 1; // fInheritAutoLogon ULONG fResetBroken : 1; ULONG fReconnectSame : 1; ULONG fLogonDisabled : 1; ULONG fWallPaperDisabled : 1; ULONG fAutoClientDrives : 1; ULONG fAutoClientLpts : 1; ULONG fForceClientLptDef : 1; ULONG fRequireEncryption : 1; ULONG fDisableEncryption : 1; ULONG fUnused1 : 1; // old fDisableIniFileMapping ULONG fHomeDirectoryMapRoot : 1; ULONG fUseDefaultGina : 1; ULONG fCursorBlinkDisabled : 1; ULONG fPublishedApp : 1; ULONG fHideTitleBar : 1; ULONG fMaximize : 1; ULONG fDisableCpm : 1; ULONG fDisableCdm : 1; ULONG fDisableCcm : 1; ULONG fDisableLPT : 1; ULONG fDisableClip : 1; ULONG fDisableExe : 1; ULONG fDisableCam : 1; ULONG fDisableAutoReconnect : 1; // //Different error flags // ULONG fErrorInvalidProfile : 1; //Set if WFProfilePath, WFHomeDir, or WFHomeDirDrive are invalid (too long). /* fInheritAutoLogon */ CHAR UserName[ USERNAME_LENGTH + 1 ]; CHAR Domain[ DOMAIN_LENGTH + 1 ]; CHAR Password[ PASSWORD_LENGTH + 1 ]; /* fInheritInitialProgram */ CHAR WorkDirectory[ DIRECTORY_LENGTH + 1 ]; CHAR InitialProgram[ INITIALPROGRAM_LENGTH + 1 ]; /* fInheritCallback */ CHAR CallbackNumber[ CALLBACK_LENGTH + 1 ]; CALLBACKCLASS Callback; /* fInheritShadow */ SHADOWCLASS Shadow; ULONG MaxConnectionTime; ULONG MaxDisconnectionTime; ULONG MaxIdleTime; ULONG KeyboardLayout; // 0 = inherit /* fInheritSecurity */ BYTE MinEncryptionLevel; CHAR NWLogonServer[ NASIFILESERVER_LENGTH + 1 ]; APPLICATIONNAMEA PublishedName; /* WinFrame Profile Path - Overrides standard profile path */ CHAR WFProfilePath[ DIRECTORY_LENGTH + 1 ]; /* WinFrame Home Directory - Overrides standard Home Directory */ CHAR WFHomeDir[ DIRECTORY_LENGTH + 1 ]; /* WinFrame Home Directory Drive - Overrides standard Home Directory Drive*/ CHAR WFHomeDirDrive[ 4 ]; } USERCONFIGA, * PUSERCONFIGA; #ifdef UNICODE #define USERCONFIG USERCONFIGW #define PUSERCONFIG PUSERCONFIGW #else #define USERCONFIG USERCONFIGA #define PUSERCONFIG PUSERCONFIGA #endif /* UNICODE */ /*------------------------------------------------*/ /****************** * PD structures ******************/ typedef struct _PDCONFIG2W{ PDNAMEW PdName; // descriptive name of PD SDCLASS SdClass; // type of PD DLLNAMEW PdDLL; // name of PD dll ULONG PdFlag; // PD flags ULONG OutBufLength; // optimal output buffer length ULONG OutBufCount; // optimal number of output buffers ULONG OutBufDelay; // write delay in msecs ULONG InteractiveDelay; // write delay during active input ULONG PortNumber; // network listen port number ULONG KeepAliveTimeout; // network watchdog frequence } PDCONFIG2W, * PPDCONFIG2W; typedef struct _PDCONFIG2A { PDNAMEA PdName; SDCLASS SdClass; DLLNAMEA PdDLL; ULONG PdFlag; ULONG OutBufLength; ULONG OutBufCount; ULONG OutBufDelay; ULONG InteractiveDelay; ULONG PortNumber; ULONG KeepAliveTimeout; } PDCONFIG2A, * PPDCONFIG2A; /* * PdFlag defines */ #define PD_UNUSED 0x00000001 // #define PD_RELIABLE 0x00000002 // error free protocol already #define PD_FRAME 0x00000004 // frame orientated protocol #define PD_CONNECTION 0x00000008 // connection orientated protocol #define PD_CONSOLE 0x00000010 // directly connected console #define PD_LANA 0x00000020 // Network class uses LANAs (ie NetBIOS) #define PD_TRANSPORT 0x00000040 // transport driver (lowest level) #define PD_SINGLE_INST 0x00000080 // single instance only (async) #define PD_NOLOW_WATERMARK 0x00000100 //low water mark to resume transmission #ifdef UNICODE #define PDCONFIG2 PDCONFIG2W #define PPDCONFIG2 PPDCONFIG2W #else #define PDCONFIG2 PDCONFIG2A #define PPDCONFIG2 PPDCONFIG2A #endif /* UNICODE */ /*------------------------------------------------*/ typedef struct _PDCONFIG3W { PDCONFIG2W Data; PDNAMEW ServiceName; // Needed for non-LANA PdNetwork enum DLLNAMEW ConfigDLL; // helper dll for WinStation configuration ULONG RequiredPdCount; PDNAMEW RequiredPds[ MAX_PDCONFIG ]; } PDCONFIG3W, * PPDCONFIG3W; typedef struct _PDCONFIG3A { PDCONFIG2A Data; PDNAMEA ServiceName; // Needed for non-LANA PdNetwork enum DLLNAMEA ConfigDLL; // helper dll for WinStation configuration ULONG RequiredPdCount; PDNAMEA RequiredPds[ MAX_PDCONFIG ]; } PDCONFIG3A, * PPDCONFIG3A; #ifdef UNICODE #define PDCONFIG3 PDCONFIG3W #define PPDCONFIG3 PPDCONFIG3W #else #define PDCONFIG3 PDCONFIG3A #define PPDCONFIG3 PPDCONFIG3A #endif /* UNICODE */ /*------------------------------------------------*/ typedef enum _FLOWCONTROLCLASS { FlowControl_None, FlowControl_Hardware, FlowControl_Software, } FLOWCONTROLCLASS; typedef enum _RECEIVEFLOWCONTROLCLASS { ReceiveFlowControl_None, ReceiveFlowControl_RTS, ReceiveFlowControl_DTR, } RECEIVEFLOWCONTROLCLASS; typedef enum _TRANSMITFLOWCONTROLCLASS { TransmitFlowControl_None, TransmitFlowControl_CTS, TransmitFlowControl_DSR, } TRANSMITFLOWCONTROLCLASS; typedef struct _FLOWCONTROLCONFIG { ULONG fEnableSoftwareTx: 1; ULONG fEnableSoftwareRx: 1; ULONG fEnableDTR: 1; ULONG fEnableRTS: 1; CHAR XonChar; CHAR XoffChar; FLOWCONTROLCLASS Type; RECEIVEFLOWCONTROLCLASS HardwareReceive; TRANSMITFLOWCONTROLCLASS HardwareTransmit; } FLOWCONTROLCONFIG, * PFLOWCONTROLCONFIG; typedef enum _ASYNCCONNECTCLASS { Connect_CTS, Connect_DSR, Connect_RI, Connect_DCD, Connect_FirstChar, Connect_Perm, } ASYNCCONNECTCLASS; typedef struct _CONNECTCONFIG { ASYNCCONNECTCLASS Type; ULONG fEnableBreakDisconnect: 1; } CONNECTCONFIG, * PCONNECTCONFIG; /*------------------------------------------------*/ typedef struct _ASYNCCONFIGW { DEVICENAMEW DeviceName; MODEMNAMEW ModemName; ULONG BaudRate; ULONG Parity; ULONG StopBits; ULONG ByteSize; ULONG fEnableDsrSensitivity: 1; ULONG fConnectionDriver: 1; FLOWCONTROLCONFIG FlowControl; CONNECTCONFIG Connect; } ASYNCCONFIGW, * PASYNCCONFIGW; typedef struct _ASYNCCONFIGA { DEVICENAMEA DeviceName; MODEMNAMEA ModemName; ULONG BaudRate; ULONG Parity; ULONG StopBits; ULONG ByteSize; ULONG fEnableDsrSensitivity: 1; ULONG fConnectionDriver: 1; FLOWCONTROLCONFIG FlowControl; CONNECTCONFIG Connect; } ASYNCCONFIGA, * PASYNCCONFIGA; #ifdef UNICODE #define ASYNCCONFIG ASYNCCONFIGW #define PASYNCCONFIG PASYNCCONFIGW #else #define ASYNCCONFIG ASYNCCONFIGA #define PASYNCCONFIG PASYNCCONFIGA #endif /* UNICODE */ /*------------------------------------------------*/ typedef struct _NETWORKCONFIGW { LONG LanAdapter; DEVICENAMEW NetworkName; ULONG Flags; } NETWORKCONFIGW, * PNETWORKCONFIGW; typedef struct _NETWORKCONFIGA { LONG LanAdapter; DEVICENAMEA NetworkName; ULONG Flags; } NETWORKCONFIGA, * PNETWORKCONFIGA; #define NETWORK_CLIENT 0x00000001 #ifdef UNICODE #define NETWORKCONFIG NETWORKCONFIGW #define PNETWORKCONFIG PNETWORKCONFIGW #else #define NETWORKCONFIG NETWORKCONFIGA #define PNETWORKCONFIG PNETWORKCONFIGA #endif /* UNICODE */ /*------------------------------------------------*/ #ifdef UNICODE #define NASICONFIG NASICONFIGW #define PNASICONFIG PNASICONFIGW #else #define NASICONFIG NASICONFIGA #define PNASICONFIG PNASICONFIGA #endif /* UNICODE */ typedef struct _NASICONFIGW { NASISPECIFICNAMEW SpecificName; NASIUSERNAMEW UserName; NASIPASSWORDW PassWord; NASISESIONNAMEW SessionName; NASIFILESERVERW FileServer; BOOLEAN GlobalSession; } NASICONFIGW, * PNASICONFIGW; typedef struct _NASICONFIGA { NASISPECIFICNAMEA SpecificName; NASIUSERNAMEA UserName; NASIPASSWORDA PassWord; NASISESIONNAMEA SessionName; NASIFILESERVERA FileServer; BOOLEAN GlobalSession; } NASICONFIGA, * PNASICONFIGA; /*------------------------------------------------*/ typedef struct _OEMTDCONFIGW { LONG Adapter; DEVICENAMEW DeviceName; ULONG Flags; } OEMTDCONFIGW, * POEMTDCONFIGW; typedef struct _OEMTDCONFIGA { LONG Adapter; DEVICENAMEA DeviceName; ULONG Flags; } OEMTDCONFIGA, * POEMTDCONFIGA; #ifdef UNICODE #define OEMTDCONFIG OEMTDCONFIGW #define POEMTDCONFIG POEMTDCONFIGW #else #define OEMTDCONFIG OEMTDCONFIGA #define POEMTDCONFIG POEMTDCONFIGA #endif /* UNICODE */ /*------------------------------------------------*/ typedef struct _PDPARAMSW { SDCLASS SdClass; union { NETWORKCONFIGW Network; ASYNCCONFIGW Async; NASICONFIGW Nasi; OEMTDCONFIGW OemTd; }; } PDPARAMSW, * PPDPARAMSW; typedef struct _PDPARAMSA { SDCLASS SdClass; union { NETWORKCONFIGA Network; ASYNCCONFIGA Async; NASICONFIGA Nasi; OEMTDCONFIGA OemTd; }; } PDPARAMSA, * PPDPARAMSA; #ifdef UNICODE #define PDPARAMS PDPARAMSW #define PPDPARAMS PPDPARAMSW #else #define PDPARAMS PDPARAMSA #define PPDPARAMS PPDPARAMSA #endif /* UNICODE */ /*------------------------------------------------*/ typedef struct _PDCONFIGW { PDCONFIG2W Create; PDPARAMSW Params; } PDCONFIGW, * PPDCONFIGW; typedef struct _PDCONFIGA { PDCONFIG2A Create; PDPARAMSA Params; } PDCONFIGA, * PPDCONFIGA; #ifdef UNICODE #define PDCONFIG PDCONFIGW #define PPDCONFIG PPDCONFIGW #else #define PDCONFIG PDCONFIGA #define PPDCONFIG PPDCONFIGA #endif /* UNICODE */ /*------------------------------------------------*/ /*********************** * Wd structures ***********************/ typedef struct _WDCONFIGW { WDNAMEW WdName; DLLNAMEW WdDLL; DLLNAMEW WsxDLL; ULONG WdFlag; ULONG WdInputBufferLength; DLLNAMEW CfgDLL; WDPREFIXW WdPrefix; } WDCONFIGW, * PWDCONFIGW; typedef struct _WDCONFIGA { WDNAMEA WdName; DLLNAMEA WdDLL; DLLNAMEA WsxDLL; ULONG WdFlag; ULONG WdInputBufferLength; DLLNAMEA CfgDLL; WDPREFIXA WdPrefix; } WDCONFIGA, * PWDCONFIGA; /* * WdFlag defines */ #define WDF_UNUSED 0x00000001 // #define WDF_SHADOW_SOURCE 0x00000002 // valid shadow source #define WDF_SHADOW_TARGET 0x00000004 // valid shadow target #define WDF_ICA 0x00000008 // WD is Citrix ICA class #define WDF_TSHARE 0x00000010 // WD is Microsoft TSHARE class #define WDF_DYNAMIC_RECONNECT 0x00000020 // Session can resize Display at reconnect #define WDF_USER_VCIOCTL 0x00000040 // User mode apps can send IOCTL to VC #ifdef UNICODE #define WDCONFIG WDCONFIGW #define PWDCONFIG PWDCONFIGW #else #define WDCONFIG WDCONFIGA #define PWDCONFIG PWDCONFIGA #endif /* UNICODE */ /*------------------------------------------------*/ typedef struct _WDCONFIG2W { WDCONFIGW Wd; ASYNCCONFIGW Async; USERCONFIGW User; } WDCONFIG2W, * PWDCONFIG2W; typedef struct _WDCONFIG2A { WDCONFIGA Wd; ASYNCCONFIGA Async; USERCONFIGA User; } WDCONFIG2A, * PWDCONFIG2A; #ifdef UNICODE #define WDCONFIG2 WDCONFIG2W #define PWDCONFIG2 PWDCONFIG2W #else #define WDCONFIG2 WDCONFIG2A #define PWDCONFIG2 PWDCONFIG2A #endif /* UNICODE */ /*------------------------------------------------*/ /************************************** * Connection Driver structures (CD) **************************************/ /* * connection driver classes */ typedef enum _CDCLASS { CdNone, // 0 CdModem, // 1 cdmodem.dll CdClass_Maximum, // 2 -- must be last } CDCLASS; /*------------------------------------------------*/ typedef struct _CDCONFIGW { CDCLASS CdClass; CDNAMEW CdName; DLLNAMEW CdDLL; ULONG CdFlag; } CDCONFIGW, * PCDCONFIGW; typedef struct _CDCONFIGA { CDCLASS CdClass; CDNAMEA CdName; DLLNAMEA CdDLL; ULONG CdFlag; } CDCONFIGA, * PCDCONFIGA; #ifdef UNICODE #define CDCONFIG CDCONFIGW #define PCDCONFIG PCDCONFIGW #else #define CDCONFIG CDCONFIGA #define PCDCONFIG PCDCONFIGA #endif /* UNICODE */ /*------------------------------------------------*/ /***************************** * Window Station structures *****************************/ typedef struct _WINSTATIONCREATEW { ULONG fEnableWinStation : 1; ULONG MaxInstanceCount; } WINSTATIONCREATEW, * PWINSTATIONCREATEW; typedef struct _WINSTATIONCREATEA { ULONG fEnableWinStation : 1; ULONG MaxInstanceCount; } WINSTATIONCREATEA, * PWINSTATIONCREATEA; #ifdef UNICODE #define WINSTATIONCREATE WINSTATIONCREATEW #define PWINSTATIONCREATE PWINSTATIONCREATEW #else #define WINSTATIONCREATE WINSTATIONCREATEA #define PWINSTATIONCREATE PWINSTATIONCREATEA #endif /* UNICODE */ /*------------------------------------------------*/ typedef struct _WINSTATIONCONFIGW { WCHAR Comment[ WINSTATIONCOMMENT_LENGTH + 1 ]; USERCONFIGW User; char OEMId[4]; // WinFrame Server OEM Id } WINSTATIONCONFIGW, * PWINSTATIONCONFIGW; typedef struct _WINSTATIONCONFIGA { CHAR Comment[ WINSTATIONCOMMENT_LENGTH + 1 ]; USERCONFIGA User; char OEMId[4]; // WinFrame Server OEM Id } WINSTATIONCONFIGA, * PWINSTATIONCONFIGA; #ifdef UNICODE #define WINSTATIONCONFIG WINSTATIONCONFIGW #define PWINSTATIONCONFIG PWINSTATIONCONFIGW #else #define WINSTATIONCONFIG WINSTATIONCONFIGA #define PWINSTATIONCONFIG PWINSTATIONCONFIGA #endif /* UNICODE */ /*------------------------------------------------*/ #define EXECSRVPIPENAMELEN 48 typedef enum _WINSTATIONINFOCLASS { WinStationCreateData, // query WinStation create data WinStationConfiguration, // query/set WinStation parameters WinStationPdParams, // query/set PD parameters WinStationWd, // query WD config (only one can be loaded) WinStationPd, // query PD config (many can be loaded) WinStationPrinter, // query/set LPT mapping to printer queues WinStationClient, // query information about client WinStationModules, // query information about all client modules WinStationInformation, // query information about WinStation WinStationTrace, // enable/disable winstation tracing WinStationBeep, // beep the WinStation WinStationEncryptionOff, // turn off encryption WinStationEncryptionPerm, // encryption is permanent on WinStationNtSecurity, // select winlogon security desktop WinStationUserToken, // User token WinStationUnused1, // *** AVAILABLE *** (old IniMapping) WinStationVideoData, // query hres, vres, color depth WinStationInitialProgram, // Identify Initial Program WinStationCd, // query CD config (only one can be loaded) WinStationSystemTrace, // enable/disable system tracing WinStationVirtualData, // query client virtual data WinStationClientData, // send data to client WinStationSecureDesktopEnter, // turn encryption on, if enabled WinStationSecureDesktopExit, // turn encryption off, if enabled WinStationLoadBalanceSessionTarget, // Load balance info from redirected client. WinStationLoadIndicator, // query load capacity information WinStationShadowInfo, // query/set Shadow state & parameters WinStationDigProductId, // get the outermost digital product id, the client's product id, and the current product id WinStationLockedState, // winlogon sets this for notifing apps/services. WinStationRemoteAddress, // Query client IP address WinStationIdleTime, // Query for how much time the winstation is idle WinStationLastReconnectType, // If last reconnect for this winstation was manual or auto reconnect. WinStationDisallowAutoReconnect, // Allow/Disallow AutoReconnect for this WinStation WinStationMprNotifyInfo, // Mprnotify info from Winlogon for notifying 3rd party network providers WinStationExecSrvSystemPipe, // Exec Srv System Pipe name WinStationSDRedirectedSmartCardLogon, // Was this a Session Directory redirected SmartCard logon WinStationIsAdminLoggedOn // Is the currently logged on user an administrator ? } WINSTATIONINFOCLASS; /*------------------------------------------------*/ typedef struct _WINSTATIONCLIENTDATA { CLIENTDATANAME DataName; BOOLEAN fUnicodeData; /* BYTE Data[1]; Variable length data follows */ } WINSTATIONCLIENTDATA, * PWINSTATIONCLIENTDATA; /*------------------------------------------------*/ typedef struct _WINSTATIONUSERTOKEN { HANDLE ProcessId; HANDLE ThreadId; HANDLE UserToken; } WINSTATIONUSERTOKEN, * PWINSTATIONUSERTOKEN; /*------------------------------------------------*/ typedef struct _WINSTATIONVIDEODATA { USHORT HResolution; USHORT VResolution; USHORT fColorDepth; } WINSTATIONVIDEODATA, *PWINSTATIONVIDEODATA; /*----------------------------------------------*/ typedef struct _WINSTATIONCONFIG2W { WINSTATIONCREATEW Create; PDCONFIGW Pd[ MAX_PDCONFIG ]; WDCONFIGW Wd; CDCONFIGW Cd; WINSTATIONCONFIGW Config; } WINSTATIONCONFIG2W, * PWINSTATIONCONFIG2W; typedef struct _WINSTATIONCONFIG2A { WINSTATIONCREATEA Create; PDCONFIGA Pd[ MAX_PDCONFIG ]; WDCONFIGA Wd; CDCONFIGA Cd; WINSTATIONCONFIGA Config; } WINSTATIONCONFIG2A, * PWINSTATIONCONFIG2A; #ifdef UNICODE #define WINSTATIONCONFIG2 WINSTATIONCONFIG2W #define PWINSTATIONCONFIG2 PWINSTATIONCONFIG2W #else #define WINSTATIONCONFIG2 WINSTATIONCONFIG2A #define PWINSTATIONCONFIG2 PWINSTATIONCONFIG2A #endif /* UNICODE */ /*------------------------------------------------*/ typedef struct _WINSTATIONPRINTERW { PRINTERNAMEW Lpt1; PRINTERNAMEW Lpt2; PRINTERNAMEW Lpt3; PRINTERNAMEW Lpt4; } WINSTATIONPRINTERW, * PWINSTATIONPRINTERW; typedef struct _WINSTATIONPRINTERA { PRINTERNAMEA Lpt1; PRINTERNAMEA Lpt2; PRINTERNAMEA Lpt3; PRINTERNAMEA Lpt4; } WINSTATIONPRINTERA, * PWINSTATIONPRINTERA; #ifdef UNICODE #define WINSTATIONPRINTER WINSTATIONPRINTERW #define PWINSTATIONPRINTER PWINSTATIONPRINTERW #else #define WINSTATIONPRINTER WINSTATIONPRINTERA #define PWINSTATIONPRINTER PWINSTATIONPRINTERA #endif /* UNICODE */ #ifndef _TS_TIME_ZONE_INFORMATION_ #define _TS_TIME_ZONE_INFORMATION_ typedef struct _TS_SYSTEMTIME { USHORT wYear; USHORT wMonth; USHORT wDayOfWeek; USHORT wDay; USHORT wHour; USHORT wMinute; USHORT wSecond; USHORT wMilliseconds; } TS_SYSTEMTIME; typedef struct _TS_TIME_ZONE_INFORMATION { LONG Bias; WCHAR StandardName[ 32 ]; TS_SYSTEMTIME StandardDate; LONG StandardBias; WCHAR DaylightName[ 32 ]; TS_SYSTEMTIME DaylightDate; LONG DaylightBias; } TS_TIME_ZONE_INFORMATION; #endif //_TS_TIME_ZONE_INFORMATION_ /*------------------------------------------------*/ /* * WinStation client data structure */ typedef struct _WINSTATIONCLIENTW { ULONG fTextOnly: 1; ULONG fDisableCtrlAltDel: 1; ULONG fMouse: 1; ULONG fDoubleClickDetect: 1; ULONG fINetClient: 1; ULONG fPromptForPassword : 1; ULONG fMaximizeShell: 1; ULONG fEnableWindowsKey: 1; ULONG fRemoteConsoleAudio: 1; WCHAR ClientName[ CLIENTNAME_LENGTH + 1 ]; WCHAR Domain[ DOMAIN_LENGTH + 1 ]; WCHAR UserName[ USERNAME_LENGTH + 1 ]; WCHAR Password[ PASSWORD_LENGTH + 1 ]; WCHAR WorkDirectory[ DIRECTORY_LENGTH + 1 ]; WCHAR InitialProgram[ INITIALPROGRAM_LENGTH + 1 ]; ULONG SerialNumber; // client computer unique serial number BYTE EncryptionLevel; // security level of encryption pd ULONG ClientAddressFamily; WCHAR ClientAddress[ CLIENTADDRESS_LENGTH + 1 ]; USHORT HRes; USHORT VRes; USHORT ColorDepth; USHORT ProtocolType; // PROTOCOL_ICA or PROTOCOL_RDP ULONG KeyboardLayout; ULONG KeyboardType; ULONG KeyboardSubType; ULONG KeyboardFunctionKey; WCHAR imeFileName[ IMEFILENAME_LENGTH + 1 ]; WCHAR ClientDirectory[ DIRECTORY_LENGTH + 1 ]; WCHAR ClientLicense[ CLIENTLICENSE_LENGTH + 1 ]; WCHAR ClientModem[ CLIENTMODEM_LENGTH + 1 ]; ULONG ClientBuildNumber; ULONG ClientHardwareId; // client software serial number USHORT ClientProductId; // client software product id USHORT OutBufCountHost; // number of outbufs on host USHORT OutBufCountClient; // number of outbufs on client USHORT OutBufLength; // length of outbufs in bytes WCHAR AudioDriverName[9]; //client time zone information TS_TIME_ZONE_INFORMATION ClientTimeZone; ULONG ClientSessionId; WCHAR clientDigProductId[CLIENT_PRODUCT_ID_LENGTH]; ULONG PerformanceFlags; // List of features to disable for perf ULONG ActiveInputLocale; // Client's active input locale HKL } WINSTATIONCLIENTW, * PWINSTATIONCLIENTW; /* * WinStation client data structure */ typedef struct _WINSTATIONCLIENTA { ULONG fTextOnly: 1; ULONG fDisableCtrlAltDel: 1; ULONG fMouse: 1; ULONG fDoubleClickDetect: 1; ULONG fINetClient: 1; ULONG fPromptForPassword : 1; ULONG fMaximizeShell: 1; ULONG fEnableWindowsKey: 1; char ClientName[ CLIENTNAME_LENGTH + 1 ]; char Domain[ DOMAIN_LENGTH + 1 ]; char UserName[ USERNAME_LENGTH + 1 ]; char Password[ PASSWORD_LENGTH + 1 ]; char WorkDirectory[ DIRECTORY_LENGTH + 1 ]; char InitialProgram[ INITIALPROGRAM_LENGTH + 1 ]; ULONG SerialNumber; // client computer unique serial number BYTE EncryptionLevel; // security level of encryption pd ULONG ClientAddressFamily; char ClientAddress[ CLIENTADDRESS_LENGTH + 1 ]; USHORT HRes; USHORT VRes; USHORT ColorDepth; USHORT ProtocolType; // PROTOCOL_ICA or PROTOCOL_RDP ULONG KeyboardLayout; ULONG KeyboardType; ULONG KeyboardSubType; ULONG KeyboardFunctionKey; char imeFileName[ IMEFILENAME_LENGTH + 1 ]; char ClientDirectory[ DIRECTORY_LENGTH + 1 ]; char ClientLicense[ CLIENTLICENSE_LENGTH + 1 ]; char ClientModem[ CLIENTMODEM_LENGTH + 1 ]; ULONG ClientBuildNumber; ULONG ClientHardwareId; // client software serial number USHORT ClientProductId; // client software product id USHORT OutBufCountHost; // number of outbufs on host USHORT OutBufCountClient; // number of outbufs on client USHORT OutBufLength; // length of outbufs in bytes char AudioDriverName[9]; //client time zone information TS_TIME_ZONE_INFORMATION ClientTimeZone; ULONG ClientSessionId; char clientDigProductId[CLIENT_PRODUCT_ID_LENGTH]; ULONG PerformanceFlags; // List of features to disable for perf ULONG ActiveInputLocale; // Client's active input locale HKL } WINSTATIONCLIENTA, * PWINSTATIONCLIENTA; #ifdef UNICODE #define WINSTATIONCLIENT WINSTATIONCLIENTW #define PWINSTATIONCLIENT PWINSTATIONCLIENTW #else #define WINSTATIONCLIENT WINSTATIONCLIENTA #define PWINSTATIONCLIENT PWINSTATIONCLIENTA #endif /* UNICODE */ /* * Autoreconnect information passed up from the stack */ #define MAX_TS_AUTORECONNECTINFO_LEN 128 typedef struct _TS_AUTORECONNECTINFO { USHORT cbAutoReconnectInfo; BYTE AutoReconnectInfo[MAX_TS_AUTORECONNECTINFO_LEN]; } TS_AUTORECONNECTINFO, *PTS_AUTORECONNECTINFO; /*------------------------------------------------*/ /* * ICA specific protocol performance counters */ typedef struct _ICA_COUNTERS { ULONG Reserved; } ICA_COUNTERS, * PICA_COUNTERS; /* * T.Share specific protocol performance counters */ typedef struct _TSHARE_COUNTERS { ULONG Reserved; } TSHARE_COUNTERS, * PTSHARE_COUNTERS; /* * WinStation protocol performance counters */ typedef struct _PROTOCOLCOUNTERS { ULONG WdBytes; // wd common ULONG WdFrames; // wd common ULONG WaitForOutBuf; // wd common ULONG Frames; // td common ULONG Bytes; // td common ULONG CompressedBytes; // pdcomp ULONG CompressFlushes; // pdcomp ULONG Errors; // pdreli ULONG Timeouts; // pdreli ULONG AsyncFramingError; // pdasync ULONG AsyncOverrunError; // pdasync ULONG AsyncOverflowError; // pdasync ULONG AsyncParityError; // pdasync ULONG TdErrors; // td common USHORT ProtocolType; // PROTOCOL_ICA or PROTOCOL_RDP USHORT Length; // length of data in protocol-specific space union { ICA_COUNTERS IcaCounters; TSHARE_COUNTERS TShareCounters; ULONG Reserved[100]; } Specific; } PROTOCOLCOUNTERS, * PPROTOCOLCOUNTERS; /* * ThinWire cache statistics */ typedef struct _THINWIRECACHE { ULONG CacheReads; ULONG CacheHits; } THINWIRECACHE, * PTHINWIRECACHE; #define MAX_THINWIRECACHE 4 /* * ICA specific cache statistics */ typedef struct _ICA_CACHE { THINWIRECACHE ThinWireCache[ MAX_THINWIRECACHE ]; } ICA_CACHE, * PICA_CACHE; /* * T.Share specific cache statistics */ typedef struct _TSHARE_CACHE { ULONG Reserved; } TSHARE_CACHE, * PTSHARE_CACHE; /* * WinStation cache statistics */ typedef struct CACHE_STATISTICS { USHORT ProtocolType; // PROTOCOL_ICA or PROTOCOL_RDP USHORT Length; // length of data in protocol-specific space union { ICA_CACHE IcaCacheStats; TSHARE_CACHE TShareCacheStats; ULONG Reserved[20]; } Specific; } CACHE_STATISTICS, * PCACHE_STATISTICS; /* * WinStation protocol status */ typedef struct _PROTOCOLSTATUS { PROTOCOLCOUNTERS Output; PROTOCOLCOUNTERS Input; CACHE_STATISTICS Cache; ULONG AsyncSignal; // MS_CTS_ON, MS_DSR_ON, etc... ULONG AsyncSignalMask; // EV_CTS, EV_DSR, etc... } PROTOCOLSTATUS, * PPROTOCOLSTATUS; /* * Protocol extension info struct */ typedef struct _WSX_INFO { ULONG Version; HANDLE hIca; HANDLE hStack; ULONG SessionId; PWCHAR pUserName; PWCHAR pDomain; #define WSX_INFO_VERSION_1 0x1 } WSX_INFO, * PWSX_INFO; /* * AsyncSignal defines */ // #define MS_CTS_ON 0x0010 // #define MS_DSR_ON 0x0020 // #define MS_RING_ON 0x0040 // #define MS_RLSD_ON 0x0080 #define MS_DTR_ON 0x00010000 #define MS_RTS_ON 0x00020000 /* * AsyncSignalMask defines */ // #define EV_CTS 0x0008 // CTS changed state // #define EV_DSR 0x0010 // DSR changed state // #define EV_RLSD 0x0020 // RLSD changed state // #define EV_RING 0x0100 // Ring signal detected #define EV_DTR 0x00010000 // DTR changed state #define EV_RTS 0x00020000 // DTR changed state /*------------------------------------------------*/ /* * WinStation query information */ typedef struct _WINSTATIONINFORMATIONW { WINSTATIONSTATECLASS ConnectState; WINSTATIONNAMEW WinStationName; ULONG LogonId; LARGE_INTEGER ConnectTime; LARGE_INTEGER DisconnectTime; LARGE_INTEGER LastInputTime; LARGE_INTEGER LogonTime; PROTOCOLSTATUS Status; WCHAR Domain[ DOMAIN_LENGTH + 1 ]; WCHAR UserName[USERNAME_LENGTH + 1]; LARGE_INTEGER CurrentTime; } WINSTATIONINFORMATIONW, * PWINSTATIONINFORMATIONW; typedef struct _WINSTATIONINFORMATIONA { WINSTATIONSTATECLASS ConnectState; WINSTATIONNAMEA WinStationName; ULONG LogonId; LARGE_INTEGER ConnectTime; LARGE_INTEGER DisconnectTime; LARGE_INTEGER LastInputTime; LARGE_INTEGER LogonTime; PROTOCOLSTATUS Status; CHAR Domain[ DOMAIN_LENGTH + 1 ]; CHAR UserName[USERNAME_LENGTH + 1]; LARGE_INTEGER CurrentTime; } WINSTATIONINFORMATIONA, * PWINSTATIONINFORMATIONA; #ifdef UNICODE #define WINSTATIONINFORMATION WINSTATIONINFORMATIONW #define PWINSTATIONINFORMATION PWINSTATIONINFORMATIONW #else #define WINSTATIONINFORMATION WINSTATIONINFORMATIONA #define PWINSTATIONINFORMATION PWINSTATIONINFORMATIONA #endif /* UNICODE */ /* * Load balancing data types */ typedef enum _LOADFACTORTYPE { ErrorConstraint, PagedPoolConstraint, NonPagedPoolConstraint, AvailablePagesConstraint, SystemPtesConstraint, CPUConstraint } LOADFACTORTYPE; typedef struct _WINSTATIONLOADINDICATORDATA { ULONG RemainingSessionCapacity; LOADFACTORTYPE LoadFactor; ULONG TotalSessions; ULONG DisconnectedSessions; LARGE_INTEGER IdleCPU; LARGE_INTEGER TotalCPU; ULONG RawSessionCapacity; ULONG reserved[9]; } WINSTATIONLOADINDICATORDATA, * PWINSTATIONLOADINDICATORDATA; /*------------------------------------------------*/ /* * WinStation shadow states */ typedef enum _SHADOWSTATECLASS { State_NoShadow, // No shadow operations on this session State_Shadowing, // The session is a Shadow client (viewer) State_Shadowed, // The session is a Shadow target } SHADOWSTATECLASS; /* * Shadow query/set information */ typedef struct _WINSTATIONSHADOW { SHADOWSTATECLASS ShadowState; SHADOWCLASS ShadowClass; ULONG SessionId; ULONG ProtocolType; // ignored in a set operation } WINSTATIONSHADOW, * PWINSTATIONSHADOW; //get the outermost product id, client product id, and current product id //and corresponding session ids for use in checking shadow loop typedef struct _WINSTATIONPRODIDW { WCHAR DigProductId[CLIENT_PRODUCT_ID_LENGTH]; WCHAR ClientDigProductId[CLIENT_PRODUCT_ID_LENGTH ]; WCHAR OuterMostDigProductId[CLIENT_PRODUCT_ID_LENGTH ]; ULONG curentSessionId; ULONG ClientSessionId; ULONG OuterMostSessionId; }WINSTATIONPRODIDW, *PWINSTATIONPRODIDW; typedef struct _WINSTATIONPRODIDA { CHAR DigProductId[CLIENT_PRODUCT_ID_LENGTH]; CHAR ClientDigProductId[CLIENT_PRODUCT_ID_LENGTH ]; CHAR OuterMostDigProductId[CLIENT_PRODUCT_ID_LENGTH ]; ULONG curentSessionId; ULONG ClientSessionId; ULONG OuterMostSessionId; }WINSTATIONPRODIDA, *PWINSTATIONPRODIDA; #ifdef UNICODE #define WINSTATIONPRODID WINSTATIONPRODIDW #define PWINSTATIONPRODID PWINSTATIONPRODIDW #else #define WINSTATIONPRODID WINSTATIONPRODIDA #define PWINSTATIONPRODID PWINSTATIONPRODIDA #endif /* UNICODE */ typedef struct { unsigned short sin_family; // Socket address family. // AF_INET or AF_INET6 union { // structure identical to TDI_ADDRESS_IP struct { USHORT sin_port; ULONG in_addr; UCHAR sin_zero[8]; } ipv4; // structure identical to TDI_ADDRESS_IP6 struct { USHORT sin6_port; ULONG sin6_flowinfo; USHORT sin6_addr[8]; ULONG sin6_scope_id; } ipv6; }; } WINSTATIONREMOTEADDRESS, *PWINSTATIONREMOTEADDRESS; /*------------------------------------------------*/ /* * Licensing Policy information struct */ #define LCPOLICYINFOTYPE_V1 (1) #define LCPOLICYINFOTYPE_CURRENT LCPOLICYINFOTYPE_V1 typedef struct { ULONG ulVersion; LPWSTR lpPolicyName; LPWSTR lpPolicyDescription; } LCPOLICYINFO_V1W, *LPLCPOLICYINFO_V1W; typedef struct { ULONG ulVersion; LPSTR lpPolicyName; LPSTR lpPolicyDescription; } LCPOLICYINFO_V1A, *LPLCPOLICYINFO_V1A; #ifdef UNICODE #define LCPOLICYINFO_V1 LCPOLICYINFO_V1W #define LPLCPOLICYINFO_V1 LPLCPOLICYINFO_V1W #else #define LCPOLICYINFO_V1 LCPOLICYINFO_V1A #define LPLCPOLICYINFO_V1 LPLCPOLICYINFO_V1A #endif // // The generic type is for the API. This will help callers realize that while // this API can correctly handle several types of input, they are all based // on the LCPOLICYINFO series. // typedef struct { ULONG ulVersion; } LCPOLICYINFOGENERIC, *LPLCPOLICYINFOGENERIC; /*------------------------------------------------*/ /* * Types of settings that termsrv can update. Callers to * _WinStationUpdateSettings choose one, therefore we need not update * everything because one type of setting has changed. * * What used to be contained in ReadRegistry is now covered by * WINSTACFG_LEGACY. */ typedef enum _WINSTATIONUPDATECFGCLASS { WINSTACFG_LEGACY, WINSTACFG_SESSDIR } WINSTATIONUPDATECFGCLASS; /*------------------------------------------------*/ typedef struct _BEEPINPUT { ULONG uType; } BEEPINPUT, * PBEEPINPUT; /*------------------------------------------------*/ /********************** * NWLogon Structure **********************/ typedef struct _NWLOGONADMIN { WCHAR Username[ USERNAME_LENGTH + 1 ]; WCHAR Password[ PASSWORD_LENGTH + 1 ]; WCHAR Domain[ DOMAIN_LENGTH + 1 ]; } NWLOGONADMIN, * PNWLOGONADMIN; /*------------------------------------------------*/ /********************************************** * Registry APIs for Connection Drivers (Cds) **********************************************/ LONG WINAPI RegCdEnumerateW( HANDLE hServer, PWDNAMEW pWdName, PULONG pIndex, PULONG pEntries, PCDNAMEW pCdName, PULONG pByteCount ); LONG WINAPI RegCdEnumerateA( HANDLE hServer, PWDNAMEA pWdName, PULONG pIndex, PULONG pEntries, PCDNAMEA pCdName, PULONG pByteCount ); #ifdef UNICODE #define RegCdEnumerate RegCdEnumerateW #else #define RegCdEnumerate RegCdEnumerateA #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegCdCreateW( HANDLE hServer, PWDNAMEW pWdName, PCDNAMEW pCdName, BOOLEAN bCreate, PCDCONFIGW pCdConfig, ULONG CdConfigLength ); LONG WINAPI RegCdCreateA( HANDLE hServer, PWDNAMEA pWdName, PCDNAMEA pCdName, BOOLEAN bCreate, PCDCONFIGA pCdConfig, ULONG CdConfigLength ); #ifdef UNICODE #define RegCdCreate RegCdCreateW #else #define RegCdCreate RegCdCreateA #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegCdQueryW( HANDLE hServer, PWDNAMEW pWdName, PCDNAMEW pCdName, PCDCONFIGW pCdConfig, ULONG CdConfigLength, PULONG pReturnLength ); LONG WINAPI RegCdQueryA( HANDLE hServer, PWDNAMEA pWdName, PCDNAMEA pCdName, PCDCONFIGA pCdConfig, ULONG CdConfigLength, PULONG pReturnLength ); #ifdef UNICODE #define RegCdQuery RegCdQueryW #else #define RegCdQuery RegCdQueryA #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegCdDeleteW( HANDLE hServer, PWDNAMEW pWdName, PCDNAMEW pCdName ); LONG WINAPI RegCdDeleteA( HANDLE hServer, PWDNAMEA pWdName, PCDNAMEA pCdName ); #ifdef UNICODE #define RegCdDelete RegCdDeleteW #else #define RegCdDelete RegCdDeleteA #endif /* UNICODE */ /*------------------------------------------------*/ /********************************************** * Registry APIs for WinStation Drivers (Wds) **********************************************/ LONG WINAPI RegWdEnumerateW( HANDLE hServer, PULONG pIndex, PULONG pEntries, PWDNAMEW pWdName, PULONG pByteCount ); LONG WINAPI RegWdEnumerateA( HANDLE hServer, PULONG pIndex, PULONG pEntries, PWDNAMEA pWdName, PULONG pByteCount ); #ifdef UNICODE #define RegWdEnumerate RegWdEnumerateW #else #define RegWdEnumerate RegWdEnumerateA #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegWdCreateW( HANDLE hServer, PWDNAMEW pWdName, BOOLEAN bCreate, PWDCONFIG2W pWdConfig, ULONG WdConfigLength ); LONG WINAPI RegWdCreateA( HANDLE hServer, PWDNAMEA pWdName, BOOLEAN bCreate, PWDCONFIG2A pWdConfig, ULONG WdConfigLength ); #ifdef UNICODE #define RegWdCreate RegWdCreateW #else #define RegWdCreate RegWdCreateA #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegWdQueryW( HANDLE hServer, PWDNAMEW pWdName, PWDCONFIG2W pWdConfig, ULONG WdConfigLength, PULONG pReturnLength ); LONG WINAPI RegWdQueryA( HANDLE hServer, PWDNAMEA pWdName, PWDCONFIG2A pWdConfig, ULONG WdConfigLength, PULONG pReturnLength ); #ifdef UNICODE #define RegWdQuery RegWdQueryW #else #define RegWdQuery RegWdQueryA #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegWdDeleteW( HANDLE hServer, PWDNAMEW pWdName ); LONG WINAPI RegWdDeleteA( HANDLE hServer, PWDNAMEA pWdName ); #ifdef UNICODE #define RegWdDelete RegWdDeleteW #else #define RegWdDelete RegWdDeleteA #endif /* UNICODE */ /*------------------------------------------------*/ /****************************************************************** * Registry APIs for Transport and Protocol Drivers (Tds and Pds) ******************************************************************/ HANDLE WINAPI RegOpenServerW( LPWSTR hServerName ); HANDLE WINAPI RegOpenServerA( LPSTR hServerName ); #ifdef UNICODE #define RegOpenServer RegOpenServerW #else #define RegOpenServer RegOpenServerA #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegCloseServer( HANDLE hServer ); /*------------------------------------------------*/ LONG WINAPI RegPdEnumerateW( HANDLE hServer, PWDNAMEW pWdName, BOOLEAN bTd, PULONG pIndex, PULONG pEntries, PPDNAMEW pPdName, PULONG pByteCount ); LONG WINAPI RegPdEnumerateA( HANDLE hServer, PWDNAMEA pWdName, BOOLEAN bTd, PULONG pIndex, PULONG pEntries, PPDNAMEA pPdName, PULONG pByteCount ); #ifdef UNICODE #define RegPdEnumerate RegPdEnumerateW #else #define RegPdEnumerate RegPdEnumerateA #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegPdCreateW( HANDLE hServer, PWDNAMEW pWdName, BOOLEAN bTd, PPDNAMEW pPdName, BOOLEAN bCreate, PPDCONFIG3W pPdConfig, ULONG PdConfigLength ); LONG WINAPI RegPdCreateA( HANDLE hServer, PWDNAMEA pWdName, BOOLEAN bTd, PPDNAMEA pPdName, BOOLEAN bCreate, PPDCONFIG3A pPdConfig, ULONG PdConfigLength ); #ifdef UNICODE #define RegPdCreate RegPdCreateW #else #define RegPdCreate RegPdCreateA #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegPdQueryW( HANDLE hServer, PWDNAMEW pWdName, BOOLEAN bTd, PPDNAMEW pPdName, PPDCONFIG3W pPdConfig, ULONG PdConfigLength, PULONG pReturnLength ); LONG WINAPI RegPdQueryA( HANDLE hServer, PWDNAMEA pWdName, BOOLEAN bTd, PPDNAMEA pPdName, PPDCONFIG3A pPdConfig, ULONG PdConfigLength, PULONG pReturnLength ); #ifdef UNICODE #define RegPdQuery RegPdQueryW #else #define RegPdQuery RegPdQueryA #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegPdDeleteW( HANDLE hServer, PWDNAMEW pWdName, BOOLEAN bTd, PPDNAMEW pPdName ); LONG WINAPI RegPdDeleteA( HANDLE hServer, PWDNAMEA pWdName, BOOLEAN bTd, PPDNAMEA pPdName ); #ifdef UNICODE #define RegPdDelete RegPdDeleteW #else #define RegPdDelete RegPdDeleteA #endif /* UNICODE */ /*------------------------------------------------*/ /************************************* * Registry APIs for Window Stations *************************************/ LONG WINAPI RegWinStationAccessCheck( HANDLE hServer, ACCESS_MASK samDesired ); /*------------------------------------------------*/ LONG WINAPI RegWinStationEnumerateW( HANDLE hServer, PULONG pIndex, PULONG pEntries, PWINSTATIONNAMEW pWinStationName, PULONG pByteCount ); /*------------------------------------------------*/ LONG WINAPI RegWinStationEnumerateA( HANDLE hServer, PULONG pIndex, PULONG pEntries, PWINSTATIONNAMEA pWinStationName, PULONG pByteCount ); #ifdef UNICODE #define RegWinStationEnumerate RegWinStationEnumerateW #else #define RegWinStationEnumerate RegWinStationEnumerateA #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegWinStationCreateW( HANDLE hServer, PWINSTATIONNAMEW pWinStationName, BOOLEAN bCreate, PWINSTATIONCONFIG2W pWinStationConfig, ULONG WinStationConfigLength ); LONG WINAPI RegWinStationCreateA( HANDLE hServer, PWINSTATIONNAMEA pWinStationName, BOOLEAN bCreate, PWINSTATIONCONFIG2A pWinStationConfig, ULONG WinStationConfigLength ); LONG WINAPI RegCreateUserConfigW( HANDLE hServer, PWINSTATIONNAMEW pWinStationName, PUSERCONFIG pUser ); #ifdef UNICODE #define RegWinStationCreate RegWinStationCreateW #define RegCreateUserConfig RegCreateUserConfigW #else #define RegWinStationCreate RegWinStationCreateA #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegWinStationQueryW( HANDLE hServer, PWINSTATIONNAMEW pWinStationName, PWINSTATIONCONFIG2W pWinStationConfig, ULONG WinStationConfigLength, PULONG pReturnLength ); LONG WINAPI RegWinStationQueryEx( HANDLE hServer, PPOLICY_TS_MACHINE pMachinePolicy, PWINSTATIONNAMEW pWinStationName, PWINSTATIONCONFIG2W pWinStationConfig, ULONG WinStationConfigLength, PULONG pReturnLength, BOOLEAN bPerformMerger ); LONG WINAPI RegWinStationQueryA( HANDLE hServer, PWINSTATIONNAMEA pWinStationName, PWINSTATIONCONFIG2A pWinStationConfig, ULONG WinStationConfigLength, PULONG pReturnLength ); #ifdef UNICODE #define RegWinStationQuery RegWinStationQueryW #else #define RegWinStationQuery RegWinStationQueryA #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegConsoleShadowQueryA( HANDLE hServer, PWINSTATIONNAMEA pWinStationName, PWDPREFIXA pWdPrefixName, PWINSTATIONCONFIG2A pWinStationConfig, ULONG WinStationConfigLength, PULONG pReturnLength ); LONG WINAPI RegConsoleShadowQueryW( HANDLE hServer, PWINSTATIONNAMEW pWinStationName, PWDPREFIXW pWdPrefixName, PWINSTATIONCONFIG2W pWinStationConfig, ULONG WinStationConfigLength, PULONG pReturnLength ); #ifdef UNICODE #define RegConsoleShadowQuery RegConsoleShadowQueryW #else #define RegConsoleShadowQuery RegConsoleShadowQueryA #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegWinStationDeleteW( HANDLE hServer, PWINSTATIONNAMEW pWinStationName ); LONG WINAPI RegWinStationDeleteA( HANDLE hServer, PWINSTATIONNAMEA pWinStationName ); #ifdef UNICODE #define RegWinStationDelete RegWinStationDeleteW #else #define RegWinStationDelete RegWinStationDeleteA #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegWinStationSetSecurityW( HANDLE hServer, PWINSTATIONNAMEW pWinStationName, PSECURITY_DESCRIPTOR pSecurityDescriptor, ULONG SecurityDescriptorLength ); LONG WINAPI RegWinStationSetSecurityA( HANDLE hServer, PWINSTATIONNAMEA pWinStationName, PSECURITY_DESCRIPTOR pSecurityDescriptor, ULONG SecurityDescriptorLength ); #ifdef UNICODE #define RegWinStationSetSecurity RegWinStationSetSecurityW #else #define RegWinStationSetSecurity RegWinStationSetSecurityA #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegWinStationQuerySecurityW( HANDLE hServer, PWINSTATIONNAMEW pWinStationName, PSECURITY_DESCRIPTOR pSecurityDescriptor, ULONG SecurityDescriptorLength, PULONG SecurityDescriptorLengthRequired ); LONG WINAPI RegWinStationQuerySecurityA( HANDLE hServer, PWINSTATIONNAMEA pWinStationName, PSECURITY_DESCRIPTOR pSecurityDescriptor, ULONG SecurityDescriptorLength, PULONG SecurityDescriptorLengthRequired ); #ifdef UNICODE #define RegWinStationQuerySecurity RegWinStationQuerySecurityW #else #define RegWinStationQuerySecurity RegWinStationQuerySecurityA #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegWinStationQueryDefaultSecurity( HANDLE hServer, PSECURITY_DESCRIPTOR pSecurityDescriptor, ULONG SecurityDescriptorLength, PULONG SecurityDescriptorLengthRequired ); /*------------------------------------------------*/ LONG WINAPI RegWinStationSetNumValueW( HANDLE hServer, PWINSTATIONNAMEW pWinStationName, LPWSTR pValueName, ULONG ValueData ); #ifdef UNICODE #define RegWinStationSetNumValue RegWinStationSetNumValueW #else #define RegWinStationSetNumValue #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegWinStationQueryNumValueW( HANDLE hServer, PWINSTATIONNAMEW pWinStationName, LPWSTR pValueName, PULONG pValueData ); #ifdef UNICODE #define RegWinStationQueryNumValue RegWinStationQueryNumValueW #else #define RegWinStationQueryNumValue #endif /* UNICODE */ /*------------------------------------------------*/ LONG WINAPI RegWinStationQueryValueW( HANDLE hServer, PWINSTATIONNAMEW pWinStationName, LPWSTR pValueName, PVOID pValueData, ULONG ValueSize, PULONG pValueSize ); #ifdef UNICODE #define RegWinStationQueryValue RegWinStationQueryValueW #else #define RegWinStationQueryValue #endif /* UNICODE */ /*------------------------------------------------*/ /********************************************* * Registry APIs for User Configuration Data *********************************************/ /*------------------------------------------------*/ BOOLEAN RegGetUserPolicy( LPWSTR userSID, PPOLICY_TS_USER pPolicy , PUSERCONFIGW pData ); void RegGetMachinePolicy( PPOLICY_TS_MACHINE pPolicy ); void RegMergeMachinePolicy( PPOLICY_TS_MACHINE pPolicy, USERCONFIGW *pMachineConfigData , PWINSTATIONCREATE pCreate ); /*------------------------------------------------*/ LONG WINAPI RegUserConfigSet( WCHAR * pServerName, WCHAR * pUserName, PUSERCONFIGW pUserConfig, ULONG UserConfigLength ); /*------------------------------------------------*/ LONG WINAPI RegUserConfigQuery( WCHAR * pServerName, WCHAR * pUserName, PUSERCONFIGW pUserConfig, ULONG UserConfigLength, PULONG pReturnLength ); /*------------------------------------------------*/ LONG WINAPI RegUserConfigDelete( WCHAR * pServerName, WCHAR * pUserName ); /*------------------------------------------------*/ LONG WINAPI RegUserConfigRename( WCHAR * pServerName, WCHAR * pUserOldName, WCHAR * pUserNewName ); /*------------------------------------------------*/ LONG WINAPI RegDefaultUserConfigQueryW( WCHAR * pServerName, PUSERCONFIGW pUserConfig, ULONG UserConfigLength, PULONG pReturnLength ); LONG WINAPI RegDefaultUserConfigQueryA( CHAR * pServerName, PUSERCONFIGA pUserConfig, ULONG UserConfigLength, PULONG pReturnLength ); #ifdef UNICODE #define RegDefaultUserConfigQuery RegDefaultUserConfigQueryW #else #define RegDefaultUserConfigQuery RegDefaultUserConfigQueryA #endif /* UNICODE */ /*------------------------------------------------*/ /********************************************* * Additional Support Registry APIs *********************************************/ BOOLEAN WINAPI RegIsTServer( WCHAR * pServerName ); BOOLEAN WINAPI RegBuildNumberQuery( PULONG pBuildNum ); BOOLEAN WINAPI RegGetTServerVersion( WCHAR * pServerName, PULONG pVersionNumber ); BOOLEAN WINAPI RegQueryOEMId( BYTE *, ULONG ); typedef struct _PROGRAMCALL { struct _PROGRAMCALL *pFirst; /* Points to first item in sorted list */ struct _PROGRAMCALL *pNext; /* Points to next item in sorted list */ BOOLEAN fAlias; /* TRUE if commmand is an alias (hidden) */ LPWSTR pRegistryMultiString; /* Command info from registry */ USHORT CommandLen; /* min chars needed for command */ PWCHAR Command; /* command string */ PWCHAR Program; /* name of program to execute */ PWCHAR Args; /* extra args to put on command line */ } PROGRAMCALL, /*FAR*/ *PPROGRAMCALL; LONG WINAPI RegQueryUtilityCommandList( LPWSTR pUtilityKey, PPROGRAMCALL * ppProgramCall ); LONG WINAPI RegFreeUtilityCommandList( PPROGRAMCALL pProgramCall ); BOOLEAN WINAPI RegIsMachinePolicyAllowHelp(); /*------------------------------------------------*/ /*********************************** * APIs for Window Station Objects ***********************************/ /*------------------------------------------------*/ HANDLE WINAPI WinStationOpenServerW( LPWSTR pServerName ); HANDLE WINAPI WinStationOpenServerA( LPSTR pServerName ); #ifdef UNICODE #define WinStationOpenServer WinStationOpenServerW #else #define WinStationOpenServer WinStationOpenServerA #endif /* UNICODE */ /*------------------------------------------------*/ BOOLEAN WINAPI WinStationCloseServer( HANDLE hServer ); /*------------------------------------------------*/ BOOLEAN WINAPI WinStationServerPing( HANDLE hServer ); /*------------------------------------------------*/ typedef BOOLEAN (WINAPI * PWINSTATIONENUMERATEW)(HANDLE,PLOGONIDW *,PULONG); typedef BOOLEAN (WINAPI * PWINSTATIONENUMERATEA)(HANDLE,PLOGONIDA *,PULONG); BOOLEAN WINAPI WinStationEnumerateW( HANDLE hServer, PLOGONIDW *ppLogonId, PULONG pEntries ); BOOLEAN WINAPI WinStationEnumerateA( HANDLE hServer, PLOGONIDA *ppLogonId, PULONG pEntries ); #ifdef UNICODE #define WinStationEnumerate WinStationEnumerateW #else #define WinStationEnumerate WinStationEnumerateA #endif /* UNICODE */ /*------------------------------------------------*/ typedef BOOLEAN (WINAPI * PWINSTATIONENUMERATE_INDEXEDW)(HANDLE,PULONG,PLOGONIDW,PULONG,PULONG); typedef BOOLEAN (WINAPI * PWINSTATIONENUMERATE_INDEXEDA)(HANDLE,PULONG,PLOGONIDA,PULONG,PULONG); BOOLEAN WINAPI WinStationEnumerate_IndexedW( HANDLE hServer, PULONG pEntries, PLOGONIDW pLogonId, PULONG pByteCount, PULONG pIndex ); BOOLEAN WINAPI WinStationEnumerate_IndexedA( HANDLE hServer, PULONG pEntries, PLOGONIDA pLogonId, PULONG pByteCount, PULONG pIndex ); #ifdef UNICODE #define WinStationEnumerate_Indexed WinStationEnumerate_IndexedW #else #define WinStationEnumerate_Indexed WinStationEnumerate_IndexedA #endif /* UNICODE */ /*------------------------------------------------*/ BOOLEAN WINAPI WinStationEnumerateProcesses( HANDLE hServer, PVOID *ppProcessBuffer ); /*------------------------------------------------*/ BOOLEAN WINAPI WinStationGetAllProcesses( HANDLE hServer, ULONG Level, ULONG *pNumberOfProcesses, PVOID *ppProcessArray ); /*------------------------------------------------*/ #ifdef _WINBASE_ BOOLEAN WINAPI WinStationGetProcessSid( HANDLE hServer, DWORD ProcessId, FILETIME ProcessStartTime, PBYTE pProcessUserSid, DWORD *pdwSidSize ); #else BOOLEAN WINAPI WinStationGetProcessSid( HANDLE hServer, ULONG ProcessId, LARGE_INTEGER ProcessStartTime, PUCHAR pProcessUserSid, ULONG *pdwSidSize ); #endif BOOLEAN WINAPI WinStationRenameW( HANDLE hServer, PWINSTATIONNAMEW pWinStationNameOld, PWINSTATIONNAMEW pWinStationNameNew ); BOOLEAN WINAPI WinStationRenameA( HANDLE hServer, PWINSTATIONNAMEA pWinStationNameOld, PWINSTATIONNAMEA pWinStationNameNew ); #ifdef UNICODE #define WinStationRename WinStationRenameW #else #define WinStationRename WinStationRenameA #endif /* UNICODE */ /*------------------------------------------------*/ typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG); typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONA)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG); BOOLEAN WINAPI WinStationQueryInformationW( HANDLE hServer, ULONG LogonId, WINSTATIONINFOCLASS WinStationInformationClass, PVOID pWinStationInformation, ULONG WinStationInformationLength, PULONG pReturnLength ); BOOLEAN WINAPI WinStationQueryInformationA( HANDLE hServer, ULONG LogonId, WINSTATIONINFOCLASS WinStationInformationClass, PVOID pWinStationInformation, ULONG WinStationInformationLength, PULONG pReturnLength ); #ifdef UNICODE #define WinStationQueryInformation WinStationQueryInformationW #else #define WinStationQueryInformation WinStationQueryInformationA #endif /* UNICODE */ /*------------------------------------------------*/ BOOLEAN WINAPI WinStationSetInformationW( HANDLE hServer, ULONG LogonId, WINSTATIONINFOCLASS WinStationInformationClass, PVOID pWinStationInformation, ULONG WinStationInformationLength ); BOOLEAN WINAPI WinStationSetInformationA( HANDLE hServer, ULONG LogonId, WINSTATIONINFOCLASS WinStationInformationClass, PVOID pWinStationInformation, ULONG WinStationInformationLength ); #ifdef UNICODE #define WinStationSetInformation WinStationSetInformationW #else #define WinStationSetInformation WinStationSetInformationA #endif /* UNICODE */ /*------------------------------------------------*/ BOOLEAN WINAPI WinStationGetLanAdapterNameW( HANDLE hServer, ULONG LanAdapter, ULONG pdNameLength, PWCHAR pPdName, ULONG *pLength, PWCHAR *ppLanAdapter ); BOOLEAN WINAPI WinStationGetLanAdapterNameA( HANDLE hServer, ULONG LanAdapter, ULONG pdNameLength, PCHAR pPdName, ULONG *pLength, PCHAR *ppLanAdapter ); #ifdef UNICODE #define WinStationGetLanAdapterName WinStationGetLanAdapterNameW #else #define WinStationGetLanAdapterName WinStationGetLanAdapterNameA #endif /* UNICODE */ /*------------------------------------------------*/ BOOLEAN WINAPI WinStationSendMessageW( HANDLE hServer, ULONG LogonId, LPWSTR pTitle, ULONG TitleLength, LPWSTR pMessage, ULONG MessageLength, ULONG Style, ULONG Timeout, PULONG pResponse, BOOLEAN DoNotWait ); BOOLEAN WINAPI WinStationSendMessageA( HANDLE hServer, ULONG LogonId, LPSTR pTitle, ULONG TitleLength, LPSTR pMessage, ULONG MessageLength, ULONG Style, ULONG Timeout, PULONG pResponse, BOOLEAN DoNotWait ); #ifdef UNICODE #define WinStationSendMessage WinStationSendMessageW #else #define WinStationSendMessage WinStationSendMessageA #endif /* UNICODE */ /* * These are new pResponse values */ #define IDTIMEOUT 32000 // The MsgBox timed out before a user response #define IDASYNC 32001 // The request was for an Async message box, no return #define IDERROR 32002 // an error occured that resulted in not displaying #define IDCOUNTEXCEEDED 32003 // to many in queue for winstation already #define IDDESKTOPERROR 32004 // current desktop is not default /*------------------------------------------------*/ BOOLEAN WINAPI LogonIdFromWinStationNameW( HANDLE hServer, PWINSTATIONNAMEW pWinStationName, PULONG pLogonId ); BOOLEAN WINAPI LogonIdFromWinStationNameA( HANDLE hServer, PWINSTATIONNAMEA pWinStationName, PULONG pLogonId ); #ifdef UNICODE #define LogonIdFromWinStationName LogonIdFromWinStationNameW #else #define LogonIdFromWinStationName LogonIdFromWinStationNameA #endif /* UNICODE */ /*------------------------------------------------*/ BOOLEAN WINAPI WinStationNameFromLogonIdW( HANDLE hServer, ULONG LogonId, PWINSTATIONNAMEW pWinStationName ); BOOLEAN WINAPI WinStationNameFromLogonIdA( HANDLE hServer, ULONG LogonId, PWINSTATIONNAMEA pWinStationName ); #ifdef UNICODE #define WinStationNameFromLogonId WinStationNameFromLogonIdW #else #define WinStationNameFromLogonId WinStationNameFromLogonIdA #endif /* UNICODE */ /*------------------------------------------------*/ BOOLEAN WINAPI WinStationConnectW( HANDLE hServer, ULONG LogonId, ULONG TargetLogonId, PWCHAR pPassword, BOOLEAN bWait ); BOOLEAN WINAPI WinStationConnectA( HANDLE hServer, ULONG LogonId, ULONG TargetLogonId, PCHAR pPassword, BOOLEAN bWait ); #ifdef UNICODE #define WinStationConnect WinStationConnectW #else #define WinStationConnect WinStationConnectA #endif /* UNICODE */ /*------------------------------------------------*/ HANDLE WINAPI WinStationVirtualOpen( HANDLE hServer, ULONG LogonId, PVIRTUALCHANNELNAME pVirtualChannelName /* ascii name */ ); typedef HANDLE (WINAPI * PWINSTATIONBEEPOPEN)(ULONG); HANDLE WINAPI _WinStationBeepOpen( ULONG LogonId ); BOOLEAN WINAPI WinStationDisconnect( HANDLE hServer, ULONG LogonId, BOOLEAN bWait ); BOOLEAN WINAPI WinStationReset( HANDLE hServer, ULONG LogonId, BOOLEAN bWait ); BOOLEAN WINAPI WinStationShadowStop( HANDLE hServer, ULONG LogonId, BOOLEAN bWait ); BOOLEAN WINAPI WinStationShutdownSystem( HANDLE hServer, ULONG ShutdownFlags ); #define WSD_LOGOFF 0x00000001 // force WinStations to logoff #define WSD_SHUTDOWN 0x00000002 // shutdown system #define WSD_REBOOT 0x00000004 // reboot after shutdown #define WSD_POWEROFF 0x00000008 // reboot after shutdown #define WSD_FASTREBOOT 0x00000010 // CTRL-SHIFT-ALT-DEL fast reboot typedef BOOLEAN (WINAPI * PWINSTATIONWAITSYSTEMEVENT)(HANDLE,ULONG,PULONG); BOOLEAN WINAPI WinStationWaitSystemEvent( HANDLE hServer, ULONG EventMask, PULONG pEventFlags ); BOOLEAN WINAPI WinStationShadow( HANDLE hServer, PWSTR pTargetServerName, ULONG TargetLogonId, BYTE HotkeyVk, USHORT HotkeyModifiers ); typedef BOOLEAN (WINAPI * PWINSTATIONFREEMEMORY)( PVOID ); BOOLEAN WINAPI WinStationFreeMemory( PVOID pBuffer ); BOOLEAN WINAPI WinStationFreeGAPMemory( ULONG Level, PVOID ProcessArray, ULONG NbProcesses ); BOOLEAN WINAPI WinStationTerminateProcess( HANDLE hServer, ULONG ProcessId, ULONG ExitCode ); BOOLEAN WINAPI WinStationNtsdDebug( ULONG LogonId, LONG ProcessId, ULONG DbgProcessId, ULONG DbgThreadId, PVOID AttachCompletionRoutine ); BOOLEAN WINAPI _WinStationCallback( HANDLE hServer, ULONG LogonId, LPWSTR pPhoneNumber ); BOOLEAN WINAPI _WinStationBreakPoint( HANDLE hServer, ULONG LogonId, BOOLEAN KernelFlag ); BOOLEAN WINAPI _WinStationReadRegistry( HANDLE hServer ); BOOLEAN WINAPI _WinStationUpdateSettings( HANDLE hServer, WINSTATIONUPDATECFGCLASS SettingsClass, ULONG SettingsParameters ); BOOLEAN WINAPI _WinStationWaitForConnect( VOID ); BOOLEAN WINAPI _WinStationNotifyLogon( BOOLEAN fUserIsAdmin, HANDLE UserToken, PWCHAR pDomain, PWCHAR pUserName, PWCHAR pPassword, UCHAR Seed, PUSERCONFIGW pUserConfig, BOOLEAN *pfIsRedirected ); BOOLEAN WINAPI _WinStationNotifyLogoff( VOID ); BOOLEAN WINAPI _WinStationNotifyNewSession( HANDLE hServer, ULONG LogonId ); BOOLEAN WINAPI _WinStationGetApplicationInfo( HANDLE hServer, ULONG LogonId, PBOOLEAN pfPublished, PBOOLEAN pfAnonymous ); BOOLEAN WINAPI _WinStationCheckForApplicationName( HANDLE hServer, ULONG LogonId, PWCHAR pUserName, ULONG UserNameSize, PWCHAR pDomain, ULONG DomainSize, PWCHAR pPassword, ULONG *pPasswordSize, ULONG MaxPasswordSize, PCHAR pSeed, PBOOLEAN pfPublished, PBOOLEAN pfAnonymous ); BOOLEAN WINAPI _WinStationReInitializeSecurity( HANDLE hServer ); BOOLEAN WINAPI _WinStationUpdateClientCachedCredentials( PWCHAR pDomain, PWCHAR pUserName, BOOLEAN fSmartCard ); BOOLEAN WINAPI _WinStationFUSCanRemoteUserDisconnect( ULONG LogonId, PWCHAR pDomain, PWCHAR pUserName ); BOOLEAN WINAPI WinStationCheckLoopBack( HANDLE hServer, ULONG ClientSessionId, ULONG TargetLogonId, LPWSTR pTargetServerName ); BOOLEAN WINAPI _WinStationNotifyDisconnectPipe( VOID ); BOOLEAN WINAPI _WinStationSessionInitialized( VOID ); BOOLEAN WINAPI WinStationCheckAccess( HANDLE UserToken, ULONG TargetLogonId, ULONG DesiredAccess ); /******************************************************************* * WinStation APIs for Generic Licensing * (The WinStation extension DLL determines actual implementation) *******************************************************************/ BOOLEAN WINAPI WinStationGenerateLicense( HANDLE hServer, PWCHAR pSerialNumberString, PVOID pLicense, ULONG LicenseSize ); BOOLEAN WINAPI WinStationInstallLicense( HANDLE hServer, PVOID pLicense, ULONG LicenseSize ); typedef BOOLEAN (WINAPI * PWINSTATIONENUMERATELICENSES)( HANDLE, PCHAR *, ULONG * ); BOOLEAN WINAPI WinStationEnumerateLicenses( HANDLE hServer, PVOID *ppLicense, ULONG *pEntries ); BOOLEAN WINAPI WinStationActivateLicense( HANDLE hServer, PVOID pLicense, ULONG LicenseSize, PWCHAR pActivationCode ); BOOLEAN WINAPI WinStationRemoveLicense( HANDLE hServer, PVOID pLicense, ULONG LicenseSize ); BOOLEAN WINAPI WinStationSetPoolCount( HANDLE hServer, PVOID pLicense, ULONG LicenseSize ); BOOLEAN WINAPI WinStationQueryLicense( HANDLE hServer, PVOID pLicenseCounts, ULONG ByteCount ); BOOLEAN WINAPI WinStationQueryUpdateRequired( HANDLE hServer, PULONG pUpdateFlag ); BOOLEAN WINAPI _WinStationAnnoyancePopup( HANDLE hServer, ULONG LogonId ); BOOLEAN WINAPI WinStationGetTermSrvCountersValue( HANDLE hServer, ULONG dwEntries, PVOID pCounter ); #ifdef _WINBASE_ LONG WINAPI WinStationBroadcastSystemMessage( HANDLE hServer, BOOL sendToAllWinstations, ULONG sessionID, ULONG timeOut, DWORD dwFlags, DWORD *lpdwRecipients, ULONG uiMessage, WPARAM wParam, LPARAM lParam, LONG *pResponse ); LONG WINAPI WinStationSendWindowMessage( HANDLE hServer, ULONG sessionID, ULONG timeOut, ULONG hWnd, ULONG Msg, WPARAM wParam, LPARAM lParam, LONG *pResponse ); BOOLEAN WinStationGetMachinePolicy ( HANDLE hServer, POLICY_TS_MACHINE *pPolicy ); #endif // // This API consolidates the previous two APIs used by Winlogon to retrieve // auto-logon credentials. It is hardcoded to use the local server only, for // the caller's session only. Is is UNICODE only, as well. The parameter is // actually a PWLX_CLIENT_CREDENTIALS_INFO of at least version 2. // #ifdef _WINBASE_ #include BOOLEAN WINAPI WinStationQueryLogonCredentialsW( PWLX_CLIENT_CREDENTIALS_INFO_V2_0 pCredentials ); /* __CONSOLE_NOTIFY__ */ // notification masks. #define CREATE_MASK(__bit) (1 << (__bit -1) ) #define WTS_CONSOLE_CONNECT_MASK CREATE_MASK( WTS_CONSOLE_CONNECT ) #define WTS_CONSOLE_DISCONNECT_MASK CREATE_MASK( WTS_CONSOLE_DISCONNECT ) #define WTS_REMOTE_CONNECT_MASK CREATE_MASK( WTS_REMOTE_CONNECT ) #define WTS_REMOTE_DISCONNECT_MASK CREATE_MASK( WTS_REMOTE_DISCONNECT ) #define WTS_SESSION_LOGON_MASK CREATE_MASK( WTS_SESSION_LOGON ) #define WTS_SESSION_LOGOFF_MASK CREATE_MASK( WTS_SESSION_LOGOFF ) #define WTS_SESSION_LOCK_MASK CREATE_MASK( WTS_SESSION_LOCK ) #define WTS_SESSION_UNLOCK_MASK CREATE_MASK( WTS_SESSION_UNLOCK ) #define WTS_SESSION_REMOTE_CONTROL_MASK CREATE_MASK( WTS_SESSION_REMOTE_CONTROL ) #define WTS_ALL_NOTIFICATION_MASK 0xFFFFFFFF BOOL WINAPI WinStationRegisterConsoleNotification ( HANDLE hServer, HWND hWnd, DWORD dwFlags ); BOOL WINAPI WinStationRegisterConsoleNotificationEx ( HANDLE hServer, HWND hWnd, DWORD dwFlags, DWORD dwMask ); BOOL WINAPI WinStationUnRegisterConsoleNotification ( HANDLE hServer, HWND hWnd ); BOOL WINAPI WinStationRegisterNotificationEvent ( HANDLE hEventHandle, ULONG_PTR *pNotificationId, DWORD dwFlags, DWORD dwMask ); BOOL WINAPI WinStationUnRegisterNotificationEvent ( ULONG_PTR NotificationId ); /* __CONSOLE_NOTIFY__ */ #endif // _WINBASE_ // handle rdpwd including this //----------------------------------------------------------------------------- // // The following APIs are only for supporting a 5.1 client to 5.0 server // connection. On a 5.1 server, ERROR_INVALID_FUNCTION will be returned. // //----------------------------------------------------------------------------- BOOLEAN WINAPI ServerGetInternetConnectorStatus( HANDLE hServer, ULONG *pResult, PBOOLEAN pfEnabled ); BOOLEAN WINAPI ServerSetInternetConnectorStatus( HANDLE hServer, ULONG *pResult, BOOLEAN fEnabled ); /*-ServerQueryInetConnectorInformation-------------*/ BOOLEAN WINAPI ServerQueryInetConnectorInformationW( HANDLE hServer, PVOID pWinStationInformation, ULONG WinStationInformationLength, PULONG pReturnLength ); BOOLEAN WINAPI ServerQueryInetConnectorInformationA( HANDLE hServer, PVOID pWinStationInformation, ULONG WinStationInformationLength, PULONG pReturnLength ); #ifdef UNICODE #define ServerQueryInetConnectorInformation ServerQueryInetConnectorInformationW #else #define ServerQueryInetConnectorInformation ServerQueryInetConnectorInformationA #endif /* UNICODE */ /*-------------------------------------------------*/ // // Surround these APIs with a check for winbase.h. Termdd is including this // file, but doesn't understand winbase types (DWORD). // #ifdef _WINBASE_ HANDLE WINAPI ServerLicensingOpenW( LPWSTR pszServerName ); HANDLE WINAPI ServerLicensingOpenA( LPSTR pszServerName ); #ifdef UNICODE #define ServerLicensingOpen ServerLicensingOpenW #else #define ServerLicensingOpen ServerLicensingOpenA #endif VOID WINAPI ServerLicensingClose( HANDLE hServer ); BOOLEAN WINAPI ServerLicensingLoadPolicy( HANDLE hServer, ULONG ulPolicyId ); BOOLEAN WINAPI ServerLicensingUnloadPolicy( HANDLE hServer, ULONG ulPolicyId ); DWORD WINAPI ServerLicensingSetPolicy( HANDLE hServer, ULONG ulPolicyId, LPDWORD lpNewPolicyStatus ); BOOLEAN WINAPI ServerLicensingGetAvailablePolicyIds( HANDLE hServer, PULONG *ppulPolicyIds, PULONG pcPolicies ); BOOLEAN WINAPI ServerLicensingGetPolicy( HANDLE hServer, PULONG pulPolicyId ); BOOLEAN WINAPI ServerLicensingGetPolicyInformationW( HANDLE hServer, ULONG ulPolicyId, PULONG pulVersion, LPLCPOLICYINFOGENERIC *ppPolicyInfo ); BOOLEAN WINAPI ServerLicensingGetPolicyInformationA( HANDLE hServer, ULONG ulPolicyId, PULONG pulVersion, LPLCPOLICYINFOGENERIC *ppPolicyInfo ); VOID ServerLicensingFreePolicyInformation( LPLCPOLICYINFOGENERIC *ppPolicyInfo ); BOOLEAN WinStationConnectCallback( HANDLE hServer, DWORD Timeout, ULONG AddressType, PBYTE pAddress, ULONG AddressSize ); #ifdef UNICODE #define ServerLicensingGetPolicyInformation ServerLicensingGetPolicyInformationW #else #define ServerLicensingGetPolicyInformation ServerLicensingGetPolicyInformationA #endif BOOLEAN WINAPI ServerLicensingDeactivateCurrentPolicy( HANDLE hServer ); #endif // _WINBASE_ BOOLEAN WINAPI WinStationIsHelpAssistantSession( HANDLE hServer, ULONG SessionId ); BOOLEAN WINAPI RemoteAssistancePrepareSystemRestore( HANDLE hServer ); ULONG WINAPI WinStationAutoReconnect( ULONG flags ); BOOLEAN WINAPI _WinStationOpenSessionDirectory( HANDLE hServer, LPWSTR pszServerName ); #ifdef __cplusplus } #endif #endif /* !_INC_WINSTAH */