ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

message.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.