ReactOS 0.4.16-dev-1946-g52006dd
typelib.c File Reference
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <ctype.h>
#include "widl.h"
#include "windef.h"
#include "winbase.h"
#include "utils.h"
#include "wpp_private.h"
#include "parser.h"
#include "header.h"
#include "typelib.h"
#include "widltypes.h"
#include "typelib_struct.h"
#include "typetree.h"
Include dependency graph for typelib.c:

Go to the source code of this file.

Classes

struct  oatype
 

Macros

#define KWP(p)   ((const struct oatype *)(p))
 

Functions

static int kw_cmp_func (const void *s1, const void *s2)
 
static unsigned short builtin_vt (const type_t *t)
 
static int match (const char *n, const char *m)
 
unsigned short get_type_vt (type_t *t)
 
static void msft_read_guid (void *data, MSFT_SegDir *segdir, int offset, struct uuid *guid)
 
static void read_msft_importlib (importlib_t *importlib, void *data, unsigned int size)
 
static unsigned int rva_to_va (const IMAGE_NT_HEADERS32 *nt, unsigned int rva)
 
static void read_pe_importlib (importlib_t *importlib, void *data, unsigned int size)
 
static void read_importlib (importlib_t *importlib)
 
void add_importlib (const char *name, typelib_t *typelib)
 

Variables

static const struct oatype oatypes []
 

Macro Definition Documentation

◆ KWP

#define KWP (   p)    ((const struct oatype *)(p))

Definition at line 70 of file typelib.c.

Function Documentation

◆ add_importlib()

void add_importlib ( const char name,
typelib_t typelib 
)

Definition at line 411 of file typelib.c.

413{
415
416 if(!typelib) return;
417
418 LIST_FOR_EACH_ENTRY( importlib, &typelib->importlibs, importlib_t, entry )
419 if(!strcmp(name, importlib->name))
420 return;
421
422 chat("add_importlib: %s\n", name);
423
424 importlib = xmalloc(sizeof(*importlib));
425 memset( importlib, 0, sizeof(*importlib) );
426 importlib->name = xstrdup(name);
427
428 read_importlib(importlib);
429 list_add_head( &typelib->importlibs, &importlib->entry );
430}
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
char * xstrdup(const char *s)
Definition: uimain.c:768
void * xmalloc(int size)
Definition: uimain.c:747
static void list_add_head(struct list_entry *head, struct list_entry *entry)
Definition: list.h:76
uint32_t entry
Definition: isohybrid.c:63
importlib("stdole2.tlb")
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198
#define memset(x, y, z)
Definition: compat.h:39
static void read_importlib(importlib_t *importlib)
Definition: typelib.c:378
void chat(const char *s,...)
Definition: utils.c:79
Definition: name.c:39

◆ builtin_vt()

static unsigned short builtin_vt ( const type_t t)
static

Definition at line 77 of file typelib.c.

