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,39 @@
1
+ #include <rpcdcep.h>
2
+ typedef struct _COMM_FAULT_OFFSETS
3
+ {
4
+ short CommOffset;
5
+ short FaultOffset;
6
+ } COMM_FAULT_OFFSETS;
7
+
8
+ typedef const unsigned char * PFORMAT_STRING;
9
+
10
+ typedef struct _MIDL_METHOD_PROPERTY
11
+ {
12
+ unsigned long Id;
13
+ ULONG_PTR Value;
14
+ } MIDL_METHOD_PROPERTY, *PMIDL_METHOD_PROPERTY;
15
+
16
+ typedef struct _MIDL_METHOD_PROPERTY_MAP
17
+ {
18
+ unsigned long Count;
19
+ const MIDL_METHOD_PROPERTY *Properties;
20
+ } MIDL_METHOD_PROPERTY_MAP, *PMIDL_METHOD_PROPERTY_MAP;
21
+
22
+ typedef struct _MIDL_INTERFACE_METHOD_PROPERTIES
23
+ {
24
+ unsigned short MethodCount;
25
+ const MIDL_METHOD_PROPERTY_MAP* const *MethodProperties;
26
+ } MIDL_INTERFACE_METHOD_PROPERTIES;
27
+
28
+ typedef struct _MIDL_SYNTAX_INFO
29
+ {
30
+ RPC_SYNTAX_IDENTIFIER TransferSyntax;
31
+ RPC_DISPATCH_TABLE * DispatchTable;
32
+ PFORMAT_STRING ProcString;
33
+ const unsigned short * FmtStringOffset;
34
+ PFORMAT_STRING TypeString;
35
+ const void * aUserMarshalQuadruple;
36
+ const MIDL_INTERFACE_METHOD_PROPERTIES *pMethodProperties;
37
+ ULONG_PTR pReserved2;
38
+ } MIDL_SYNTAX_INFO, *PMIDL_SYNTAX_INFO;
39
+
@@ -0,0 +1,154 @@
1
+ #include "../common.h"
2
+ // From RpcView
3
+ static UINT64 RPC_CORE_RUNTIME_VERSION[] = {
4
+ 0x6000324D70000LL, //6.3.9431.0000
5
+ 0x6000325804000LL, //6.3.9600.16384
6
+ 0x6000325804340LL, //6.3.9600.17216
7
+ 0x6000325804407LL, //6.3.9600.17415
8
+ 0x60003258045FFLL, //6.3.9600.17919
9
+ 0x6000325804774LL, //6.3.9600.18292
10
+ 0x6000325804AE8LL, //6.3.9600.19176
11
+ 0xA000028004000LL, //10.0.10240.16384
12
+ 0xA00002800401CLL, //10.0.10240.16412
13
+ 0xA0000280041C9LL, //10.0.10240.16841
14
+ 0xA0000295A0000LL, //10.0.10586.0
15
+ 0xA0000295A0132LL, //10.0.10586.306
16
+ 0xA0000295A0498LL, //10.0.10586.1176
17
+ 0xA0000380603E8LL, //10.0.14342.1000
18
+ 0xA000038190000LL, //10.0.14361.0
19
+ 0xA000038390000LL, //10.0.14393.0
20
+ 0xA000038390052LL, //10.0.14393.82
21
+ 0xA0000383906EALL, //10.0.14393.1770
22
+ 0xA000038390908LL, //10.0.14393.2312
23
+ 0xA000038390A69LL, //10.0.14393.2665
24
+ 0xA000038390C2BLL, //10.0.14393.3115
25
+ 0xA00003AD70000LL, //10.0.15063.0
26
+ 0xA00003AD701BFLL, //10.0.15063.447
27
+ 0xA00003AD702A2LL, //10.0.15063.674
28
+ 0xA00003F6803E8LL, //10.0.16232.1000
29
+ 0xA00003FAB000FLL, //10.0.16299.15
30
+ 0xA00003FAB00C0LL, //10.0.16299.192
31
+ 0xA00003FAB0135LL, //10.0.16299.309
32
+ 0xA00003FAB0173LL, //10.0.16299.371
33
+ 0xA00003FAB01ECLL, //10.0.16299.492
34
+ 0xA00003FAB02D6LL, //10.0.16299.726
35
+ 0xA00003FAB034ELL, //10.0.16299.846
36
+ 0xA0000427903E8LL, //10.0.17017.1000
37
+ 0xA0000428103E8LL, //10.0.17025.1000
38
+ 0xA000042B203EALL, //10.0.17074.1002
39
+ 0xA000042EE0001LL, //10.0.17134.1
40
+ 0xA000042EE0030LL, //10.0.17134.48
41
+ 0xA000042EE0070LL, //10.0.17134.112
42
+ 0xA000042EE00E4LL, //10.0.17134.228
43
+ 0xA000042EE0197LL, //10.0.17134.407
44
+ 0xA000042EE01D7LL, //10.0.17134.471
45
+ 0xA000042EE0288LL, //10.0.17134.648
46
+ 0xA000045630001LL, //10.0.17763.1
47
+ 0xA000045630086LL, //10.0.17763.134
48
+ 0xA0000456300C2LL, //10.0.17763.194
49
+ 0xA00004563017BLL, //10.0.17763.379
50
+ 0xA0000456302CFLL, //10.0.17763.719
51
+ 0xA000047BA0001LL, //10.0.18362.1
52
+ 0xA000047BA01DCLL //10.0.18362.476
53
+ };
54
+
55
+ #define ULONG_PTR_T ULONG_PTR
56
+ #define PTR_T *
57
+
58
+ #pragma pack(1)
59
+ typedef struct _RPC_SERVER_T{
60
+ MUTEX_T Mutex;
61
+ ULONG __bIslistening;
62
+ ULONG bIsListening;
63
+ ULONG MinimumCallThreads;
64
+ ULONG Wait;
65
+ ULONG OutCalls;
66
+ ULONG Unk1;
67
+ ULONG InCalls;
68
+ ULONG Unk2;
69
+ SIMPLE_DICT_T AddressDict;
70
+ ULONG lAvailableCalls;
71
+ ULONG Unk3;
72
+ SIMPLE_DICT_T _ProtSeqQueue;
73
+ ULONG Unk4[8];
74
+ ULONG OutPackets;
75
+ ULONG Unk5;
76
+ MUTEX_T Mutex2;
77
+ ULONG MaxCalls;
78
+ ULONG Unk6;
79
+ VOID PTR_T hEvent;
80
+ ULONG Unk7[4];
81
+ SIMPLE_DICT_T InterfaceDict;
82
+ ULONG _bIsListening;
83
+ ULONG bIsMaxCalls1234;
84
+ ULONG Unk8[6];
85
+ ULONG InPackets;
86
+ ULONG Unk9;
87
+ RPC_FORWARD_FUNCTION PTR_T pRpcForwardFunction;
88
+ ULONG Unk10[6];
89
+ SIMPLE_DICT_T AuthenInfoDict;
90
+ LIST_ENTRY_T RpcIfGroupListEntry;
91
+ ULONG PTR_T __SRWLock;
92
+ LIST_ENTRY_T field_1E0;
93
+ }RPC_SERVER_T, PTR_T PRPC_SERVER_T;
94
+
95
+ typedef struct _RPC_INTERFACE_T
96
+ {
97
+ PRPC_SERVER_T pRpcServer;
98
+ ULONG Flags;
99
+ ULONG Unk1;
100
+ MUTEX_T Mutex;
101
+ ULONG EpMapperFlags;
102
+ ULONG Unk2;
103
+ RPC_MGR_EPV PTR_T pMgrEpv;
104
+ RPC_IF_CALLBACK_FN PTR_T IfCallbackFn;
105
+ RPC_SERVER_INTERFACE_T RpcServerInterface;
106
+ PMIDL_SYNTAX_INFO pSyntaxInfo;
107
+ VOID PTR_T pTransfertSyntaxes;
108
+ ULONG TransfertSyntaxesCount;
109
+ ULONG __Field_C4;
110
+ ULONG NbTypeManager;
111
+ ULONG MaxRpcSize;
112
+ UUID_VECTOR PTR_T pUuidVector;
113
+ SIMPLE_DICT_T RpcInterfaceManagerDict;
114
+ UCHAR Annotation[MAX_RPC_INTERFACE_ANNOTATION];
115
+ ULONG IsCallSizeLimitReached;
116
+ ULONG currentNullManagerCalls;
117
+ ULONG __Field_150;
118
+ ULONG __Field_154;
119
+ ULONG __Field_158;
120
+ ULONG SecurityCallbackInProgress;
121
+ ULONG SecurityCacheEntry;
122
+ ULONG field_164;
123
+ VOID PTR_T __SecurityCacheEntries[16];
124
+ SIMPLE_DICT_T FwEpDict;
125
+ ULONG Unk3[6];
126
+ struct RPCP_INTERFACE_GROUP PTR_T pRpcpInterfaceGroup;
127
+ }RPC_INTERFACE_T, PTR_T PRPC_INTERFACE_T;
128
+
129
+ #define RPC_ADDRESS_TYPE_DG 0x400000
130
+ #define RPC_ADDRESS_TYPE_LRPC 0x800000
131
+ #define RPC_ADDRESS_TYPE_OSF 0x800
132
+
133
+ typedef struct _RPC_ADDRESS_T{
134
+ VOID PTR_T pVtable;
135
+ ULONG Magic;
136
+ ULONG TypeOfAddress;
137
+ ULONG ReferenceCounter;
138
+ ULONG Unk1[3];
139
+ WCHAR PTR_T Name;
140
+ WCHAR PTR_T Protocole;
141
+ WCHAR PTR_T Address;
142
+ ULONG bNamed;
143
+ ULONG EpAddAddressFlag;
144
+ SIMPLE_DICT_T __LRPCSassociationSimpleDict;
145
+ ULONG __Field_68;
146
+ ULONG Unk3;
147
+ ULONG NbActiveCalls;
148
+ ULONG __Field_74;
149
+ ULONG Unk4[6];
150
+ ULONG __Field_90;
151
+ MUTEX_T Mutex;
152
+ }RPC_ADDRESS_T;
153
+
154
+ #pragma pack()
@@ -0,0 +1,517 @@
1
+ #define WINAPI_FAMILY_PARTITION(Partitions) (Partitions)
2
+
3
+ #define PTR_T *
4
+ #if defined(_WIN64)
5
+ typedef unsigned __int64 ULONG_PTR;
6
+ #else
7
+ typedef unsigned long ULONG_PTR;
8
+ #endif
9
+
10
+ typedef ULONG_PTR ULONG_PTR_T;
11
+ // ==============================
12
+ // from winnt.h
13
+
14
+ typedef unsigned short WCHAR; // wc, 16-bit UNICODE character
15
+
16
+
17
+ #ifndef VOID
18
+ #define VOID void
19
+ typedef char CHAR;
20
+ typedef short SHORT;
21
+ typedef long LONG;
22
+ #if !defined(MIDL_PASS)
23
+ typedef int INT;
24
+ #endif
25
+ #endif
26
+
27
+
28
+ // ==============================
29
+ // from minwindef.h
30
+
31
+ #define far
32
+ #define near
33
+ #define CONST const
34
+
35
+
36
+ typedef unsigned long ULONG;
37
+ typedef ULONG *PULONG;
38
+ typedef unsigned short USHORT;
39
+ typedef USHORT *PUSHORT;
40
+ typedef unsigned char UCHAR;
41
+ typedef UCHAR *PUCHAR;
42
+
43
+ #define FAR far
44
+ #define NEAR near
45
+
46
+ #define CALLBACK __stdcall
47
+ #define WINAPI __stdcall
48
+ #define WINAPIV __cdecl
49
+ #define APIENTRY WINAPI
50
+ #define APIPRIVATE __stdcall
51
+ #define PASCAL __stdcall
52
+
53
+ typedef unsigned long DWORD;
54
+ typedef int BOOL;
55
+ typedef unsigned char BYTE;
56
+ typedef unsigned short WORD;
57
+ typedef float FLOAT;
58
+ typedef FLOAT *PFLOAT;
59
+ typedef BOOL near *PBOOL;
60
+ typedef BOOL far *LPBOOL;
61
+ typedef BYTE near *PBYTE;
62
+ typedef BYTE far *LPBYTE;
63
+ typedef int near *PINT;
64
+ typedef int far *LPINT;
65
+ typedef WORD near *PWORD;
66
+ typedef WORD far *LPWORD;
67
+ typedef long far *LPLONG;
68
+ typedef DWORD near *PDWORD;
69
+ typedef DWORD far *LPDWORD;
70
+ typedef void far *LPVOID;
71
+ typedef CONST void far *LPCVOID;
72
+
73
+ typedef int INT;
74
+ typedef unsigned int UINT;
75
+ typedef unsigned int *PUINT;
76
+
77
+ // ==============================
78
+ // from basetsd.h
79
+
80
+
81
+ #ifndef _BASETSD_H_
82
+ #define _BASETSD_H_
83
+
84
+ #if _MSC_VER >= 1200
85
+ #pragma warning(push)
86
+ #pragma warning(disable:4668)
87
+ #endif
88
+
89
+ #if !defined(_MAC) && (defined(_M_MRX000) || defined(_WIN64)) && (_MSC_VER >= 1100) && !(defined(MIDL_PASS) || defined(RC_INVOKED))
90
+ #define POINTER_64 __ptr64
91
+ typedef unsigned __int64 POINTER_64_INT;
92
+ #if defined(_WIN64)
93
+ #define POINTER_32 __ptr32
94
+ #else
95
+ #define POINTER_32
96
+ #endif
97
+ #else
98
+ #if defined(_MAC) && defined(_MAC_INT_64)
99
+ #define POINTER_64 __ptr64
100
+ typedef unsigned __int64 POINTER_64_INT;
101
+ #else
102
+ #if (_MSC_VER >= 1300) && !(defined(MIDL_PASS) || defined(RC_INVOKED))
103
+ #define POINTER_64 __ptr64
104
+ #else
105
+ #define POINTER_64
106
+ #endif
107
+ typedef unsigned long POINTER_64_INT;
108
+ #endif
109
+ #define POINTER_32
110
+ #endif
111
+
112
+ #if defined(_WIN64)
113
+ #define FIRMWARE_PTR
114
+ #else
115
+ #define FIRMWARE_PTR POINTER_32
116
+ #endif
117
+
118
+ #if (_MSC_FULL_VER >= 140041204) && !defined(MIDL_PASS) && !defined(RC_INVOKED)
119
+ #define POINTER_SIGNED __sptr
120
+ #define POINTER_UNSIGNED __uptr
121
+ #else
122
+ #define POINTER_SIGNED
123
+ #define POINTER_UNSIGNED
124
+ #endif
125
+
126
+ #define SPOINTER_32 POINTER_SIGNED POINTER_32
127
+ #define UPOINTER_32 POINTER_UNSIGNED POINTER_32
128
+
129
+ #if _MSC_VER > 1000
130
+ #pragma once
131
+ #endif
132
+
133
+ #ifdef __cplusplus
134
+ extern "C" {
135
+ #endif
136
+
137
+ typedef signed char INT8, *PINT8;
138
+ typedef signed short INT16, *PINT16;
139
+ typedef signed int INT32, *PINT32;
140
+ typedef signed __int64 INT64, *PINT64;
141
+ typedef unsigned char UINT8, *PUINT8;
142
+ typedef unsigned short UINT16, *PUINT16;
143
+ typedef unsigned int UINT32, *PUINT32;
144
+ typedef unsigned __int64 UINT64, *PUINT64;
145
+
146
+ typedef signed int LONG32, *PLONG32;
147
+
148
+
149
+ typedef unsigned int ULONG32, *PULONG32;
150
+ typedef unsigned int DWORD32, *PDWORD32;
151
+
152
+ #if !defined(_W64)
153
+ #if !defined(__midl) && (defined(_X86_) || defined(_M_IX86) || defined(_ARM_) || defined(_M_ARM)) && _MSC_VER >= 1300
154
+ #define _W64 __w64
155
+ #else
156
+ #define _W64
157
+ #endif
158
+ #endif
159
+
160
+ #if ( defined(__midl) && (501 < __midl) )
161
+
162
+ typedef [public] __int3264 INT_PTR, *PINT_PTR;
163
+ typedef [public] unsigned __int3264 UINT_PTR, *PUINT_PTR;
164
+
165
+ typedef [public] __int3264 LONG_PTR, *PLONG_PTR;
166
+ typedef [public] unsigned __int3264 ULONG_PTR, *PULONG_PTR;
167
+
168
+ #else
169
+
170
+ #if defined(_WIN64)
171
+ typedef __int64 INT_PTR, *PINT_PTR;
172
+ typedef unsigned __int64 UINT_PTR, *PUINT_PTR;
173
+
174
+ typedef __int64 LONG_PTR, *PLONG_PTR;
175
+ typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
176
+
177
+ #define __int3264 __int64
178
+
179
+ #else
180
+ typedef _W64 int INT_PTR, *PINT_PTR;
181
+ typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;
182
+
183
+ typedef _W64 long LONG_PTR, *PLONG_PTR;
184
+ typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR;
185
+
186
+ #define __int3264 __int32
187
+
188
+ #endif
189
+ #endif
190
+
191
+
192
+ #ifdef _WIN64
193
+
194
+ #define ADDRESS_TAG_BIT 0x40000000000UI64
195
+
196
+ typedef __int64 SHANDLE_PTR;
197
+ typedef unsigned __int64 HANDLE_PTR;
198
+ typedef unsigned int UHALF_PTR, *PUHALF_PTR;
199
+ typedef int HALF_PTR, *PHALF_PTR;
200
+
201
+ #if !defined(__midl)
202
+ __inline
203
+ unsigned long
204
+ HandleToULong(
205
+ const void *h
206
+ )
207
+ {
208
+ return((unsigned long) (ULONG_PTR) h );
209
+ }
210
+
211
+ __inline
212
+ long
213
+ HandleToLong(
214
+ const void *h
215
+ )
216
+ {
217
+ return((long) (LONG_PTR) h );
218
+ }
219
+
220
+ __inline
221
+ void *
222
+ ULongToHandle(
223
+ const unsigned long h
224
+ )
225
+ {
226
+ return((void *) (UINT_PTR) h );
227
+ }
228
+
229
+
230
+ __inline
231
+ void *
232
+ LongToHandle(
233
+ const long h
234
+ )
235
+ {
236
+ return((void *) (INT_PTR) h );
237
+ }
238
+
239
+
240
+ __inline
241
+ unsigned long
242
+ PtrToUlong(
243
+ const void *p
244
+ )
245
+ {
246
+ return((unsigned long) (ULONG_PTR) p );
247
+ }
248
+
249
+ __inline
250
+ unsigned int
251
+ PtrToUint(
252
+ const void *p
253
+ )
254
+ {
255
+ return((unsigned int) (UINT_PTR) p );
256
+ }
257
+
258
+ __inline
259
+ unsigned short
260
+ PtrToUshort(
261
+ const void *p
262
+ )
263
+ {
264
+ return((unsigned short) (unsigned long) (ULONG_PTR) p );
265
+ }
266
+
267
+ __inline
268
+ long
269
+ PtrToLong(
270
+ const void *p
271
+ )
272
+ {
273
+ return((long) (LONG_PTR) p );
274
+ }
275
+
276
+ __inline
277
+ int
278
+ PtrToInt(
279
+ const void *p
280
+ )
281
+ {
282
+ return((int) (INT_PTR) p );
283
+ }
284
+
285
+ __inline
286
+ short
287
+ PtrToShort(
288
+ const void *p
289
+ )
290
+ {
291
+ return((short) (long) (LONG_PTR) p );
292
+ }
293
+
294
+ __inline
295
+ void *
296
+ IntToPtr(
297
+ const int i
298
+ )
299
+ {
300
+ return( (void *)(INT_PTR)i );
301
+ }
302
+
303
+ __inline
304
+ void *
305
+ UIntToPtr(
306
+ const unsigned int ui
307
+ )
308
+ {
309
+ return( (void *)(UINT_PTR)ui );
310
+ }
311
+
312
+ __inline
313
+ void *
314
+ LongToPtr(
315
+ const long l
316
+ )
317
+ {
318
+ return( (void *)(LONG_PTR)l );
319
+ }
320
+
321
+ __inline
322
+ void *
323
+ ULongToPtr(
324
+ const unsigned long ul
325
+ )
326
+ {
327
+ return( (void *)(ULONG_PTR)ul );
328
+ }
329
+
330
+ #define PtrToPtr64( p ) ((void * POINTER_64) p)
331
+ #define Ptr64ToPtr( p ) ((void *) p)
332
+ #define HandleToHandle64( h ) (PtrToPtr64( h ))
333
+ #define Handle64ToHandle( h ) (Ptr64ToPtr( h ))
334
+
335
+ __inline
336
+ void *
337
+ Ptr32ToPtr(
338
+ const void * POINTER_32 p
339
+ )
340
+ {
341
+ return((void *) (ULONG_PTR) (unsigned long) p);
342
+ }
343
+
344
+ __inline
345
+ void *
346
+ Handle32ToHandle(
347
+ const void * POINTER_32 h
348
+ )
349
+ {
350
+ return((void *) (LONG_PTR) (long) h);
351
+ }
352
+
353
+ __inline
354
+ void * POINTER_32
355
+ PtrToPtr32(
356
+ const void *p
357
+ )
358
+ {
359
+ return((void * POINTER_32) (unsigned long) (ULONG_PTR) p);
360
+ }
361
+
362
+ #define HandleToHandle32( h ) (PtrToPtr32( h ))
363
+
364
+ #endif
365
+
366
+ #else
367
+
368
+ #define ADDRESS_TAG_BIT 0x80000000UL
369
+
370
+ typedef unsigned short UHALF_PTR, *PUHALF_PTR;
371
+ typedef short HALF_PTR, *PHALF_PTR;
372
+ typedef _W64 long SHANDLE_PTR;
373
+ typedef _W64 unsigned long HANDLE_PTR;
374
+
375
+ #define HandleToULong( h ) ((ULONG)(ULONG_PTR)(h) )
376
+ #define HandleToLong( h ) ((LONG)(LONG_PTR) (h) )
377
+ #define ULongToHandle( ul ) ((HANDLE)(ULONG_PTR) (ul) )
378
+ #define LongToHandle( h ) ((HANDLE)(LONG_PTR) (h) )
379
+ #define PtrToUlong( p ) ((ULONG)(ULONG_PTR) (p) )
380
+ #define PtrToLong( p ) ((LONG)(LONG_PTR) (p) )
381
+ #define PtrToUint( p ) ((UINT)(UINT_PTR) (p) )
382
+ #define PtrToInt( p ) ((INT)(INT_PTR) (p) )
383
+ #define PtrToUshort( p ) ((unsigned short)(ULONG_PTR)(p) )
384
+ #define PtrToShort( p ) ((short)(LONG_PTR)(p) )
385
+ #define IntToPtr( i ) ((VOID *)(INT_PTR)((int)i))
386
+ #define UIntToPtr( ui ) ((VOID *)(UINT_PTR)((unsigned int)ui))
387
+ #define LongToPtr( l ) ((VOID *)(LONG_PTR)((long)l))
388
+ #define ULongToPtr( ul ) ((VOID *)(ULONG_PTR)((unsigned long)ul))
389
+
390
+ #if !defined(__midl)
391
+ __inline
392
+ void * POINTER_64
393
+ PtrToPtr64(
394
+ const void *p
395
+ )
396
+ {
397
+ return((void * POINTER_64) (unsigned __int64) (ULONG_PTR)p );
398
+ }
399
+
400
+ __inline
401
+ void *
402
+ Ptr64ToPtr(
403
+ const void * POINTER_64 p
404
+ )
405
+ {
406
+ return((void *) (ULONG_PTR) (unsigned __int64) p);
407
+ }
408
+
409
+ __inline
410
+ void * POINTER_64
411
+ HandleToHandle64(
412
+ const void *h
413
+ )
414
+ {
415
+ return((void * POINTER_64)(__int64)(LONG_PTR)h );
416
+ }
417
+
418
+ __inline
419
+ void *
420
+ Handle64ToHandle(
421
+ const void * POINTER_64 h
422
+ )
423
+ {
424
+ return((void *) (ULONG_PTR) (unsigned __int64) h );
425
+ }
426
+ #endif
427
+
428
+ #define Ptr32ToPtr( p ) ((void *) p)
429
+ #define Handle32ToHandle( h ) (Ptr32ToPtr( h ))
430
+ #define PtrToPtr32( p ) ((void * POINTER_32) p)
431
+ #define HandleToHandle32( h ) (PtrToPtr32( h ))
432
+
433
+ #endif // !_WIN64
434
+
435
+ #define HandleToUlong(h) HandleToULong(h)
436
+ #define UlongToHandle(ul) ULongToHandle(ul)
437
+ #define UlongToPtr(ul) ULongToPtr(ul)
438
+ #define UintToPtr(ui) UIntToPtr(ui)
439
+
440
+ #define MAXUINT_PTR (~((UINT_PTR)0))
441
+ #define MAXINT_PTR ((INT_PTR)(MAXUINT_PTR >> 1))
442
+ #define MININT_PTR (~MAXINT_PTR)
443
+
444
+ #define MAXULONG_PTR (~((ULONG_PTR)0))
445
+ #define MAXLONG_PTR ((LONG_PTR)(MAXULONG_PTR >> 1))
446
+ #define MINLONG_PTR (~MAXLONG_PTR)
447
+
448
+ #define MAXUHALF_PTR ((UHALF_PTR)~0)
449
+ #define MAXHALF_PTR ((HALF_PTR)(MAXUHALF_PTR >> 1))
450
+ #define MINHALF_PTR (~MAXHALF_PTR)
451
+
452
+
453
+ typedef ULONG_PTR SIZE_T, *PSIZE_T;
454
+ typedef LONG_PTR SSIZE_T, *PSSIZE_T;
455
+
456
+ #if _WIN32_WINNT >= 0x0600 || (defined(__cplusplus) && defined(WINDOWS_ENABLE_CPLUSPLUS))
457
+
458
+ #define MAXUINT8 ((UINT8)~((UINT8)0))
459
+ #define MAXINT8 ((INT8)(MAXUINT8 >> 1))
460
+ #define MININT8 ((INT8)~MAXINT8)
461
+
462
+ #define MAXUINT16 ((UINT16)~((UINT16)0))
463
+ #define MAXINT16 ((INT16)(MAXUINT16 >> 1))
464
+ #define MININT16 ((INT16)~MAXINT16)
465
+
466
+ #define MAXUINT32 ((UINT32)~((UINT32)0))
467
+ #define MAXINT32 ((INT32)(MAXUINT32 >> 1))
468
+ #define MININT32 ((INT32)~MAXINT32)
469
+
470
+ #define MAXUINT64 ((UINT64)~((UINT64)0))
471
+ #define MAXINT64 ((INT64)(MAXUINT64 >> 1))
472
+ #define MININT64 ((INT64)~MAXINT64)
473
+
474
+ #define MAXULONG32 ((ULONG32)~((ULONG32)0))
475
+ #define MAXLONG32 ((LONG32)(MAXULONG32 >> 1))
476
+ #define MINLONG32 ((LONG32)~MAXLONG32)
477
+
478
+ #define MAXULONG64 ((ULONG64)~((ULONG64)0))
479
+ #define MAXLONG64 ((LONG64)(MAXULONG64 >> 1))
480
+ #define MINLONG64 ((LONG64)~MAXLONG64)
481
+
482
+ #define MAXULONGLONG ((ULONGLONG)~((ULONGLONG)0))
483
+ #define MINLONGLONG ((LONGLONG)~MAXLONGLONG)
484
+
485
+ #define MAXSIZE_T ((SIZE_T)~((SIZE_T)0))
486
+ #define MAXSSIZE_T ((SSIZE_T)(MAXSIZE_T >> 1))
487
+ #define MINSSIZE_T ((SSIZE_T)~MAXSSIZE_T)
488
+
489
+ #define MAXUINT ((UINT)~((UINT)0))
490
+ #define MAXINT ((INT)(MAXUINT >> 1))
491
+ #define MININT ((INT)~MAXINT)
492
+
493
+ #define MAXDWORD32 ((DWORD32)~((DWORD32)0))
494
+ #define MAXDWORD64 ((DWORD64)~((DWORD64)0))
495
+
496
+ #endif
497
+
498
+ typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR;
499
+
500
+ typedef __int64 LONG64, *PLONG64;
501
+
502
+ typedef unsigned __int64 ULONG64, *PULONG64;
503
+ typedef unsigned __int64 DWORD64, *PDWORD64;
504
+
505
+ typedef ULONG_PTR KAFFINITY;
506
+ typedef KAFFINITY *PKAFFINITY;
507
+
508
+
509
+ #ifdef __cplusplus
510
+ }
511
+ #endif
512
+
513
+ #if _MSC_VER >= 1200
514
+ #pragma warning(pop)
515
+ #endif
516
+
517
+ #endif