Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenmessage.c
Go to the documentation of this file.
00001 /* COPYRIGHT: See COPYING in the top level directory 00002 * PROJECT: ReactOS system libraries 00003 * FILE: lib/rtl/message.c 00004 * PURPOSE: Message table functions 00005 * PROGRAMMERS: Eric Kohl 00006 */ 00007 00008 /* INCLUDES *****************************************************************/ 00009 00010 #include <rtl.h> 00011 00012 #define NDEBUG 00013 #include <debug.h> 00014 00015 /* FUNCTIONS *****************************************************************/ 00016 00017 /* 00018 * @implemented 00019 */ 00020 NTSTATUS 00021 NTAPI 00022 RtlFindMessage( 00023 PVOID BaseAddress, 00024 ULONG Type, 00025 ULONG Language, 00026 ULONG MessageId, 00027 PMESSAGE_RESOURCE_ENTRY *MessageResourceEntry) 00028 { 00029 LDR_RESOURCE_INFO ResourceInfo; 00030 PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry; 00031 PMESSAGE_RESOURCE_DATA MessageTable; 00032 NTSTATUS Status; 00033 ULONG EntryOffset = 0, IdOffset = 0; 00034 PMESSAGE_RESOURCE_ENTRY MessageEntry; 00035 ULONG i; 00036 00037 DPRINT("RtlFindMessage()\n"); 00038 00039 ResourceInfo.Type = Type; 00040 ResourceInfo.Name = 1; 00041 ResourceInfo.Language = Language; 00042 00043 Status = LdrFindResource_U(BaseAddress, 00044 &ResourceInfo, 00045 RESOURCE_DATA_LEVEL, 00046 &ResourceDataEntry); 00047 if (!NT_SUCCESS(Status)) 00048 { 00049 return Status; 00050 } 00051 00052 DPRINT("ResourceDataEntry: %p\n", ResourceDataEntry); 00053 00054 Status = LdrAccessResource(BaseAddress, 00055 ResourceDataEntry, 00056 (PVOID*)&MessageTable, 00057 NULL); 00058 if (!NT_SUCCESS(Status)) 00059 { 00060 return Status; 00061 } 00062 00063 DPRINT("MessageTable: %p\n", MessageTable); 00064 00065 DPRINT("NumberOfBlocks %lu\n", MessageTable->NumberOfBlocks); 00066 for (i = 0; i < MessageTable->NumberOfBlocks; i++) 00067 { 00068 DPRINT("LoId 0x%08lx HiId 0x%08lx Offset 0x%08lx\n", 00069 MessageTable->Blocks[i].LowId, 00070 MessageTable->Blocks[i].HighId, 00071 MessageTable->Blocks[i].OffsetToEntries); 00072 } 00073 00074 for (i = 0; i < MessageTable->NumberOfBlocks; i++) 00075 { 00076 if ((MessageId >= MessageTable->Blocks[i].LowId) && 00077 (MessageId <= MessageTable->Blocks[i].HighId)) 00078 { 00079 EntryOffset = MessageTable->Blocks[i].OffsetToEntries; 00080 IdOffset = MessageId - MessageTable->Blocks[i].LowId; 00081 break; 00082 } 00083 00084 if (MessageId < MessageTable->Blocks[i].LowId) 00085 { 00086 return STATUS_MESSAGE_NOT_FOUND; 00087 } 00088 } 00089 00090 if (MessageTable->NumberOfBlocks <= i) 00091 { 00092 return STATUS_MESSAGE_NOT_FOUND; 00093 } 00094 00095 MessageEntry = (PMESSAGE_RESOURCE_ENTRY) 00096 ((PUCHAR)MessageTable + MessageTable->Blocks[i].OffsetToEntries); 00097 00098 DPRINT("EntryOffset 0x%08lx\n", EntryOffset); 00099 DPRINT("IdOffset 0x%08lx\n", IdOffset); 00100 00101 DPRINT("MessageEntry: %p\n", MessageEntry); 00102 for (i = 0; i < IdOffset; i++) 00103 { 00104 MessageEntry = (PMESSAGE_RESOURCE_ENTRY) 00105 ((PUCHAR)MessageEntry + (ULONG)MessageEntry->Length); 00106 } 00107 00108 if (MessageEntry->Flags == 0) 00109 { 00110 DPRINT("AnsiText: %s\n", MessageEntry->Text); 00111 } 00112 else 00113 { 00114 DPRINT("UnicodeText: %S\n", (PWSTR)MessageEntry->Text); 00115 } 00116 00117 if (MessageResourceEntry != NULL) 00118 { 00119 *MessageResourceEntry = MessageEntry; 00120 } 00121 00122 return STATUS_SUCCESS; 00123 } 00124 00125 00126 /********************************************************************** 00127 * RtlFormatMessage (NTDLL.@) 00128 * 00129 * Formats a message (similar to sprintf). 00130 * 00131 * PARAMS 00132 * Message [I] Message to format. 00133 * MaxWidth [I] Maximum width in characters of each output line. 00134 * IgnoreInserts [I] Whether to copy the message without processing inserts. 00135 * Ansi [I] Whether Arguments may have ANSI strings. 00136 * ArgumentsIsArray [I] Whether Arguments is actually an array rather than a va_list *. 00137 * Arguments [I] 00138 * Buffer [O] Buffer to store processed message in. 00139 * BufferSize [I] Size of Buffer (in bytes?). 00140 * 00141 * RETURNS 00142 * NTSTATUS code. 00143 * 00144 * @unimplemented 00145 */ 00146 NTSTATUS 00147 NTAPI 00148 RtlFormatMessage( 00149 PWSTR Message, 00150 UCHAR MaxWidth, 00151 BOOLEAN IgnoreInserts, 00152 BOOLEAN Ansi, 00153 BOOLEAN ArgumentIsArray, 00154 va_list *Arguments, 00155 PWSTR Buffer, 00156 ULONG BufferSize) 00157 { 00158 DPRINT1("RtlFormatMessage(%S, %u, %s, %s, %s, %s, %p, %lu)\n", 00159 Message, MaxWidth, IgnoreInserts ? "TRUE" : "FALSE", Ansi ? "TRUE" : "FALSE", 00160 ArgumentIsArray ? "TRUE" : "FALSE", (PSTR)Arguments, Buffer, BufferSize); 00161 00162 UNIMPLEMENTED; 00163 return STATUS_NOT_IMPLEMENTED; 00164 } 00165 00166 /* EOF */ Generated on Mon May 28 2012 04:22:53 for ReactOS by
1.7.6.1
|