78{
79 const char *kw = t->name;
80 struct oatype key;
81 const struct oatype *kwp;
82 key.kw = kw;
83#ifdef KW_BSEARCH
84 kwp = bsearch(&key, oatypes, ARRAY_SIZE(oatypes), sizeof(oatypes[0]), kw_cmp_func);
85#else
86 {
87 unsigned int i;
88 for (kwp = NULL, i = 0; i < ARRAY_SIZE(oatypes); i++)
89 if (!kw_cmp_func(&key, &oatypes[i])) {
90 kwp = &oatypes[i];
91 break;
92 }
93 }
94#endif
95 if (kwp) {
96 return kwp->vt;
97 }
98 if (is_string_type (t->attrs, t))
99 {
100 const type_t *elem_type;
101 if (is_array(t))
102 elem_type = type_array_get_element_type(t);
103 else
104 elem_type = type_pointer_get_ref_type(t);
105 if (type_get_type(elem_type) == TYPE_BASIC)
106 {
107 switch (type_basic_get_type(elem_type))
108 {
109 case TYPE_BASIC_CHAR: return VT_LPSTR;
110 case TYPE_BASIC_WCHAR: return VT_LPWSTR;
111 default: break;
112 }
113 }
114 }
115 return 0;
116}
#define ARRAY_SIZE(A)
Definition: main.h:20
#define NULL
Definition: types.h:112
@ VT_LPSTR
Definition: compat.h:2324
@ VT_LPWSTR
Definition: compat.h:2325
GLdouble GLdouble t
Definition: gl.h:2047
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static int is_string_type(const attr_list_t *attrs, const type_t *type)
Definition: header.h:95
static int is_array(const type_t *t)
Definition: header.h:60
static int kw_cmp_func(const void *s1, const void *s2)
Definition: typelib.c:72
static const struct oatype oatypes[]
Definition: copy.c:22
Definition: typelib.c:55
unsigned short vt
Definition: typelib.c:57
const char * kw
Definition: typelib.c:56
#define bsearch
static enum type_type type_get_type(const type_t *type)
Definition: typetree.h:113
static type_t * type_array_get_element_type(const type_t *type)
Definition: typetree.h:345
static enum type_basic_type type_basic_get_type(const type_t *type)
Definition: typetree.h:118
static type_t * type_pointer_get_ref_type(const type_t *type)
Definition: typetree.h:424
@ TYPE_BASIC
Definition: widltypes.h:479
@ TYPE_BASIC_CHAR
Definition: widltypes.h:303
@ TYPE_BASIC_WCHAR
Definition: widltypes.h:306

Referenced by get_type_vt().

◆ get_type_vt()

unsigned short get_type_vt ( type_t t)

Definition at line 124 of file typelib.c.

