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

NTSTATUS ReadRegistryEntries ( IN PUNICODE_STRING  RegistryPath,
OUT PI8042_SETTINGS  Settings 
)

Definition at line 19 of file registry.c.

Referenced by DriverEntry().

{
    RTL_QUERY_REGISTRY_TABLE Parameters[17];
    NTSTATUS Status;

    ULONG DefaultKeyboardDataQueueSize = 0x64;
    PCWSTR DefaultKeyboardDeviceBaseName = L"KeyboardPort";
    ULONG DefaultMouseDataQueueSize = 0x64;
    ULONG DefaultMouseResolution = 3;
    ULONG DefaultMouseSynchIn100ns = 20000000;
    ULONG DefaultNumberOfButtons = 2;
    PCWSTR DefaultPointerDeviceBaseName = L"PointerPort";
    ULONG DefaultPollStatusIterations = 1;
    ULONG DefaultOverrideKeyboardType = 4;
    ULONG DefaultOverrideKeyboardSubtype = 0;
    ULONG DefaultPollingIterations = 12000;
    ULONG DefaultPollingIterationsMaximum = 12000;
    ULONG DefaultResendIterations = 0x3;
    ULONG DefaultSampleRate = 60;
    ULONG DefaultCrashOnCtrlScroll;

    /* Default value for CrashOnCtrlScroll depends if we're
     * running a debug build or a normal build.
     */
#if DBG
    DefaultCrashOnCtrlScroll = 1;
#else
    DefaultCrashOnCtrlScroll = 0;
#endif

    RtlZeroMemory(Parameters, sizeof(Parameters));

    Parameters[0].Flags = RTL_QUERY_REGISTRY_SUBKEY;
    Parameters[0].Name = L"Parameters";

    Parameters[1].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
    Parameters[1].Name = L"KeyboardDataQueueSize";
    Parameters[1].EntryContext = &Settings->KeyboardDataQueueSize;
    Parameters[1].DefaultType = REG_DWORD;
    Parameters[1].DefaultData = &DefaultKeyboardDataQueueSize;
    Parameters[1].DefaultLength = sizeof(ULONG);

    Parameters[2].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
    Parameters[2].Name = L"KeyboardDeviceBaseName";
    Parameters[2].EntryContext = &Settings->KeyboardDeviceBaseName;
    Parameters[2].DefaultType = REG_SZ;
    Parameters[2].DefaultData = (PVOID)DefaultKeyboardDeviceBaseName;
    Parameters[2].DefaultLength = 0;

    Parameters[3].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
    Parameters[3].Name = L"MouseDataQueueSize";
    Parameters[3].EntryContext = &Settings->MouseDataQueueSize;
    Parameters[3].DefaultType = REG_DWORD;
    Parameters[3].DefaultData = &DefaultMouseDataQueueSize;
    Parameters[3].DefaultLength = sizeof(ULONG);

    Parameters[4].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
    Parameters[4].Name = L"MouseResolution";
    Parameters[4].EntryContext = &Settings->MouseResolution;
    Parameters[4].DefaultType = REG_DWORD;
    Parameters[4].DefaultData = &DefaultMouseResolution;
    Parameters[4].DefaultLength = sizeof(ULONG);

    Parameters[5].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
    Parameters[5].Name = L"MouseSynchIn100ns";
    Parameters[5].EntryContext = &Settings->MouseSynchIn100ns;
    Parameters[5].DefaultType = REG_DWORD;
    Parameters[5].DefaultData = &DefaultMouseSynchIn100ns;
    Parameters[5].DefaultLength = sizeof(ULONG);

    Parameters[6].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
    Parameters[6].Name = L"NumberOfButtons";
    Parameters[6].EntryContext = &Settings->NumberOfButtons;
    Parameters[6].DefaultType = REG_DWORD;
    Parameters[6].DefaultData = &DefaultNumberOfButtons;
    Parameters[6].DefaultLength = sizeof(ULONG);

    Parameters[7].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
    Parameters[7].Name = L"PointerDeviceBaseName";
    Parameters[7].EntryContext = &Settings->PointerDeviceBaseName;
    Parameters[7].DefaultType = REG_SZ;
    Parameters[7].DefaultData = (PVOID)DefaultPointerDeviceBaseName;
    Parameters[7].DefaultLength = 0;

    Parameters[8].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
    Parameters[8].Name = L"PollStatusIterations";
    Parameters[8].EntryContext = &Settings->PollStatusIterations;
    Parameters[8].DefaultType = REG_DWORD;
    Parameters[8].DefaultData = &DefaultPollStatusIterations;
    Parameters[8].DefaultLength = sizeof(ULONG);

    Parameters[9].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
    Parameters[9].Name = L"OverrideKeyboardType";
    Parameters[9].EntryContext = &Settings->OverrideKeyboardType;
    Parameters[9].DefaultType = REG_DWORD;
    Parameters[9].DefaultData = &DefaultOverrideKeyboardType;
    Parameters[9].DefaultLength = sizeof(ULONG);

    Parameters[10].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
    Parameters[10].Name = L"OverrideKeyboardSubtype";
    Parameters[10].EntryContext = &Settings->OverrideKeyboardSubtype;
    Parameters[10].DefaultType = REG_DWORD;
    Parameters[10].DefaultData = &DefaultOverrideKeyboardSubtype;
    Parameters[10].DefaultLength = sizeof(ULONG);

    Parameters[11].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
    Parameters[11].Name = L"PollingIterations";
    Parameters[11].EntryContext = &Settings->PollingIterations;
    Parameters[11].DefaultType = REG_DWORD;
    Parameters[11].DefaultData = &DefaultPollingIterations;
    Parameters[11].DefaultLength = sizeof(ULONG);

    Parameters[12].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
    Parameters[12].Name = L"PollingIterationsMaximum";
    Parameters[12].EntryContext = &Settings->PollingIterationsMaximum;
    Parameters[12].DefaultType = REG_DWORD;
    Parameters[12].DefaultData = &DefaultPollingIterationsMaximum;
    Parameters[12].DefaultLength = sizeof(ULONG);

    Parameters[13].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
    Parameters[13].Name = L"ResendIterations";
    Parameters[13].EntryContext = &Settings->ResendIterations;
    Parameters[13].DefaultType = REG_DWORD;
    Parameters[13].DefaultData = &DefaultResendIterations;
    Parameters[13].DefaultLength = sizeof(ULONG);

    Parameters[14].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
    Parameters[14].Name = L"SampleRate";
    Parameters[14].EntryContext = &Settings->SampleRate;
    Parameters[14].DefaultType = REG_DWORD;
    Parameters[14].DefaultData = &DefaultSampleRate;
    Parameters[14].DefaultLength = sizeof(ULONG);

    Parameters[15].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL;
    Parameters[15].Name = L"CrashOnCtrlScroll";
    Parameters[15].EntryContext = &Settings->CrashOnCtrlScroll;
    Parameters[15].DefaultType = REG_DWORD;
    Parameters[15].DefaultData = &DefaultCrashOnCtrlScroll;
    Parameters[15].DefaultLength = sizeof(ULONG);

    Status = RtlQueryRegistryValues(
        RTL_REGISTRY_ABSOLUTE,
        RegistryPath->Buffer,
        Parameters,
        NULL,
        NULL);

    if (NT_SUCCESS(Status))
    {
        /* Check values */
        if (Settings->KeyboardDataQueueSize < 1)
            Settings->KeyboardDataQueueSize = DefaultKeyboardDataQueueSize;
        if (Settings->MouseDataQueueSize < 1)
            Settings->MouseDataQueueSize = DefaultMouseDataQueueSize;
        if (Settings->NumberOfButtons < 1)
            Settings->NumberOfButtons = DefaultNumberOfButtons;
        if (Settings->PollingIterations < 0x400)
            Settings->PollingIterations = DefaultPollingIterations;
        if (Settings->PollingIterationsMaximum < 0x400)
            Settings->PollingIterationsMaximum = DefaultPollingIterationsMaximum;
        if (Settings->ResendIterations < 1)
            Settings->ResendIterations = DefaultResendIterations;
    }
    else if (Status == STATUS_OBJECT_NAME_NOT_FOUND)
    {
        /* Registry path doesn't exist. Set defaults */
        Settings->KeyboardDataQueueSize = DefaultKeyboardDataQueueSize;
        Settings->MouseDataQueueSize = DefaultMouseDataQueueSize;
        Settings->MouseResolution = DefaultMouseResolution;
        Settings->MouseSynchIn100ns = DefaultMouseSynchIn100ns;
        Settings->NumberOfButtons = DefaultNumberOfButtons;
        Settings->PollStatusIterations = DefaultPollStatusIterations;
        Settings->OverrideKeyboardType = DefaultOverrideKeyboardType;
        Settings->OverrideKeyboardSubtype = DefaultOverrideKeyboardSubtype;
        Settings->PollingIterations = DefaultPollingIterations;
        Settings->PollingIterationsMaximum = DefaultPollingIterationsMaximum;
        Settings->ResendIterations = DefaultResendIterations;
        Settings->SampleRate = DefaultSampleRate;
        Settings->CrashOnCtrlScroll = DefaultCrashOnCtrlScroll;
        if (!RtlCreateUnicodeString(&Settings->KeyboardDeviceBaseName, DefaultKeyboardDeviceBaseName)
         || !RtlCreateUnicodeString(&Settings->PointerDeviceBaseName, DefaultPointerDeviceBaseName))
        {
            WARN_(I8042PRT, "RtlCreateUnicodeString() failed\n");
            Status = STATUS_NO_MEMORY;
        }
        else
        {
            Status = STATUS_SUCCESS;
        }
    }

    if (NT_SUCCESS(Status))
    {
        INFO_(I8042PRT, "KeyboardDataQueueSize : 0x%lx\n", Settings->KeyboardDataQueueSize);
        INFO_(I8042PRT, "KeyboardDeviceBaseName : %wZ\n", &Settings->KeyboardDeviceBaseName);
        INFO_(I8042PRT, "MouseDataQueueSize : 0x%lx\n", Settings->MouseDataQueueSize);
        INFO_(I8042PRT, "MouseResolution : 0x%lx\n", Settings->MouseResolution);
        INFO_(I8042PRT, "MouseSynchIn100ns : %lu\n", Settings->MouseSynchIn100ns);
        INFO_(I8042PRT, "NumberOfButtons : 0x%lx\n", Settings->NumberOfButtons);
        INFO_(I8042PRT, "PointerDeviceBaseName : %wZ\n", &Settings->PointerDeviceBaseName);
        INFO_(I8042PRT, "PollStatusIterations : 0x%lx\n", Settings->PollStatusIterations);
        INFO_(I8042PRT, "OverrideKeyboardType : 0x%lx\n", Settings->OverrideKeyboardType);
        INFO_(I8042PRT, "OverrideKeyboardSubtype : 0x%lx\n", Settings->OverrideKeyboardSubtype);
        INFO_(I8042PRT, "PollingIterations : 0x%lx\n", Settings->PollingIterations);
        INFO_(I8042PRT, "PollingIterationsMaximum : %lu\n", Settings->PollingIterationsMaximum);
        INFO_(I8042PRT, "ResendIterations : 0x%lx\n", Settings->ResendIterations);
        INFO_(I8042PRT, "SampleRate : %lu\n", Settings->SampleRate);
    }

    return Status;
}

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