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,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