Leaked source code of windows server 2003
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

/*++
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
);