turborex 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +674 -0
  3. data/README.md +38 -0
  4. data/README.rdoc +19 -0
  5. data/examples/alpc_client.rb +15 -0
  6. data/examples/alpc_server.rb +14 -0
  7. data/examples/com_client.rb +19 -0
  8. data/examples/com_finder.rb +39 -0
  9. data/examples/create_instance.rb +15 -0
  10. data/examples/cstruct.rb +19 -0
  11. data/examples/find_com_client_calls.rb +16 -0
  12. data/examples/find_rpc_security_callback.rb +12 -0
  13. data/examples/rpc_finder.rb +117 -0
  14. data/examples/scan_exports.rb +5 -0
  15. data/examples/scan_imports.rb +5 -0
  16. data/examples/tinysdk.rb +17 -0
  17. data/lib/turborex.rb +21 -0
  18. data/lib/turborex/cstruct.rb +565 -0
  19. data/lib/turborex/cstruct/struct_helper.rb +7 -0
  20. data/lib/turborex/exception.rb +65 -0
  21. data/lib/turborex/fuzzer.rb +204 -0
  22. data/lib/turborex/fuzzer/containers.rb +115 -0
  23. data/lib/turborex/fuzzer/coverage.rb +67 -0
  24. data/lib/turborex/fuzzer/mutators.rb +25 -0
  25. data/lib/turborex/fuzzer/seed.rb +30 -0
  26. data/lib/turborex/monkey.rb +11 -0
  27. data/lib/turborex/msrpc.rb +14 -0
  28. data/lib/turborex/msrpc/decompiler.rb +244 -0
  29. data/lib/turborex/msrpc/midl.rb +747 -0
  30. data/lib/turborex/msrpc/ndrtype.rb +167 -0
  31. data/lib/turborex/msrpc/rpcbase.rb +777 -0
  32. data/lib/turborex/msrpc/rpcfinder.rb +1426 -0
  33. data/lib/turborex/msrpc/utils.rb +70 -0
  34. data/lib/turborex/pefile.rb +8 -0
  35. data/lib/turborex/pefile/pe.rb +61 -0
  36. data/lib/turborex/pefile/scanner.rb +82 -0
  37. data/lib/turborex/utils.rb +321 -0
  38. data/lib/turborex/windows.rb +402 -0
  39. data/lib/turborex/windows/alpc.rb +844 -0
  40. data/lib/turborex/windows/com.rb +266 -0
  41. data/lib/turborex/windows/com/client.rb +84 -0
  42. data/lib/turborex/windows/com/com_finder.rb +330 -0
  43. data/lib/turborex/windows/com/com_registry.rb +100 -0
  44. data/lib/turborex/windows/com/interface.rb +522 -0
  45. data/lib/turborex/windows/com/utils.rb +210 -0
  46. data/lib/turborex/windows/constants.rb +82 -0
  47. data/lib/turborex/windows/process.rb +56 -0
  48. data/lib/turborex/windows/security.rb +12 -0
  49. data/lib/turborex/windows/security/ace.rb +76 -0
  50. data/lib/turborex/windows/security/acl.rb +25 -0
  51. data/lib/turborex/windows/security/security_descriptor.rb +118 -0
  52. data/lib/turborex/windows/tinysdk.rb +89 -0
  53. data/lib/turborex/windows/utils.rb +138 -0
  54. data/resources/headers/alpc/ntdef.h +72 -0
  55. data/resources/headers/alpc/ntlpcapi.h +1014 -0
  56. data/resources/headers/rpc/common.h +162 -0
  57. data/resources/headers/rpc/guiddef.h +191 -0
  58. data/resources/headers/rpc/internal_ndrtypes.h +262 -0
  59. data/resources/headers/rpc/rpc.h +10 -0
  60. data/resources/headers/rpc/rpcdce.h +266 -0
  61. data/resources/headers/rpc/rpcdcep.h +187 -0
  62. data/resources/headers/rpc/rpcndr.h +39 -0
  63. data/resources/headers/rpc/v4_x64/rpcinternals.h +154 -0
  64. data/resources/headers/rpc/wintype.h +517 -0
  65. data/resources/headers/tinysdk/tinysdk.h +5 -0
  66. data/resources/headers/tinysdk/tinysdk/comdef.h +645 -0
  67. data/resources/headers/tinysdk/tinysdk/dbghelp.h +118 -0
  68. data/resources/headers/tinysdk/tinysdk/guiddef.h +194 -0
  69. data/resources/headers/tinysdk/tinysdk/memoryapi.h +12 -0
  70. data/resources/headers/tinysdk/tinysdk/poppack.h +12 -0
  71. data/resources/headers/tinysdk/tinysdk/pshpack4.h +13 -0
  72. data/resources/headers/tinysdk/tinysdk/winnt.h +1059 -0
  73. data/resources/headers/tinysdk/tinysdk/wintype.h +326 -0
  74. metadata +290 -0
