mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
5.5 KiB
167 lines
5.5 KiB
/***************************************************************************
|
|
|
|
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;
|
|
}
|