ReactOS  0.4.14-dev-98-gb0d4763
resource.c
Go to the documentation of this file.
1 /*
2  * COPYRIGHT: See COPYING.ARM in the top level directory
3  * PROJECT: ReactOS UEFI Boot Library
4  * FILE: boot/environ/lib/misc/resource.c
5  * PURPOSE: Boot Library Resource Functions
6  * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
7  */
8 
9 /* INCLUDES ******************************************************************/
10 
11 #include "bl.h"
12 
13 /* DATA VARIABLES ************************************************************/
14 
18 
28 
32 
34 
35 /* FUNCTIONS *****************************************************************/
36 
39  _In_ BOOLEAN Primary
40  )
41 {
43 
44  /* Check if we're using the primary (MUI) or fallback resources */
45  if (Primary)
46  {
47  /* Use the primary ones */
52 
53  /* Register the locale with the display */
55  }
56 
57  /* Check if that failed, or if we're using fallback */
58  if (!(Primary) || !(NT_SUCCESS(Status)))
59  {
60  /* Set the fallback pointers */
65 
66  /* Register the fallback (America baby!) locale */
68  if (!NT_SUCCESS(Status))
69  {
70  /* Fallback to text mode (yes, this is the API...) */
72  }
73  }
74 
75  /* No fonts loaded -- return failure code */
77  return Status;
78 }
79 
85  _In_ ULONG_PTR SectionStart
86  )
87 {
88  PIMAGE_RESOURCE_DIRECTORY_ENTRY EntryTable, IdEntryTable;
89  ULONG i;
90  SIZE_T NameLength;
92 
93  /* Are we looking by ID or name? */
94  if (Id)
95  {
96  /* By ID, so were we passed a name? */
97  if (Name)
98  {
99  /* That doesn't make sense */
100  return NULL;
101  }
102  }
103  else if (!Name)
104  {
105  /* By name, but we weren't given one. Also bad. */
106  return NULL;
107  }
108 
109  /* Get the table of names */
110  EntryTable = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(Directory + 1);
111 
112  /* Check if we are doing ID lookup instead */
113  if (Id)
114  {
115  /* The IDs come after the names */
116  IdEntryTable = &EntryTable[Directory->NumberOfNamedEntries];
117 
118  /* Parse them */
119  for (i = 0; i < Directory->NumberOfIdEntries; i++)
120  {
121  /* Check if the ID matches, or if the wildcard is being used*/
122  if ((IdEntryTable[i].Id == *Id) || (*Id == 0xFFFF))
123  {
124  /* Return a pointer to the data */
125  return (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(SectionStart + IdEntryTable[i].OffsetToDirectory);
126  }
127  }
128 
129  /* ID was not found */
130  return NULL;
131  }
132 
133  /* Searching by name, so parse them */
134  for (i = 0; i < Directory->NumberOfNamedEntries; i++)
135  {
136  /* Get the name itself and count its length */
137  NameString = (PIMAGE_RESOURCE_DIRECTORY_STRING)(SectionStart + EntryTable[i].NameOffset);
138  NameLength = wcslen(Name);
139 
140  /* If the length matches, compare the bytes */
141  if ((NameLength == NameString->Length) &&
142  (RtlCompareMemory(NameString->NameString, Name, NameLength) == NameLength))
143  {
144  /* They both match, so this is our entry. Return it */
145  return (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(SectionStart + EntryTable[i].OffsetToDirectory);
146  }
147  }
148 
149  /* Name was not found */
150  return NULL;
151 }
152 
153 NTSTATUS
155  _In_opt_ PVOID ImageBase,
156  _In_opt_ ULONG ImageSize,
157  _In_ USHORT DirectoryId,
158  _In_ PUSHORT EntryId,
159  _In_ PWCHAR Name,
160  _Out_ PIMAGE_RESOURCE_DATA_ENTRY *DataEntryOut,
161  _Out_ PVOID* ResourceOut
162  )
163 {
165  PIMAGE_SECTION_HEADER ResourceSection;
166  PIMAGE_RESOURCE_DIRECTORY ResourceDir, RootDir;
168  PIMAGE_RESOURCE_DATA_ENTRY DataEntry;
169  PVOID Data, DataEnd, ImageEnd;
170  BOOLEAN UseFallbackDirectory;
171 
172  /* Assume nothing found */
173  UseFallbackDirectory = TRUE;
175 
176  /* Are we looking at a particular image? */
177  if (ImageBase)
178  {
179  /* Then make sure we know its size */
180  if (!ImageSize)
181  {
182  return Status;
183  }
184 
185  /* Find the resource section for it */
186  ResourceSection = BlImgFindSection(ImageBase, ImageSize);
187  if (!ResourceSection)
188  {
190  }
191 
192  /* Remember how big the image is, and find the resource directory */
193  ImageEnd = (PVOID)((ULONG_PTR)ImageBase + ImageSize);
194  RootDir = (PIMAGE_RESOURCE_DIRECTORY)((ULONG_PTR)ImageBase +
195  ResourceSection->VirtualAddress);
196  if ((PVOID)RootDir < ImageBase)
197  {
198  /* It's out of bounds, so bail out */
200  }
201 
202  /* We have a valid directory, don't use fallback for now */
203  UseFallbackDirectory = FALSE;
204  }
205  else
206  {
207  /* We are using the current library settings instead */
208  ImageBase = ResPeImageBase;
209  RootDir = ResRootDirectory;
210  ImageEnd = ResPeImageEnd;
211  }
212 
213  /* If we don't have a resource directory, there's nothing to find */
214  if (!RootDir)
215  {
216  return Status;
217  }
218 
219  /* Try two loops, once for primary, once for fallback */
220  while (1)
221  {
222  /* Find the directory first */
223  ResourceDir = (PIMAGE_RESOURCE_DIRECTORY)ResFindDirectoryEntry(RootDir,
224  &DirectoryId,
225  NULL,
226  (ULONG_PTR)RootDir);
227  if (ResourceDir)
228  {
229  break;
230  }
231 
232  /* We didn't find it -- is it time to use the fallback? */
233  if (UseFallbackDirectory)
234  {
235  /* Were were not using the fallback already? */
236  if (RootDir != ResRootDirectoryFallback)
237  {
238  /* Then attempt with the fallback instead*/
239  RootDir = ResRootDirectoryFallback;
240  ImageBase = ResPeImageBaseFallback;
241  ImageEnd = ResPeImageEndFallback;
242 
243  /* Making sure we have one... */
244  if (RootDir)
245  {
246  continue;
247  }
248  }
249  }
250 
251  /* Otherwise, return failure here */
252  return Status;
253  }
254 
255  /* Now that we are in the right directory, lookup the resource */
256  ResourceDir = (PIMAGE_RESOURCE_DIRECTORY)ResFindDirectoryEntry(ResourceDir,
257  EntryId,
258  Name,
259  (ULONG_PTR)RootDir);
260  if (!ResourceDir)
261  {
262  return Status;
263  }
264 
265  /* The entry is right after */
266  DirEntry = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(ResourceDir + 1);
267  if ((PVOID)DirEntry < (PVOID)ResourceDir)
268  {
270  }
271 
272  /* Get the data entry for it */
273  DataEntry = (PIMAGE_RESOURCE_DATA_ENTRY)((ULONG_PTR)RootDir +
274  DirEntry->OffsetToData);
275 
276  /* Check if the data entry is out of bounds */
277  if (((PVOID)DataEntry < ImageBase) || ((PVOID)DataEntry > ImageEnd))
278  {
280  }
281 
282  /* Finally read the data offset */
283  Data = (PVOID)((ULONG_PTR)ImageBase + DataEntry->OffsetToData);
284 
285  /* Check if the data is out of bounds */
286  if (((PVOID)Data < ImageBase) || ((PVOID)Data > ImageEnd))
287  {
289  }
290 
291  /* Make sure the data end isn't out of bounds either */
292  DataEnd = (PVOID)((ULONG_PTR)Data + DataEntry->Size);
293  if (((PVOID)DataEnd < ImageBase) || ((PVOID)DataEnd > ImageEnd))
294  {
296  }
297 
298  /* We finally made it. Return the entry and the raw data */
299  *DataEntryOut = DataEntry;
300  *ResourceOut = Data;
301  return STATUS_SUCCESS;
302 }
303 
304 PWCHAR
306  VOID
307  )
308 {
310  PIMAGE_RESOURCE_DATA_ENTRY HtmlDataEntry;
311  PWCHAR Stylesheet;
312 
313  /* Assume failure */
314  Stylesheet = NULL;
315 
316  /* Look for an RT_HTML resource called BOOTMGR.XSL */
318  0,
319  23,
320  NULL,
321  L"BOOTMGR.XSL",
322  &HtmlDataEntry,
323  (PVOID*)&Stylesheet);
324  if (!NT_SUCCESS(Status))
325  {
326  return Stylesheet;
327  }
328 
329  /* Check for Unicode BOM */
330  if (*Stylesheet == 0xFEFF)
331  {
332  /* Overwrite it, and NULL-terminate */
333  RtlMoveMemory(Stylesheet,
334  Stylesheet + 1,
335  HtmlDataEntry->Size - sizeof(WCHAR));
336  Stylesheet[(HtmlDataEntry->Size / sizeof(WCHAR)) - 1] = UNICODE_NULL;
337  }
338  else if (Stylesheet[(HtmlDataEntry->Size / sizeof(WCHAR)) - 1] != UNICODE_NULL)
339  {
340  /* If it's not NULL-terminated, fail */
341  Stylesheet = NULL;
342  }
343 
344  /* Return it back */
345  return Stylesheet;
346 }
347 
348 PWCHAR
350  _In_ ULONG MsgId
351  )
352 {
353  PWCHAR Message;
354  PIMAGE_RESOURCE_DIRECTORY ResourceDir;
355  PIMAGE_RESOURCE_DATA_ENTRY DataEntry;
356  PMESSAGE_RESOURCE_DATA MsgData;
357  PMESSAGE_RESOURCE_ENTRY MsgEntry;
358  ULONG i, j;
359  USHORT Id;
360  PVOID MsgEnd;
362 
363  /* Bail out if there's no resource directory */
364  Message = NULL;
365  if (!ResRootDirectory)
366  {
367  return Message;
368  }
369 
370  /* Check if we've loaded fonts already */
371  if (!ResLoadedFontFiles)
372  {
373  /* Nope, load them now */
375  if (!NT_SUCCESS(Status))
376  {
377  /* We failed to load fonts, fallback to fallback locale */
379  if (NT_SUCCESS(Status))
380  {
381  /* Try fonts now */
383  if (!NT_SUCCESS(Status))
384  {
385  /* Still didn't work -- fallback to text mode */
386  EfiPrintf(L"Font loading failed, falling back to text mode\r\n");
388  if (!NT_SUCCESS(Status))
389  {
390  /* That didn't work either. F*ck it. */
391  return Message;
392  }
393  }
394  }
395  }
396 
397  /* Now we have a resource directory, and fonts are loaded */
400  }
401 
402  /* Go look for RT_MESSAGETABLE */
403  Id = 11;
405  &Id,
406  NULL,
408  if (!ResourceDir)
409  {
410  return Message;
411  }
412 
413  /* Go look for the first directory in the table */
414  Id = 1;
415  ResourceDir = (PIMAGE_RESOURCE_DIRECTORY)ResFindDirectoryEntry(ResourceDir,
416  &Id,
417  NULL,
419  if (!ResourceDir)
420  {
421  return Message;
422  }
423 
424  /* Go look for any language entry in the table */
425  Id = -1;
426  DataEntry = (PIMAGE_RESOURCE_DATA_ENTRY)ResFindDirectoryEntry(ResourceDir,
427  &Id,
428  NULL,
430  if (!DataEntry)
431  {
432  return Message;
433  }
434 
435  /* Get the message data*/
437  DataEntry->OffsetToData -
439 
440  /* Loop through the message blocks */
441  for (j = 0; j < MsgData->NumberOfBlocks; j++)
442  {
443  /* Check if the ID is within this range */
444  if ((MsgId >= MsgData->Blocks[j].LowId) &&
445  (MsgId <= MsgData->Blocks[j].HighId))
446  {
447  /* Get the first entry */
448  MsgEntry = (PMESSAGE_RESOURCE_ENTRY)((ULONG_PTR)MsgData +
449  MsgData->Blocks[j].OffsetToEntries);
450 
451  /* Loop till we find the right one */
452  for (i = MsgId - MsgData->Blocks[j].LowId; i; --i)
453  {
454  MsgEntry = (PMESSAGE_RESOURCE_ENTRY)((ULONG_PTR)MsgEntry +
455  MsgEntry->Length);
456  }
457 
458  /* Find where this message ends */
459  MsgEnd = (PVOID)((ULONG_PTR)MsgEntry + MsgEntry->Length);
460 
461  /* Now make sure that the message is within bounds */
462  if ((MsgEnd >= (PVOID)MsgEntry) &&
463  ((PVOID)MsgEntry >= ResPeImageBase) &&
464  (MsgEnd <= ResPeImageEnd))
465  {
466  /* If so, read the text associated with it */
467  Message = (PWCHAR)MsgEntry->Text;
468  break;
469  }
470  }
471  }
472 
473  /* Return the text, if one was found */
474  return Message;
475 }
476 
477 NTSTATUS
479  VOID
480  )
481 {
483  PIMAGE_SECTION_HEADER ResourceSection;
484  PVOID ImageBase;
485  ULONG ImageSize, VRes, HRes;
486  BOOLEAN UsePrimary;
487 
488  /* Default to using fallback */
489  UsePrimary = FALSE;
490 
491  /* Initialize all globals */
492  ResMuiImageBase = 0;
493  ResMuiImageSize = 0;
502  ResRootDirectory = 0;
504  ResPeImageBase = 0;
505  ResPeImageEnd = 0;
506  ResLoadedFontFiles = 0;
507 
508  /* Check if we had allocated a locale already */
509  if (ResLocale)
510  {
511  /* Free it and reset */
513  ResLocale = 0;
514  }
515 
516  /* Get our base address and size*/
517  Status = BlGetApplicationBaseAndSize(&ImageBase, &ImageSize);
518  if (!NT_SUCCESS(Status))
519  {
520  return Status;
521  }
522 
523  /* Find our resource section */
524  ResourceSection = BlImgFindSection(ImageBase, ImageSize);
525  if (ResourceSection)
526  {
527  /* The resource section will be our fallback. Save down its details */
529  ResPeImageBaseFallback = ImageBase;
530  ResPeImageEndFallback = (PVOID)((ULONG_PTR)ImageBase + ImageSize);
533  }
534 
535  /* Get the current screen resolution and check if we're in graphics mode */
536  Status = BlDisplayGetScreenResolution(&HRes, &VRes);
537  if ((NT_SUCCESS(Status)) && ((HRes != 640) || (VRes != 200)))
538  {
539  /* We are... we should load MUI data */
540  Status = STATUS_NOT_IMPLEMENTED;//ResInitializeMuiResources();
541  if (NT_SUCCESS(Status))
542  {
543  /* And not rely on the fallback */
544  UsePrimary = TRUE;
545  }
546  }
547 
548  /* Load the locale resources */
549  return ResSelectLocale(UsePrimary);
550 }
NTSTATUS BlGetApplicationBaseAndSize(_Out_ PVOID *ImageBase, _Out_ PULONG ImageSize)
Definition: bootlib.c:424
NTSTATUS ResFindDataEntryFromImage(_In_opt_ PVOID ImageBase, _In_opt_ ULONG ImageSize, _In_ USHORT DirectoryId, _In_ PUSHORT EntryId, _In_ PWCHAR Name, _Out_ PIMAGE_RESOURCE_DATA_ENTRY *DataEntryOut, _Out_ PVOID *ResourceOut)
Definition: resource.c:154
Definition: rtltypes.h:1827
#define TRUE
Definition: types.h:120
PVOID ResPeImageBase
Definition: resource.c:15
#define STATUS_NOT_IMPLEMENTED
Definition: ntstatus.h:225
ULONG OffsetToDirectory
Definition: ntimage.h:194
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
LONG NTSTATUS
Definition: precomp.h:26
PIMAGE_RESOURCE_DIRECTORY_ENTRY ResFindDirectoryEntry(_In_ PIMAGE_RESOURCE_DIRECTORY Directory, _In_opt_ PUSHORT Id, _In_opt_ PWCHAR Name, _In_ ULONG_PTR SectionStart)
Definition: resource.c:81
PVOID ResRootDirectoryFallback
Definition: resource.c:27
uint16_t * PWCHAR
Definition: typedefs.h:54
BOOLEAN ResLoadedFontFiles
Definition: resource.c:29
NTSTATUS BlMmFreeHeap(_In_ PVOID Buffer)
Definition: heapalloc.c:663
PVOID ResPeImageBaseFallback
Definition: resource.c:25
#define _In_opt_
Definition: no_sal2.h:213
#define RtlMoveMemory(Destination, Source, Length)
Definition: typedefs.h:263
DWORD Id
struct _IMAGE_RESOURCE_DIRECTORY * PIMAGE_RESOURCE_DIRECTORY
uint32_t ULONG_PTR
Definition: typedefs.h:63
struct _MESSAGE_RESOURCE_ENTRY * PMESSAGE_RESOURCE_ENTRY
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
#define UNICODE_NULL
struct _MESSAGE_RESOURCE_DATA * PMESSAGE_RESOURCE_DATA
struct _IMAGE_RESOURCE_DIRECTORY_STRING * PIMAGE_RESOURCE_DIRECTORY_STRING
struct _IMAGE_RESOURCE_DATA_ENTRY * PIMAGE_RESOURCE_DATA_ENTRY
unsigned char BOOLEAN
smooth NULL
Definition: ftsmooth.c:416
ULONG_PTR ResRootDirectoryOffset
Definition: resource.c:23
#define _Out_
Definition: no_sal2.h:323
_In_ LPGUID _In_ PVOID Data
Definition: classpnp.h:778
Definition: pedump.c:457
void * PVOID
Definition: retypes.h:9
ULONG_PTR ResRootDirectoryFallbackOffset
Definition: resource.c:24
NTSTATUS BlpDisplayRegisterLocale(_In_ PWCHAR Locale)
Definition: display.c:176
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 GLint GLint j
Definition: glfuncs.h:250
DWORD OffsetToData
Definition: pedump.c:459
#define STATUS_NOT_FOUND
Definition: shellext.h:67
NTSTATUS ResSelectLocale(_In_ BOOLEAN Primary)
Definition: resource.c:38
UCHAR Text[ANYSIZE_ARRAY]
Definition: rtltypes.h:1831
#define STATUS_INVALID_IMAGE_FORMAT
Definition: ntstatus.h:345
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
ULONG_PTR ResMuiImageSize
Definition: resource.c:31
PWCHAR ResLocale
Definition: resource.c:33
ULONG_PTR ResRootDirectoryPrimaryOffset
Definition: resource.c:22
PVOID ResPeImageEnd
Definition: resource.c:16
CHAR Message[80]
Definition: alive.c:5
NTSTATUS BlDisplayGetScreenResolution(_Out_ PULONG HRes, _Out_ PULONG Vres)
Definition: display.c:679
static const WCHAR L[]
Definition: oid.c:1250
PWCHAR BlResourceFindMessage(_In_ ULONG MsgId)
Definition: resource.c:349
PVOID ResPeImageEndFallback
Definition: resource.c:26
PVOID ResRootDirectoryPrimary
Definition: resource.c:21
USHORT Length
Definition: rtltypes.h:1829
struct DirEntry DirEntry
Definition: storage32.h:133
Status
Definition: gdiplustypes.h:24
PVOID ResRootDirectory
Definition: resource.c:17
struct _IMAGE_RESOURCE_DIRECTORY_ENTRY * PIMAGE_RESOURCE_DIRECTORY_ENTRY
Definition: pedump.c:413
#define _In_
Definition: no_sal2.h:204
ULONG_PTR SIZE_T
Definition: typedefs.h:78
PVOID ResMuiImageBase
Definition: resource.c:30
unsigned short USHORT
Definition: pedump.c:61
MESSAGE_RESOURCE_BLOCK Blocks[ANYSIZE_ARRAY]
Definition: rtltypes.h:1844
VOID EfiPrintf(_In_ PWCHAR Format,...)
Definition: firmware.c:126
PVOID ResPeImageEndPrimary
Definition: resource.c:20
PIMAGE_SECTION_HEADER BlImgFindSection(_In_ PVOID ImageBase, _In_ ULONG ImageSize)
Definition: image.c:611
NTSTATUS BfLoadDeferredFontFiles(VOID)
Definition: font.c:99
NTSTATUS BlDisplaySetScreenResolution(VOID)
Definition: display.c:645
unsigned int ULONG
Definition: retypes.h:1
base for all directory entries
Definition: entries.h:138
return STATUS_SUCCESS
Definition: btrfs.c:2966
NTSTATUS BlpResourceInitialize(VOID)
Definition: resource.c:478
PWCHAR BlResourceFindHtml(VOID)
Definition: resource.c:305
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
unsigned short * PUSHORT
Definition: retypes.h:2
#define RtlCompareMemory(s1, s2, l)
Definition: env_spec_w32.h:465
DWORD Size
Definition: pedump.c:460
#define NT_ASSERT
Definition: rtlfuncs.h:3312
PVOID ResPeImageBasePrimary
Definition: resource.c:19