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.
197 lines
5.2 KiB
197 lines
5.2 KiB
/*++
|
|
|
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
picddb.h
|
|
|
|
Abstract:
|
|
|
|
This header contains private information to implement the Plug and Play
|
|
Critical Device Database (CDDB). This file is meant to be included only by
|
|
ppcddb.c.
|
|
|
|
Author:
|
|
|
|
James G. Cavalaris (jamesca) 01-Nov-2001
|
|
|
|
Environment:
|
|
|
|
Kernel mode.
|
|
|
|
Revision History:
|
|
|
|
29-Jul-1997 Jim Cavalaris (t-jcaval)
|
|
|
|
Creation and initial implementation.
|
|
|
|
01-Nov-2001 Jim Cavalaris (jamesca)
|
|
|
|
Added routines for device pre-installation setup.
|
|
|
|
--*/
|
|
|
|
|
|
|
|
//
|
|
// Current PNP_LOCATION_INTERFACE version.
|
|
//
|
|
#define PNP_LOCATION_INTERFACE_VERSION 0x1
|
|
|
|
|
|
//
|
|
// Optional CDDB device location path separator string
|
|
//
|
|
// i.e. TEXT("#") --> PCIROOT(0)#PCI(1100)
|
|
// TEXT("") --> PCIROOT(0)PCI(1100)
|
|
// TEXT("FOO") --> PCIROOT(0)FOOPCI(1100)
|
|
//
|
|
// NOTE: The resulting path will be used as a single registry key, so NEVER use
|
|
// the NT path separator string RtlNtPathSeperatorString (L"\\"), or any string
|
|
// that contains a path separator character (verify with RtlIsNtPathSeparator).
|
|
//
|
|
#define _CRITICAL_DEVICE_LOCATION_PATH_SEPARATOR_STRING TEXT("#")
|
|
|
|
|
|
//
|
|
// Default device pre-install database root registry key path
|
|
//
|
|
#define _REGSTR_PATH_DEFAULT_PREINSTALL_DATABASE_ROOT TEXT("System\\CurrentControlSet\\Control\\CriticalPreInstallDatabase")
|
|
|
|
|
|
//
|
|
// Location to device path entries, relative to pre-install database root.
|
|
//
|
|
// i.e. <PreInstallDatabaseRoot>\\<DevicePaths>
|
|
//
|
|
#define _REGSTR_KEY_DEVICEPATHS TEXT("DevicePaths")
|
|
|
|
|
|
//
|
|
// Location of the hardware and software settings that are to be applied to a
|
|
// device. These locations are relative to the entry in the pre-install
|
|
// database matching the device's location path.
|
|
//
|
|
// i.e. <PreInstallDatabaseRoot>\\<DevicePaths>\\<MatchingDevicePath>\\<HardwareKey>
|
|
// <PreInstallDatabaseRoot>\\<DevicePaths>\\<MatchingDevicePath>\\<SoftwareKey>
|
|
//
|
|
#define _REGSTR_KEY_PREINSTALL_HARDWARE TEXT("HardwareKey")
|
|
#define _REGSTR_KEY_PREINSTALL_SOFTWARE TEXT("SoftwareKey")
|
|
|
|
|
|
//
|
|
// If present, the following value in the root of a critical device database
|
|
// entry key, or in the root of a device path entry key should be copied to the
|
|
// corresponding device instance key for devices that we have successfully set a
|
|
// service for.
|
|
//
|
|
// i.e. <CriticalDeviceDatabase>\\<MungedDeviceId>\\
|
|
// PreservePreInstall : REG_DWORD : 0x1
|
|
//
|
|
// <CriticalDeviceDatabase>\\<MungedDeviceId>\\<DevicePaths>\\<MatchingDevicePath>\\
|
|
// PreservePreInstall : REG_DWORD : 0x1
|
|
//
|
|
// When the user-mode plug and play manager has been directed to preserve
|
|
// pre-install settings, this value causes it to clear the
|
|
// CONFIGFLAG_FINISH_INSTALL ConfigFlag on any such device, and consider
|
|
// installation complete (i.e. not attempt re-installation).
|
|
//
|
|
//
|
|
// REGSTR_VAL_PRESERVE_PREINSTALL from \NT\public\internal\base\inc\pnpmgr.h
|
|
//
|
|
|
|
|
|
//
|
|
// Prototype verification callback routine for PiCriticalOpenFirstMatchingSubKey
|
|
//
|
|
|
|
typedef
|
|
BOOLEAN
|
|
(*PCRITICAL_MATCH_CALLBACK)(
|
|
IN HANDLE MatchingKeyHandle
|
|
);
|
|
|
|
|
|
//
|
|
// Internal Critical Device Database function prototypes
|
|
//
|
|
|
|
NTSTATUS
|
|
PiCriticalOpenCriticalDeviceKey(
|
|
IN PDEVICE_NODE DeviceNode,
|
|
IN HANDLE CriticalDeviceDatabaseRootHandle OPTIONAL,
|
|
OUT PHANDLE CriticalDeviceEntryHandle
|
|
);
|
|
|
|
NTSTATUS
|
|
PiCriticalCopyCriticalDeviceProperties(
|
|
IN HANDLE DeviceInstanceHandle,
|
|
IN HANDLE CriticalDeviceEntryHandle
|
|
);
|
|
|
|
NTSTATUS
|
|
PiCriticalOpenFirstMatchingSubKey(
|
|
IN PWCHAR MultiSzList,
|
|
IN HANDLE RootHandle,
|
|
IN ACCESS_MASK DesiredAccess,
|
|
IN PCRITICAL_MATCH_CALLBACK MatchingSubkeyCallback OPTIONAL,
|
|
OUT PHANDLE MatchingKeyHandle
|
|
);
|
|
|
|
BOOLEAN
|
|
PiCriticalCallbackVerifyCriticalEntry(
|
|
IN HANDLE CriticalDeviceEntryHandle
|
|
);
|
|
|
|
|
|
//
|
|
// Internal Pre-installation function prototypes
|
|
//
|
|
|
|
NTSTATUS
|
|
PiCriticalPreInstallDevice(
|
|
IN PDEVICE_NODE DeviceNode,
|
|
IN HANDLE PreInstallDatabaseRootHandle OPTIONAL
|
|
);
|
|
|
|
NTSTATUS
|
|
PiCriticalOpenDevicePreInstallKey(
|
|
IN PDEVICE_NODE DeviceNode,
|
|
IN HANDLE PreInstallRootHandle OPTIONAL,
|
|
OUT PHANDLE PreInstallHandle
|
|
);
|
|
|
|
|
|
//
|
|
// General utility routines
|
|
//
|
|
|
|
NTSTATUS
|
|
PiQueryInterface(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN CONST GUID * InterfaceGuid,
|
|
IN USHORT InterfaceVersion,
|
|
IN USHORT InterfaceSize,
|
|
OUT PINTERFACE Interface
|
|
);
|
|
|
|
NTSTATUS
|
|
PiCopyKeyRecursive(
|
|
IN HANDLE SourceKeyRootHandle,
|
|
IN HANDLE TargetKeyRootHandle,
|
|
IN PWSTR SourceKeyPath OPTIONAL,
|
|
IN PWSTR TargetKeyPath OPTIONAL,
|
|
IN BOOLEAN CopyAlways,
|
|
IN BOOLEAN ApplyACLsAlways
|
|
);
|
|
|
|
NTSTATUS
|
|
PiCriticalQueryRegistryValueCallback(
|
|
IN PWSTR ValueName,
|
|
IN ULONG ValueType,
|
|
IN PVOID ValueData,
|
|
IN ULONG ValueLength,
|
|
IN PVOID Context,
|
|
IN PVOID EntryContext
|
|
);
|