/*++ Copyright (c) 1990 Microsoft Corporation Module Name: basemsg.h Abstract: This include file defines the message formats used to communicate between the client and server portions of the BASE portion of the Windows subsystem. Author: Steve Wood (stevewo) 25-Oct-1990 Revision History: --*/ #ifndef _WINDOWS_BASEMSG_ #define _WINDOWS_BASEMSG_ #if _MSC_VER > 1000 #pragma once #endif #ifndef NTOSKRNL_WMI // Don't include this in kernel mode WMI code // // This structure is filled in by the client prior to connecting to the BASESRV // DLL in the Windows subsystem server. The server DLL will fill in the OUT // fields if prior to accepting the connection. // typedef struct _BASESRV_API_CONNECTINFO { IN ULONG ExpectedVersion; OUT HANDLE DefaultObjectDirectory; OUT ULONG WindowsVersion; OUT ULONG CurrentVersion; OUT ULONG DebugFlags; OUT WCHAR WindowsDirectory[ MAX_PATH ]; OUT WCHAR WindowsSystemDirectory[ MAX_PATH ]; } BASESRV_API_CONNECTINFO, *PBASESRV_API_CONNECTINFO; #define BASESRV_VERSION 0x10000 #endif // // Message format for messages sent from the client to the server // typedef enum _BASESRV_API_NUMBER { BasepCreateProcess = BASESRV_FIRST_API_NUMBER, BasepCreateThread, BasepGetTempFile, BasepExitProcess, BasepDebugProcess, BasepCheckVDM, BasepUpdateVDMEntry, BasepGetNextVDMCommand, BasepExitVDM, BasepIsFirstVDM, BasepGetVDMExitCode, BasepSetReenterCount, BasepSetProcessShutdownParam, BasepGetProcessShutdownParam, BasepNlsSetUserInfo, BasepNlsSetMultipleUserInfo, BasepNlsCreateSection, BasepSetVDMCurDirs, BasepGetVDMCurDirs, BasepBatNotification, BasepRegisterWowExec, BasepSoundSentryNotification, BasepRefreshIniFileMapping, BasepDefineDosDevice, BasepSetTermsrvAppInstallMode, BasepNlsUpdateCacheCount, BasepSetTermsrvClientTimeZone, BasepSxsCreateActivationContext, BasepDebugProcessStop, BasepRegisterThread, BasepNlsGetUserInfo, BasepMaxApiNumber } BASESRV_API_NUMBER, *PBASESRV_API_NUMBER; #ifndef NTOSKRNL_WMI // Don't include this in kernel mode WMI code typedef struct _BASE_NLS_SET_USER_INFO_MSG { LCTYPE LCType; LPWSTR pData; ULONG DataLength; } BASE_NLS_SET_USER_INFO_MSG, *PBASE_NLS_SET_USER_INFO_MSG; typedef struct _BASE_NLS_GET_USER_INFO_MSG { LCID Locale; SIZE_T CacheOffset; LPWSTR pData; ULONG DataLength; } BASE_NLS_GET_USER_INFO_MSG, *PBASE_NLS_GET_USER_INFO_MSG; typedef struct _BASE_NLS_SET_MULTIPLE_USER_INFO_MSG { ULONG Flags; ULONG DataLength; LPWSTR pPicture; LPWSTR pSeparator; LPWSTR pOrder; LPWSTR pTLZero; LPWSTR pTimeMarkPosn; } BASE_NLS_SET_MULTIPLE_USER_INFO_MSG, *PBASE_NLS_SET_MULTIPLE_USER_INFO_MSG; typedef struct _BASE_NLS_CREATE_SECTION_MSG { HANDLE hNewSection; UINT uiType; LCID Locale; } BASE_NLS_CREATE_SECTION_MSG, *PBASE_NLS_CREATE_SECTION_MSG; #define NLS_CREATE_SECTION_UNICODE 1 #define NLS_CREATE_SECTION_LOCALE 2 #define NLS_CREATE_SECTION_CTYPE 3 #define NLS_CREATE_SECTION_SORTKEY 4 #define NLS_CREATE_SECTION_SORTTBLS 5 #define NLS_CREATE_SECTION_DEFAULT_OEMCP 6 #define NLS_CREATE_SECTION_DEFAULT_ACP 7 #define NLS_CREATE_SECTION_LANG_EXCEPT 8 #define NLS_CREATE_SORT_SECTION 9 #define NLS_CREATE_LANG_EXCEPTION_SECTION 10 #define NLS_CREATE_CODEPAGE_SECTION 11 #define NLS_CREATE_SECTION_GEO 12 typedef struct _BASE_NLS_UPDATE_CACHE_COUNT_MSG { ULONG Reserved; } BASE_NLS_UPDATE_CACHE_COUNT_MSG, *PBASE_NLS_UPDATE_CACHE_COUNT_MSG; typedef struct _BASE_SHUTDOWNPARAM_MSG { ULONG ShutdownLevel; ULONG ShutdownFlags; } BASE_SHUTDOWNPARAM_MSG, *PBASE_SHUTDOWNPARAM_MSG; // NONE must be 0 due to RtlZeroMemory use. #define BASE_MSG_PATHTYPE_NONE (0) #define BASE_MSG_PATHTYPE_FILE (1) #define BASE_MSG_PATHTYPE_URL (2) #define BASE_MSG_PATHTYPE_OVERRIDE (3) // NONE must be 0 due to RtlZeroMemory use. #define BASE_MSG_FILETYPE_NONE (0) #define BASE_MSG_FILETYPE_XML (1) #define BASE_MSG_FILETYPE_PRECOMPILED_XML (2) // NONE must be 0 due to RtlZeroMemory use. #define BASE_MSG_HANDLETYPE_NONE (0) #define BASE_MSG_HANDLETYPE_PROCESS (1) #define BASE_MSG_HANDLETYPE_CLIENT_PROCESS (2) #define BASE_MSG_HANDLETYPE_SECTION (3) #define BASE_MSG_SXS_MANIFEST_PRESENT (0x0001) #define BASE_MSG_SXS_POLICY_PRESENT (0x0002) #define BASE_MSG_SXS_SYSTEM_DEFAULT_TEXTUAL_ASSEMBLY_IDENTITY_PRESENT (0x0004) #define BASE_MSG_SXS_TEXTUAL_ASSEMBLY_IDENTITY_PRESENT (0x0008) typedef struct _BASE_MSG_SXS_STREAM { IN UCHAR FileType; IN UCHAR PathType; IN UCHAR HandleType; IN UNICODE_STRING Path; IN HANDLE FileHandle; IN HANDLE Handle; IN ULONGLONG Offset; // big enough to hold file offsets in the future IN SIZE_T Size; } BASE_MSG_SXS_STREAM, *PBASE_MSG_SXS_STREAM; typedef const BASE_MSG_SXS_STREAM* PCBASE_MSG_SXS_STREAM; typedef struct _BASE_SXS_CREATEPROCESS_MSG { IN ULONG Flags; IN BASE_MSG_SXS_STREAM Manifest; IN BASE_MSG_SXS_STREAM Policy; IN UNICODE_STRING AssemblyDirectory; } BASE_SXS_CREATEPROCESS_MSG, *PBASE_SXS_CREATEPROCESS_MSG; typedef const BASE_SXS_CREATEPROCESS_MSG* PCBASE_SXS_CREATEPROCESS_MSG; typedef struct _BASE_CREATEPROCESS_MSG { HANDLE ProcessHandle; HANDLE ThreadHandle; CLIENT_ID ClientId; CLIENT_ID DebuggerClientId; ULONG CreationFlags; ULONG VdmBinaryType; ULONG VdmTask; HANDLE hVDM; BASE_SXS_CREATEPROCESS_MSG Sxs; ULONGLONG Peb; USHORT ProcessorArchitecture; } BASE_CREATEPROCESS_MSG, *PBASE_CREATEPROCESS_MSG; #endif typedef struct _BASE_CREATETHREAD_MSG { HANDLE ThreadHandle; CLIENT_ID ClientId; } BASE_CREATETHREAD_MSG, *PBASE_CREATETHREAD_MSG; #ifndef NTOSKRNL_WMI // Don't include this in kernel mode WMI code typedef struct _BASE_GETTEMPFILE_MSG { UINT uUnique; } BASE_GETTEMPFILE_MSG, *PBASE_GETTEMPFILE_MSG; typedef struct _BASE_EXITPROCESS_MSG { UINT uExitCode; } BASE_EXITPROCESS_MSG, *PBASE_EXITPROCESS_MSG; typedef struct _BASE_DEBUGPROCESS_MSG { DWORD dwProcessId; CLIENT_ID DebuggerClientId; PVOID AttachCompleteRoutine; } BASE_DEBUGPROCESS_MSG, *PBASE_DEBUGPROCESS_MSG; typedef struct _BASE_CHECKVDM_MSG { ULONG iTask; HANDLE ConsoleHandle; ULONG BinaryType; HANDLE WaitObjectForParent; HANDLE StdIn; HANDLE StdOut; HANDLE StdErr; ULONG CodePage; ULONG dwCreationFlags; PCHAR CmdLine; PCHAR AppName; PCHAR PifFile; PCHAR CurDirectory; PCHAR Env; ULONG EnvLen; LPSTARTUPINFOA StartupInfo; PCHAR Desktop; ULONG DesktopLen; PCHAR Title; ULONG TitleLen; PCHAR Reserved; ULONG ReservedLen; USHORT CmdLen; USHORT AppLen; USHORT PifLen; USHORT CurDirectoryLen; USHORT CurDrive; USHORT VDMState; } BASE_CHECKVDM_MSG, *PBASE_CHECKVDM_MSG; typedef struct _BASE_UPDATE_VDM_ENTRY_MSG { ULONG iTask; ULONG BinaryType; HANDLE ConsoleHandle; HANDLE VDMProcessHandle; HANDLE WaitObjectForParent; WORD EntryIndex; WORD VDMCreationState; } BASE_UPDATE_VDM_ENTRY_MSG, *PBASE_UPDATE_VDM_ENTRY_MSG; typedef struct _BASE_GET_NEXT_VDM_COMMAND_MSG { ULONG iTask; HANDLE ConsoleHandle; HANDLE WaitObjectForVDM; HANDLE StdIn; HANDLE StdOut; HANDLE StdErr; ULONG CodePage; ULONG dwCreationFlags; ULONG ExitCode; PCHAR CmdLine; PCHAR AppName; PCHAR PifFile; PCHAR CurDirectory; PCHAR Env; ULONG EnvLen; LPSTARTUPINFOA StartupInfo; PCHAR Desktop; ULONG DesktopLen; PCHAR Title; ULONG TitleLen; PCHAR Reserved; ULONG ReservedLen; USHORT CurrentDrive; USHORT CmdLen; USHORT AppLen; USHORT PifLen; USHORT CurDirectoryLen; USHORT VDMState; BOOLEAN fComingFromBat; } BASE_GET_NEXT_VDM_COMMAND_MSG, *PBASE_GET_NEXT_VDM_COMMAND_MSG; typedef struct _BASE_EXIT_VDM_MSG { HANDLE ConsoleHandle; ULONG iWowTask; HANDLE WaitObjectForVDM; } BASE_EXIT_VDM_MSG, *PBASE_EXIT_VDM_MSG; typedef struct _BASE_SET_REENTER_COUNT { HANDLE ConsoleHandle; ULONG fIncDec; } BASE_SET_REENTER_COUNT_MSG, *PBASE_SET_REENTER_COUNT_MSG; typedef struct _BASE_IS_FIRST_VDM_MSG { BOOL FirstVDM; } BASE_IS_FIRST_VDM_MSG, *PBASE_IS_FIRST_VDM_MSG; typedef struct _BASE_GET_VDM_EXIT_CODE_MSG { HANDLE ConsoleHandle; HANDLE hParent; ULONG ExitCode; } BASE_GET_VDM_EXIT_CODE_MSG, *PBASE_GET_VDM_EXIT_CODE_MSG; typedef struct _BASE_GET_SET_VDM_CUR_DIRS_MSG { HANDLE ConsoleHandle; PCHAR lpszzCurDirs; ULONG cchCurDirs; } BASE_GET_SET_VDM_CUR_DIRS_MSG, *PBASE_GET_SET_VDM_CUR_DIRS_MSG; typedef struct _BASE_BAT_NOTIFICATION_MSG { HANDLE ConsoleHandle; ULONG fBeginEnd; } BASE_BAT_NOTIFICATION_MSG, *PBASE_BAT_NOTIFICATION_MSG; typedef struct _BASE_REGISTER_WOWEXEC_MSG { HANDLE hwndWowExec; HANDLE ConsoleHandle; } BASE_REGISTER_WOWEXEC_MSG, *PBASE_REGISTER_WOWEXEC_MSG; typedef struct _BASE_SOUNDSENTRY_NOTIFICATION_MSG { ULONG VideoMode; } BASE_SOUNDSENTRY_NOTIFICATION_MSG, *PBASE_SOUNDSENTRY_NOTIFICATION_MSG; typedef struct _BASE_REFRESHINIFILEMAPPING_MSG { UNICODE_STRING IniFileName; } BASE_REFRESHINIFILEMAPPING_MSG, *PBASE_REFRESHINIFILEMAPPING_MSG; typedef struct _BASE_DEFINEDOSDEVICE_MSG { ULONG Flags; UNICODE_STRING DeviceName; UNICODE_STRING TargetPath; } BASE_DEFINEDOSDEVICE_MSG, *PBASE_DEFINEDOSDEVICE_MSG; typedef struct _BASE_SET_TERMSRVAPPINSTALLMODE { BOOL bState; } BASE_SET_TERMSRVAPPINSTALLMODE, *PBASE_SET_TERMSRVAPPINSTALLMODE; //struct for transferring time zone information typedef struct _BASE_SET_TERMSRVCLIENTTIMEZONE { BOOL fFirstChunk; //TRUE if it is first chunk of information //(StandardX values) LONG Bias; //current bias WCHAR Name[32];//StandardName or DaylightName SYSTEMTIME Date;//StandardDate or DaylightDate LONG Bias1; //StandardBias or DaylightBias KSYSTEM_TIME RealBias; //current bias which is used in GetLocalTime etc. ULONG TimeZoneId; } BASE_SET_TERMSRVCLIENTTIMEZONE, *PBASE_SET_TERMSRVCLIENTTIMEZONE; typedef struct _BASE_SXS_CREATE_ACTIVATION_CONTEXT_MSG { IN ULONG Flags; IN USHORT ProcessorArchitecture; IN LANGID LangId; IN BASE_MSG_SXS_STREAM Manifest; IN BASE_MSG_SXS_STREAM Policy; IN UNICODE_STRING AssemblyDirectory; IN UNICODE_STRING TextualAssemblyIdentity; // // Csrss writes a PVOID through this PVOID. // It assumes the PVOID to write is of native size; // for a while it was. Now, it often is not, so // we do some manual marshalling in base\win32\client\csrsxs.c // to make it right. We leave this as plain PVOID // instead of say PVOID* (as it was for a while) to // defeat the wow64 thunk generator. // // The thunks can be seen in // base\wow64\whbase\obj\ia64\whbase.c // PVOID ActivationContextData; } BASE_SXS_CREATE_ACTIVATION_CONTEXT_MSG, *PBASE_SXS_CREATE_ACTIVATION_CONTEXT_MSG; typedef const BASE_SXS_CREATE_ACTIVATION_CONTEXT_MSG* PCBASE_SXS_CREATE_ACTIVATION_CONTEXT_MSG; #endif typedef struct _BASE_API_MSG { PORT_MESSAGE h; PCSR_CAPTURE_HEADER CaptureBuffer; CSR_API_NUMBER ApiNumber; ULONG ReturnValue; ULONG Reserved; union { #ifndef NTOSKRNL_WMI // Don't include this in kernel mode WMI code BASE_NLS_SET_USER_INFO_MSG NlsSetUserInfo; BASE_NLS_GET_USER_INFO_MSG NlsGetUserInfo; BASE_NLS_SET_MULTIPLE_USER_INFO_MSG NlsSetMultipleUserInfo; BASE_NLS_UPDATE_CACHE_COUNT_MSG NlsCacheUpdateCount; BASE_NLS_CREATE_SECTION_MSG NlsCreateSection; BASE_SHUTDOWNPARAM_MSG ShutdownParam; BASE_CREATEPROCESS_MSG CreateProcess; #endif BASE_CREATETHREAD_MSG CreateThread; #ifndef NTOSKRNL_WMI // Don't include this in kernel mode WMI code BASE_GETTEMPFILE_MSG GetTempFile; BASE_EXITPROCESS_MSG ExitProcess; BASE_DEBUGPROCESS_MSG DebugProcess; BASE_CHECKVDM_MSG CheckVDM; BASE_UPDATE_VDM_ENTRY_MSG UpdateVDMEntry; BASE_GET_NEXT_VDM_COMMAND_MSG GetNextVDMCommand; BASE_EXIT_VDM_MSG ExitVDM; BASE_IS_FIRST_VDM_MSG IsFirstVDM; BASE_GET_VDM_EXIT_CODE_MSG GetVDMExitCode; BASE_SET_REENTER_COUNT_MSG SetReenterCount; BASE_GET_SET_VDM_CUR_DIRS_MSG GetSetVDMCurDirs; BASE_BAT_NOTIFICATION_MSG BatNotification; BASE_REGISTER_WOWEXEC_MSG RegisterWowExec; BASE_SOUNDSENTRY_NOTIFICATION_MSG SoundSentryNotification; BASE_REFRESHINIFILEMAPPING_MSG RefreshIniFileMapping; BASE_DEFINEDOSDEVICE_MSG DefineDosDeviceApi; BASE_SET_TERMSRVAPPINSTALLMODE SetTermsrvAppInstallMode; BASE_SET_TERMSRVCLIENTTIMEZONE SetTermsrvClientTimeZone; BASE_SXS_CREATE_ACTIVATION_CONTEXT_MSG SxsCreateActivationContext; #endif } u; } BASE_API_MSG, *PBASE_API_MSG; #if !defined(SORTPP_PASS) // The Wow64 thunk generation tools don't like this. C_ASSERT(sizeof(BASE_API_MSG) <= sizeof(CSR_API_MSG)); #endif #endif //_WINDOWS_BASEMSG_