125{
126 unsigned short vt;
127
128 chat("get_type_vt: %p type->name %s\n", t, t->name);
129 if (t->name) {
130 vt = builtin_vt(t);
131 if (vt) return vt;
132 }
133
134 if (type_is_alias(t) &&
135 (is_attr(t->attrs, ATTR_PUBLIC) || is_attr(t->attrs, ATTR_WIREMARSHAL)))
136 return VT_USERDEFINED;
137
138 switch (type_get_type(t)) {
139 case TYPE_BASIC:
140 switch (type_basic_get_type(t)) {
141 case TYPE_BASIC_BYTE:
142 return VT_UI1;
143 case TYPE_BASIC_CHAR:
144 case TYPE_BASIC_INT8:
145 if (type_basic_get_sign(t) > 0)
146 return VT_UI1;
147 else
148 return VT_I1;
149 case TYPE_BASIC_WCHAR:
150 return VT_I2; /* mktyplib seems to parse wchar_t as short */
151 case TYPE_BASIC_INT16:
152 if (type_basic_get_sign(t) > 0)
153 return VT_UI2;
154 else
155 return VT_I2;
156 case TYPE_BASIC_INT:
157 if (type_basic_get_sign(t) > 0)
158 return VT_UINT;
159 else
160 return VT_INT;
161 case TYPE_BASIC_INT32:
162 case TYPE_BASIC_LONG:
164 if (type_basic_get_sign(t) > 0)
165 return VT_UI4;
166 else
167 return VT_I4;
168 case TYPE_BASIC_INT64:
169 case TYPE_BASIC_HYPER:
170 if (type_basic_get_sign(t) > 0)
171 return VT_UI8;
172 else
173 return VT_I8;
175 if (pointer_size == 8)
176 {
177 if (type_basic_get_sign(t) > 0)
178 return VT_UI8;
179 else
180 return VT_I8;
181 }
182 else
183 {
184 if (type_basic_get_sign(t) > 0)
185 return VT_UI4;
186 else
187 return VT_I4;
188 }
189 case TYPE_BASIC_FLOAT:
190 return VT_R4;
192 return VT_R8;
194 error("handles can't be used in typelibs\n");
195 }
196 break;
197
198 case TYPE_POINTER:
199 return VT_PTR;
200
201 case TYPE_ARRAY:
203 {
204 if (match(type_array_get_element_type(t)->name, "SAFEARRAY"))
205 return VT_SAFEARRAY;
206 return VT_PTR;
207 }
208 else
209 return VT_CARRAY;
210
211 case TYPE_INTERFACE:
212 if(match(t->name, "IUnknown"))
213 return VT_UNKNOWN;
214 if(match(t->name, "IDispatch"))
215 return VT_DISPATCH;
216 return VT_USERDEFINED;
217
218 case TYPE_ENUM:
219 case TYPE_STRUCT:
220 case TYPE_COCLASS:
221 case TYPE_MODULE:
222 case TYPE_UNION:
225 case TYPE_DELEGATE:
226 return VT_USERDEFINED;
227
228 case TYPE_VOID:
229 return VT_VOID;
230
231 case TYPE_ALIAS:
232 case TYPE_APICONTRACT:
234 case TYPE_PARAMETER:
235 /* not supposed to be here */
236 assert(0);
237 break;
238
239 case TYPE_FUNCTION:
240 error("get_type_vt: functions not supported\n");
241 break;
242
243 case TYPE_BITFIELD:
244 error("get_type_vt: bitfields not supported\n");
245 break;
246 }
247 return 0;
248}
@ VT_UI8
Definition: compat.h:2315
@ VT_VOID
Definition: compat.h:2318
@ VT_INT
Definition: compat.h:2316
@ VT_R4
Definition: compat.h:2299
@ VT_UNKNOWN
Definition: compat.h:2308
@ VT_PTR
Definition: compat.h:2320
@ VT_UI2
Definition: compat.h:2312
@ VT_SAFEARRAY
Definition: compat.h:2321
@ VT_R8
Definition: compat.h:2300
@ VT_I8
Definition: compat.h:2314
@ VT_I1
Definition: compat.h:2310
@ VT_I4
Definition: compat.h:2298
@ VT_USERDEFINED
Definition: compat.h:2323
@ VT_I2
Definition: compat.h:2297
@ VT_UI4
Definition: compat.h:2313
@ VT_UINT
Definition: compat.h:2317
@ VT_CARRAY
Definition: compat.h:2322
@ VT_DISPATCH
Definition: compat.h:2304
@ VT_UI1
Definition: compat.h:2311
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
Definition: suminfo.c:91
#define assert(x)
Definition: debug.h:53
#define error(str)
Definition: mkdosfs.c:1605
int is_attr(const attr_list_t *list, enum attr_type attr_type)
Definition: attribute.c:45
static unsigned short builtin_vt(const type_t *t)
Definition: typelib.c:77
Definition: match.c:28
static int type_array_is_decl_as_ptr(const type_t *type)
Definition: typetree.h:350
static int type_basic_get_sign(const type_t *type)
Definition: typetree.h:125
static int type_is_alias(const type_t *type)
Definition: typetree.h:357
unsigned int pointer_size
Definition: widl.c:147
@ TYPE_PARAMETER
Definition: widltypes.h:495
@ TYPE_ENUM
Definition: widltypes.h:480
@ TYPE_BITFIELD
Definition: widltypes.h:491
@ TYPE_UNION
Definition: widltypes.h:483
@ TYPE_ALIAS
Definition: widltypes.h:484
@ TYPE_PARAMETERIZED_TYPE
Definition: widltypes.h:494
@ TYPE_POINTER
Definition: widltypes.h:489
@ TYPE_VOID
Definition: widltypes.h:478
@ TYPE_ENCAPSULATED_UNION
Definition: widltypes.h:482
@ TYPE_COCLASS
Definition: widltypes.h:486
@ TYPE_STRUCT
Definition: widltypes.h:481
@ TYPE_MODULE
Definition: widltypes.h:485
@ TYPE_DELEGATE
Definition: widltypes.h:496
@ TYPE_RUNTIMECLASS
Definition: widltypes.h:493
@ TYPE_INTERFACE
Definition: widltypes.h:488
@ TYPE_ARRAY
Definition: widltypes.h:490
@ TYPE_FUNCTION
Definition: widltypes.h:487
@ TYPE_APICONTRACT
Definition: widltypes.h:492
@ ATTR_PUBLIC
Definition: widltypes.h:163
@ ATTR_WIREMARSHAL
Definition: widltypes.h:187
@ TYPE_BASIC_DOUBLE
Definition: widltypes.h:308
@ TYPE_BASIC_INT32
Definition: widltypes.h:298
@ TYPE_BASIC_ERROR_STATUS_T
Definition: widltypes.h:309
@ TYPE_BASIC_INT16
Definition: widltypes.h:297
@ TYPE_BASIC_HYPER
Definition: widltypes.h:304
@ TYPE_BASIC_HANDLE
Definition: widltypes.h:310
@ TYPE_BASIC_INT8
Definition: widltypes.h:296
@ TYPE_BASIC_INT3264
Definition: widltypes.h:301
@ TYPE_BASIC_LONG
Definition: widltypes.h:302
@ TYPE_BASIC_INT64
Definition: widltypes.h:299
@ TYPE_BASIC_BYTE
Definition: widltypes.h:305
@ TYPE_BASIC_INT
Definition: widltypes.h:300
@ TYPE_BASIC_FLOAT
Definition: widltypes.h:307

