1 /* 2 * Copyright 2000-2001 Sun Microsystems, Inc. All Rights Reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 20 * CA 95054 USA or visit www.sun.com if you need additional information or 21 * have any questions. 22 * 23 */ 24 25 #ifndef _MESSAGE_ 26 #define _MESSAGE_ 27 28 // These are the commands sent from the server to the child processes 29 // over the child processes' stdin pipes. A subset of the commands 30 // understood by the overall system, these require responses from the 31 // child process. Having a data structure rather than sending text 32 // simplifies parsing on the child side. The child replies by sending 33 // back fully-formatted replies which are copied by the server process 34 // to the clients' sockets. 35 36 struct PeekArg { 37 DWORD address; 38 DWORD numBytes; 39 }; 40 41 // NOTE: when sending a PokeArg to the child process, we handle the 42 // buffer specially 43 struct PokeArg { 44 DWORD address; 45 DWORD numBytes; 46 void* data; 47 }; 48 49 // Used for continueevent 50 struct BoolArg { 51 bool val; 52 }; 53 54 // Used for duphandle, closehandle, and getcontext 55 struct HandleArg { 56 HANDLE handle; 57 }; 58 59 // Used for setcontext 60 const int NUM_REGS_IN_CONTEXT = 22; 61 struct SetContextArg { 62 HANDLE handle; 63 DWORD Eax; 64 DWORD Ebx; 65 DWORD Ecx; 66 DWORD Edx; 67 DWORD Esi; 68 DWORD Edi; 69 DWORD Ebp; 70 DWORD Esp; 71 DWORD Eip; 72 DWORD Ds; 73 DWORD Es; 74 DWORD Fs; 75 DWORD Gs; 76 DWORD Cs; 77 DWORD Ss; 78 DWORD EFlags; 79 DWORD Dr0; 80 DWORD Dr1; 81 DWORD Dr2; 82 DWORD Dr3; 83 DWORD Dr6; 84 DWORD Dr7; 85 }; 86 87 // Used for selectorentry 88 struct SelectorEntryArg { 89 HANDLE handle; 90 DWORD selector; 91 }; 92 93 struct Message { 94 typedef enum { 95 ATTACH, 96 DETACH, 97 LIBINFO, 98 PEEK, 99 POKE, 100 THREADLIST, 101 DUPHANDLE, 102 CLOSEHANDLE, 103 GETCONTEXT, 104 SETCONTEXT, 105 SELECTORENTRY, 106 SUSPEND, 107 RESUME, 108 POLLEVENT, 109 CONTINUEEVENT 110 } Type; 111 112 Type type; 113 union { 114 PeekArg peekArg; 115 PokeArg pokeArg; 116 BoolArg boolArg; 117 HandleArg handleArg; 118 SetContextArg setContextArg; 119 SelectorEntryArg selectorArg; 120 }; 121 }; 122 123 #endif // #defined _MESSAGE_