|
|
/***************************************************************************
Copyright (c) 2000 Microsoft Corporation
Module Name:
Dot4Usb.sys - Lower Filter Driver for Dot4.sys for USB connected IEEE 1284.4 devices.
File Name:
Registry.c
Abstract:
Registry access utility functions
Environment:
Kernel mode only
Notes:
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
Copyright (c) 2000 Microsoft Corporation. All Rights Reserved.
Revision History:
01/18/2000 : created
Author(s):
Doug Fritz (DFritz) Joby Lafky (JobyL)
****************************************************************************/
#include "pch.h"
/************************************************************************/ /* RegGetDword */ /************************************************************************/ //
// Routine Description:
//
// - Read a DWORD value from the registry (with caller specified
// default value) given an absolute KeyPath.
//
// - If we are unable to read the value from the registry for any
// reason (e.g., no ValueName entry exists) then return the
// default value passed into the function in *Value.
//
// Arguments:
//
// KeyPath - absolute path to registry key
// ValueName - name of the value to retrieve
// Value - in - points to a default value
// - out - points to the location for returned value
// Return Value:
//
// NTSTATUS
//
/************************************************************************/ NTSTATUS RegGetDword( IN PCWSTR KeyPath, IN PCWSTR ValueName, IN OUT PULONG Value ) { NTSTATUS status; RTL_QUERY_REGISTRY_TABLE paramTable[2];
D4UAssert( KeyPath && ValueName && Value );
RtlZeroMemory( ¶mTable[0], sizeof(paramTable) ); paramTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT; paramTable[0].Name = (PWSTR)ValueName; // cast away const
paramTable[0].EntryContext = Value; paramTable[0].DefaultType = REG_DWORD; paramTable[0].DefaultData = Value; paramTable[0].DefaultLength = sizeof(ULONG); // leave paramTable[1] as all zeros - this terminates the table
status = RtlQueryRegistryValues( RTL_REGISTRY_ABSOLUTE | RTL_REGISTRY_OPTIONAL, KeyPath, ¶mTable[0], NULL, NULL );
TR_VERBOSE(("registry::RegGetDword - status = %x , *Value = %x\n", status, *Value));
return status; }
/************************************************************************/ /* RegGetDeviceParameterDword */ /************************************************************************/ //
// Routine Description:
//
// - Read a DWORD value from the registry (with caller specified
// default value) given a PDO.
//
// - If we are unable to read the value from the registry for any
// reason (e.g., no ValueName entry exists) then return the
// default value passed into the function in *Value.
//
// Arguments:
//
// Pdo - PDO for which we want to read the device parameter
// ValueName - name of the value to retrieve
// Value - in - points to a default value
// - out - points to the location for returned value
// Return Value:
//
// NTSTATUS
//
/************************************************************************/ NTSTATUS RegGetDeviceParameterDword( IN PDEVICE_OBJECT Pdo, IN PCWSTR ValueName, IN OUT PULONG Value ) { NTSTATUS status; HANDLE hKey;
D4UAssert( Pdo && ValueName && Value );
status = IoOpenDeviceRegistryKey( Pdo, PLUGPLAY_REGKEY_DEVICE, KEY_READ, &hKey );
if( NT_SUCCESS(status) ) {
RTL_QUERY_REGISTRY_TABLE queryTable[2];
RtlZeroMemory(&queryTable, sizeof(queryTable)); queryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT; queryTable[0].Name = (PWSTR)ValueName; // cast away const
queryTable[0].EntryContext = Value; queryTable[0].DefaultType = REG_DWORD; queryTable[0].DefaultData = Value; queryTable[0].DefaultLength = sizeof(ULONG); status = RtlQueryRegistryValues( RTL_REGISTRY_HANDLE | RTL_REGISTRY_OPTIONAL, hKey, queryTable, NULL, NULL );
ZwClose(hKey);
TR_VERBOSE(("registry::RegGetDeviceParameterDword - status = %x , *Value = %x\n", status, *Value)); }
return status; }
|