Referenced by add_typedef_typeinfo(), encode_type(), encode_var(), get_element_size(), write_args(), write_default_value(), and write_var_desc().

◆ kw_cmp_func()

static int kw_cmp_func ( const void s1,
const void s2 
)
static

Definition at line 72 of file typelib.c.

73{
74 return strcmp(KWP(s1)->kw, KWP(s2)->kw);
75}
struct S1 s1
#define KWP(p)
Definition: typelib.c:70
PCWSTR s2
Definition: shell32_main.h:38

Referenced by builtin_vt().

◆ match()

static int match ( const char n,
const char m 
)
static

Definition at line 118 of file typelib.c.

119{
120 if (!n) return 0;
121 return !strcmp(n, m);
122}
GLdouble n
Definition: glext.h:7729
const GLfloat * m
Definition: glext.h:10848

◆ msft_read_guid()

static void msft_read_guid ( void data,
MSFT_SegDir segdir,
int  offset,
struct uuid guid 
)
static

Definition at line 265 of file typelib.c.

266{
267 memcpy( guid, (char *)data + segdir->pGuidTab.offset + offset, sizeof(*guid) );
268}
GUID guid
Definition: version.c:147
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLintptr offset
Definition: glext.h:5920
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
MSFT_pSeg pGuidTab
Definition: typelib.h:105
INT offset
Definition: typelib.h:89

Referenced by read_msft_importlib().

◆ read_importlib()

static void read_importlib ( importlib_t importlib)
static

Definition at line 378 of file typelib.c.

379{
380 int fd, size;
381 void *data;
382
383 fd = open_typelib(importlib->name);
384
385 /* widl extension: if importlib name has no .tlb extension, try using .tlb */
386 if (fd < 0 && !strendswith( importlib->name, ".tlb" ))
387 fd = open_typelib( strmake( "%s.tlb", importlib->name ));
388
389 if(fd < 0)
390 error("Could not find importlib %s.\n", importlib->name);
391
392 size = lseek( fd, 0, SEEK_END );
393 data = xmalloc( size );
394 lseek( fd, 0, SEEK_SET );
395 if (read( fd, data, size) < size) error("error while reading importlib.\n");
396 close( fd );
397
398 if (!memcmp( data, "MSFT", 4 ))
399 read_msft_importlib(importlib, data, size);
400 else if (!memcmp( data, "MZ", 2 ))
401 read_pe_importlib(importlib, data, size);
402 else
403 error("Wrong or unsupported typelib\n");
404
405 free( data );
406}
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
#define read
Definition: acwin.h:96
#define close
Definition: acwin.h:98
#define SEEK_END
Definition: cabinet.c:29
#define free
Definition: debug_ros.c:5
GLsizeiptr size
Definition: glext.h:5919
#define SEEK_SET
Definition: jmemansi.c:26
#define lseek
Definition: syshdrs.h:47
char * strmake(size_t *lenp,...)
Definition: util.c:82
static int fd
Definition: io.c:51
static int strendswith(const char *str, const char *end)
Definition: tools.h:145
static void read_pe_importlib(importlib_t *importlib, void *data, unsigned int size)
Definition: typelib.c:327
static void read_msft_importlib(importlib_t *importlib, void *data, unsigned int size)
Definition: typelib.c:270
int open_typelib(const char *name)
Definition: widl.c:650

Referenced by add_importlib().

◆ read_msft_importlib()

