Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

3617 lines
97 KiB

/***************************************************************************
*
* 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 */