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,5 @@
1
+ #include <tinysdk/wintype.h>
2
+ #include <tinysdk/winnt.h>
3
+ #include <tinysdk/comdef.h>
4
+ #include <tinysdk/dbghelp.h>
5
+ #include <tinysdk/memoryapi.h>
@@ -0,0 +1,645 @@
1
+ #include "rpc.h"
2
+ #define BEGIN_INTERFACE
3
+ #define END_INTERFACE
4
+ #define _COM_Outptr_
5
+ #define CONST_VTBL
6
+ #define STDMETHODCALLTYPE __stdcall
7
+ #define interface struct
8
+ #define _Inout_
9
+ #define _Out_opt_
10
+ #define _Out_
11
+ #define _Outptr_
12
+ #define _In_opt_
13
+
14
+ typedef struct _COAUTHIDENTITY
15
+ {
16
+ /* [size_is] */ USHORT *User;
17
+ /* [range] */ ULONG UserLength;
18
+ /* [size_is] */ USHORT *Domain;
19
+ /* [range] */ ULONG DomainLength;
20
+ /* [size_is] */ USHORT *Password;
21
+ /* [range] */ ULONG PasswordLength;
22
+ ULONG Flags;
23
+ } COAUTHIDENTITY;
24
+
25
+
26
+ typedef struct _COAUTHINFO
27
+ {
28
+ DWORD dwAuthnSvc;
29
+ DWORD dwAuthzSvc;
30
+ LPWSTR pwszServerPrincName;
31
+ DWORD dwAuthnLevel;
32
+ DWORD dwImpersonationLevel;
33
+ COAUTHIDENTITY *pAuthIdentityData;
34
+ DWORD dwCapabilities;
35
+ } COAUTHINFO;
36
+
37
+ typedef struct _COSERVERINFO
38
+ {
39
+ DWORD dwReserved1;
40
+ LPWSTR pwszName;
41
+ COAUTHINFO *pAuthInfo;
42
+ DWORD dwReserved2;
43
+ } COSERVERINFO;
44
+
45
+ typedef struct _FILETIME {
46
+ DWORD dwLowDateTime;
47
+ DWORD dwHighDateTime;
48
+ } FILETIME, *PFILETIME, *LPFILETIME;
49
+
50
+ typedef enum tagCOINIT
51
+ {
52
+ COINIT_APARTMENTTHREADED = 0x2, /* Apartment model */
53
+ COINIT_MULTITHREADED = 0x0, /* OLE calls objects on any thread */
54
+ COINIT_DISABLE_OLE1DDE = 0x4, /* Don't use DDE for Ole1 support */
55
+ COINIT_SPEED_OVER_MEMORY = 0x8 /* Trade memory for speed */
56
+ } COINIT;
57
+
58
+ typedef ULONG RPCOLEDATAREP;
59
+
60
+ typedef struct tagRPCOLEMESSAGE
61
+ {
62
+ void *reserved1;
63
+ RPCOLEDATAREP dataRepresentation;
64
+ void *Buffer;
65
+ ULONG cbBuffer;
66
+ ULONG iMethod;
67
+ void *reserved2[ 5 ];
68
+ ULONG rpcFlags;
69
+ } RPCOLEMESSAGE;
70
+
71
+ typedef struct tagSTATSTG
72
+ {
73
+ LPOLESTR pwcsName;
74
+ DWORD type;
75
+ ULARGE_INTEGER cbSize;
76
+ FILETIME mtime;
77
+ FILETIME ctime;
78
+ FILETIME atime;
79
+ DWORD grfMode;
80
+ DWORD grfLocksSupported;
81
+ CLSID clsid;
82
+ DWORD grfStateBits;
83
+ DWORD reserved;
84
+ } STATSTG;
85
+
86
+ /* interface IUnkown */
87
+ typedef interface IUnknown IUnknown;
88
+
89
+ typedef struct IUnknownVtbl
90
+ {
91
+ BEGIN_INTERFACE
92
+
93
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
94
+ IUnknown * This,
95
+ REFIID riid,
96
+ _COM_Outptr_ void **ppvObject);
97
+
98
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
99
+ IUnknown * This);
100
+
101
+ ULONG ( STDMETHODCALLTYPE *Release )(
102
+ IUnknown * This);
103
+ END_INTERFACE
104
+ } IUnknownVtbl;
105
+
106
+ interface IUnknown
107
+ {
108
+ CONST_VTBL struct IUnknownVtbl *lpVtbl;
109
+ };
110
+
111
+ typedef IUnknown *LPUNKNOWN;
112
+
113
+ typedef struct tagMULTI_QI
114
+ {
115
+ const IID *pIID;
116
+ IUnknown *pItf;
117
+ HRESULT hr;
118
+ } MULTI_QI;
119
+
120
+ /* interface IClassFactory */
121
+ typedef interface IClassFactory IClassFactory;
122
+ typedef struct IClassFactoryVtbl
123
+ {
124
+ BEGIN_INTERFACE
125
+
126
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
127
+ IClassFactory * This,
128
+ REFIID riid,
129
+ _COM_Outptr_ void **ppvObject);
130
+
131
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
132
+ IClassFactory * This);
133
+
134
+ ULONG ( STDMETHODCALLTYPE *Release )(
135
+ IClassFactory * This);
136
+
137
+ HRESULT ( STDMETHODCALLTYPE *CreateInstance )(
138
+ IClassFactory * This,
139
+ IUnknown *pUnkOuter,
140
+ REFIID riid,
141
+ _COM_Outptr_ void **ppvObject);
142
+
143
+ HRESULT ( STDMETHODCALLTYPE *LockServer )(
144
+ IClassFactory * This,
145
+ BOOL fLock);
146
+
147
+ END_INTERFACE
148
+ } IClassFactoryVtbl;
149
+
150
+ interface IClassFactory
151
+ {
152
+ CONST_VTBL struct IClassFactoryVtbl *lpVtbl;
153
+ };
154
+
155
+
156
+ /* IStream */
157
+ typedef interface IStream IStream;
158
+ typedef struct IStreamVtbl
159
+ {
160
+ BEGIN_INTERFACE
161
+
162
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
163
+ IStream * This,
164
+ REFIID riid,
165
+ _COM_Outptr_ void **ppvObject);
166
+
167
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
168
+ IStream * This);
169
+
170
+ ULONG ( STDMETHODCALLTYPE *Release )(
171
+ IStream * This);
172
+
173
+ HRESULT ( STDMETHODCALLTYPE *Read )(
174
+ IStream * This,
175
+ void *pv,
176
+ ULONG cb,
177
+ ULONG *pcbRead);
178
+
179
+ HRESULT ( STDMETHODCALLTYPE *Write )(
180
+ IStream * This,
181
+ const void *pv,
182
+ ULONG cb,
183
+ ULONG *pcbWritten);
184
+
185
+ HRESULT ( STDMETHODCALLTYPE *Seek )(
186
+ IStream * This,
187
+ LARGE_INTEGER dlibMove,
188
+ DWORD dwOrigin,
189
+ ULARGE_INTEGER *plibNewPosition);
190
+
191
+ HRESULT ( STDMETHODCALLTYPE *SetSize )(
192
+ IStream * This,
193
+ ULARGE_INTEGER libNewSize);
194
+
195
+ HRESULT ( STDMETHODCALLTYPE *CopyTo )(
196
+ IStream * This,
197
+ IStream *pstm,
198
+ ULARGE_INTEGER cb,
199
+ ULARGE_INTEGER *pcbRead,
200
+ ULARGE_INTEGER *pcbWritten);
201
+
202
+ HRESULT ( STDMETHODCALLTYPE *Commit )(
203
+ IStream * This,
204
+ DWORD grfCommitFlags);
205
+
206
+ HRESULT ( STDMETHODCALLTYPE *Revert )(
207
+ IStream * This);
208
+
209
+ HRESULT ( STDMETHODCALLTYPE *LockRegion )(
210
+ IStream * This,
211
+ ULARGE_INTEGER libOffset,
212
+ ULARGE_INTEGER cb,
213
+ DWORD dwLockType);
214
+
215
+ HRESULT ( STDMETHODCALLTYPE *UnlockRegion )(
216
+ IStream * This,
217
+ ULARGE_INTEGER libOffset,
218
+ ULARGE_INTEGER cb,
219
+ DWORD dwLockType);
220
+
221
+ HRESULT ( STDMETHODCALLTYPE *Stat )(
222
+ IStream * This,
223
+ STATSTG *pstatstg,
224
+ DWORD grfStatFlag);
225
+
226
+ HRESULT ( STDMETHODCALLTYPE *Clone )(
227
+ IStream * This,
228
+ IStream **ppstm);
229
+
230
+ END_INTERFACE
231
+ } IStreamVtbl;
232
+
233
+ interface IStream
234
+ {
235
+ CONST_VTBL struct IStreamVtbl *lpVtbl;
236
+ };
237
+
238
+ typedef IStream *LPSTREAM;
239
+
240
+
241
+ /* IEnumSTATSTG */
242
+ typedef interface IEnumSTATSTG IEnumSTATSTG;
243
+ typedef struct IEnumSTATSTGVtbl
244
+ {
245
+ BEGIN_INTERFACE
246
+
247
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
248
+ IEnumSTATSTG * This,
249
+ REFIID riid,
250
+ void **ppvObject);
251
+
252
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
253
+ IEnumSTATSTG * This);
254
+
255
+ ULONG ( STDMETHODCALLTYPE *Release )(
256
+ IEnumSTATSTG * This);
257
+
258
+ HRESULT ( STDMETHODCALLTYPE *Next )(
259
+ IEnumSTATSTG * This,
260
+ ULONG celt,
261
+ STATSTG *rgelt,
262
+ ULONG *pceltFetched);
263
+
264
+ HRESULT ( STDMETHODCALLTYPE *Skip )(
265
+ IEnumSTATSTG * This,
266
+ ULONG celt);
267
+
268
+ HRESULT ( STDMETHODCALLTYPE *Reset )(
269
+ IEnumSTATSTG * This);
270
+
271
+ HRESULT ( STDMETHODCALLTYPE *Clone )(
272
+ IEnumSTATSTG * This,
273
+ IEnumSTATSTG **ppenum);
274
+
275
+ END_INTERFACE
276
+ } IEnumSTATSTGVtbl;
277
+
278
+ interface IEnumSTATSTG
279
+ {
280
+ CONST_VTBL struct IEnumSTATSTGVtbl *lpVtbl;
281
+ };
282
+
283
+
284
+ /* IStorage */
285
+
286
+ typedef LPOLESTR *SNB;
287
+
288
+ typedef interface IStorage IStorage;
289
+ typedef struct IStorageVtbl
290
+ {
291
+ BEGIN_INTERFACE
292
+
293
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
294
+ IStorage * This,
295
+ REFIID riid,
296
+ _COM_Outptr_ void **ppvObject);
297
+
298
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
299
+ IStorage * This);
300
+
301
+ ULONG ( STDMETHODCALLTYPE *Release )(
302
+ IStorage * This);
303
+
304
+ HRESULT ( STDMETHODCALLTYPE *CreateStream )(
305
+ IStorage * This,
306
+ const OLECHAR *pwcsName,
307
+ DWORD grfMode,
308
+ DWORD reserved1,
309
+ DWORD reserved2,
310
+ IStream **ppstm);
311
+
312
+ HRESULT ( STDMETHODCALLTYPE *OpenStream )(
313
+ IStorage * This,
314
+ const OLECHAR *pwcsName,
315
+ void *reserved1,
316
+ DWORD grfMode,
317
+ DWORD reserved2,
318
+ IStream **ppstm);
319
+
320
+ HRESULT ( STDMETHODCALLTYPE *CreateStorage )(
321
+ IStorage * This,
322
+ /* [string][in] */ const OLECHAR *pwcsName,
323
+ /* [in] */ DWORD grfMode,
324
+ /* [in] */ DWORD reserved1,
325
+ /* [in] */ DWORD reserved2,
326
+ /* [out] */ IStorage **ppstg);
327
+
328
+ HRESULT ( STDMETHODCALLTYPE *OpenStorage )(
329
+ IStorage * This,
330
+ /* [string][unique][in] */ const OLECHAR *pwcsName,
331
+ /* [unique][in] */ IStorage *pstgPriority,
332
+ /* [in] */ DWORD grfMode,
333
+ /* [unique][in] */ SNB snbExclude,
334
+ /* [in] */ DWORD reserved,
335
+ /* [out] */ IStorage **ppstg);
336
+
337
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *CopyTo )(
338
+ IStorage * This,
339
+ /* [in] */ DWORD ciidExclude,
340
+ /* [annotation][size_is][unique][in] */
341
+ const IID *rgiidExclude,
342
+ /* [annotation][unique][in] */
343
+ SNB snbExclude,
344
+ /* [annotation][unique][in] */
345
+ IStorage *pstgDest);
346
+
347
+ HRESULT ( STDMETHODCALLTYPE *MoveElementTo )(
348
+ IStorage * This,
349
+ /* [string][in] */ const OLECHAR *pwcsName,
350
+ /* [unique][in] */ IStorage *pstgDest,
351
+ /* [string][in] */ const OLECHAR *pwcsNewName,
352
+ /* [in] */ DWORD grfFlags);
353
+
354
+ HRESULT ( STDMETHODCALLTYPE *Commit )(
355
+ IStorage * This,
356
+ /* [in] */ DWORD grfCommitFlags);
357
+
358
+ HRESULT ( STDMETHODCALLTYPE *Revert )(
359
+ IStorage * This);
360
+
361
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *EnumElements )(
362
+ IStorage * This,
363
+ /* [annotation][in] */
364
+ DWORD reserved1,
365
+ /* [annotation][size_is][unique][in] */
366
+ void *reserved2,
367
+ /* [annotation][in] */
368
+ DWORD reserved3,
369
+ /* [annotation][out] */
370
+ IEnumSTATSTG **ppenum);
371
+
372
+ HRESULT ( STDMETHODCALLTYPE *DestroyElement )(
373
+ IStorage * This,
374
+ /* [string][in] */ const OLECHAR *pwcsName);
375
+
376
+ HRESULT ( STDMETHODCALLTYPE *RenameElement )(
377
+ IStorage * This,
378
+ /* [string][in] */ const OLECHAR *pwcsOldName,
379
+ /* [string][in] */ const OLECHAR *pwcsNewName);
380
+
381
+ HRESULT ( STDMETHODCALLTYPE *SetElementTimes )(
382
+ IStorage * This,
383
+ /* [string][unique][in] */ const OLECHAR *pwcsName,
384
+ /* [unique][in] */ const FILETIME *pctime,
385
+ /* [unique][in] */ const FILETIME *patime,
386
+ /* [unique][in] */ const FILETIME *pmtime);
387
+
388
+ HRESULT ( STDMETHODCALLTYPE *SetClass )(
389
+ IStorage * This,
390
+ /* [in] */ REFCLSID clsid);
391
+
392
+ HRESULT ( STDMETHODCALLTYPE *SetStateBits )(
393
+ IStorage * This,
394
+ /* [in] */ DWORD grfStateBits,
395
+ /* [in] */ DWORD grfMask);
396
+
397
+ HRESULT ( STDMETHODCALLTYPE *Stat )(
398
+ IStorage * This,
399
+ /* [out] */ STATSTG *pstatstg,
400
+ /* [in] */ DWORD grfStatFlag);
401
+
402
+ END_INTERFACE
403
+ } IStorageVtbl;
404
+
405
+ interface IStorage
406
+ {
407
+ CONST_VTBL struct IStorageVtbl *lpVtbl;
408
+ };
409
+
410
+ typedef /* [unique] */ IStorage *LPSTORAGE;
411
+
412
+ typedef interface IRpcChannelBuffer IRpcChannelBuffer;
413
+ typedef struct IRpcChannelBufferVtbl
414
+ {
415
+ BEGIN_INTERFACE
416
+
417
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
418
+ IRpcChannelBuffer * This,
419
+ /* [in] */ REFIID riid,
420
+ /* [annotation][iid_is][out] */
421
+ _COM_Outptr_ void **ppvObject);
422
+
423
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
424
+ IRpcChannelBuffer * This);
425
+
426
+ ULONG ( STDMETHODCALLTYPE *Release )(
427
+ IRpcChannelBuffer * This);
428
+
429
+ HRESULT ( STDMETHODCALLTYPE *GetBuffer )(
430
+ IRpcChannelBuffer * This,
431
+ /* [annotation][out][in] */
432
+ _Inout_ RPCOLEMESSAGE *pMessage,
433
+ /* [annotation][in] */
434
+ _In_ REFIID riid);
435
+
436
+ HRESULT ( STDMETHODCALLTYPE *SendReceive )(
437
+ IRpcChannelBuffer * This,
438
+ /* [annotation][out][in] */
439
+ _Inout_ RPCOLEMESSAGE *pMessage,
440
+ /* [annotation][out] */
441
+ _Out_opt_ ULONG *pStatus);
442
+
443
+ HRESULT ( STDMETHODCALLTYPE *FreeBuffer )(
444
+ IRpcChannelBuffer * This,
445
+ /* [annotation][out][in] */
446
+ _Inout_ RPCOLEMESSAGE *pMessage);
447
+
448
+ HRESULT ( STDMETHODCALLTYPE *GetDestCtx )(
449
+ IRpcChannelBuffer * This,
450
+ /* [annotation][out] */
451
+ _Out_ DWORD *pdwDestContext,
452
+ /* [annotation][out] */
453
+ void **ppvDestContext);
454
+
455
+ HRESULT ( STDMETHODCALLTYPE *IsConnected )(
456
+ IRpcChannelBuffer * This);
457
+
458
+ END_INTERFACE
459
+ } IRpcChannelBufferVtbl;
460
+
461
+ interface IRpcChannelBuffer
462
+ {
463
+ CONST_VTBL struct IRpcChannelBufferVtbl *lpVtbl;
464
+ };
465
+
466
+ typedef interface IRpcProxyBuffer IRpcProxyBuffer;
467
+ typedef struct IRpcProxyBufferVtbl
468
+ {
469
+ BEGIN_INTERFACE
470
+
471
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
472
+ IRpcProxyBuffer * This,
473
+ /* [in] */ REFIID riid,
474
+ /* [annotation][iid_is][out] */
475
+ _COM_Outptr_ void **ppvObject);
476
+
477
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
478
+ IRpcProxyBuffer * This);
479
+
480
+ ULONG ( STDMETHODCALLTYPE *Release )(
481
+ IRpcProxyBuffer * This);
482
+
483
+ HRESULT ( STDMETHODCALLTYPE *Connect )(
484
+ IRpcProxyBuffer * This,
485
+ /* [annotation][unique][in] */
486
+ _In_ IRpcChannelBuffer *pRpcChannelBuffer);
487
+
488
+ void ( STDMETHODCALLTYPE *Disconnect )(
489
+ IRpcProxyBuffer * This);
490
+
491
+ END_INTERFACE
492
+ } IRpcProxyBufferVtbl;
493
+
494
+ interface IRpcProxyBuffer
495
+ {
496
+ CONST_VTBL struct IRpcProxyBufferVtbl *lpVtbl;
497
+ };
498
+
499
+ typedef interface IRpcStubBuffer IRpcStubBuffer;
500
+ typedef struct IRpcStubBufferVtbl
501
+ {
502
+ BEGIN_INTERFACE
503
+
504
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
505
+ IRpcStubBuffer * This,
506
+ /* [in] */ REFIID riid,
507
+ /* [annotation][iid_is][out] */
508
+ _COM_Outptr_ void **ppvObject);
509
+
510
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
511
+ IRpcStubBuffer * This);
512
+
513
+ ULONG ( STDMETHODCALLTYPE *Release )(
514
+ IRpcStubBuffer * This);
515
+
516
+ HRESULT ( STDMETHODCALLTYPE *Connect )(
517
+ IRpcStubBuffer * This,
518
+ /* [annotation][in] */
519
+ _In_ IUnknown *pUnkServer);
520
+
521
+ void ( STDMETHODCALLTYPE *Disconnect )(
522
+ IRpcStubBuffer * This);
523
+
524
+ HRESULT ( STDMETHODCALLTYPE *Invoke )(
525
+ IRpcStubBuffer * This,
526
+ /* [annotation][out][in] */
527
+ _Inout_ RPCOLEMESSAGE *_prpcmsg,
528
+ /* [annotation][in] */
529
+ _In_ IRpcChannelBuffer *_pRpcChannelBuffer);
530
+
531
+ IRpcStubBuffer *( STDMETHODCALLTYPE *IsIIDSupported )(
532
+ IRpcStubBuffer * This,
533
+ /* [annotation][in] */
534
+ _In_ REFIID riid);
535
+
536
+ ULONG ( STDMETHODCALLTYPE *CountRefs )(
537
+ IRpcStubBuffer * This);
538
+
539
+ HRESULT ( STDMETHODCALLTYPE *DebugServerQueryInterface )(
540
+ IRpcStubBuffer * This,
541
+ /* [annotation][out] */
542
+ _Outptr_ void **ppv);
543
+
544
+ void ( STDMETHODCALLTYPE *DebugServerRelease )(
545
+ IRpcStubBuffer * This,
546
+ /* [annotation][in] */
547
+ _In_ void *pv);
548
+
549
+ END_INTERFACE
550
+ } IRpcStubBufferVtbl;
551
+
552
+ interface IRpcStubBuffer
553
+ {
554
+ CONST_VTBL struct IRpcStubBufferVtbl *lpVtbl;
555
+ };
556
+
557
+
558
+
559
+ typedef interface IPSFactoryBuffer IPSFactoryBuffer;
560
+ typedef struct IPSFactoryBufferVtbl
561
+ {
562
+ BEGIN_INTERFACE
563
+
564
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
565
+ IPSFactoryBuffer * This,
566
+ /* [in] */ REFIID riid,
567
+ /* [annotation][iid_is][out] */
568
+ _COM_Outptr_ void **ppvObject);
569
+
570
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
571
+ IPSFactoryBuffer * This);
572
+
573
+ ULONG ( STDMETHODCALLTYPE *Release )(
574
+ IPSFactoryBuffer * This);
575
+
576
+ HRESULT ( STDMETHODCALLTYPE *CreateProxy )(
577
+ IPSFactoryBuffer * This,
578
+ /* [annotation][in] */
579
+ _In_ IUnknown *pUnkOuter,
580
+ /* [annotation][in] */
581
+ _In_ REFIID riid,
582
+ /* [annotation][out] */
583
+ _Outptr_ IRpcProxyBuffer **ppProxy,
584
+ /* [annotation][out] */
585
+ _Outptr_ void **ppv);
586
+
587
+ HRESULT ( STDMETHODCALLTYPE *CreateStub )(
588
+ IPSFactoryBuffer * This,
589
+ /* [annotation][in] */
590
+ _In_ REFIID riid,
591
+ /* [annotation][unique][in] */
592
+ _In_opt_ IUnknown *pUnkServer,
593
+ /* [annotation][out] */
594
+ _Outptr_ IRpcStubBuffer **ppStub);
595
+
596
+ END_INTERFACE
597
+ } IPSFactoryBufferVtbl;
598
+
599
+ interface IPSFactoryBuffer
600
+ {
601
+ CONST_VTBL struct IPSFactoryBufferVtbl *lpVtbl;
602
+ };
603
+
604
+
605
+
606
+ typedef __int64 OXID;
607
+ typedef __int64 OID;
608
+ typedef GUID IPID;
609
+
610
+ typedef struct tagDUALSTRINGARRAY {
611
+ unsigned short wNumEntries;
612
+ unsigned short wSecurityOffset;
613
+ unsigned short aStringArray[ANYSIZE_ARRAY];
614
+ } DUALSTRINGARRAY;
615
+
616
+ typedef struct tagSTDOBJREF {
617
+ unsigned long flags;
618
+ unsigned long cPublicRefs;
619
+ OXID oxid;
620
+ OID oid;
621
+ IPID ipid;
622
+ } STDOBJREF;
623
+
624
+ typedef struct tagOBJREF {
625
+ unsigned long signature;
626
+ unsigned long flags;
627
+ GUID iid;
628
+ union {
629
+ struct {
630
+ STDOBJREF std;
631
+ DUALSTRINGARRAY saResAddr;
632
+ } u_standard;
633
+ struct {
634
+ STDOBJREF std;
635
+ CLSID clsid;
636
+ DUALSTRINGARRAY saResAddr;
637
+ } u_handler;
638
+ struct {
639
+ CLSID clsid;
640
+ unsigned long cbExtension;
641
+ unsigned long size;
642
+ BYTE *pData;
643
+ } u_custom;
644
+ } u_objref;
645
+ } OBJREF;