static void read_msft_importlib ( importlib_t importlib,
void data,
unsigned int  size 
)
static

Definition at line 270 of file typelib.c.

271{
273 MSFT_SegDir *segdir;
274 int *typeinfo_offs;
275 int i;
276
277 importlib->allocated = 0;
278 importlib->version = header->version;
279
280 typeinfo_offs = (int *)(header + 1);
281 segdir = (MSFT_SegDir *)(typeinfo_offs + header->nrtypeinfos);
282
283 msft_read_guid(data, segdir, header->posguid, &importlib->guid);
284
285 importlib->ntypeinfos = header->nrtypeinfos;
286 importlib->importinfos = xmalloc(importlib->ntypeinfos*sizeof(importinfo_t));
287
288 for(i=0; i < importlib->ntypeinfos; i++) {
289 MSFT_TypeInfoBase *base = (MSFT_TypeInfoBase *)((char *)(segdir + 1) + typeinfo_offs[i]);
290 MSFT_NameIntro *nameintro;
291 int len;
292
293 importlib->importinfos[i].importlib = importlib;
294 importlib->importinfos[i].flags = (base->typekind & 0xf)<<24;
295 importlib->importinfos[i].offset = -1;
296 importlib->importinfos[i].id = i;
297
298 if(base->posguid != -1) {
299 importlib->importinfos[i].flags |= MSFT_IMPINFO_OFFSET_IS_GUID;
300 msft_read_guid(data, segdir, base->posguid, &importlib->importinfos[i].guid);
301 }
302 else memset( &importlib->importinfos[i].guid, 0, sizeof(importlib->importinfos[i].guid));
303
304 nameintro = (MSFT_NameIntro *)((char *)data + segdir->pNametab.offset + base->NameOffset);
305
306 len = nameintro->namelen & 0xff;
307 importlib->importinfos[i].name = xmalloc(len+1);
308 memcpy( importlib->importinfos[i].name, nameintro + 1, len );
309 importlib->importinfos[i].name[len] = 0;
310 }
311}
#define MSFT_IMPINFO_OFFSET_IS_GUID
Definition: typelib.h:174
GLenum GLsizei len
Definition: glext.h:6722
static void msft_read_guid(void *data, MSFT_SegDir *segdir, int offset, struct uuid *guid)
Definition: typelib.c:265
MSFT_pSeg pNametab
Definition: typelib.h:109

Referenced by read_importlib(), and read_pe_importlib().

◆ read_pe_importlib()

static void read_pe_importlib ( importlib_t importlib,
void data,
unsigned int  size 
)
static

Definition at line 327 of file typelib.c.

