168 lines
5.5 KiB
C
168 lines
5.5 KiB
C
/***************************************************************************
|
||
|
||
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;
|
||
}
|