Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenregistry.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
1.7.6.1
|