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

registry.c
Go to the documentation of this file.
00001 /*
00002  * PROJECT:     ReactOS i8042 (ps/2 keyboard-mouse controller) driver
00003  * LICENSE:     GPL - See COPYING in the top level directory
00004  * FILE:        drivers/input/i8042prt/i8042prt.c
00005  * PURPOSE:     Reading the registry
00006  * PROGRAMMERS: Copyright Victor Kirhenshtein (sauros@iname.com)
00007                 Copyright Jason Filby (jasonfilby@yahoo.com)
00008                 Copyright Martijn Vernooij (o112w8r02@sneakemail.com)
00009                 Copyright 2006-2007 Hervé Poussineau (hpoussin@reactos.org)
00010  */
00011 
00012 /* INCLUDES ******************************************************************/
00013 
00014 #include "i8042prt.h"
00015 
00016 /* FUNCTIONS *****************************************************************/
00017 
00018 NTSTATUS
00019 ReadRegistryEntries(
00020     IN PUNICODE_STRING RegistryPath,
00021     OUT PI8042_SETTINGS Settings)
00022 {
00023     RTL_QUERY_REGISTRY_TABLE Parameters[17];
00024     NTSTATUS Status;
00025 
00026     ULONG DefaultKeyboardDataQueueSize = 0x64;
00027     PCWSTR DefaultKeyboardDeviceBaseName = L"KeyboardPort";
00028     ULONG DefaultMouseDataQueueSize = 0x64;
00029     ULONG DefaultMouseResolution = 3;
00030     ULONG DefaultMouseSynchIn100ns = 20000000;
00031     ULONG DefaultNumberOfButtons = 2;
00032     PCWSTR DefaultPointerDeviceBaseName = L"PointerPort";
00033     ULONG DefaultPollStatusIterations = 1;
00034     ULONG DefaultOverrideKeyboardType = 4;
00035     ULONG DefaultOverrideKeyboardSubtype = 0;
00036     ULONG DefaultPollingIterations = 12000;
00037     ULONG DefaultPollingIterationsMaximum = 12000;
00038     ULONG DefaultResendIterations = 0x3;
00039     ULONG DefaultSampleRate = 60;
00040     ULONG DefaultCrashOnCtrlScroll;
00041 
00042     /* Default value for CrashOnCtrlScroll depends if we're
00043      * running a debug build or a normal build.
00044      */
00045 #if DBG
00046     DefaultCrashOnCtrlScroll = 1;
00047 #else
00048     DefaultCrashOnCtrlScroll = 0;
00049 #endif
00050 
00051     RtlZeroMemory(Parameters, sizeof(Parameters));
00052 
00053     Parameters[0].Flags = RTL_QUERY_REGISTRY_SUBKEY;
00054     Parameters[0].Name = L"Parameters";
00055 
00056     Parameters[1].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
00057     Parameters[1].Name = L"KeyboardDataQueueSize";
00058     Parameters[1].EntryContext = &Settings->KeyboardDataQueueSize;
00059     Parameters[1].DefaultType = REG_DWORD;
00060     Parameters[1].DefaultData = &DefaultKeyboardDataQueueSize;
00061     Parameters[1].DefaultLength = sizeof(ULONG);
00062 
00063     Parameters[2].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
00064     Parameters[2].Name = L"KeyboardDeviceBaseName";
00065     Parameters[2].EntryContext = &Settings->KeyboardDeviceBaseName;
00066     Parameters[2].DefaultType = REG_SZ;
00067     Parameters[2].DefaultData = (PVOID)DefaultKeyboardDeviceBaseName;
00068     Parameters[2].DefaultLength = 0;
00069 
00070     Parameters[3].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
00071     Parameters[3].Name = L"MouseDataQueueSize";
00072     Parameters[3].EntryContext = &Settings->MouseDataQueueSize;
00073     Parameters[3].DefaultType = REG_DWORD;
00074     Parameters[3].DefaultData = &DefaultMouseDataQueueSize;
00075     Parameters[3].DefaultLength = sizeof(ULONG);
00076 
00077     Parameters[4].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
00078     Parameters[4].Name = L"MouseResolution";
00079     Parameters[4].EntryContext = &Settings->MouseResolution;
00080     Parameters[4].DefaultType = REG_DWORD;
00081     Parameters[4].DefaultData = &DefaultMouseResolution;
00082     Parameters[4].DefaultLength = sizeof(ULONG);
00083 
00084     Parameters[5].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
00085     Parameters[5].Name = L"MouseSynchIn100ns";
00086     Parameters[5].EntryContext = &Settings->MouseSynchIn100ns;
00087     Parameters[5].DefaultType = REG_DWORD;
00088     Parameters[5].DefaultData = &DefaultMouseSynchIn100ns;
00089     Parameters[5].DefaultLength = sizeof(ULONG);
00090 
00091     Parameters[6].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
00092     Parameters[6].Name = L"NumberOfButtons";
00093     Parameters[6].EntryContext = &Settings->NumberOfButtons;
00094     Parameters[6].DefaultType = REG_DWORD;
00095     Parameters[6].DefaultData = &DefaultNumberOfButtons;
00096     Parameters[6].DefaultLength = sizeof(ULONG);
00097 
00098     Parameters[7].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
00099     Parameters[7].Name = L"PointerDeviceBaseName";
00100     Parameters[7].EntryContext = &Settings->PointerDeviceBaseName;
00101     Parameters[7].DefaultType = REG_SZ;
00102     Parameters[7].DefaultData = (PVOID)DefaultPointerDeviceBaseName;
00103     Parameters[7].DefaultLength = 0;
00104 
00105     Parameters[8].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
00106     Parameters[8].Name = L"PollStatusIterations";
00107     Parameters[8].EntryContext = &Settings->PollStatusIterations;
00108     Parameters[8].DefaultType = REG_DWORD;
00109     Parameters[8].DefaultData = &DefaultPollStatusIterations;
00110     Parameters[8].DefaultLength = sizeof(ULONG);
00111 
00112     Parameters[9].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
00113     Parameters[9].Name = L"OverrideKeyboardType";
00114     Parameters[9].EntryContext = &Settings->OverrideKeyboardType;
00115     Parameters[9].DefaultType = REG_DWORD;
00116     Parameters[9].DefaultData = &DefaultOverrideKeyboardType;
00117     Parameters[9].DefaultLength = sizeof(ULONG);
00118 
00119     Parameters[10].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
00120     Parameters[10].Name = L"OverrideKeyboardSubtype";
00121     Parameters[10].EntryContext = &Settings->OverrideKeyboardSubtype;
00122     Parameters[10].DefaultType = REG_DWORD;
00123     Parameters[10].DefaultData = &DefaultOverrideKeyboardSubtype;
00124     Parameters[10].DefaultLength = sizeof(ULONG);
00125 
00126     Parameters[11].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
00127     Parameters[11].Name = L"PollingIterations";
00128     Parameters[11].EntryContext = &Settings->PollingIterations;
00129     Parameters[11].DefaultType = REG_DWORD;
00130     Parameters[11].DefaultData = &DefaultPollingIterations;
00131     Parameters[11].DefaultLength = sizeof(ULONG);
00132 
00133     Parameters[12].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
00134     Parameters[12].Name = L"PollingIterationsMaximum";
00135     Parameters[12].EntryContext = &Settings->PollingIterationsMaximum;
00136     Parameters[12].DefaultType = REG_DWORD;
00137     Parameters[12].DefaultData = &DefaultPollingIterationsMaximum;
00138     Parameters[12].DefaultLength = sizeof(ULONG);
00139 
00140     Parameters[13].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
00141     Parameters[13].Name = L"ResendIterations";
00142     Parameters[13].EntryContext = &Settings->ResendIterations;
00143     Parameters[13].DefaultType = REG_DWORD;
00144     Parameters[13].DefaultData = &DefaultResendIterations;
00145     Parameters[13].DefaultLength = sizeof(ULONG);
00146 
00147     Parameters[14].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
00148     Parameters[14].Name = L"SampleRate";
00149     Parameters[14].EntryContext = &Settings->SampleRate;
00150     Parameters[14].DefaultType = REG_DWORD;
00151     Parameters[14].DefaultData = &DefaultSampleRate;
00152     Parameters[14].DefaultLength = sizeof(ULONG);
00153 
00154     Parameters[15].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
00155     Parameters[15].Name = L"CrashOnCtrlScroll";
00156     Parameters[15].EntryContext = &Settings->CrashOnCtrlScroll;
00157     Parameters[15].DefaultType = REG_DWORD;
00158     Parameters[15].DefaultData = &DefaultCrashOnCtrlScroll;
00159     Parameters[15].DefaultLength = sizeof(ULONG);
00160 
00161     Status = RtlQueryRegistryValues(
00162         RTL_REGISTRY_ABSOLUTE,
00163         RegistryPath->Buffer,
00164         Parameters,
00165         NULL,
00166         NULL);
00167 
00168     if (NT_SUCCESS(Status))
00169     {
00170         /* Check values */
00171         if (Settings->KeyboardDataQueueSize < 1)
00172             Settings->KeyboardDataQueueSize = DefaultKeyboardDataQueueSize;
00173         if (Settings->MouseDataQueueSize < 1)
00174             Settings->MouseDataQueueSize = DefaultMouseDataQueueSize;
00175         if (Settings->NumberOfButtons < 1)
00176             Settings->NumberOfButtons = DefaultNumberOfButtons;
00177         if (Settings->PollingIterations < 0x400)
00178             Settings->PollingIterations = DefaultPollingIterations;
00179         if (Settings->PollingIterationsMaximum < 0x400)
00180             Settings->PollingIterationsMaximum = DefaultPollingIterationsMaximum;
00181         if (Settings->ResendIterations < 1)
00182             Settings->ResendIterations = DefaultResendIterations;
00183     }
00184     else if (Status == STATUS_OBJECT_NAME_NOT_FOUND)
00185     {
00186         /* Registry path doesn't exist. Set defaults */
00187         Settings->KeyboardDataQueueSize = DefaultKeyboardDataQueueSize;
00188         Settings->MouseDataQueueSize = DefaultMouseDataQueueSize;
00189         Settings->MouseResolution = DefaultMouseResolution;
00190         Settings->MouseSynchIn100ns = DefaultMouseSynchIn100ns;
00191         Settings->NumberOfButtons = DefaultNumberOfButtons;
00192         Settings->PollStatusIterations = DefaultPollStatusIterations;
00193         Settings->OverrideKeyboardType = DefaultOverrideKeyboardType;
00194         Settings->OverrideKeyboardSubtype = DefaultOverrideKeyboardSubtype;
00195         Settings->PollingIterations = DefaultPollingIterations;
00196         Settings->PollingIterationsMaximum = DefaultPollingIterationsMaximum;
00197         Settings->ResendIterations = DefaultResendIterations;
00198         Settings->SampleRate = DefaultSampleRate;
00199         Settings->CrashOnCtrlScroll = DefaultCrashOnCtrlScroll;
00200         if (!RtlCreateUnicodeString(&Settings->KeyboardDeviceBaseName, DefaultKeyboardDeviceBaseName)
00201          || !RtlCreateUnicodeString(&Settings->PointerDeviceBaseName, DefaultPointerDeviceBaseName))
00202         {
00203             WARN_(I8042PRT, "RtlCreateUnicodeString() failed\n");
00204             Status = STATUS_NO_MEMORY;
00205         }
00206         else
00207         {
00208             Status = STATUS_SUCCESS;
00209         }
00210     }
00211 
00212     if (NT_SUCCESS(Status))
00213     {
00214         INFO_(I8042PRT, "KeyboardDataQueueSize : 0x%lx\n", Settings->KeyboardDataQueueSize);
00215         INFO_(I8042PRT, "KeyboardDeviceBaseName : %wZ\n", &Settings->KeyboardDeviceBaseName);
00216         INFO_(I8042PRT, "MouseDataQueueSize : 0x%lx\n", Settings->MouseDataQueueSize);
00217         INFO_(I8042PRT, "MouseResolution : 0x%lx\n", Settings->MouseResolution);
00218         INFO_(I8042PRT, "MouseSynchIn100ns : %lu\n", Settings->MouseSynchIn100ns);
00219         INFO_(I8042PRT, "NumberOfButtons : 0x%lx\n", Settings->NumberOfButtons);
00220         INFO_(I8042PRT, "PointerDeviceBaseName : %wZ\n", &Settings->PointerDeviceBaseName);
00221         INFO_(I8042PRT, "PollStatusIterations : 0x%lx\n", Settings->PollStatusIterations);
00222         INFO_(I8042PRT, "OverrideKeyboardType : 0x%lx\n", Settings->OverrideKeyboardType);
00223         INFO_(I8042PRT, "OverrideKeyboardSubtype : 0x%lx\n", Settings->OverrideKeyboardSubtype);
00224         INFO_(I8042PRT, "PollingIterations : 0x%lx\n", Settings->PollingIterations);
00225         INFO_(I8042PRT, "PollingIterationsMaximum : %lu\n", Settings->PollingIterationsMaximum);
00226         INFO_(I8042PRT, "ResendIterations : 0x%lx\n", Settings->ResendIterations);
00227         INFO_(I8042PRT, "SampleRate : %lu\n", Settings->SampleRate);
00228     }
00229 
00230     return Status;
00231 }

Generated on Sun May 27 2012 04:17:08 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.