@@ -0,0 +1,162 @@
1
+ #include "wintype.h"
2
+ #include "guiddef.h"
3
+ #include "rpc.h"
4
+
5
+
6
+ #define MAX_RPC_INTERFACE_ANNOTATION 64
7
+ #define SIMPLE_DICT_SMALL_ARRAY 4
8
+ #define MAX_SIMPLE_DICT_ENTRIES 0x200
9
+
10
+ //==============================================================================
11
+ // From Winnt.h
12
+ // The following structures are redefined to support Wow64 ptr
13
+ //
14
+ struct _RTL_CRITICAL_SECTION_T;
15
+
16
+ typedef struct _LIST_ENTRY_T {
17
+ struct _LIST_ENTRY PTR_T Flink;
18
+ struct _LIST_ENTRY PTR_T Blink;
19
+ } LIST_ENTRY_T, *PLIST_ENTRY_T;
20
+
21
+
22
+ typedef struct _RTL_CRITICAL_SECTION_DEBUG_T {
23
+ WORD Type;
24
+ WORD CreatorBackTraceIndex;
25
+ struct _RTL_CRITICAL_SECTION_T PTR_T CriticalSection;
26
+ LIST_ENTRY_T ProcessLocksList;
27
+ DWORD EntryCount;
28
+ DWORD ContentionCount;
29
+ DWORD Flags;
30
+ WORD CreatorBackTraceIndexHigh;
31
+ WORD SpareWORD;
32
+ } RTL_CRITICAL_SECTION_DEBUG_T, PTR_T PRTL_CRITICAL_SECTION_DEBUG_T;
33
+
34
+ typedef struct _RTL_CRITICAL_SECTION_T {
35
+ PRTL_CRITICAL_SECTION_DEBUG_T DebugInfo;
36
+ //
37
+ // The following three fields control entering and exiting the critical
38
+ // section for the resource
39
+ //
40
+ LONG LockCount;
41
+ LONG RecursionCount;
42
+ VOID PTR_T OwningThread; // from the thread's ClientId->UniqueThread
43
+ VOID PTR_T LockSemaphore;
44
+ VOID PTR_T SpinCount; // force size on 64-bit systems when packed
45
+ } RTL_CRITICAL_SECTION_T, PTR_T PRTL_CRITICAL_SECTION_T;
46
+
47
+ //==============================================================================
48
+ // From RpcDceP.h
49
+ //
50
+ typedef struct _RPC_DISPATCH_TABLE_T{
51
+ UINT DispatchTableCount;
52
+ RPC_DISPATCH_FUNCTION PTR_T DispatchTable;
53
+ ULONG_PTR_T Reserved;
54
+ } RPC_DISPATCH_TABLE_T, PTR_T PRPC_DISPATCH_TABLE_T;
55
+
56
+ typedef struct _RPC_PROTSEQ_ENDPOINT_T{
57
+ UCHAR PTR_T RpcProtocolSequence;
58
+ UCHAR PTR_T Endpoint;
59
+ } RPC_PROTSEQ_ENDPOINT_T, PTR_T PRPC_PROTSEQ_ENDPOINT_T;
60
+
61
+ typedef struct _RPC_SERVER_INTERFACE_T{
62
+ UINT Length;
63
+ RPC_IF_ID InterfaceId;
64
+ RPC_IF_ID TransferSyntax;
65
+ PRPC_DISPATCH_TABLE_T DispatchTable;
66
+ UINT RpcProtseqEndpointCount;
67
+ PRPC_PROTSEQ_ENDPOINT_T RpcProtseqEndpoint;
68
+ RPC_MGR_EPV PTR_T DefaultManagerEpv;
69
+ void const PTR_T InterpreterInfo;
70
+ UINT Flags;
71
+ } RPC_SERVER_INTERFACE_T, PTR_T PRPC_SERVER_INTERFACE_T;
72
+
73
+
74
+ typedef struct _NDR_EXPR_DESC_T
75
+ {
76
+ const unsigned short PTR_T pOffset;
77
+ const unsigned char PTR_T pFormatExpr;
78
+ } NDR_EXPR_DESC_T;
79
+
80
+
81
+ /*
82
+ * MIDL Stub Descriptor
83
+ */
84
+ typedef struct _MIDL_STUB_DESC_T{
85
+ void PTR_T RpcInterfaceInformation;
86
+ void PTR_T pfnAllocate;
87
+ void PTR_T pfnFree;
88
+ void PTR_T pAutoHandle;
89
+ const VOID PTR_T apfnNdrRundownRoutines;
90
+ const VOID PTR_T aGenericBindingRoutinePairs;
91
+ const VOID PTR_T apfnExprEval;
92
+ const VOID PTR_T aXmitQuintuple;
93
+ const unsigned char PTR_T pFormatTypes;
94
+ int fCheckBounds;
95
+ /* Ndr library version. */
96
+ unsigned long Version;
97
+ VOID PTR_T pMallocFreeStruct;
98
+ long MIDLVersion;
99
+ const COMM_FAULT_OFFSETS PTR_T CommFaultOffsets;
100
+ // New fields for version 3.0+
101
+ const VOID PTR_T aUserMarshalQuadruple;
102
+ // Notify routines - added for NT5, MIDL 5.0
103
+ const VOID PTR_T NotifyRoutineTable;
104
+ /*
105
+ * Reserved for future use.
106
+ */
107
+ ULONG_PTR_T mFlags;
108
+ // International support routines - added for 64bit post NT5
109
+ const VOID PTR_T CsRoutineTables;
110
+ void PTR_T ProxyServerInfo;
111
+ const NDR_EXPR_DESC_T PTR_T pExprInfo;
112
+ // Fields up to now present in win2000 release.
113
+ } MIDL_STUB_DESC_T, PTR_T PMIDL_STUB_DESC_T;
114
+
115
+
116
+ /*
117
+ * Server Interpreter's information strucuture.
118
+ */
119
+ typedef struct _MIDL_SERVER_INFO_T{
120
+ PMIDL_STUB_DESC_T pStubDesc;
121
+ const VOID PTR_T PTR_T DispatchTable;
122
+ const unsigned char PTR_T ProcString;
123
+ const unsigned short PTR_T FmtStringOffset;
124
+ const VOID PTR_T PTR_T ThunkTable;
125
+ RPC_IF_ID PTR_T pTransferSyntax;
126
+ ULONG_PTR_T nCount;
127
+ VOID PTR_T pSyntaxInfo;
128
+ } MIDL_SERVER_INFO_T, PTR_T PMIDL_SERVER_INFO_T;
129
+
130
+ //==============================================================================
131
+ // Common private structures from rpctr4.dll.
132
+ // These structures seems to be constant on all the runtime versions.
133
+ //
134
+ #pragma pack(1)
135
+ typedef struct _SIMPLE_DICT_T{
136
+ VOID PTR_T PTR_T pArray;
137
+ UINT ArraySizeInBytes; //to change : countof array elements
138
+ UINT NumberOfEntries;
139
+ VOID PTR_T SmallArray[SIMPLE_DICT_SMALL_ARRAY];
140
+ }SIMPLE_DICT_T, PTR_T PSIMPLE_DICT_T;
141
+
142
+ typedef struct _QUEUE_T{
143
+ VOID PTR_T Tail;
144
+ VOID PTR_T Head;
145
+ ULONG Lentgh;
146
+ VOID PTR_T SmallArray[SIMPLE_DICT_SMALL_ARRAY];
147
+ }QUEUE_T;
148
+
149
+ typedef struct _MUTEX_T{
150
+ RTL_CRITICAL_SECTION_T CriticalSection;
151
+ }MUTEX_T;
152
+
153
+ typedef struct _EVENT_T{
154
+ ULONG hEvent;
155
+ } EVENT_T;
156
+
157
+ #pragma pack()
158
+
159
+ #define RPC_ADDRESS_TYPE_DG 0x400000
160
+ #define RPC_ADDRESS_TYPE_LRPC 0x800000
161
+ #define RPC_ADDRESS_TYPE_OSF 0x800
162
+
@@ -0,0 +1,191 @@
1
+
2
+ #ifndef GUID_DEFINED
3
+ #define GUID_DEFINED
4
+ #if defined(__midl)
5
+ typedef struct {
6
+ unsigned long Data1;
7
+ unsigned short Data2;
8
+ unsigned short Data3;
9
+ byte Data4[ 8 ];
10
+ } GUID;
11
+ #else
12
+ typedef struct _GUID {
13
+ unsigned long Data1;
14
+ unsigned short Data2;
15
+ unsigned short Data3;
16
+ unsigned char Data4[ 8 ];
17
+ } GUID;
18
+ #endif
19
+ #endif
20
+
21
+ #ifndef FAR
22
+ #ifdef _WIN32
23
+ #define FAR
24
+ #else
25
+ #define FAR _far
26
+ #endif
27
+ #endif
28
+
29
+ #ifndef DECLSPEC_SELECTANY
30
+ #if (_MSC_VER >= 1100)
31
+ #define DECLSPEC_SELECTANY __declspec(selectany)
32
+ #else
33
+ #define DECLSPEC_SELECTANY
34
+ #endif
35
+ #endif
36
+
37
+ #ifndef EXTERN_C
38
+ #ifdef __cplusplus
39
+ #define EXTERN_C extern "C"
40
+ #else
41
+ #define EXTERN_C extern
42
+ #endif
43
+ #endif
44
+
45
+ #ifdef DEFINE_GUID
46
+ #undef DEFINE_GUID
47
+ #endif
48
+
49
+ #ifdef INITGUID
50
+ #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
51
+ EXTERN_C const GUID DECLSPEC_SELECTANY name \
52
+ = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
53
+ #else
54
+ #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
55
+ EXTERN_C const GUID FAR name
56
+ #endif // INITGUID
57
+
58
+ #define DEFINE_OLEGUID(name, l, w1, w2) DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
59
+
60
+ #ifndef _GUIDDEF_H_
61
+ #define _GUIDDEF_H_
62
+
63
+ #ifndef __LPGUID_DEFINED__
64
+ #define __LPGUID_DEFINED__
65
+ typedef GUID *LPGUID;
66
+ #endif
67
+
68
+ #ifndef __LPCGUID_DEFINED__
69
+ #define __LPCGUID_DEFINED__
70
+ typedef const GUID *LPCGUID;
71
+ #endif
72
+
73
+ #ifndef __IID_DEFINED__
74
+ #define __IID_DEFINED__
75
+
76
+ typedef GUID IID;
77
+ typedef IID *LPIID;
78
+ #define IID_NULL GUID_NULL
79
+ #define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
80
+ typedef GUID CLSID;
81
+ typedef CLSID *LPCLSID;
82
+ #define CLSID_NULL GUID_NULL
83
+ #define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
84
+ typedef GUID FMTID;
85
+ typedef FMTID *LPFMTID;
86
+ #define FMTID_NULL GUID_NULL
87
+ #define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2)
88
+
89
+ #ifdef __midl_proxy
90
+ #define __MIDL_CONST
91
+ #else
92
+ #define __MIDL_CONST const
93
+ #endif
94
+
95
+ #ifndef _REFGUID_DEFINED
96
+ #define _REFGUID_DEFINED
97
+ #ifdef __cplusplus
98
+ #define REFGUID const GUID &
99
+ #else
100
+ #define REFGUID const GUID * __MIDL_CONST
101
+ #endif
102
+ #endif
103
+
104
+ #ifndef _REFIID_DEFINED
105
+ #define _REFIID_DEFINED
106
+ #ifdef __cplusplus
107
+ #define REFIID const IID &
108
+ #else
109
+ #define REFIID const IID * __MIDL_CONST
110
+ #endif
111
+ #endif
112
+
113
+ #ifndef _REFCLSID_DEFINED
114
+ #define _REFCLSID_DEFINED
115
+ #ifdef __cplusplus
116
+ #define REFCLSID const IID &
117
+ #else
118
+ #define REFCLSID const IID * __MIDL_CONST
119
+ #endif
120
+ #endif
121
+
122
+ #ifndef _REFFMTID_DEFINED
123
+ #define _REFFMTID_DEFINED
124
+ #ifdef __cplusplus
125
+ #define REFFMTID const IID &
126
+ #else
127
+ #define REFFMTID const IID * __MIDL_CONST
128
+ #endif
129
+ #endif
130
+
131
+ #endif // !__IID_DEFINED__
132
+
133
+ #if !defined (__midl)
134
+ #if !defined (_SYS_GUID_OPERATORS_)
135
+ #define _SYS_GUID_OPERATORS_
136
+
137
+ #ifdef __cplusplus
138
+ __inline int InlineIsEqualGUID(REFGUID rguid1, REFGUID rguid2)
139
+ {
140
+ return (
141
+ ((unsigned long *) &rguid1)[0] == ((unsigned long *) &rguid2)[0] &&
142
+ ((unsigned long *) &rguid1)[1] == ((unsigned long *) &rguid2)[1] &&
143
+ ((unsigned long *) &rguid1)[2] == ((unsigned long *) &rguid2)[2] &&
144
+ ((unsigned long *) &rguid1)[3] == ((unsigned long *) &rguid2)[3]);
145
+ }
146
+
147
+ __inline int IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
148
+ {
149
+ return !memcmp(&rguid1, &rguid2, sizeof(GUID));
150
+ }
151
+
152
+ #else
153
+
154
+ #define InlineIsEqualGUID(rguid1, rguid2) \
155
+ (((unsigned long *) rguid1)[0] == ((unsigned long *) rguid2)[0] && \
156
+ ((unsigned long *) rguid1)[1] == ((unsigned long *) rguid2)[1] && \
157
+ ((unsigned long *) rguid1)[2] == ((unsigned long *) rguid2)[2] && \
158
+ ((unsigned long *) rguid1)[3] == ((unsigned long *) rguid2)[3])
159
+
160
+ #define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))
161
+
162
+ #endif
163
+
164
+ #ifdef __INLINE_ISEQUAL_GUID
165
+ #undef IsEqualGUID
166
+ #define IsEqualGUID(rguid1, rguid2) InlineIsEqualGUID(rguid1, rguid2)
167
+ #endif
168
+
169
+
170
+ #define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
171
+ #define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
172
+
173
+
174
+ #if !defined _SYS_GUID_OPERATOR_EQ_ && !defined _NO_SYS_GUID_OPERATOR_EQ_
175
+ #define _SYS_GUID_OPERATOR_EQ_
176
+
177
+ #ifdef __cplusplus
178
+ __inline bool operator==(REFGUID guidOne, REFGUID guidOther)
179
+ {
180
+ return !!IsEqualGUID(guidOne,guidOther);
181
+ }
182
+
183
+ __inline bool operator!=(REFGUID guidOne, REFGUID guidOther)
184
+ {
185
+ return !(guidOne == guidOther);
186
+ }
187
+ #endif
188
+ #endif
189
+ #endif
190
+ #endif
191
+ #endif
@@ -0,0 +1,262 @@
1
+ #include "wintype.h"
2
+ #pragma pack(push, 1)
3
+
4
+ typedef struct
5
+ {
6
+ unsigned short MustSize : 1;
7
+ unsigned short MustFree : 1;
8
+ unsigned short IsPipe : 1;
9
+ unsigned short IsIn : 1;
10
+ unsigned short IsOut : 1;
11
+ unsigned short IsReturn : 1;
12
+ unsigned short IsBasetype : 1;
13
+ unsigned short IsByValue : 1;
14
+ unsigned short IsSimpleRef : 1;
15
+ unsigned short IsDontCallFreeInst : 1;
16
+ unsigned short SaveForAsyncFinish : 1;
17
+ unsigned short Unused : 2;
18
+ unsigned short ServerAllocSize : 3;
19
+ } PARAM_ATTRIBUTES;
20
+ typedef struct _INTERPRETER_OPT_FLAGS
21
+ {
22
+ unsigned char ServerMustSize : 1;
23
+ unsigned char ClientMustSize : 1;
24
+ unsigned char HasReturn : 1;
25
+ unsigned char HasPipes : 1;
26
+ unsigned char Unused : 1;
27
+ unsigned char HasAsyncUuid : 1;
28
+ unsigned char HasExtensions : 1;
29
+ unsigned char HasAsyncHandle : 1;
30
+ } INTERPRETER_OPT_FLAGS, *PINTERPRETER_OPT_FLAGS;
31
+
32
+ typedef struct _INTERPRETER_OPT_FLAGS2
33
+ {
34
+ unsigned char HasNewCorrDesc : 1;
35
+ unsigned char ClientCorrCheck : 1;
36
+ unsigned char ServerCorrCheck : 1;
37
+ unsigned char HasNotify : 1;
38
+ unsigned char HasNotify2 : 1;
39
+ unsigned char Unused : 3;
40
+ } INTERPRETER_OPT_FLAGS2, *PINTERPRETER_OPT_FLAGS2;
41
+
42
+
43
+ typedef struct _Oi_Header_HType_Flags_t
44
+ {
45
+ BYTE HandleType;
46
+ BYTE OiFlags;
47
+ } Oi_Header_HType_Flags_t;
48
+
49
+ typedef struct _ProcNum_StackSize_t
50
+ {
51
+ WORD ProcNum;
52
+ SHORT StackSize;
53
+ }ProcNum_StackSize_t;
54
+
55
+ typedef struct _Handle_Desc_Common_t
56
+ {
57
+ unsigned char HandleType;
58
+ union {
59
+ unsigned char Flag;
60
+ unsigned char FlagAndSize;
61
+ };
62
+ SHORT Offset;
63
+ }Handle_Desc_Common_t;
64
+
65
+ typedef struct _ExplicitHandlePrimitive_t
66
+ {
67
+ Handle_Desc_Common_t Common;
68
+ } ExplicitHandlePrimitive_t;
69
+ typedef struct _ExplicitHandleGeneric_t
70
+ {
71
+ Handle_Desc_Common_t Common;
72
+ unsigned char BindingRoutinePairIndex;
73
+ unsigned char PAD;
74
+ } ExplicitHandleGeneric_t;
75
+
76
+ typedef struct _ExplicitHandleContext_t
77
+ {
78
+ Handle_Desc_Common_t Common;
79
+ unsigned char ContextRundownRoutineIndex;
80
+ unsigned char ParamNum;
81
+ } ExplicitHandleContext_t;
82
+
83
+ typedef struct _Oi_Header_t
84
+ {
85
+ Oi_Header_HType_Flags_t part1;
86
+ DWORD rpc_flags;
87
+ ProcNum_StackSize_t part2;
88
+ } Oi_Header_t;
89
+
90
+ typedef struct _Oi_Header_Without_RPCFlags_t
91
+ {
92
+ Oi_Header_HType_Flags_t part1;
93
+ ProcNum_StackSize_t part2;
94
+ } Oi_Header_Without_RPCFlags_t;
95
+
96
+
97
+ typedef struct _Oif_Header_t
98
+ {
99
+ SHORT ConstantClientBufferSize;
100
+ SHORT ConstantServerBufferSize;
101
+ INTERPRETER_OPT_FLAGS InterpreterOptFlags;
102
+ unsigned char NumberOfParams;
103
+ } Oif_Header_t;
104
+
105
+ typedef struct _WIN2K_EXT
106
+ {
107
+ unsigned char ExtensionVersion;
108
+ INTERPRETER_OPT_FLAGS2 Flags2;
109
+ unsigned short ClientCorrHint;
110
+ unsigned short ServerCorrHint;
111
+ unsigned short NotifyIndex;
112
+ } WIN2K_EXT;
113
+
114
+ typedef struct _WIN2K_EXT64
115
+ {
116
+ unsigned char ExtensionVersion;
117
+ INTERPRETER_OPT_FLAGS2 Flags2;
118
+ unsigned short ClientCorrHint;
119
+ unsigned short ServerCorrHint;
120
+ unsigned short NotifyIndex;
121
+ unsigned short FloatDoubleMask;
122
+ } WIN2K_EXT64;
123
+
124
+ typedef struct _Oi_Param_Desc_BaseType_t
125
+ {
126
+ unsigned char ParamBaseType;
127
+ unsigned char SimpleType;
128
+ } Oi_Param_Desc_Simple_t;
129
+
130
+ typedef struct _Oi_Param_Desc_Other_t
131
+ {
132
+ unsigned char ParamDirection;
133
+ unsigned char StackSize;
134
+ SHORT TypeOffset;
135
+ } Oi_Param_Desc_Other_t;
136
+
137
+ typedef struct _Oif_ParamDesc_Header_t
138
+ {
139
+ PARAM_ATTRIBUTES ParamAttributes;
140
+ SHORT StackOffset;
141
+ } Oif_ParamDesc_Header_t;
142
+
143
+ typedef struct _Oif_Param_Desc_BaseType_t
144
+ {
145
+ Oif_ParamDesc_Header_t Header;
146
+ unsigned char TypeFormatChar;
147
+ unsigned char Unused;
148
+ } Oif_Param_Desc_BaseType_t;
149
+
150
+ typedef struct _Oif_Param_Desc_Other_t
151
+ {
152
+ Oif_ParamDesc_Header_t Header;
153
+ SHORT TypeOffset;
154
+ } Oif_Param_Desc_Other_t;
155
+
156
+ /* Type Format String */
157
+ typedef struct _CommonPtr_Header_t
158
+ {
159
+ unsigned char PointerType;
160
+ unsigned char PointerAttributes;
161
+ } CommonPtr_Header_t;
162
+ typedef struct _CommonPtr_Simple_t
163
+ {
164
+ CommonPtr_Header_t Header;
165
+ unsigned char SimpleType;
166
+ unsigned char Pad;
167
+ } CommonPtr_Simple_t;
168
+
169
+ typedef struct _CommonPtr_Complex_t
170
+ {
171
+ CommonPtr_Header_t Header;
172
+ SHORT Offset;
173
+ } CommonPtr_Complex_t;
174
+
175
+ /* Array */
176
+ typedef struct _SM_FArray_Header_t
177
+ {
178
+ unsigned char Type;
179
+ unsigned char Alignment;
180
+ SHORT TotalSize;
181
+ }SM_FArray_Header_t;
182
+
183
+ typedef struct _LG_FArray_Header_t
184
+ {
185
+ unsigned char Type;
186
+ unsigned char Alignment;
187
+ INT32 TotalSize;
188
+ }LG_FArray_Header_t;
189
+
190
+ typedef struct _Conformant_Array_Header_t
191
+ {
192
+ unsigned char Type;
193
+ unsigned char Alignment;
194
+ INT32 ElementSize;
195
+ }Conformant_Array_Header_t;
196
+
197
+ typedef Conformant_Array_Header_t Conformant_Varying_Array_Header_t;
198
+
199
+ typedef struct _SM_VArray_Header_t
200
+ {
201
+ unsigned char Type;
202
+ unsigned char Alignment;
203
+ SHORT TotalSize;
204
+ SHORT NumberElements;
205
+ SHORT ElementSize;
206
+ }SM_VArray_Header_t;
207
+
208
+ typedef struct _LG_VArray_Header_t
209
+ {
210
+ unsigned char Type;
211
+ unsigned char Alignment;
212
+ INT32 TotalSize;
213
+ INT32 NumberElements;
214
+ SHORT ElementSize;
215
+ INT32 VarianceDescription;
216
+ }LG_VArray_Header_t;
217
+
218
+ typedef struct _ComplexArray_Header_t
219
+ {
220
+ unsigned char Type;
221
+ unsigned char Alignment;
222
+ SHORT NumberElements;
223
+ }ComplexArray_Header_t;
224
+
225
+
226
+ /* Pointer Layout */
227
+ typedef struct _Pointer_Instance_t
228
+ {
229
+ SHORT PtrOffsetInMem;
230
+ SHORT PtrOffsetInBuf;
231
+ union {
232
+ CommonPtr_Simple_t Simple;
233
+ CommonPtr_Complex_t Complex;
234
+ } PtrDesc;
235
+ }Pointer_Instance_t;
236
+
237
+ typedef struct _No_Repeat_Layout_t
238
+ {
239
+ unsigned char Type;
240
+ unsigned char Pad;
241
+ Pointer_Instance_t PtrInstance;
242
+ }No_Repeat_Layout_t;
243
+
244
+ typedef struct _Fixed_Repeat_Layout_Header_t
245
+ {
246
+ unsigned char Type;
247
+ unsigned char Pad;
248
+ SHORT Iterations;
249
+ SHORT Increment;
250
+ SHORT OffsetToArray;
251
+ SHORT NumberOfPointers;
252
+ } Fixed_Repeat_Layout_Header_t;
253
+
254
+ typedef struct _Variable_Repeat_Layout_Header_t
255
+ {
256
+ unsigned char Type;
257
+ unsigned char OffsetType;
258
+ SHORT Increment;
259
+ SHORT OffsetToArray;
260
+ SHORT NumberOfPointers;
261
+ } Variable_Repeat_Layout_Header_t;
262
+ #pragma pack(pop)