/*++ Copyright (c) 1989 Microsoft Corporation Module Name: os2ssmsg.h Abstract: Include file that defines the message formats needed to communicate with the OS/2 Subsystem Server process Author: Steve Wood (stevewo) 18-Sep-1989 Revision History: --*/ #define OS2_SS_API_PORT_NAME L"\\OS2SS\\ApiPort" #define OS2_SS_DEBUG_PORT_NAME L"\\OS2SS\\DebugPort" #define OS2_SS_EXCEPTION_PORT_NAME L"\\OS2SS\\ExceptionPost" #define OS2_SS_SYNCHRONIZATION_SEM L"\\OS2SS\\SyncSemaphore" #if PMNT #define OS2_SS_PMSHELL_EVENT L"\\OS2SS\\PMShellEvent" #endif // PMNT // // Important!!! -- MAX_LANA must be kept in sync with ! // #define MAX_LANA_OS2SSMSG 254 typedef struct _ExecInfo { ULONG startaddr; /* instruction pointer */ ULONG stackaddr; /* stack pointer */ USHORT ds; /* starting ds only for 16-bit */ USHORT dgroupsize; /* size of dgroup */ USHORT heapsize; /* size of heap */ USHORT loadtype; /* Load type 16-bit or 32-bit */ USHORT envsel; /* Selector to environment */ USHORT comoff; /* Offset to command line in env */ USHORT stacksize; /* size of stack */ USHORT hmod; /* module handle */ } EXECINFO; typedef struct _PTRACEBUF { USHORT pid; USHORT tid; USHORT cmd; USHORT value; USHORT offv; USHORT segv; USHORT mte; USHORT rAX; USHORT rBX; USHORT rCX; USHORT rDX; USHORT rSI; USHORT rDI; USHORT rBP; USHORT rDS; USHORT rES; USHORT rIP; USHORT rCS; USHORT rF; USHORT rSP; USHORT rSS; } PTRACEBUF, *pPTRACEBUF; typedef enum _OS2_API_NUMBER { Oi2NullApiCall, Oi2AlertMuxWaiter, Oi2CopyHandleTable, Oi2DeviceShare, Oi2TerminateThread, Oi2TerminateProcess, Oi2QueryVirtualMemory, Oi2MarkSharedMemAsHuge, Oi2ReallocSharedHuge, Os2CreateThread, Os2Exit, Os2WaitChild, Os2WaitThread, Os2ExecPgm, Os2KillProcess, Os2SetPriority, Os2FreeMem, Os2GiveSharedMem, Os2GetSharedMem, Os2GetNamedSharedMem, Os2AllocSharedMem, Os2CreateEventSem, Os2OpenEventSem, Os2CloseEventSem, Os2CreateMutexSem, Os2OpenMutexSem, Os2CloseMutexSem, Os2CreateMuxWaitSem, Os2OpenMuxWaitSem, Os2CloseMuxWaitSem, Os2WaitMuxWaitSem, Os2AddMuxWaitSem, Os2DeleteMuxWaitSem, Os2QueryMuxWaitSem, Os2StartSession, Os2SelectSession, Os2SetSession, Os2StopSession, Os2SmSetTitle, Os2CreateQueue, Os2OpenQueue, Os2CloseQueue, Os2PurgeQueue, Os2QueryQueue, Os2PeekQueue, Os2ReadQueue, Os2WriteQueue, Os2EnterMustComplete, Os2ExitMustComplete, Os2SetSignalExceptionFocus, Os2SendSignalException, Os2AcknowledgeSignalException, Os2Dispatch16Signal, Os2GetPriority, Os2GetPPID, Os2Error, Os2RegisterCtrlHandler, Os2GetCtrlPortForSessionID, Os2ExitGP, Os2CloseHandle, Os2CreateConfigSys, Os2Netbios2Reqst, Os2ReallocSharedMem, Os2GetSeg, Os2GiveSeg, Os2GetShrSeg, Os2Ptrace, Ol2LdrNewExe, Ol2LdrLoadModule, Ol2LdrFreeModule, Ol2LdrGetModuleName, Ol2LdrGetModuleHandle, Ol2LdrGetProcAddr, Ol2LdrQAppType, Ol2LdrGetResource, Ol2LdrFreeResource, #if PMNT Op2IdentifyCodeSelector, Op2SetPMshellFlag, #endif #if PMNT Ol2LdrDumpSegments, #endif Os2MaxApiNumber } OS2_API_NUMBER; // // Internal server API messages // typedef struct _OS2_NULLAPICALL_MSG { LONG CountArguments; ULONG FastArguments[ 12 ]; PCHAR *Arguments; } OS2_NULLAPICALL_MSG, *POS2_NULLAPICALL_MSG; typedef struct _OS2_ALERTMUXWAITER_MSG { TID ThreadId; } OS2_ALERTMUXWAITER_MSG, *POS2_ALERTMUXWAITER_MSG; typedef struct _OS2_COPYHANDLETABLE_MSG { PFILE_HANDLE ChildHandleTable; // address of child handle table ULONG ChildTableLength; // number of entries in child table } OS2_COPYHANDLETABLE_MSG, *POS2_COPYHANDLETABLE_MSG; typedef struct _OS2_SHARE_MSG { SHARE_OPERATION Operation; IO_VECTOR_TYPE VectorType; ULONG DesiredAccess; ULONG ShareAccess; } OS2_SHARE_MSG, *POS2_SHARE_MSG; typedef struct _OS2_TERMINATETHREAD_MSG { ULONG ExitResult; } OS2_TERMINATETHREAD_MSG, *POS2_TERMINATETHREAD_MSG; typedef struct _OS2_TERMINATEPROCESS_MSG { ULONG ExitResult; ULONG ExitReason; CHAR ErrorText[50]; } OS2_TERMINATEPROCESS_MSG, *POS2_TERMINATEPROCESS_MSG; typedef struct _OS2_QUERYVIRTUALMEMORY_MSG { PVOID BaseAddress; BOOLEAN SharedMemory; ULONG AllocationFlags; BOOLEAN IsHuge; ULONG MaxSegments; ULONG NumOfSegments; ULONG SizeOfPartialSeg; BOOLEAN Sizeable; } OS2_QUERYVIRTUALMEMORY_MSG, *POS2_QUERYVIRTUALMEMORY_MSG; typedef struct _OS2_MARKHAREDMEMASHUGE_MSG { PVOID BaseAddress; ULONG MaxSegments; ULONG NumOfSegments; ULONG SizeOfPartialSeg; BOOLEAN Sizeable; } OS2_MARKSHAREDMEMASHUGE_MSG, *POS2_MARKSHAREDMEMASHUGE_MSG; typedef struct _OS2_REALLOCSHAREDHUGE_MSG { PVOID BaseAddress; ULONG NumOfSegments; ULONG SizeOfPartialSeg; } OS2_REALLOCSHAREDHUGE_MSG, *POS2_REALLOCSHAREDHUGE_MSG; // // Public server API messages // typedef struct _OS2_DOSCREATETHREAD_MSG { HANDLE ThreadHandle; CLIENT_ID ClientId; ULONG Flags; POS2_TIB ClientOs2Tib; TID ThreadId; } OS2_DOSCREATETHREAD_MSG, *POS2_DOSCREATETHREAD_MSG; typedef struct _OS2_DOSEXIT_MSG { ULONG ExitAction; ULONG ExitResult; } OS2_DOSEXIT_MSG, *POS2_DOSEXIT_MSG; typedef struct _OS2_DOSWAITCHILD_MSG { ULONG WaitTarget; ULONG WaitOption; PID ProcessId; RESULTCODES ResultCodes; PID ResultProcessId; } OS2_DOSWAITCHILD_MSG, *POS2_DOSWAITCHILD_MSG; typedef struct _OS2_DOSWAITTHREAD_MSG { TID ThreadId; ULONG WaitOption; } OS2_DOSWAITTHREAD_MSG, *POS2_DOSWAITTHREAD_MSG; typedef struct _OS2_DOSEXECPGM_MSG { ULONG Flags; STRING ErrorText; RESULTCODES ResultCodes; PID ResultProcessId; OS2_FILE_SYSTEM_PARAMETERS FileSystemParameters; ULONG CodePage; ULONG CurrentDrive; ULONG CmdLineFlag; HANDLE hRedirectedFile; USHORT RedirectedFileType; HANDLE hProcess; HANDLE hThread; CLIENT_ID ClientId; UCHAR ApplName[33]; ULONG ApplNameLength; } OS2_DOSEXECPGM_MSG, *POS2_DOSEXECPGM_MSG; typedef struct _OS2_DOSPTRACE_MSG { PTRACEBUF PtraceBuf; } OS2_DOSPTRACE_MSG, *POS2_DOSPTRACE_MSG; typedef struct _OS2_DOSKILLPROCESS_MSG { ULONG KillTarget; PID ProcessId; } OS2_DOSKILLPROCESS_MSG, *POS2_DOSKILLPROCESS_MSG; typedef struct _OS2_DOSSETPRIORITY_MSG { ULONG Scope; ULONG Class; LONG Delta; ULONG TargetId; } OS2_DOSSETPRIORITY_MSG, *POS2_DOSSETPRIORITY_MSG; typedef struct _OS2_DOSGETPRIORITY_MSG { ULONG Scope; ULONG TargetId; ULONG Priority; } OS2_DOSGETPRIORITY_MSG, *POS2_DOSGETPRIORITY_MSG; typedef struct _OS2_DOSGETPPID_MSG { PID ChildPid; PID ParentPid; } OS2_DOSGETPPID_MSG, *POS2_DOSGETPPID_MSG; typedef struct _OS2_DOSERROR_MSG { ULONG ErrorAction; } OS2_DOSERROR_MSG, *POS2_DOSERROR_MSG; typedef struct _OS2_DOSFREEMEM_MSG { PVOID BaseAddress; BOOLEAN RemoveLDTEntry; } OS2_DOSFREEMEM_MSG, *POS2_DOSFREEMEM_MSG; typedef struct _OS2_DOSGIVESHAREDMEM_MSG { PVOID BaseAddress; PID ProcessId; ULONG Flags; ULONG PageProtection; } OS2_DOSGIVESHAREDMEM_MSG, *POS2_DOSGIVESHAREDMEM_MSG; typedef struct _OS2_DOSGETSHAREDMEM_MSG { PVOID BaseAddress; ULONG Flags; ULONG PageProtection; } OS2_DOSGETSHAREDMEM_MSG, *POS2_DOSGETSHAREDMEM_MSG; typedef struct _OS2_DOSGETNAMEDSHAREDMEM_MSG { PVOID BaseAddress; ULONG Flags; ULONG PageProtection; STRING ObjectName; } OS2_DOSGETNAMEDSHAREDMEM_MSG, *POS2_DOSGETNAMEDSHAREDMEM_MSG; typedef struct _OS2_DOSALLOCSHAREDMEM_MSG { PVOID BaseAddress; ULONG RegionSize; ULONG Flags; ULONG PageProtection; STRING ObjectName; BOOLEAN CreateLDTEntry; } OS2_DOSALLOCSHAREDMEM_MSG, *POS2_DOSALLOCSHAREDMEM_MSG; typedef struct _OS2_DOSCREATEEVENTSEM_MSG { ULONG HandleIndex; HANDLE NtEventHandle; STRING ObjectName; ULONG CreateAttributes; BOOLEAN InitialState; } OS2_DOSCREATEEVENTSEM_MSG, *POS2_DOSCREATEEVENTSEM_MSG; typedef struct _OS2_DOSOPENEVENTSEM_MSG { ULONG HandleIndex; HANDLE NtEventHandle; STRING ObjectName; } OS2_DOSOPENEVENTSEM_MSG, *POS2_DOSOPENEVENTSEM_MSG; typedef struct _OS2_DOSCLOSEEVENTSEM_MSG { ULONG HandleIndex; } OS2_DOSCLOSEEVENTSEM_MSG, *POS2_DOSCLOSEEVENTSEM_MSG; typedef struct _OS2_DOSCREATEMUTEXSEM_MSG { ULONG HandleIndex; HANDLE NtMutantHandle; STRING ObjectName; ULONG CreateAttributes; BOOLEAN InitialState; } OS2_DOSCREATEMUTEXSEM_MSG, *POS2_DOSCREATEMUTEXSEM_MSG; typedef struct _OS2_DOSOPENMUTEXSEM_MSG { ULONG HandleIndex; HANDLE NtMutantHandle; STRING ObjectName; } OS2_DOSOPENMUTEXSEM_MSG, *POS2_DOSOPENMUTEXSEM_MSG; typedef struct _OS2_DOSCLOSEMUTEXSEM_MSG { ULONG HandleIndex; } OS2_DOSCLOSEMUTEXSEM_MSG, *POS2_DOSCLOSEMUTEXSEM_MSG; typedef struct _OS2_DOSCREATEMUXWAITSEM_MSG { ULONG HandleIndex; STRING ObjectName; ULONG CreateAttributes; ULONG CountMuxWaitEntries; PSEMRECORD MuxWaitEntries; } OS2_DOSCREATEMUXWAITSEM_MSG, *POS2_DOSCREATEMUXWAITSEM_MSG; typedef struct _OS2_DOSOPENMUXWAITSEM_MSG { ULONG HandleIndex; STRING ObjectName; } OS2_DOSOPENMUXWAITSEM_MSG, *POS2_DOSOPENMUXWAITSEM_MSG; typedef struct _OS2_DOSCLOSEMUXWAITSEM_MSG { ULONG HandleIndex; } OS2_DOSCLOSEMUXWAITSEM_MSG, *POS2_DOSCLOSEMUXWAITSEM_MSG; typedef struct _OS2_DOSWAITMUXWAITSEM_MSG { ULONG HandleIndex; LARGE_INTEGER Timeout; ULONG UserValue; } OS2_DOSWAITMUXWAITSEM_MSG, *POS2_DOSWAITMUXWAITSEM_MSG; typedef struct _OS2_DOSADDMUXWAITSEM_MSG { ULONG HandleIndex; SEMRECORD MuxWaitEntry; } OS2_DOSADDMUXWAITSEM_MSG, *POS2_DOSADDMUXWAITSEM_MSG; typedef struct _OS2_DOSDELETEMUXWAITSEM_MSG { ULONG HandleIndex; ULONG EntryHandleIndex; } OS2_DOSDELETEMUXWAITSEM_MSG, *POS2_DOSDELETEMUXWAITSEM_MSG; typedef struct _OS2_DOSQUERYMUXWAITSEM_MSG { ULONG HandleIndex; ULONG CreateAttributes; ULONG CountMuxWaitEntries; PSEMRECORD MuxWaitEntries; } OS2_DOSQUERYMUXWAITSEM_MSG, *POS2_DOSQUERYMUXWAITSEM_MSG; typedef struct _OS2_DOSSTARTSESSION_INFO { ULONG ResultSessionId; USHORT Related; ULONG QueueHandleIndex; ULONG dwProcessId; USHORT SessionType; BOOLEAN WinSession; BOOLEAN FgBg; } OS2_DOSSTARTSESSION_INFO, *POS2_DOSSTARTSESSION_INFO; typedef struct _OS2_DOSSELECTSESSION_MSG { ULONG SessionId; } OS2_DOSSELECTSESSION_MSG, *POS2_DOSSELECTSESSION_MSG; typedef struct _OS2_DOSSETSESSION_MSG { ULONG SessionId; STATUSDATA StatusData; } OS2_DOSSETSESSION_MSG, *POS2_DOSSETSESSION_MSG; typedef struct _OS2_DOSSTOPSESSION_MSG { ULONG SessionId; ULONG fScope; } OS2_DOSSTOPSESSION_MSG, *POS2_DOSSTOPSESSION_MSG; typedef struct _OS2_DOSSMSETTITLE_MSG { STRING Title; } OS2_DOSSMSETTITLE_MSG, *POS2_DOSSMSETTITLE_MSG; typedef struct _OS2_DOSSTARTSESSION_MSG { OS2_DOSEXECPGM_MSG ExecPgmInformation; OS2_DOSSTARTSESSION_INFO StartSessionInformation; } OS2_DOSSTARTSESSION_MSG, *POS2_DOSSTARTSESSION_MSG; typedef struct _OS2_DOSGETCTRLPORTFORSESSION_MSG { ULONG SessionUniqueId; HANDLE hControlPort; } OS2_DOSGETCTRLPORTFORSESSION_MSG, *POS2_DOSGETCTRLPORTFORSESSION_MSG; typedef struct _OS2_DOSCREATEQUEUE_MSG { HQUEUE QueueHandle; ULONG QueueType; STRING QueueName; } OS2_DOSCREATEQUEUE_MSG, *POS2_DOSCREATEQUEUE_MSG; typedef struct _OS2_DOSOPENQUEUE_MSG { PID OwnerProcessId; HQUEUE QueueHandle; STRING QueueName; } OS2_DOSOPENQUEUE_MSG, *POS2_DOSOPENQUEUE_MSG; typedef struct _OS2_DOSCLOSEQUEUE_MSG { HQUEUE QueueHandle; ULONG CloseCount; PID OwnerProcessId; } OS2_DOSCLOSEQUEUE_MSG, *POS2_DOSCLOSEQUEUE_MSG; typedef struct _OS2_DOSPURGEQUEUE_MSG { HQUEUE QueueHandle; } OS2_DOSPURGEQUEUE_MSG, *POS2_DOSPURGEQUEUE_MSG; typedef struct _OS2_DOSQUERYQUEUE_MSG { HQUEUE QueueHandle; ULONG CountQueueElements; PID OwnerProcessId; } OS2_DOSQUERYQUEUE_MSG, *POS2_DOSQUERYQUEUE_MSG; typedef struct _OS2_DOSPEEKQUEUE_MSG { HQUEUE QueueHandle; REQUESTDATA RequestInfo; ULONG DataLength; PVOID Data; ULONG ReadPosition; BOOL32 NoWait; ULONG SemIndex; BYTE ElementPriority; } OS2_DOSPEEKQUEUE_MSG, *POS2_DOSPEEKQUEUE_MSG; typedef struct _OS2_DOSREADQUEUE_MSG { HQUEUE QueueHandle; REQUESTDATA RequestInfo; ULONG DataLength; PVOID Data; ULONG ReadPosition; BOOL32 NoWait; ULONG SemIndex; BYTE ElementPriority; } OS2_DOSREADQUEUE_MSG, *POS2_DOSREADQUEUE_MSG; typedef struct _OS2_DOSWRITEQUEUE_MSG { HQUEUE QueueHandle; PID OwnerProcessId; ULONG SenderData; ULONG DataLength; PVOID Data; BYTE ElementPriority; } OS2_DOSWRITEQUEUE_MSG, *POS2_DOSWRITEQUEUE_MSG; typedef struct _OS2_DOSENTERMUSTCOMPLETE_MSG { ULONG NestingLevel; } OS2_DOSENTERMUSTCOMPLETE_MSG, *POS2_DOSENTERMUSTCOMPLETE_MSG; typedef struct _OS2_DOSEXITMUSTCOMPLETE_MSG { ULONG NestingLevel; } OS2_DOSEXITMUSTCOMPLETE_MSG, *POS2_DOSEXITMUSTCOMPLETE_MSG; typedef struct _OS2_DOSSETSIGNALEXCEPTIONFOCUS_MSG { ULONG NestingLevel; BOOL32 Flag; } OS2_DOSSETSIGNALEXCEPTIONFOCUS_MSG, *POS2_DOSSETSIGNALEXCEPTIONFOCUS_MSG; typedef struct _OS2_DOSSENDSIGNALEXCEPTION_MSG { PID ProcessId; ULONG Exception; } OS2_DOSSENDSIGNALEXCEPTION_MSG, *POS2_DOSSENDSIGNALEXCEPTION_MSG; typedef struct _OS2_DOSACKNOWLEDGESIGNALEXCEPTION_MSG { ULONG SignalNumber; } OS2_DOSACKNOWLEDGESIGNALEXCEPTION_MSG, *POS2_DOSACKNOWLEDGESIGNALEXCEPTION_MSG; typedef struct _OS2_DISPATCH16_SIGNAL { USHORT usFlagNum; USHORT usFlagArg; ULONG fscope; ULONG pidProcess; ULONG routine; ULONG sighandleraddr; } OS2_DISPATCH16_SIGNAL, *POS2_DISPATCH16_SIGNAL; #define MAX_API_NAME_FOR_GP 40 typedef struct _OS2_DOSGP_MSG { UCHAR ApiName[MAX_API_NAME_FOR_GP]; } OS2_DOSGP_MSG, *POS2_DOSGP_MSG; typedef struct _OS2_DOSCLOSE_HANDLE_MSG { ULONG HandleNumber; HANDLE HandleTable[7]; } OS2_DOSCLOSE_HANDLE_MSG, *POS2_DOSCLOSE_HANDLE_MSG; typedef struct _OS2_CONFIGSYS_MSG { ULONG RequiredAccess; // IN: either OPEN_ACCESS_READONLY or OPEN_ACCESS_READWRITE ULONG AllowedAccess; // OUT: either OPEN_ACCESS_READONLY or OPEN_ACCESS_READWRITE NTSTATUS ReturnStatus; // OUT: an error status report // // Notes: // -- The os2conf.nt file has been created only if ReturnStatus is success // -- AllowedAccess is valid on return only if ReturnStatus is success or STATUS_ACCESS_DENIED // -- if RequiredAccess is READWRITE and only READONLY is available, the // os2conf.nt won't be created, ReturnStatus will be STATUS_ACCESS_DENIED, // and AllowedAccess will be READONLY. // } OS2_CONFIGSYS_MSG, *POS2_CONFIGSYS_MSG; typedef struct _OS2_NETBIOS_MSG { UCHAR RequestType; // IN UCHAR NetNumber; // IN UCHAR RetCode; // OUT UCHAR LanaEnumLength; // OUT NTSTATUS ReturnStatus; // OUT HANDLE hDev; // OUT UCHAR LanaEnum[MAX_LANA_OS2SSMSG]; // OUT } OS2_NETBIOS_MSG, *POS2_NETBIOS_MSG; typedef struct _OS2_CAPTURE_HEADER { ULONG Length; struct _OS2_CAPTURE_HEADER *RelatedCaptureBuffer; ULONG CountMessagePointers; ULONG CountCapturePointers; PULONG MessagePointerOffsets; // Offsets within OS2_API_MSG of pointers PULONG CapturePointerOffsets; // Offsets within CaptureBuffer of pointers PCHAR FreeSpace; } OS2_CAPTURE_HEADER, *POS2_CAPTURE_HEADER; typedef struct _OS2_REGISTER_HANDLER { ULONG usFlagNum; ULONG fAction; } OS2_REGISTER_HANDLER, *POS2_REGISTER_HANDLER; typedef struct _OS2_REALLOCSHAREDMEM_MSG{ PVOID BaseAddress; // base address of shared memory PVOID AllocFreeBaseAddress; // start address of new allocation / free USHORT NewLdtLimit; // New segment size in bytes ULONG NewRegionSize; // New segment size rounded to pages ULONG CurrentSize; // ldt limit rounded to pages ULONG Flags; // Flags of new allocated memory BOOLEAN SharedMemory; // flag set to true if shared segment found }OS2_REALLOCSHAREDMEM_MSG, *POS2_REALLOCSHAREDMEM_MSG; typedef struct _OS2_GIVESEG_MSG{ ULONG Selector; PID TargetPid; }OS2_GIVESEG_MSG, *POS2_GIVESEG_MSG; typedef struct _OS2_GETSEG_MSG{ ULONG Selector; }OS2_GETSEG_MSG, *POS2_GETSEG_MSG; typedef struct _OS2_DOSGETSHRSEG_MSG { ULONG Selector; STRING ObjectName; } OS2_DOSGETSHRSEG_MSG, *POS2_DOSGETSHRSEG_MSG; typedef struct _LDRNEWEXE_MSG { STRING ProcessName; STRING FailName; STRING LibPathName; STRING InitRecords; ULONG CurrentDrive; ULONG DoscallsSel; ULONG EntryFlatAddr; ULONG NumOfInitRecords; #if PMNT BOOLEAN PMProcess; #endif BOOLEAN BoundApp; EXECINFO ExecInfo; } LDRNEWEXE_MSG, *P_LDRNEWEXE_MSG; typedef struct _LDRLOADMODULE_MSG { STRING ModuleName; STRING FailName; STRING LibPathName; STRING InitRecords; ULONG ModuleHandle; ULONG NumOfInitRecords; EXECINFO ExecInfo; } LDRLOADMODULE_MSG, *P_LDRLOADMODULE_MSG; typedef struct _LDRFREEMODULE_MSG { ULONG ModuleHandle; } LDRFREEMODULE_MSG, *P_LDRFREEMODULE_MSG; typedef struct _LDRGETMODULENAME_MSG { STRING ModuleName; ULONG ModuleHandle; } LDRGETMODULENAME_MSG, *P_LDRGETMODULENAME_MSG; typedef struct _LDRGETMODULEHANDLE_MSG { STRING ModuleName; STRING LibPathName; ULONG ModuleHandle; } LDRGETMODULEHANDLE_MSG, *P_LDRGETMODULEHANDLE_MSG; typedef struct _LDRGETPROCADDR_MSG { STRING ProcName; ULONG ModuleHandle; BOOLEAN ProcNameIsOrdinal; // Selects OrdinalNumber or ProcName fields ULONG OrdinalNumber; ULONG ProcAddr; } LDRGETPROCADDR_MSG, *P_LDRGETPROCADDR_MSG; typedef struct _LDRQAPPTYPE_MSG { STRING AppName; STRING PathName; ULONG AppType; } LDRQAPPTYPE_MSG, *P_LDRQAPPTYPE_MSG; typedef struct _LDRGETRESOURCE_MSG { ULONG ModuleHandle ; ULONG ResourceType ; ULONG ResourceName; ULONG ResourceSel; ULONG ResourceAddr; ULONG NumberOfSegments; } LDRGETRESOURCE_MSG, *P_LDRGETRESOURCE_MSG; typedef struct _LDRFREERESOURCE_MSG { ULONG ResourceAddr; } LDRFREERESOURCE_MSG, *P_LDRFREERESOURCE_MSG; #if PMNT typedef struct _LDRIDENTIFYCODESELECTOR_MSG { USHORT sel; USHORT segNum; USHORT mte; STRING ModName; } LDRIDENTIFYCODESELECTOR_MSG, *P_LDRIDENTIFYCODESELECTOR_MSG; typedef struct _PMNTSETPMSHELLFLAG_MSG { ULONG Dummy; } PMNTSETPMSHELLFLAG_MSG, *P_PMNTSETPMSHELLFLAG_MSG; #endif #if PMNT && DBG typedef struct _LDRDUMPSEGMENTS_MSG { ULONG Dummy ; } LDRDUMPSEGMENTS_MSG, *P_LDRDUMPSEGMENTS_MSG; #endif typedef struct _OS2_API_MSG { PORT_MESSAGE h; ULONG PortType; // 0 - this port; 1 - Console port server. POS2_CAPTURE_HEADER CaptureBuffer; OS2_API_NUMBER ApiNumber; ULONG ReturnedErrorValue; union { OS2_NULLAPICALL_MSG NullApiCall; OS2_COPYHANDLETABLE_MSG CopyHandleTable; OS2_SHARE_MSG DeviceShare; OS2_ALERTMUXWAITER_MSG AlertMuxWaiter; OS2_TERMINATETHREAD_MSG TerminateThread; OS2_TERMINATEPROCESS_MSG TerminateProcess; OS2_QUERYVIRTUALMEMORY_MSG QueryVirtualMemory; OS2_MARKSHAREDMEMASHUGE_MSG MarkSharedMemAsHuge; OS2_REALLOCSHAREDHUGE_MSG ReallocSharedHuge; OS2_DOSCREATETHREAD_MSG DosCreateThread; OS2_DOSWAITCHILD_MSG DosWaitChild; OS2_DOSWAITTHREAD_MSG DosWaitThread; OS2_DOSEXIT_MSG DosExit; OS2_DOSEXECPGM_MSG DosExecPgm; OS2_DOSKILLPROCESS_MSG DosKillProcess; OS2_DOSSETPRIORITY_MSG DosSetPriority; OS2_DOSGETPRIORITY_MSG DosGetPriority; OS2_DOSGETPPID_MSG DosGetPPID; OS2_DOSERROR_MSG DosError; OS2_DOSFREEMEM_MSG DosFreeMem; OS2_DOSGIVESHAREDMEM_MSG DosGiveSharedMem; OS2_DOSGETSHAREDMEM_MSG DosGetSharedMem; OS2_DOSGETNAMEDSHAREDMEM_MSG DosGetNamedSharedMem; OS2_DOSALLOCSHAREDMEM_MSG DosAllocSharedMem; OS2_DOSCREATEEVENTSEM_MSG DosCreateEventSem; OS2_DOSOPENEVENTSEM_MSG DosOpenEventSem; OS2_DOSCLOSEEVENTSEM_MSG DosCloseEventSem; OS2_DOSCREATEMUTEXSEM_MSG DosCreateMutexSem; OS2_DOSOPENMUTEXSEM_MSG DosOpenMutexSem; OS2_DOSCLOSEMUTEXSEM_MSG DosCloseMutexSem; OS2_DOSCREATEMUXWAITSEM_MSG DosCreateMuxWaitSem; OS2_DOSOPENMUXWAITSEM_MSG DosOpenMuxWaitSem; OS2_DOSCLOSEMUXWAITSEM_MSG DosCloseMuxWaitSem; OS2_DOSWAITMUXWAITSEM_MSG DosWaitMuxWaitSem; OS2_DOSADDMUXWAITSEM_MSG DosAddMuxWaitSem; OS2_DOSDELETEMUXWAITSEM_MSG DosDeleteMuxWaitSem; OS2_DOSQUERYMUXWAITSEM_MSG DosQueryMuxWaitSem; OS2_DOSSTARTSESSION_MSG DosStartSession; OS2_DOSGETCTRLPORTFORSESSION_MSG DosGetCtrlPortForSession; OS2_DOSSELECTSESSION_MSG DosSelectSession; OS2_DOSSETSESSION_MSG DosSetSession; OS2_DOSSTOPSESSION_MSG DosStopSession; OS2_DOSSMSETTITLE_MSG DosSmSetTitle; OS2_DOSCREATEQUEUE_MSG DosCreateQueue; OS2_DOSOPENQUEUE_MSG DosOpenQueue; OS2_DOSCLOSEQUEUE_MSG DosCloseQueue; OS2_DOSPURGEQUEUE_MSG DosPurgeQueue; OS2_DOSQUERYQUEUE_MSG DosQueryQueue; OS2_DOSPEEKQUEUE_MSG DosPeekQueue; OS2_DOSREADQUEUE_MSG DosReadQueue; OS2_DOSWRITEQUEUE_MSG DosWriteQueue; OS2_DOSENTERMUSTCOMPLETE_MSG DosEnterMustComplete; OS2_DOSEXITMUSTCOMPLETE_MSG DosExitMustComplete; OS2_DOSSETSIGNALEXCEPTIONFOCUS_MSG DosSetSignalExceptionFocus; OS2_DOSSENDSIGNALEXCEPTION_MSG DosSendSignalException; OS2_DOSACKNOWLEDGESIGNALEXCEPTION_MSG DosAcknowledgeSignalException; OS2_DISPATCH16_SIGNAL Dispatch16Signal; OS2_REGISTER_HANDLER DosRegisterCtrlHandler; OS2_DOSGP_MSG DosExitGP; OS2_DOSCLOSE_HANDLE_MSG DosCloseHandle; OS2_CONFIGSYS_MSG CreateConfigSysRequest; OS2_NETBIOS_MSG Netbios2Request; OS2_REALLOCSHAREDMEM_MSG ReallocSharedMem; OS2_GETSEG_MSG DosGetSeg; OS2_GIVESEG_MSG DosGiveSeg; OS2_DOSGETSHRSEG_MSG DosGetShrSeg; OS2_DOSPTRACE_MSG DosPTrace; LDRNEWEXE_MSG LdrNewExe; LDRLOADMODULE_MSG LdrLoadModule; LDRFREEMODULE_MSG LdrFreeModule; LDRGETMODULENAME_MSG LdrGetModuleName; LDRGETMODULEHANDLE_MSG LdrGetModuleHandle; LDRGETPROCADDR_MSG LdrGetProcAddr; LDRQAPPTYPE_MSG LdrQAppType; LDRGETRESOURCE_MSG LdrGetResource; LDRFREERESOURCE_MSG LdrFreeResource; #if PMNT LDRIDENTIFYCODESELECTOR_MSG LdrIdentifyCodeSelector; PMNTSETPMSHELLFLAG_MSG PMNTSetPMshellFlag; #endif #if PMNT && DBG LDRDUMPSEGMENTS_MSG LdrDumpSegments; #endif } u; } OS2_API_MSG, *POS2_API_MSG; typedef struct _OD2_SIG_HANDLER_REC { ULONG signature; ULONG fholdenable; ULONG sighandler[7]; OS2_DISPATCH16_SIGNAL outstandingsig[7]; ULONG doscallssel; USHORT action[7]; } OD2_SIG_HANDLER_REC, *POD2_SIG_HANDLER_REC; #define ThunkOffsetDosExitStub 0 #define ThunkOffsetLDRLibiReturn 4 #define ThunkOffsetExitProcessStub 8 #define ThunkOffsetDosReturn 12 /* Signal Numbers for DosSetSigHandler */ #define SIG_CTRLC 1 /* Control C */ #define SIG_BROKENPIPE 2 /* Broken Pipe */ #define SIG_KILLPROCESS 3 /* Program Termination */ #define SIG_CTRLBREAK 4 /* Control Break */ #define SIG_PFLG_A 5 /* Process Flag A */ #define SIG_PFLG_B 6 /* Process Flag B */ #define SIG_PFLG_C 7 /* Process Flag C */ #define SIG_CSIGNALS 8 /* number of signals plus one */ /* Flag Numbers for DosFlagProcess */ #define PFLG_A 0 /* Process Flag A */ #define PFLG_B 1 /* Process Flag B */ #define PFLG_C 2 /* Process Flag C */ /* Signal actions */ #define SIGA_KILL 0 #define SIGA_IGNORE 1 #define SIGA_ACCEPT 2 #define SIGA_ERROR 3 #define SIGA_ACKNOWLEDGE 4 #define SIGA_ENABLE_HANDLING 5 #define SIGA_ACKNOWLEDGE_AND_ACCEPT 0xbeef /* DosHoldSignal defines */ #define HLDSIG_ENABLE 0 #define HLDSIG_DISABLE 1 #define HOLD_SIGNAL_CLEARED 0xffff typedef struct _OS2_REGISTER16_SIGNAL { USHORT regSP; /* offset 0 */ USHORT regSS; /* offset 2 */ USHORT regBP; /* offset 4 */ USHORT regDX; /* offset 6 */ USHORT regBX; /* offset 8 */ USHORT regCX; /* offset 10 */ USHORT regSI; /* offset 12 */ USHORT regDI; /* offset 14 */ USHORT regES; /* offset 16 */ USHORT regDS; /* offset 18 */ USHORT usFlagNum; USHORT usFlagArg; } OS2_REGISTER16_SIGNAL, *POS2_REGISTER16_SIGNAL;