turborex 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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)