|
|
/*************************************************************************** * * 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 <hydrix.h> #include <ctxdef.h>
/*********** * 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 // <unused> #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 // <unused> #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 <winwlx.h>
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 */
|