Coverage Report

Created: 2026-10-17 06:42

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/yara/libyara/modules/pe/pe_utils.c
Line
Count
Source
1
/*
2
Copyright (c) 2014-2015. The YARA Authors. All Rights Reserved.
3
4
Redistribution and use in source and binary forms, with or without modification,
5
are permitted provided that the following conditions are met:
6
7
1. Redistributions of source code must retain the above copyright notice, this
8
list of conditions and the following disclaimer.
9
10
2. Redistributions in binary form must reproduce the above copyright notice,
11
this list of conditions and the following disclaimer in the documentation and/or
12
other materials provided with the distribution.
13
14
3. Neither the name of the copyright holder nor the names of its contributors
15
may be used to endorse or promote products derived from this software without
16
specific prior written permission.
17
18
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
22
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
*/
29
30
#include <stdio.h>
31
#include <string.h>
32
#include <yara/dotnet.h>
33
#include <yara/endian.h>
34
#include <yara/integers.h>
35
#include <yara/mem.h>
36
#include <yara/pe.h>
37
#include <yara/pe_utils.h>
38
#include <yara/strutils.h>
39
#include <yara/utils.h>
40
41
PIMAGE_NT_HEADERS32 pe_get_header(const uint8_t* data, size_t data_size)
42
15.7k
{
43
15.7k
  PIMAGE_DOS_HEADER mz_header;
44
15.7k
  PIMAGE_NT_HEADERS32 pe_header;
45
46
15.7k
  size_t headers_size = 0;
47
48
15.7k
  if (data_size < sizeof(IMAGE_DOS_HEADER))
49
834
    return NULL;
50
51
14.9k
  mz_header = (PIMAGE_DOS_HEADER) data;
52
53
14.9k
  if (yr_le16toh(mz_header->e_magic) != IMAGE_DOS_SIGNATURE)
54
1.55k
    return NULL;
55
56
13.3k
  if ((int32_t) yr_le32toh(mz_header->e_lfanew) < 0)
57
67
    return NULL;
58
59
13.3k
  headers_size = yr_le32toh(mz_header->e_lfanew) +
60
13.3k
                 sizeof(pe_header->Signature) + sizeof(IMAGE_FILE_HEADER);
61
62
13.3k
  if (data_size < headers_size)
63
61
    return NULL;
64
65
13.2k
  pe_header = (PIMAGE_NT_HEADERS32) (data + yr_le32toh(mz_header->e_lfanew));
66
67
13.2k
  if (yr_le32toh(pe_header->Signature) != IMAGE_NT_SIGNATURE)
68
114
    return NULL;
69
70
13.1k
  if (data_size < headers_size + sizeof(IMAGE_OPTIONAL_HEADER32))
71
89
    return NULL;
72
73
13.0k
  if (pe_header->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
74
1.00k
    headers_size += sizeof(IMAGE_OPTIONAL_HEADER64);
75
12.0k
  else
76
12.0k
    headers_size += sizeof(IMAGE_OPTIONAL_HEADER32);
77
78
13.0k
  if (data_size < headers_size)
79
13
    return NULL;
80
81
13.0k
  return pe_header;
82
13.0k
}
83
84
PIMAGE_DATA_DIRECTORY pe_get_directory_entry(PE* pe, int entry)
85
47.1k
{
86
  // In theory, `entry` should be lower than NumberOfRvaAndSizes, however,
87
  // we don't enforce it because some PE files have a NumberOfRvaAndSizes
88
  // values lower than the actual number of directory entries. For example,
89
  // file 0aa527fd26c8e7fa7f3476b6d7eb8f22c071ff4c0fd3ed3797fa90ceb80f24ce
90
  // has NumberOfRvaAndSizes set to 0, but it actually has directory
91
  // entries. If we are overly strict here, and only parse entries which are
92
  // less than NumberOfRvaAndSizes, we run the risk of missing otherwise
93
  // perfectly valid files (valid in the sense that they can be parsed, even
94
  // if they are not valid for the Windows loader).
95
47.1k
  PIMAGE_DATA_DIRECTORY result = &OptionalHeader(pe, DataDirectory)[entry];
96
97
  // Check that directory is in file
98
47.1k
  if (!struct_fits_in_pe(pe, result, IMAGE_DATA_DIRECTORY))
99
0
    return NULL;
100
101
47.1k
  return result;
102
47.1k
}
103
104
int64_t pe_rva_to_offset(PE* pe, uint64_t rva)
105
73.3M
{
106
73.3M
  PIMAGE_SECTION_HEADER section = IMAGE_FIRST_SECTION(pe->header);
107
108
73.3M
  DWORD lowest_section_rva = 0xffffffff;
109
73.3M
  DWORD section_rva = 0;
110
73.3M
  DWORD section_offset = 0;
111
73.3M
  DWORD section_raw_size = 0;
112
113
73.3M
  int64_t result;
114
115
73.3M
  int i = 0;
116
117
73.3M
  int alignment = 0;
118
73.3M
  int rest = 0;
119
120
163M
  while (i < yr_min(
121
73.3M
                 yr_le16toh(pe->header->FileHeader.NumberOfSections),
122
73.3M
                 MAX_PE_SECTIONS))
123
90.4M
  {
124
90.4M
    if (struct_fits_in_pe(pe, section, IMAGE_SECTION_HEADER))
125
90.4M
    {
126
90.4M
      if (lowest_section_rva > yr_le32toh(section->VirtualAddress))
127
54.7M
      {
128
54.7M
        lowest_section_rva = yr_le32toh(section->VirtualAddress);
129
54.7M
      }
130
131
      // In theory, we should use the section's virtual size while
132
      // checking if some RVA is within the section. In most cases
133
      // the virtual size is greater than the raw data size, but that's
134
      // not always the case. So we use the larger of the two values.
135
      //
136
      // Example:
137
      // db6a9934570fa98a93a979e7e0e218e0c9710e5a787b18c6948f2eedd9338984
138
90.4M
      uint32_t virtualSize = yr_max(
139
90.4M
          yr_le32toh(section->Misc.VirtualSize),
140
90.4M
          yr_le32toh(section->SizeOfRawData));
141
142
90.4M
      if (rva >= yr_le32toh(section->VirtualAddress) &&
143
72.1M
          rva - yr_le32toh(section->VirtualAddress) < virtualSize &&
144
13.9M
          section_rva <= yr_le32toh(section->VirtualAddress))
145
12.7M
      {
146
        // Round section_offset
147
        //
148
        // Rounding everything less than 0x200 to 0 as discussed in
149
        // https://code.google.com/archive/p/corkami/wikis/PE.wiki#PointerToRawData
150
        // does not work for PE32_FILE from the test suite and for
151
        // some tinype samples where File Alignment = 4
152
        // (http://www.phreedom.org/research/tinype/).
153
        //
154
        // If FileAlignment is >= 0x200, it is apparently ignored (see
155
        // Ero Carreras's pefile.py, PE.adjust_FileAlignment).
156
157
12.7M
        alignment = yr_min(
158
12.7M
            yr_le32toh(OptionalHeader(pe, FileAlignment)), 0x200);
159
160
12.7M
        section_rva = yr_le32toh(section->VirtualAddress);
161
12.7M
        section_offset = yr_le32toh(section->PointerToRawData);
162
12.7M
        section_raw_size = yr_le32toh(section->SizeOfRawData);
163
164
12.7M
        if (alignment)
165
8.36M
        {
166
8.36M
          rest = section_offset % alignment;
167
168
8.36M
          if (rest)
169
7.81M
            section_offset -= rest;
170
8.36M
        }
171
172
        // For multi-section images, real pointer to raw data is aligned down to
173
        // sector size
174
12.7M
        if (yr_le32toh(OptionalHeader(pe, SectionAlignment)) >= PE_PAGE_SIZE)
175
7.98M
          section_offset = section_offset & ~(PE_SECTOR_SIZE - 1);
176
12.7M
      }
177
178
90.4M
      section++;
179
90.4M
      i++;
180
90.4M
    }
181
1.94k
    else
182
1.94k
    {
183
1.94k
      return -1;
184
1.94k
    }
185
90.4M
  }
186
187
  // Everything before the first section seems to get mapped straight
188
  // relative to ImageBase.
189
190
73.3M
  if (rva < lowest_section_rva)
191
28.3M
  {
192
28.3M
    section_rva = 0;
193
28.3M
    section_offset = 0;
194
28.3M
    section_raw_size = (DWORD) pe->data_size;
195
28.3M
  }
196
197
  // Many sections, have a raw (on disk) size smaller than their in-memory size.
198
  // Check for rva's that map to this sparse space, and therefore have no valid
199
  // associated file offset.
200
201
73.3M
  if ((rva - section_rva) >= section_raw_size)
202
59.9M
    return -1;
203
204
13.4M
  result = section_offset + (rva - section_rva);
205
206
  // Check that the offset fits within the file.
207
13.4M
  if (result >= pe->data_size)
208
410k
    return -1;
209
210
13.0M
  return result;
211
13.4M
}
212
213
#if !HAVE_TIMEGM
214
#if HAVE__MKGMTIME
215
#define timegm _mkgmtime
216
#else
217
218
#include <time.h>
219
220
static bool is_leap(unsigned int year)
221
{
222
  year += 1900;
223
  return (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0);
224
}
225
226
time_t timegm(struct tm* tm)
227
{
228
  static const unsigned ndays[2][12] = {
229
      {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
230
      {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
231
232
  time_t res = 0;
233
  int i;
234
235
  for (i = 70; i < tm->tm_year; ++i) res += is_leap(i) ? 366 : 365;
236
237
  for (i = 0; i < tm->tm_mon; ++i) res += ndays[is_leap(tm->tm_year)][i];
238
239
  res += tm->tm_mday - 1;
240
  res *= 24;
241
  res += tm->tm_hour;
242
  res *= 60;
243
  res += tm->tm_min;
244
  res *= 60;
245
  res += tm->tm_sec;
246
247
  return res;
248
}
249
250
#endif  // HAVE__MKGMTIME
251
#endif  // !HAVE_TIMEGM
252
253
// These ordinals are taken from pefile. If a lookup fails attempt to return
254
// "ordN" and if that fails, return NULL. The caller is responsible for freeing
255
// the returned string.
256
257
char* ord_lookup(char* dll, uint16_t ord)
258
1.62M
{
259
1.62M
  char name[64];
260
1.62M
  name[0] = '\0';
261
262
1.62M
  if (strncasecmp(dll, "WS2_32.dll", 10) == 0 ||
263
1.35M
      strncasecmp(dll, "wsock32.dll", 11) == 0)
264
316k
  {
265
316k
    switch (ord)
266
316k
    {
267
3.40k
    case 1:
268
3.40k
      sprintf(name, "accept");
269
3.40k
      break;
270
381
    case 2:
271
381
      sprintf(name, "bind");
272
381
      break;
273
695
    case 3:
274
695
      sprintf(name, "closesocket");
275
695
      break;
276
273
    case 4:
277
273
      sprintf(name, "connect");
278
273
      break;
279
706
    case 5:
280
706
      sprintf(name, "getpeername");
281
706
      break;
282
620
    case 6:
283
620
      sprintf(name, "getsockname");
284
620
      break;
285
556
    case 7:
286
556
      sprintf(name, "getsockopt");
287
556
      break;
288
689
    case 8:
289
689
      sprintf(name, "htonl");
290
689
      break;
291
628
    case 9:
292
628
      sprintf(name, "htons");
293
628
      break;
294
535
    case 10:
295
535
      sprintf(name, "ioctlsocket");
296
535
      break;
297
326
    case 11:
298
326
      sprintf(name, "inet_addr");
299
326
      break;
300
295
    case 12:
301
295
      sprintf(name, "inet_ntoa");
302
295
      break;
303
589
    case 13:
304
589
      sprintf(name, "listen");
305
589
      break;
306
307
    case 14:
307
307
      sprintf(name, "ntohl");
308
307
      break;
309
237
    case 15:
310
237
      sprintf(name, "ntohs");
311
237
      break;
312
1.45k
    case 16:
313
1.45k
      sprintf(name, "recv");
314
1.45k
      break;
315
448
    case 17:
316
448
      sprintf(name, "recvfrom");
317
448
      break;
318
220
    case 18:
319
220
      sprintf(name, "select");
320
220
      break;
321
250
    case 19:
322
250
      sprintf(name, "send");
323
250
      break;
324
605
    case 20:
325
605
      sprintf(name, "sendto");
326
605
      break;
327
3.75k
    case 21:
328
3.75k
      sprintf(name, "setsockopt");
329
3.75k
      break;
330
257
    case 22:
331
257
      sprintf(name, "shutdown");
332
257
      break;
333
236
    case 23:
334
236
      sprintf(name, "socket");
335
236
      break;
336
408
    case 24:
337
408
      sprintf(name, "GetAddrInfoW");
338
408
      break;
339
1.50k
    case 25:
340
1.50k
      sprintf(name, "GetNameInfoW");
341
1.50k
      break;
342
214
    case 26:
343
214
      sprintf(name, "WSApSetPostRoutine");
344
214
      break;
345
552
    case 27:
346
552
      sprintf(name, "FreeAddrInfoW");
347
552
      break;
348
376
    case 28:
349
376
      sprintf(name, "WPUCompleteOverlappedRequest");
350
376
      break;
351
549
    case 29:
352
549
      sprintf(name, "WSAAccept");
353
549
      break;
354
309
    case 30:
355
309
      sprintf(name, "WSAAddressToStringA");
356
309
      break;
357
471
    case 31:
358
471
      sprintf(name, "WSAAddressToStringW");
359
471
      break;
360
448
    case 32:
361
448
      sprintf(name, "WSACloseEvent");
362
448
      break;
363
293
    case 33:
364
293
      sprintf(name, "WSAConnect");
365
293
      break;
366
1.91k
    case 34:
367
1.91k
      sprintf(name, "WSACreateEvent");
368
1.91k
      break;
369
420
    case 35:
370
420
      sprintf(name, "WSADuplicateSocketA");
371
420
      break;
372
350
    case 36:
373
350
      sprintf(name, "WSADuplicateSocketW");
374
350
      break;
375
302
    case 37:
376
302
      sprintf(name, "WSAEnumNameSpaceProvidersA");
377
302
      break;
378
323
    case 38:
379
323
      sprintf(name, "WSAEnumNameSpaceProvidersW");
380
323
      break;
381
260
    case 39:
382
260
      sprintf(name, "WSAEnumNetworkEvents");
383
260
      break;
384
461
    case 40:
385
461
      sprintf(name, "WSAEnumProtocolsA");
386
461
      break;
387
461
    case 41:
388
461
      sprintf(name, "WSAEnumProtocolsW");
389
461
      break;
390
482
    case 42:
391
482
      sprintf(name, "WSAEventSelect");
392
482
      break;
393
259
    case 43:
394
259
      sprintf(name, "WSAGetOverlappedResult");
395
259
      break;
396
529
    case 44:
397
529
      sprintf(name, "WSAGetQOSByName");
398
529
      break;
399
423
    case 45:
400
423
      sprintf(name, "WSAGetServiceClassInfoA");
401
423
      break;
402
281
    case 46:
403
281
      sprintf(name, "WSAGetServiceClassInfoW");
404
281
      break;
405
616
    case 47:
406
616
      sprintf(name, "WSAGetServiceClassNameByClassIdA");
407
616
      break;
408
664
    case 48:
409
664
      sprintf(name, "WSAGetServiceClassNameByClassIdW");
410
664
      break;
411
413
    case 49:
412
413
      sprintf(name, "WSAHtonl");
413
413
      break;
414
530
    case 50:
415
530
      sprintf(name, "WSAHtons");
416
530
      break;
417
297
    case 51:
418
297
      sprintf(name, "gethostbyaddr");
419
297
      break;
420
332
    case 52:
421
332
      sprintf(name, "gethostbyname");
422
332
      break;
423
257
    case 53:
424
257
      sprintf(name, "getprotobyname");
425
257
      break;
426
498
    case 54:
427
498
      sprintf(name, "getprotobynumber");
428
498
      break;
429
547
    case 55:
430
547
      sprintf(name, "getservbyname");
431
547
      break;
432
411
    case 56:
433
411
      sprintf(name, "getservbyport");
434
411
      break;
435
373
    case 57:
436
373
      sprintf(name, "gethostname");
437
373
      break;
438
313
    case 58:
439
313
      sprintf(name, "WSAInstallServiceClassA");
440
313
      break;
441
390
    case 59:
442
390
      sprintf(name, "WSAInstallServiceClassW");
443
390
      break;
444
258
    case 60:
445
258
      sprintf(name, "WSAIoctl");
446
258
      break;
447
546
    case 61:
448
546
      sprintf(name, "WSAJoinLeaf");
449
546
      break;
450
240
    case 62:
451
240
      sprintf(name, "WSALookupServiceBeginA");
452
240
      break;
453
326
    case 63:
454
326
      sprintf(name, "WSALookupServiceBeginW");
455
326
      break;
456
478
    case 64:
457
478
      sprintf(name, "WSALookupServiceEnd");
458
478
      break;
459
372
    case 65:
460
372
      sprintf(name, "WSALookupServiceNextA");
461
372
      break;
462
378
    case 66:
463
378
      sprintf(name, "WSALookupServiceNextW");
464
378
      break;
465
247
    case 67:
466
247
      sprintf(name, "WSANSPIoctl");
467
247
      break;
468
310
    case 68:
469
310
      sprintf(name, "WSANtohl");
470
310
      break;
471
624
    case 69:
472
624
      sprintf(name, "WSANtohs");
473
624
      break;
474
566
    case 70:
475
566
      sprintf(name, "WSAProviderConfigChange");
476
566
      break;
477
647
    case 71:
478
647
      sprintf(name, "WSARecv");
479
647
      break;
480
340
    case 72:
481
340
      sprintf(name, "WSARecvDisconnect");
482
340
      break;
483
274
    case 73:
484
274
      sprintf(name, "WSARecvFrom");
485
274
      break;
486
275
    case 74:
487
275
      sprintf(name, "WSARemoveServiceClass");
488
275
      break;
489
257
    case 75:
490
257
      sprintf(name, "WSAResetEvent");
491
257
      break;
492
350
    case 76:
493
350
      sprintf(name, "WSASend");
494
350
      break;
495
506
    case 77:
496
506
      sprintf(name, "WSASendDisconnect");
497
506
      break;
498
254
    case 78:
499
254
      sprintf(name, "WSASendTo");
500
254
      break;
501
361
    case 79:
502
361
      sprintf(name, "WSASetEvent");
503
361
      break;
504
267
    case 80:
505
267
      sprintf(name, "WSASetServiceA");
506
267
      break;
507
515
    case 81:
508
515
      sprintf(name, "WSASetServiceW");
509
515
      break;
510
199
    case 82:
511
199
      sprintf(name, "WSASocketA");
512
199
      break;
513
681
    case 83:
514
681
      sprintf(name, "WSASocketW");
515
681
      break;
516
260
    case 84:
517
260
      sprintf(name, "WSAStringToAddressA");
518
260
      break;
519
286
    case 85:
520
286
      sprintf(name, "WSAStringToAddressW");
521
286
      break;
522
1.12k
    case 86:
523
1.12k
      sprintf(name, "WSAWaitForMultipleEvents");
524
1.12k
      break;
525
293
    case 87:
526
293
      sprintf(name, "WSCDeinstallProvider");
527
293
      break;
528
507
    case 88:
529
507
      sprintf(name, "WSCEnableNSProvider");
530
507
      break;
531
1.34k
    case 89:
532
1.34k
      sprintf(name, "WSCEnumProtocols");
533
1.34k
      break;
534
558
    case 90:
535
558
      sprintf(name, "WSCGetProviderPath");
536
558
      break;
537
268
    case 91:
538
268
      sprintf(name, "WSCInstallNameSpace");
539
268
      break;
540
504
    case 92:
541
504
      sprintf(name, "WSCInstallProvider");
542
504
      break;
543
598
    case 93:
544
598
      sprintf(name, "WSCUnInstallNameSpace");
545
598
      break;
546
394
    case 94:
547
394
      sprintf(name, "WSCUpdateProvider");
548
394
      break;
549
283
    case 95:
550
283
      sprintf(name, "WSCWriteNameSpaceOrder");
551
283
      break;
552
251
    case 96:
553
251
      sprintf(name, "WSCWriteProviderOrder");
554
251
      break;
555
378
    case 97:
556
378
      sprintf(name, "freeaddrinfo");
557
378
      break;
558
210
    case 98:
559
210
      sprintf(name, "getaddrinfo");
560
210
      break;
561
287
    case 99:
562
287
      sprintf(name, "getnameinfo");
563
287
      break;
564
517
    case 101:
565
517
      sprintf(name, "WSAAsyncSelect");
566
517
      break;
567
323
    case 102:
568
323
      sprintf(name, "WSAAsyncGetHostByAddr");
569
323
      break;
570
443
    case 103:
571
443
      sprintf(name, "WSAAsyncGetHostByName");
572
443
      break;
573
198
    case 104:
574
198
      sprintf(name, "WSAAsyncGetProtoByNumber");
575
198
      break;
576
216
    case 105:
577
216
      sprintf(name, "WSAAsyncGetProtoByName");
578
216
      break;
579
312
    case 106:
580
312
      sprintf(name, "WSAAsyncGetServByPort");
581
312
      break;
582
246
    case 107:
583
246
      sprintf(name, "WSAAsyncGetServByName");
584
246
      break;
585
460
    case 108:
586
460
      sprintf(name, "WSACancelAsyncRequest");
587
460
      break;
588
214
    case 109:
589
214
      sprintf(name, "WSASetBlockingHook");
590
214
      break;
591
492
    case 110:
592
492
      sprintf(name, "WSAUnhookBlockingHook");
593
492
      break;
594
334
    case 111:
595
334
      sprintf(name, "WSAGetLastError");
596
334
      break;
597
338
    case 112:
598
338
      sprintf(name, "WSASetLastError");
599
338
      break;
600
926
    case 113:
601
926
      sprintf(name, "WSACancelBlockingCall");
602
926
      break;
603
278
    case 114:
604
278
      sprintf(name, "WSAIsBlocking");
605
278
      break;
606
268
    case 115:
607
268
      sprintf(name, "WSAStartup");
608
268
      break;
609
2.49k
    case 116:
610
2.49k
      sprintf(name, "WSACleanup");
611
2.49k
      break;
612
541
    case 151:
613
541
      sprintf(name, "__WSAFDIsSet");
614
541
      break;
615
206
    case 500:
616
206
      sprintf(name, "WEP");
617
206
      break;
618
256k
    default:
619
256k
      break;
620
316k
    }
621
316k
  }
622
1.31M
  else if (strncasecmp(dll, "oleaut32.dll", 12) == 0)
623
869k
  {
624
869k
    switch (ord)
625
869k
    {
626
2.11k
    case 2:
627
2.11k
      sprintf(name, "SysAllocString");
628
2.11k
      break;
629
1.95k
    case 3:
630
1.95k
      sprintf(name, "SysReAllocString");
631
1.95k
      break;
632
665
    case 4:
633
665
      sprintf(name, "SysAllocStringLen");
634
665
      break;
635
1.05k
    case 5:
636
1.05k
      sprintf(name, "SysReAllocStringLen");
637
1.05k
      break;
638
876
    case 6:
639
876
      sprintf(name, "SysFreeString");
640
876
      break;
641
1.12k
    case 7:
642
1.12k
      sprintf(name, "SysStringLen");
643
1.12k
      break;
644
1.76k
    case 8:
645
1.76k
      sprintf(name, "VariantInit");
646
1.76k
      break;
647
602
    case 9:
648
602
      sprintf(name, "VariantClear");
649
602
      break;
650
289
    case 10:
651
289
      sprintf(name, "VariantCopy");
652
289
      break;
653
652
    case 11:
654
652
      sprintf(name, "VariantCopyInd");
655
652
      break;
656
260
    case 12:
657
260
      sprintf(name, "VariantChangeType");
658
260
      break;
659
588
    case 13:
660
588
      sprintf(name, "VariantTimeToDosDateTime");
661
588
      break;
662
703
    case 14:
663
703
      sprintf(name, "DosDateTimeToVariantTime");
664
703
      break;
665
371
    case 15:
666
371
      sprintf(name, "SafeArrayCreate");
667
371
      break;
668
3.63k
    case 16:
669
3.63k
      sprintf(name, "SafeArrayDestroy");
670
3.63k
      break;
671
667
    case 17:
672
667
      sprintf(name, "SafeArrayGetDim");
673
667
      break;
674
598
    case 18:
675
598
      sprintf(name, "SafeArrayGetElemsize");
676
598
      break;
677
427
    case 19:
678
427
      sprintf(name, "SafeArrayGetUBound");
679
427
      break;
680
558
    case 20:
681
558
      sprintf(name, "SafeArrayGetLBound");
682
558
      break;
683
6.92k
    case 21:
684
6.92k
      sprintf(name, "SafeArrayLock");
685
6.92k
      break;
686
228
    case 22:
687
228
      sprintf(name, "SafeArrayUnlock");
688
228
      break;
689
399
    case 23:
690
399
      sprintf(name, "SafeArrayAccessData");
691
399
      break;
692
1.17k
    case 24:
693
1.17k
      sprintf(name, "SafeArrayUnaccessData");
694
1.17k
      break;
695
1.07k
    case 25:
696
1.07k
      sprintf(name, "SafeArrayGetElement");
697
1.07k
      break;
698
207
    case 26:
699
207
      sprintf(name, "SafeArrayPutElement");
700
207
      break;
701
706
    case 27:
702
706
      sprintf(name, "SafeArrayCopy");
703
706
      break;
704
667
    case 28:
705
667
      sprintf(name, "DispGetParam");
706
667
      break;
707
1.42k
    case 29:
708
1.42k
      sprintf(name, "DispGetIDsOfNames");
709
1.42k
      break;
710
858
    case 30:
711
858
      sprintf(name, "DispInvoke");
712
858
      break;
713
1.20k
    case 31:
714
1.20k
      sprintf(name, "CreateDispTypeInfo");
715
1.20k
      break;
716
2.51k
    case 32:
717
2.51k
      sprintf(name, "CreateStdDispatch");
718
2.51k
      break;
719
473
    case 33:
720
473
      sprintf(name, "RegisterActiveObject");
721
473
      break;
722
1.75k
    case 34:
723
1.75k
      sprintf(name, "RevokeActiveObject");
724
1.75k
      break;
725
2.40k
    case 35:
726
2.40k
      sprintf(name, "GetActiveObject");
727
2.40k
      break;
728
440
    case 36:
729
440
      sprintf(name, "SafeArrayAllocDescriptor");
730
440
      break;
731
608
    case 37:
732
608
      sprintf(name, "SafeArrayAllocData");
733
608
      break;
734
745
    case 38:
735
745
      sprintf(name, "SafeArrayDestroyDescriptor");
736
745
      break;
737
1.34k
    case 39:
738
1.34k
      sprintf(name, "SafeArrayDestroyData");
739
1.34k
      break;
740
498
    case 40:
741
498
      sprintf(name, "SafeArrayRedim");
742
498
      break;
743
1.52k
    case 41:
744
1.52k
      sprintf(name, "SafeArrayAllocDescriptorEx");
745
1.52k
      break;
746
800
    case 42:
747
800
      sprintf(name, "SafeArrayCreateEx");
748
800
      break;
749
397
    case 43:
750
397
      sprintf(name, "SafeArrayCreateVectorEx");
751
397
      break;
752
736
    case 44:
753
736
      sprintf(name, "SafeArraySetRecordInfo");
754
736
      break;
755
397
    case 45:
756
397
      sprintf(name, "SafeArrayGetRecordInfo");
757
397
      break;
758
290
    case 46:
759
290
      sprintf(name, "VarParseNumFromStr");
760
290
      break;
761
541
    case 47:
762
541
      sprintf(name, "VarNumFromParseNum");
763
541
      break;
764
976
    case 48:
765
976
      sprintf(name, "VarI2FromUI1");
766
976
      break;
767
755
    case 49:
768
755
      sprintf(name, "VarI2FromI4");
769
755
      break;
770
1.17k
    case 50:
771
1.17k
      sprintf(name, "VarI2FromR4");
772
1.17k
      break;
773
891
    case 51:
774
891
      sprintf(name, "VarI2FromR8");
775
891
      break;
776
336
    case 52:
777
336
      sprintf(name, "VarI2FromCy");
778
336
      break;
779
483
    case 53:
780
483
      sprintf(name, "VarI2FromDate");
781
483
      break;
782
788
    case 54:
783
788
      sprintf(name, "VarI2FromStr");
784
788
      break;
785
803
    case 55:
786
803
      sprintf(name, "VarI2FromDisp");
787
803
      break;
788
486
    case 56:
789
486
      sprintf(name, "VarI2FromBool");
790
486
      break;
791
257
    case 57:
792
257
      sprintf(name, "SafeArraySetIID");
793
257
      break;
794
679
    case 58:
795
679
      sprintf(name, "VarI4FromUI1");
796
679
      break;
797
1.27k
    case 59:
798
1.27k
      sprintf(name, "VarI4FromI2");
799
1.27k
      break;
800
936
    case 60:
801
936
      sprintf(name, "VarI4FromR4");
802
936
      break;
803
1.37k
    case 61:
804
1.37k
      sprintf(name, "VarI4FromR8");
805
1.37k
      break;
806
373
    case 62:
807
373
      sprintf(name, "VarI4FromCy");
808
373
      break;
809
436
    case 63:
810
436
      sprintf(name, "VarI4FromDate");
811
436
      break;
812
486
    case 64:
813
486
      sprintf(name, "VarI4FromStr");
814
486
      break;
815
463
    case 65:
816
463
      sprintf(name, "VarI4FromDisp");
817
463
      break;
818
424
    case 66:
819
424
      sprintf(name, "VarI4FromBool");
820
424
      break;
821
361
    case 67:
822
361
      sprintf(name, "SafeArrayGetIID");
823
361
      break;
824
1.56k
    case 68:
825
1.56k
      sprintf(name, "VarR4FromUI1");
826
1.56k
      break;
827
917
    case 69:
828
917
      sprintf(name, "VarR4FromI2");
829
917
      break;
830
1.37k
    case 70:
831
1.37k
      sprintf(name, "VarR4FromI4");
832
1.37k
      break;
833
1.59k
    case 71:
834
1.59k
      sprintf(name, "VarR4FromR8");
835
1.59k
      break;
836
755
    case 72:
837
755
      sprintf(name, "VarR4FromCy");
838
755
      break;
839
279
    case 73:
840
279
      sprintf(name, "VarR4FromDate");
841
279
      break;
842
831
    case 74:
843
831
      sprintf(name, "VarR4FromStr");
844
831
      break;
845
635
    case 75:
846
635
      sprintf(name, "VarR4FromDisp");
847
635
      break;
848
617
    case 76:
849
617
      sprintf(name, "VarR4FromBool");
850
617
      break;
851
337
    case 77:
852
337
      sprintf(name, "SafeArrayGetVartype");
853
337
      break;
854
579
    case 78:
855
579
      sprintf(name, "VarR8FromUI1");
856
579
      break;
857
1.08k
    case 79:
858
1.08k
      sprintf(name, "VarR8FromI2");
859
1.08k
      break;
860
856
    case 80:
861
856
      sprintf(name, "VarR8FromI4");
862
856
      break;
863
1.02k
    case 81:
864
1.02k
      sprintf(name, "VarR8FromR4");
865
1.02k
      break;
866
766
    case 82:
867
766
      sprintf(name, "VarR8FromCy");
868
766
      break;
869
912
    case 83:
870
912
      sprintf(name, "VarR8FromDate");
871
912
      break;
872
495
    case 84:
873
495
      sprintf(name, "VarR8FromStr");
874
495
      break;
875
589
    case 85:
876
589
      sprintf(name, "VarR8FromDisp");
877
589
      break;
878
527
    case 86:
879
527
      sprintf(name, "VarR8FromBool");
880
527
      break;
881
361
    case 87:
882
361
      sprintf(name, "VarFormat");
883
361
      break;
884
849
    case 88:
885
849
      sprintf(name, "VarDateFromUI1");
886
849
      break;
887
2.21k
    case 89:
888
2.21k
      sprintf(name, "VarDateFromI2");
889
2.21k
      break;
890
553
    case 90:
891
553
      sprintf(name, "VarDateFromI4");
892
553
      break;
893
288
    case 91:
894
288
      sprintf(name, "VarDateFromR4");
895
288
      break;
896
801
    case 92:
897
801
      sprintf(name, "VarDateFromR8");
898
801
      break;
899
861
    case 93:
900
861
      sprintf(name, "VarDateFromCy");
901
861
      break;
902
590
    case 94:
903
590
      sprintf(name, "VarDateFromStr");
904
590
      break;
905
429
    case 95:
906
429
      sprintf(name, "VarDateFromDisp");
907
429
      break;
908
623
    case 96:
909
623
      sprintf(name, "VarDateFromBool");
910
623
      break;
911
517
    case 97:
912
517
      sprintf(name, "VarFormatDateTime");
913
517
      break;
914
221
    case 98:
915
221
      sprintf(name, "VarCyFromUI1");
916
221
      break;
917
316
    case 99:
918
316
      sprintf(name, "VarCyFromI2");
919
316
      break;
920
590
    case 100:
921
590
      sprintf(name, "VarCyFromI4");
922
590
      break;
923
1.10k
    case 101:
924
1.10k
      sprintf(name, "VarCyFromR4");
925
1.10k
      break;
926
4.86k
    case 102:
927
4.86k
      sprintf(name, "VarCyFromR8");
928
4.86k
      break;
929
670
    case 103:
930
670
      sprintf(name, "VarCyFromDate");
931
670
      break;
932
281
    case 104:
933
281
      sprintf(name, "VarCyFromStr");
934
281
      break;
935
252
    case 105:
936
252
      sprintf(name, "VarCyFromDisp");
937
252
      break;
938
985
    case 106:
939
985
      sprintf(name, "VarCyFromBool");
940
985
      break;
941
235
    case 107:
942
235
      sprintf(name, "VarFormatNumber");
943
235
      break;
944
568
    case 108:
945
568
      sprintf(name, "VarBstrFromUI1");
946
568
      break;
947
488
    case 109:
948
488
      sprintf(name, "VarBstrFromI2");
949
488
      break;
950
999
    case 110:
951
999
      sprintf(name, "VarBstrFromI4");
952
999
      break;
953
1.41k
    case 111:
954
1.41k
      sprintf(name, "VarBstrFromR4");
955
1.41k
      break;
956
862
    case 112:
957
862
      sprintf(name, "VarBstrFromR8");
958
862
      break;
959
2.14k
    case 113:
960
2.14k
      sprintf(name, "VarBstrFromCy");
961
2.14k
      break;
962
334
    case 114:
963
334
      sprintf(name, "VarBstrFromDate");
964
334
      break;
965
524
    case 115:
966
524
      sprintf(name, "VarBstrFromDisp");
967
524
      break;
968
5.99k
    case 116:
969
5.99k
      sprintf(name, "VarBstrFromBool");
970
5.99k
      break;
971
257
    case 117:
972
257
      sprintf(name, "VarFormatPercent");
973
257
      break;
974
238
    case 118:
975
238
      sprintf(name, "VarBoolFromUI1");
976
238
      break;
977
496
    case 119:
978
496
      sprintf(name, "VarBoolFromI2");
979
496
      break;
980
629
    case 120:
981
629
      sprintf(name, "VarBoolFromI4");
982
629
      break;
983
683
    case 121:
984
683
      sprintf(name, "VarBoolFromR4");
985
683
      break;
986
1.52k
    case 122:
987
1.52k
      sprintf(name, "VarBoolFromR8");
988
1.52k
      break;
989
278
    case 123:
990
278
      sprintf(name, "VarBoolFromDate");
991
278
      break;
992
2.95k
    case 124:
993
2.95k
      sprintf(name, "VarBoolFromCy");
994
2.95k
      break;
995
2.90k
    case 125:
996
2.90k
      sprintf(name, "VarBoolFromStr");
997
2.90k
      break;
998
5.35k
    case 126:
999
5.35k
      sprintf(name, "VarBoolFromDisp");
1000
5.35k
      break;
1001
515
    case 127:
1002
515
      sprintf(name, "VarFormatCurrency");
1003
515
      break;
1004
4.96k
    case 128:
1005
4.96k
      sprintf(name, "VarWeekdayName");
1006
4.96k
      break;
1007
307
    case 129:
1008
307
      sprintf(name, "VarMonthName");
1009
307
      break;
1010
220
    case 130:
1011
220
      sprintf(name, "VarUI1FromI2");
1012
220
      break;
1013
308
    case 131:
1014
308
      sprintf(name, "VarUI1FromI4");
1015
308
      break;
1016
219
    case 132:
1017
219
      sprintf(name, "VarUI1FromR4");
1018
219
      break;
1019
270
    case 133:
1020
270
      sprintf(name, "VarUI1FromR8");
1021
270
      break;
1022
576
    case 134:
1023
576
      sprintf(name, "VarUI1FromCy");
1024
576
      break;
1025
374
    case 135:
1026
374
      sprintf(name, "VarUI1FromDate");
1027
374
      break;
1028
236
    case 136:
1029
236
      sprintf(name, "VarUI1FromStr");
1030
236
      break;
1031
453
    case 137:
1032
453
      sprintf(name, "VarUI1FromDisp");
1033
453
      break;
1034
1.19k
    case 138:
1035
1.19k
      sprintf(name, "VarUI1FromBool");
1036
1.19k
      break;
1037
387
    case 139:
1038
387
      sprintf(name, "VarFormatFromTokens");
1039
387
      break;
1040
416
    case 140:
1041
416
      sprintf(name, "VarTokenizeFormatString");
1042
416
      break;
1043
480
    case 141:
1044
480
      sprintf(name, "VarAdd");
1045
480
      break;
1046
225
    case 142:
1047
225
      sprintf(name, "VarAnd");
1048
225
      break;
1049
227
    case 143:
1050
227
      sprintf(name, "VarDiv");
1051
227
      break;
1052
648
    case 144:
1053
648
      sprintf(name, "DllCanUnloadNow");
1054
648
      break;
1055
303
    case 145:
1056
303
      sprintf(name, "DllGetClassObject");
1057
303
      break;
1058
670
    case 146:
1059
670
      sprintf(name, "DispCallFunc");
1060
670
      break;
1061
269
    case 147:
1062
269
      sprintf(name, "VariantChangeTypeEx");
1063
269
      break;
1064
1.78k
    case 148:
1065
1.78k
      sprintf(name, "SafeArrayPtrOfIndex");
1066
1.78k
      break;
1067
734
    case 149:
1068
734
      sprintf(name, "SysStringByteLen");
1069
734
      break;
1070
223
    case 150:
1071
223
      sprintf(name, "SysAllocStringByteLen");
1072
223
      break;
1073
1.60k
    case 151:
1074
1.60k
      sprintf(name, "DllRegisterServer");
1075
1.60k
      break;
1076
257
    case 152:
1077
257
      sprintf(name, "VarEqv");
1078
257
      break;
1079
230
    case 153:
1080
230
      sprintf(name, "VarIdiv");
1081
230
      break;
1082
779
    case 154:
1083
779
      sprintf(name, "VarImp");
1084
779
      break;
1085
475
    case 155:
1086
475
      sprintf(name, "VarMod");
1087
475
      break;
1088
220
    case 156:
1089
220
      sprintf(name, "VarMul");
1090
220
      break;
1091
283
    case 157:
1092
283
      sprintf(name, "VarOr");
1093
283
      break;
1094
234
    case 158:
1095
234
      sprintf(name, "VarPow");
1096
234
      break;
1097
207
    case 159:
1098
207
      sprintf(name, "VarSub");
1099
207
      break;
1100
331
    case 160:
1101
331
      sprintf(name, "CreateTypeLib");
1102
331
      break;
1103
1.50k
    case 161:
1104
1.50k
      sprintf(name, "LoadTypeLib");
1105
1.50k
      break;
1106
801
    case 162:
1107
801
      sprintf(name, "LoadRegTypeLib");
1108
801
      break;
1109
285
    case 163:
1110
285
      sprintf(name, "RegisterTypeLib");
1111
285
      break;
1112
467
    case 164:
1113
467
      sprintf(name, "QueryPathOfRegTypeLib");
1114
467
      break;
1115
283
    case 165:
1116
283
      sprintf(name, "LHashValOfNameSys");
1117
283
      break;
1118
255
    case 166:
1119
255
      sprintf(name, "LHashValOfNameSysA");
1120
255
      break;
1121
556
    case 167:
1122
556
      sprintf(name, "VarXor");
1123
556
      break;
1124
931
    case 168:
1125
931
      sprintf(name, "VarAbs");
1126
931
      break;
1127
933
    case 169:
1128
933
      sprintf(name, "VarFix");
1129
933
      break;
1130
15.3k
    case 170:
1131
15.3k
      sprintf(name, "OaBuildVersion");
1132
15.3k
      break;
1133
1.91k
    case 171:
1134
1.91k
      sprintf(name, "ClearCustData");
1135
1.91k
      break;
1136
334
    case 172:
1137
334
      sprintf(name, "VarInt");
1138
334
      break;
1139
902
    case 173:
1140
902
      sprintf(name, "VarNeg");
1141
902
      break;
1142
1.23k
    case 174:
1143
1.23k
      sprintf(name, "VarNot");
1144
1.23k
      break;
1145
1.24k
    case 175:
1146
1.24k
      sprintf(name, "VarRound");
1147
1.24k
      break;
1148
424
    case 176:
1149
424
      sprintf(name, "VarCmp");
1150
424
      break;
1151
4.78k
    case 177:
1152
4.78k
      sprintf(name, "VarDecAdd");
1153
4.78k
      break;
1154
864
    case 178:
1155
864
      sprintf(name, "VarDecDiv");
1156
864
      break;
1157
1.03k
    case 179:
1158
1.03k
      sprintf(name, "VarDecMul");
1159
1.03k
      break;
1160
222
    case 180:
1161
222
      sprintf(name, "CreateTypeLib2");
1162
222
      break;
1163
371
    case 181:
1164
371
      sprintf(name, "VarDecSub");
1165
371
      break;
1166
319
    case 182:
1167
319
      sprintf(name, "VarDecAbs");
1168
319
      break;
1169
233
    case 183:
1170
233
      sprintf(name, "LoadTypeLibEx");
1171
233
      break;
1172
599
    case 184:
1173
599
      sprintf(name, "SystemTimeToVariantTime");
1174
599
      break;
1175
206
    case 185:
1176
206
      sprintf(name, "VariantTimeToSystemTime");
1177
206
      break;
1178
765
    case 186:
1179
765
      sprintf(name, "UnRegisterTypeLib");
1180
765
      break;
1181
687
    case 187:
1182
687
      sprintf(name, "VarDecFix");
1183
687
      break;
1184
363
    case 188:
1185
363
      sprintf(name, "VarDecInt");
1186
363
      break;
1187
279
    case 189:
1188
279
      sprintf(name, "VarDecNeg");
1189
279
      break;
1190
662
    case 190:
1191
662
      sprintf(name, "VarDecFromUI1");
1192
662
      break;
1193
546
    case 191:
1194
546
      sprintf(name, "VarDecFromI2");
1195
546
      break;
1196
427
    case 192:
1197
427
      sprintf(name, "VarDecFromI4");
1198
427
      break;
1199
780
    case 193:
1200
780
      sprintf(name, "VarDecFromR4");
1201
780
      break;
1202
477
    case 194:
1203
477
      sprintf(name, "VarDecFromR8");
1204
477
      break;
1205
390
    case 195:
1206
390
      sprintf(name, "VarDecFromDate");
1207
390
      break;
1208
440
    case 196:
1209
440
      sprintf(name, "VarDecFromCy");
1210
440
      break;
1211
292
    case 197:
1212
292
      sprintf(name, "VarDecFromStr");
1213
292
      break;
1214
249
    case 198:
1215
249
      sprintf(name, "VarDecFromDisp");
1216
249
      break;
1217
430
    case 199:
1218
430
      sprintf(name, "VarDecFromBool");
1219
430
      break;
1220
405
    case 200:
1221
405
      sprintf(name, "GetErrorInfo");
1222
405
      break;
1223
435
    case 201:
1224
435
      sprintf(name, "SetErrorInfo");
1225
435
      break;
1226
446
    case 202:
1227
446
      sprintf(name, "CreateErrorInfo");
1228
446
      break;
1229
317
    case 203:
1230
317
      sprintf(name, "VarDecRound");
1231
317
      break;
1232
594
    case 204:
1233
594
      sprintf(name, "VarDecCmp");
1234
594
      break;
1235
556
    case 205:
1236
556
      sprintf(name, "VarI2FromI1");
1237
556
      break;
1238
685
    case 206:
1239
685
      sprintf(name, "VarI2FromUI2");
1240
685
      break;
1241
332
    case 207:
1242
332
      sprintf(name, "VarI2FromUI4");
1243
332
      break;
1244
229
    case 208:
1245
229
      sprintf(name, "VarI2FromDec");
1246
229
      break;
1247
232
    case 209:
1248
232
      sprintf(name, "VarI4FromI1");
1249
232
      break;
1250
506
    case 210:
1251
506
      sprintf(name, "VarI4FromUI2");
1252
506
      break;
1253
287
    case 211:
1254
287
      sprintf(name, "VarI4FromUI4");
1255
287
      break;
1256
1.23k
    case 212:
1257
1.23k
      sprintf(name, "VarI4FromDec");
1258
1.23k
      break;
1259
229
    case 213:
1260
229
      sprintf(name, "VarR4FromI1");
1261
229
      break;
1262
2.15k
    case 214:
1263
2.15k
      sprintf(name, "VarR4FromUI2");
1264
2.15k
      break;
1265
993
    case 215:
1266
993
      sprintf(name, "VarR4FromUI4");
1267
993
      break;
1268
268
    case 216:
1269
268
      sprintf(name, "VarR4FromDec");
1270
268
      break;
1271
257
    case 217:
1272
257
      sprintf(name, "VarR8FromI1");
1273
257
      break;
1274
417
    case 218:
1275
417
      sprintf(name, "VarR8FromUI2");
1276
417
      break;
1277
765
    case 219:
1278
765
      sprintf(name, "VarR8FromUI4");
1279
765
      break;
1280
286
    case 220:
1281
286
      sprintf(name, "VarR8FromDec");
1282
286
      break;
1283
759
    case 221:
1284
759
      sprintf(name, "VarDateFromI1");
1285
759
      break;
1286
5.04k
    case 222:
1287
5.04k
      sprintf(name, "VarDateFromUI2");
1288
5.04k
      break;
1289
483
    case 223:
1290
483
      sprintf(name, "VarDateFromUI4");
1291
483
      break;
1292
233
    case 224:
1293
233
      sprintf(name, "VarDateFromDec");
1294
233
      break;
1295
280
    case 225:
1296
280
      sprintf(name, "VarCyFromI1");
1297
280
      break;
1298
708
    case 226:
1299
708
      sprintf(name, "VarCyFromUI2");
1300
708
      break;
1301
591
    case 227:
1302
591
      sprintf(name, "VarCyFromUI4");
1303
591
      break;
1304
277
    case 228:
1305
277
      sprintf(name, "VarCyFromDec");
1306
277
      break;
1307
344
    case 229:
1308
344
      sprintf(name, "VarBstrFromI1");
1309
344
      break;
1310
1.35k
    case 230:
1311
1.35k
      sprintf(name, "VarBstrFromUI2");
1312
1.35k
      break;
1313
378
    case 231:
1314
378
      sprintf(name, "VarBstrFromUI4");
1315
378
      break;
1316
1.23k
    case 232:
1317
1.23k
      sprintf(name, "VarBstrFromDec");
1318
1.23k
      break;
1319
738
    case 233:
1320
738
      sprintf(name, "VarBoolFromI1");
1321
738
      break;
1322
515
    case 234:
1323
515
      sprintf(name, "VarBoolFromUI2");
1324
515
      break;
1325
967
    case 235:
1326
967
      sprintf(name, "VarBoolFromUI4");
1327
967
      break;
1328
236
    case 236:
1329
236
      sprintf(name, "VarBoolFromDec");
1330
236
      break;
1331
408
    case 237:
1332
408
      sprintf(name, "VarUI1FromI1");
1333
408
      break;
1334
346
    case 238:
1335
346
      sprintf(name, "VarUI1FromUI2");
1336
346
      break;
1337
225
    case 239:
1338
225
      sprintf(name, "VarUI1FromUI4");
1339
225
      break;
1340
1.37k
    case 240:
1341
1.37k
      sprintf(name, "VarUI1FromDec");
1342
1.37k
      break;
1343
229
    case 241:
1344
229
      sprintf(name, "VarDecFromI1");
1345
229
      break;
1346
371
    case 242:
1347
371
      sprintf(name, "VarDecFromUI2");
1348
371
      break;
1349
481
    case 243:
1350
481
      sprintf(name, "VarDecFromUI4");
1351
481
      break;
1352
432
    case 244:
1353
432
      sprintf(name, "VarI1FromUI1");
1354
432
      break;
1355
534
    case 245:
1356
534
      sprintf(name, "VarI1FromI2");
1357
534
      break;
1358
1.76k
    case 246:
1359
1.76k
      sprintf(name, "VarI1FromI4");
1360
1.76k
      break;
1361
242
    case 247:
1362
242
      sprintf(name, "VarI1FromR4");
1363
242
      break;
1364
550
    case 248:
1365
550
      sprintf(name, "VarI1FromR8");
1366
550
      break;
1367
384
    case 249:
1368
384
      sprintf(name, "VarI1FromDate");
1369
384
      break;
1370
1.15k
    case 250:
1371
1.15k
      sprintf(name, "VarI1FromCy");
1372
1.15k
      break;
1373
695
    case 251:
1374
695
      sprintf(name, "VarI1FromStr");
1375
695
      break;
1376
1.44k
    case 252:
1377
1.44k
      sprintf(name, "VarI1FromDisp");
1378
1.44k
      break;
1379
2.47k
    case 253:
1380
2.47k
      sprintf(name, "VarI1FromBool");
1381
2.47k
      break;
1382
1.41k
    case 254:
1383
1.41k
      sprintf(name, "VarI1FromUI2");
1384
1.41k
      break;
1385
48.6k
    case 255:
1386
48.6k
      sprintf(name, "VarI1FromUI4");
1387
48.6k
      break;
1388
4.07k
    case 256:
1389
4.07k
      sprintf(name, "VarI1FromDec");
1390
4.07k
      break;
1391
1.17k
    case 257:
1392
1.17k
      sprintf(name, "VarUI2FromUI1");
1393
1.17k
      break;
1394
401
    case 258:
1395
401
      sprintf(name, "VarUI2FromI2");
1396
401
      break;
1397
478
    case 259:
1398
478
      sprintf(name, "VarUI2FromI4");
1399
478
      break;
1400
487
    case 260:
1401
487
      sprintf(name, "VarUI2FromR4");
1402
487
      break;
1403
412
    case 261:
1404
412
      sprintf(name, "VarUI2FromR8");
1405
412
      break;
1406
410
    case 262:
1407
410
      sprintf(name, "VarUI2FromDate");
1408
410
      break;
1409
279
    case 263:
1410
279
      sprintf(name, "VarUI2FromCy");
1411
279
      break;
1412
301
    case 264:
1413
301
      sprintf(name, "VarUI2FromStr");
1414
301
      break;
1415
830
    case 265:
1416
830
      sprintf(name, "VarUI2FromDisp");
1417
830
      break;
1418
322
    case 266:
1419
322
      sprintf(name, "VarUI2FromBool");
1420
322
      break;
1421
232
    case 267:
1422
232
      sprintf(name, "VarUI2FromI1");
1423
232
      break;
1424
451
    case 268:
1425
451
      sprintf(name, "VarUI2FromUI4");
1426
451
      break;
1427
243
    case 269:
1428
243
      sprintf(name, "VarUI2FromDec");
1429
243
      break;
1430
217
    case 270:
1431
217
      sprintf(name, "VarUI4FromUI1");
1432
217
      break;
1433
636
    case 271:
1434
636
      sprintf(name, "VarUI4FromI2");
1435
636
      break;
1436
418
    case 272:
1437
418
      sprintf(name, "VarUI4FromI4");
1438
418
      break;
1439
315
    case 273:
1440
315
      sprintf(name, "VarUI4FromR4");
1441
315
      break;
1442
795
    case 274:
1443
795
      sprintf(name, "VarUI4FromR8");
1444
795
      break;
1445
221
    case 275:
1446
221
      sprintf(name, "VarUI4FromDate");
1447
221
      break;
1448
841
    case 276:
1449
841
      sprintf(name, "VarUI4FromCy");
1450
841
      break;
1451
597
    case 277:
1452
597
      sprintf(name, "VarUI4FromStr");
1453
597
      break;
1454
647
    case 278:
1455
647
      sprintf(name, "VarUI4FromDisp");
1456
647
      break;
1457
495
    case 279:
1458
495
      sprintf(name, "VarUI4FromBool");
1459
495
      break;
1460
480
    case 280:
1461
480
      sprintf(name, "VarUI4FromI1");
1462
480
      break;
1463
366
    case 281:
1464
366
      sprintf(name, "VarUI4FromUI2");
1465
366
      break;
1466
475
    case 282:
1467
475
      sprintf(name, "VarUI4FromDec");
1468
475
      break;
1469
276
    case 283:
1470
276
      sprintf(name, "BSTR_UserSize");
1471
276
      break;
1472
1.83k
    case 284:
1473
1.83k
      sprintf(name, "BSTR_UserMarshal");
1474
1.83k
      break;
1475
236
    case 285:
1476
236
      sprintf(name, "BSTR_UserUnmarshal");
1477
236
      break;
1478
366
    case 286:
1479
366
      sprintf(name, "BSTR_UserFree");
1480
366
      break;
1481
201
    case 287:
1482
201
      sprintf(name, "VARIANT_UserSize");
1483
201
      break;
1484
1.14k
    case 288:
1485
1.14k
      sprintf(name, "VARIANT_UserMarshal");
1486
1.14k
      break;
1487
362
    case 289:
1488
362
      sprintf(name, "VARIANT_UserUnmarshal");
1489
362
      break;
1490
219
    case 290:
1491
219
      sprintf(name, "VARIANT_UserFree");
1492
219
      break;
1493
252
    case 291:
1494
252
      sprintf(name, "LPSAFEARRAY_UserSize");
1495
252
      break;
1496
325
    case 292:
1497
325
      sprintf(name, "LPSAFEARRAY_UserMarshal");
1498
325
      break;
1499
340
    case 293:
1500
340
      sprintf(name, "LPSAFEARRAY_UserUnmarshal");
1501
340
      break;
1502
809
    case 294:
1503
809
      sprintf(name, "LPSAFEARRAY_UserFree");
1504
809
      break;
1505
448
    case 295:
1506
448
      sprintf(name, "LPSAFEARRAY_Size");
1507
448
      break;
1508
257
    case 296:
1509
257
      sprintf(name, "LPSAFEARRAY_Marshal");
1510
257
      break;
1511
231
    case 297:
1512
231
      sprintf(name, "LPSAFEARRAY_Unmarshal");
1513
231
      break;
1514
526
    case 298:
1515
526
      sprintf(name, "VarDecCmpR8");
1516
526
      break;
1517
406
    case 299:
1518
406
      sprintf(name, "VarCyAdd");
1519
406
      break;
1520
261
    case 300:
1521
261
      sprintf(name, "DllUnregisterServer");
1522
261
      break;
1523
462
    case 301:
1524
462
      sprintf(name, "OACreateTypeLib2");
1525
462
      break;
1526
381
    case 303:
1527
381
      sprintf(name, "VarCyMul");
1528
381
      break;
1529
556
    case 304:
1530
556
      sprintf(name, "VarCyMulI4");
1531
556
      break;
1532
385
    case 305:
1533
385
      sprintf(name, "VarCySub");
1534
385
      break;
1535
492
    case 306:
1536
492
      sprintf(name, "VarCyAbs");
1537
492
      break;
1538
535
    case 307:
1539
535
      sprintf(name, "VarCyFix");
1540
535
      break;
1541
2.01k
    case 308:
1542
2.01k
      sprintf(name, "VarCyInt");
1543
2.01k
      break;
1544
485
    case 309:
1545
485
      sprintf(name, "VarCyNeg");
1546
485
      break;
1547
296
    case 310:
1548
296
      sprintf(name, "VarCyRound");
1549
296
      break;
1550
579
    case 311:
1551
579
      sprintf(name, "VarCyCmp");
1552
579
      break;
1553
344
    case 312:
1554
344
      sprintf(name, "VarCyCmpR8");
1555
344
      break;
1556
363
    case 313:
1557
363
      sprintf(name, "VarBstrCat");
1558
363
      break;
1559
425
    case 314:
1560
425
      sprintf(name, "VarBstrCmp");
1561
425
      break;
1562
210
    case 315:
1563
210
      sprintf(name, "VarR8Pow");
1564
210
      break;
1565
291
    case 316:
1566
291
      sprintf(name, "VarR4CmpR8");
1567
291
      break;
1568
1.40k
    case 317:
1569
1.40k
      sprintf(name, "VarR8Round");
1570
1.40k
      break;
1571
208
    case 318:
1572
208
      sprintf(name, "VarCat");
1573
208
      break;
1574
227
    case 319:
1575
227
      sprintf(name, "VarDateFromUdateEx");
1576
227
      break;
1577
359
    case 322:
1578
359
      sprintf(name, "GetRecordInfoFromGuids");
1579
359
      break;
1580
327
    case 323:
1581
327
      sprintf(name, "GetRecordInfoFromTypeInfo");
1582
327
      break;
1583
400
    case 325:
1584
400
      sprintf(name, "SetVarConversionLocaleSetting");
1585
400
      break;
1586
267
    case 326:
1587
267
      sprintf(name, "GetVarConversionLocaleSetting");
1588
267
      break;
1589
227
    case 327:
1590
227
      sprintf(name, "SetOaNoCache");
1591
227
      break;
1592
412
    case 329:
1593
412
      sprintf(name, "VarCyMulI8");
1594
412
      break;
1595
504
    case 330:
1596
504
      sprintf(name, "VarDateFromUdate");
1597
504
      break;
1598
571
    case 331:
1599
571
      sprintf(name, "VarUdateFromDate");
1600
571
      break;
1601
214
    case 332:
1602
214
      sprintf(name, "GetAltMonthNames");
1603
214
      break;
1604
1.02k
    case 333:
1605
1.02k
      sprintf(name, "VarI8FromUI1");
1606
1.02k
      break;
1607
211
    case 334:
1608
211
      sprintf(name, "VarI8FromI2");
1609
211
      break;
1610
302
    case 335:
1611
302
      sprintf(name, "VarI8FromR4");
1612
302
      break;
1613
214
    case 336:
1614
214
      sprintf(name, "VarI8FromR8");
1615
214
      break;
1616
409
    case 337:
1617
409
      sprintf(name, "VarI8FromCy");
1618
409
      break;
1619
454
    case 338:
1620
454
      sprintf(name, "VarI8FromDate");
1621
454
      break;
1622
250
    case 339:
1623
250
      sprintf(name, "VarI8FromStr");
1624
250
      break;
1625
791
    case 340:
1626
791
      sprintf(name, "VarI8FromDisp");
1627
791
      break;
1628
344
    case 341:
1629
344
      sprintf(name, "VarI8FromBool");
1630
344
      break;
1631
5.86k
    case 342:
1632
5.86k
      sprintf(name, "VarI8FromI1");
1633
5.86k
      break;
1634
399
    case 343:
1635
399
      sprintf(name, "VarI8FromUI2");
1636
399
      break;
1637
436
    case 344:
1638
436
      sprintf(name, "VarI8FromUI4");
1639
436
      break;
1640
351
    case 345:
1641
351
      sprintf(name, "VarI8FromDec");
1642
351
      break;
1643
2.05k
    case 346:
1644
2.05k
      sprintf(name, "VarI2FromI8");
1645
2.05k
      break;
1646
311
    case 347:
1647
311
      sprintf(name, "VarI2FromUI8");
1648
311
      break;
1649
234
    case 348:
1650
234
      sprintf(name, "VarI4FromI8");
1651
234
      break;
1652
769
    case 349:
1653
769
      sprintf(name, "VarI4FromUI8");
1654
769
      break;
1655
400
    case 360:
1656
400
      sprintf(name, "VarR4FromI8");
1657
400
      break;
1658
707
    case 361:
1659
707
      sprintf(name, "VarR4FromUI8");
1660
707
      break;
1661
1.15k
    case 362:
1662
1.15k
      sprintf(name, "VarR8FromI8");
1663
1.15k
      break;
1664
313
    case 363:
1665
313
      sprintf(name, "VarR8FromUI8");
1666
313
      break;
1667
354
    case 364:
1668
354
      sprintf(name, "VarDateFromI8");
1669
354
      break;
1670
238
    case 365:
1671
238
      sprintf(name, "VarDateFromUI8");
1672
238
      break;
1673
348
    case 366:
1674
348
      sprintf(name, "VarCyFromI8");
1675
348
      break;
1676
326
    case 367:
1677
326
      sprintf(name, "VarCyFromUI8");
1678
326
      break;
1679
362
    case 368:
1680
362
      sprintf(name, "VarBstrFromI8");
1681
362
      break;
1682
242
    case 369:
1683
242
      sprintf(name, "VarBstrFromUI8");
1684
242
      break;
1685
413
    case 370:
1686
413
      sprintf(name, "VarBoolFromI8");
1687
413
      break;
1688
1.07k
    case 371:
1689
1.07k
      sprintf(name, "VarBoolFromUI8");
1690
1.07k
      break;
1691
9.25k
    case 372:
1692
9.25k
      sprintf(name, "VarUI1FromI8");
1693
9.25k
      break;
1694
616
    case 373:
1695
616
      sprintf(name, "VarUI1FromUI8");
1696
616
      break;
1697
421
    case 374:
1698
421
      sprintf(name, "VarDecFromI8");
1699
421
      break;
1700
225
    case 375:
1701
225
      sprintf(name, "VarDecFromUI8");
1702
225
      break;
1703
464
    case 376:
1704
464
      sprintf(name, "VarI1FromI8");
1705
464
      break;
1706
245
    case 377:
1707
245
      sprintf(name, "VarI1FromUI8");
1708
245
      break;
1709
244
    case 378:
1710
244
      sprintf(name, "VarUI2FromI8");
1711
244
      break;
1712
260
    case 379:
1713
260
      sprintf(name, "VarUI2FromUI8");
1714
260
      break;
1715
225
    case 401:
1716
225
      sprintf(name, "OleLoadPictureEx");
1717
225
      break;
1718
249
    case 402:
1719
249
      sprintf(name, "OleLoadPictureFileEx");
1720
249
      break;
1721
345
    case 411:
1722
345
      sprintf(name, "SafeArrayCreateVector");
1723
345
      break;
1724
217
    case 412:
1725
217
      sprintf(name, "SafeArrayCopyData");
1726
217
      break;
1727
228
    case 413:
1728
228
      sprintf(name, "VectorFromBstr");
1729
228
      break;
1730
196
    case 414:
1731
196
      sprintf(name, "BstrFromVector");
1732
196
      break;
1733
214
    case 415:
1734
214
      sprintf(name, "OleIconToCursor");
1735
214
      break;
1736
217
    case 416:
1737
217
      sprintf(name, "OleCreatePropertyFrameIndirect");
1738
217
      break;
1739
297
    case 417:
1740
297
      sprintf(name, "OleCreatePropertyFrame");
1741
297
      break;
1742
646
    case 418:
1743
646
      sprintf(name, "OleLoadPicture");
1744
646
      break;
1745
206
    case 419:
1746
206
      sprintf(name, "OleCreatePictureIndirect");
1747
206
      break;
1748
366
    case 420:
1749
366
      sprintf(name, "OleCreateFontIndirect");
1750
366
      break;
1751
203
    case 421:
1752
203
      sprintf(name, "OleTranslateColor");
1753
203
      break;
1754
303
    case 422:
1755
303
      sprintf(name, "OleLoadPictureFile");
1756
303
      break;
1757
415
    case 423:
1758
415
      sprintf(name, "OleSavePictureFile");
1759
415
      break;
1760
217
    case 424:
1761
217
      sprintf(name, "OleLoadPicturePath");
1762
217
      break;
1763
217
    case 425:
1764
217
      sprintf(name, "VarUI4FromI8");
1765
217
      break;
1766
893
    case 426:
1767
893
      sprintf(name, "VarUI4FromUI8");
1768
893
      break;
1769
706
    case 427:
1770
706
      sprintf(name, "VarI8FromUI8");
1771
706
      break;
1772
211
    case 428:
1773
211
      sprintf(name, "VarUI8FromI8");
1774
211
      break;
1775
360
    case 429:
1776
360
      sprintf(name, "VarUI8FromUI1");
1777
360
      break;
1778
347
    case 430:
1779
347
      sprintf(name, "VarUI8FromI2");
1780
347
      break;
1781
211
    case 431:
1782
211
      sprintf(name, "VarUI8FromR4");
1783
211
      break;
1784
666
    case 432:
1785
666
      sprintf(name, "VarUI8FromR8");
1786
666
      break;
1787
386
    case 433:
1788
386
      sprintf(name, "VarUI8FromCy");
1789
386
      break;
1790
380
    case 434:
1791
380
      sprintf(name, "VarUI8FromDate");
1792
380
      break;
1793
202
    case 435:
1794
202
      sprintf(name, "VarUI8FromStr");
1795
202
      break;
1796
721
    case 436:
1797
721
      sprintf(name, "VarUI8FromDisp");
1798
721
      break;
1799
277
    case 437:
1800
277
      sprintf(name, "VarUI8FromBool");
1801
277
      break;
1802
257
    case 438:
1803
257
      sprintf(name, "VarUI8FromI1");
1804
257
      break;
1805
301
    case 439:
1806
301
      sprintf(name, "VarUI8FromUI2");
1807
301
      break;
1808
377
    case 440:
1809
377
      sprintf(name, "VarUI8FromUI4");
1810
377
      break;
1811
263
    case 441:
1812
263
      sprintf(name, "VarUI8FromDec");
1813
263
      break;
1814
199
    case 442:
1815
199
      sprintf(name, "RegisterTypeLibForUser");
1816
199
      break;
1817
302
    case 443:
1818
302
      sprintf(name, "UnRegisterTypeLibForUser");
1819
302
      break;
1820
509k
    default:
1821
509k
      break;
1822
869k
    }
1823
869k
  }
1824
1825
1.62M
  if (name[0] == '\0')
1826
1.21M
    sprintf(name, "ord%u", ord);
1827
1828
1.62M
  return yr_strdup(name);
1829
1.62M
}