windows-nt/Source/XPSP1/NT/base/win32/inc/basemsg.h
2020-09-26 16:20:57 +08:00

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_