328{
335 void *ptr;
336 unsigned int i, va;
337
338 if (dos->e_lfanew < sizeof(*dos) || dos->e_lfanew >= size) error( "not a PE file\n" );
339 nt = (IMAGE_NT_HEADERS32 *)((char *)data + dos->e_lfanew);
340 if (nt->Signature != IMAGE_NT_SIGNATURE) error( "not a PE file\n" );
341 if ((char *)(IMAGE_FIRST_SECTION(nt) + nt->FileHeader.NumberOfSections) > (char *)data + size)
342 error( "invalid PE file\n" );
343 switch (nt->OptionalHeader.Magic)
344 {
347 break;
349 dir = &((IMAGE_NT_HEADERS64 *)nt)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE];
350 break;
351 default:
352 error( "invalid PE file\n" );
353 }
354 if (!dir->VirtualAddress || !dir->Size) error( "resource not found in PE file\n" );
355 va = rva_to_va( nt, dir->VirtualAddress );
356 if (va + dir->Size > size) error( "invalid resource data in PE file\n" );
357 root = resdir = (IMAGE_RESOURCE_DIRECTORY *)((char *)data + va );
358 entry = (IMAGE_RESOURCE_DIRECTORY_ENTRY *)(resdir + 1);
359 for (i = 0; i < resdir->NumberOfNamedEntries; i++, entry++)
360 {
361 static const WCHAR typelibW[] = {'T','Y','P','E','L','I','B'};
362 WCHAR *name = (WCHAR *)((char *)root + entry->NameOffset);
363 if (name[0] != ARRAY_SIZE(typelibW)) continue;
364 if (!memcmp( name + 1, typelibW, sizeof(typelibW) )) break;
365 }
366 if (i == resdir->NumberOfNamedEntries) error( "typelib resource not found in PE file\n" );
367 while (entry->DataIsDirectory)
368 {
369 resdir = (IMAGE_RESOURCE_DIRECTORY *)((char *)root + entry->OffsetToDirectory);
370 entry = (IMAGE_RESOURCE_DIRECTORY_ENTRY *)(resdir + 1);
371 }
372 resdata = (IMAGE_RESOURCE_DATA_ENTRY *)((char *)root + entry->OffsetToData);
373 ptr = (char *)data + rva_to_va( nt, resdata->OffsetToData );
374 if (memcmp( ptr, "MSFT", 4 )) error( "invalid typelib found in PE file\n" );
375 read_msft_importlib( importlib, ptr, resdata->Size );
376}
unsigned int dir
Definition: maze.c:112
struct _root root
static PVOID ptr
Definition: dispmode.c:27
IMAGE_NT_HEADERS nt
Definition: module.c:50
IMAGE_DOS_HEADER dos
Definition: module.c:49
#define IMAGE_NT_OPTIONAL_HDR32_MAGIC
Definition: ntimage.h:376
#define IMAGE_NT_OPTIONAL_HDR64_MAGIC
Definition: ntimage.h:377
#define IMAGE_FIRST_SECTION(NtHeader)
Definition: ntimage.h:427
#define IMAGE_NT_SIGNATURE
Definition: pedump.c:93
#define IMAGE_DIRECTORY_ENTRY_RESOURCE
Definition: pedump.c:261
static const WCHAR typelibW[]
Definition: actctx.c:640
static unsigned int rva_to_va(const IMAGE_NT_HEADERS32 *nt, unsigned int rva)
Definition: typelib.c:313
IMAGE_OPTIONAL_HEADER32 OptionalHeader
Definition: ntddk_ex.h:184
IMAGE_FILE_HEADER FileHeader
Definition: ntddk_ex.h:183
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]
Definition: ntddk_ex.h:178
Definition: pedump.c:458
DWORD OffsetToData
Definition: pedump.c:459
DWORD Size
Definition: pedump.c:460
Definition: pedump.c:414
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by read_importlib().

◆ rva_to_va()

static unsigned int rva_to_va ( const IMAGE_NT_HEADERS32 nt,
unsigned int  rva 
)
static

Definition at line 313 of file typelib.c.

314{
316 unsigned int i;
317
318 for (i = 0; i < nt->FileHeader.NumberOfSections; i++, sec++)
319 if (sec->VirtualAddress <= rva && sec->VirtualAddress + sec->Misc.VirtualSize > rva)
320 return sec->PointerToRawData + (rva - sec->VirtualAddress);
321 error( "no PE section found for addr %x\n", rva );
322#ifdef __REACTOS__
323 return 0;
324#endif
325}
union _IMAGE_SECTION_HEADER::@1686 Misc
DWORD PointerToRawData
Definition: pedump.c:290

Referenced by read_pe_importlib().

Variable Documentation

◆ oatypes

const struct oatype oatypes[]
static
Initial value:
= {
{"BSTR", VT_BSTR},
{"CURRENCY", VT_CY},
{"DATE", VT_DATE},
{"DECIMAL", VT_DECIMAL},
{"HRESULT", VT_HRESULT},
{"LPSTR", VT_LPSTR},
{"LPWSTR", VT_LPWSTR},
{"SCODE", VT_ERROR},
{"VARIANT", VT_VARIANT},
{"VARIANT_BOOL", VT_BOOL}
}
@ VT_BSTR
Definition: compat.h:2303
@ VT_DECIMAL
Definition: compat.h:2309
@ VT_ERROR
Definition: compat.h:2305
@ VT_CY
Definition: compat.h:2301
@ VT_VARIANT
Definition: compat.h:2307
@ VT_HRESULT
Definition: compat.h:2319
@ VT_DATE
Definition: compat.h:2302
@ VT_BOOL
Definition: compat.h:2306

Referenced by builtin_vt().