1 /* $Id: message.c,v 1.1 2001/06/01 17:13:24 ekohl Exp $
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * PURPOSE: Message table functions
6 * FILE: ntoskrnl/rtl/message.c
7 * PROGRAMER: Eric Kohl <ekohl@zr-online.de>
12 /* INCLUDES *****************************************************************/
14 #include <ddk/ntddk.h>
17 #include <internal/debug.h>
20 /* FUNCTIONS *****************************************************************/
23 RtlFindMessage(PVOID BaseAddress
,
27 PRTL_MESSAGE_RESOURCE_ENTRY
*MessageResourceEntry
)
29 LDR_RESOURCE_INFO ResourceInfo
;
30 PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry
;
31 PRTL_MESSAGE_RESOURCE_DATA MessageTable
;
33 ULONG EntryOffset
, IdOffset
;
34 PRTL_MESSAGE_RESOURCE_ENTRY MessageEntry
;
38 DPRINT("RtlFindMessage()\n");
40 ResourceInfo
.Type
= Type
;
41 ResourceInfo
.Name
= 1;
42 ResourceInfo
.Language
= Language
;
44 Status
= LdrFindResource_U(BaseAddress
,
48 if (!NT_SUCCESS(Status
))
53 DPRINT("ResourceDataEntry: %p\n", ResourceDataEntry
);
55 Status
= LdrAccessResource(BaseAddress
,
57 (PVOID
*)&MessageTable
,
59 if (!NT_SUCCESS(Status
))
64 DPRINT("MessageTable: %p\n", MessageTable
);
66 DPRINT("NumberOfBlocks %lu\n", MessageTable
->NumberOfBlocks
);
67 for (i
= 0; i
< MessageTable
->NumberOfBlocks
; i
++)
69 DPRINT("LoId 0x%08lx HiId 0x%08lx Offset 0x%08lx\n",
70 MessageTable
->Blocks
[i
].LowId
,
71 MessageTable
->Blocks
[i
].HighId
,
72 MessageTable
->Blocks
[i
].OffsetToEntries
);
75 for (i
= 0; i
< MessageTable
->NumberOfBlocks
; i
++)
77 if ((MessageId
>= MessageTable
->Blocks
[i
].LowId
) &&
78 (MessageId
<= MessageTable
->Blocks
[i
].HighId
))
80 EntryOffset
= MessageTable
->Blocks
[i
].OffsetToEntries
;
81 IdOffset
= MessageId
- MessageTable
->Blocks
[i
].LowId
;
85 if (MessageId
< MessageTable
->Blocks
[i
].LowId
)
87 return STATUS_MESSAGE_NOT_FOUND
;
91 MessageEntry
= (PRTL_MESSAGE_RESOURCE_ENTRY
)((ULONG
)MessageTable
+ MessageTable
->Blocks
[i
].OffsetToEntries
);
93 DPRINT("EntryOffset 0x%08lx\n", EntryOffset
);
94 DPRINT("IdOffset 0x%08lx\n", IdOffset
);
96 DPRINT("MessageEntry: %p\n", MessageEntry
);
97 for (i
= 0; i
< IdOffset
; i
++)
99 MessageEntry
= (PRTL_MESSAGE_RESOURCE_ENTRY
)(MessageEntry
+ (ULONG
)MessageEntry
->Length
);
102 if (MessageEntry
->Flags
== 0)
104 DPRINT("AnsiText: %s\n", MessageEntry
->Text
);
108 DPRINT("UnicodeText: %S\n", (PWSTR
)MessageEntry
->Text
);
111 if (MessageResourceEntry
!= NULL
);
113 *MessageResourceEntry
= MessageEntry
;
116 return(STATUS_SUCCESS
);