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;
|
|||
|
}
|