434 lines
13 KiB
C
434 lines
13 KiB
C
/*++
|
|
|
|
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_
|