From e611b132f9b8abe35b362e5870b74bce94a1e58e Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 16 May 2020 20:51:50 -0700 Subject: initial commit --- private/ntos/inc/pnp.h | 300 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 300 insertions(+) create mode 100644 private/ntos/inc/pnp.h (limited to 'private/ntos/inc/pnp.h') diff --git a/private/ntos/inc/pnp.h b/private/ntos/inc/pnp.h new file mode 100644 index 000000000..956af84a2 --- /dev/null +++ b/private/ntos/inc/pnp.h @@ -0,0 +1,300 @@ +/*++ BUILD Version: 0001 // Increment this if a change has global effects + +Copyright (c) 1995 Microsoft Corporation + +Module Name: + + pnp.h + +Abstract: + + This module contains the internal structure definitions and APIs used by + the kernel-mode Plug and Play manager. + + This file is included by including "ntos.h". + +Author: + + Lonny McMichael (lonnym) 02/09/95 + + +Revision History: + + +--*/ + +#ifndef _PNP_ +#define _PNP_ + +// +// The following global variables provide/control access to PnP Manager data. +// +// NOTE: If both registry AND bus list resources are required, then the +// bus list resource (PpBusResource) must be acquired FIRST. +// + +extern ERESOURCE PpRegistryDeviceResource; + +// begin_ntddk begin_nthal begin_ntifs + +// +// Define Device Instance Flags (used by IoQueryDeviceConfiguration apis) +// + +#define DEVINSTANCE_FLAG_HWPROFILE_DISABLED 0x1 +#define DEVINSTANCE_FLAG_PNP_ENUMERATED 0x2 + +// +// The following definitions are used in IoOpenDeviceInstanceKey +// + +#define PLUGPLAY_REGKEY_DEVICE 1 +#define PLUGPLAY_REGKEY_DRIVER 2 +#define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4 + +// end_ntddk end_nthal end_ntifs + +#if _PNP_POWER_ + +// +// The following global variables provide/control access to PnP Manager data. +// +// NOTE: If both registry AND bus list resources are required, then the +// bus list resource (PpBusResource) must be acquired FIRST. +// +extern LIST_ENTRY PpBusListHead; +extern ERESOURCE PpBusResource; +extern ERESOURCE PpRegistryDeviceResource; + +// +// Define PnP Manager bus instance full descriptor node that contains all necessary +// information about a particular bus instance. +// + +typedef struct _PLUGPLAY_BUS_INSTANCE_FULL_DESCRIPTOR { + PLUGPLAY_BUS_INSTANCE BusInstanceInformation; + BUS_DATA_TYPE AssociatedConfigurationSpace; + UNICODE_STRING DeviceInstancePath; + ULONG ServiceInstanceOrdinal; + BOOLEAN RootBus; + BOOLEAN Processed; + LIST_ENTRY BusInstanceListEntry; +} PLUGPLAY_BUS_INSTANCE_FULL_DESCRIPTOR, *PPLUGPLAY_BUS_INSTANCE_FULL_DESCRIPTOR; + +// +// Define PnP Manager bus type node that contains all necessary information about +// a particular bus enumerator, including a list of all bus instances of that type. +// + +typedef struct _PLUGPLAY_BUS_ENUMERATOR { + UNICODE_STRING ServiceName; + LIST_ENTRY BusInstanceListEntry; + LIST_ENTRY BusEnumeratorListEntry; + PUNICODE_STRING PlugPlayIDs; + ULONG PlugPlayIDCount; + UNICODE_STRING DriverName; +} PLUGPLAY_BUS_ENUMERATOR, *PPLUGPLAY_BUS_ENUMERATOR; + +#endif // _PNP_POWER_ + +// begin_ntddk begin_nthal begin_ntifs + +#if _PNP_POWER_STUB_ENABLED_ + +#define MAX_CLASS_NAME_LEN 32 // defined by WIndows 95 in inc16\setupx.h + +// +// Define Device Status for IoReportDeviceStatus +// 0 - 0x7fffffff are for private use and 0x80000000 - +// 0xffffffff are reserved for system. +// + +#define DEVICE_STATUS_OK 0x80000000 +#define DEVICE_STATUS_MALFUNCTIONED 0x80000001 +#define DEVICE_STATUS_REMOVED 0x80000002 +#define DEVICE_STATUS_DISABLED 0x80000003 + +// +// Define PnP Device Property for IoGet/SetDeviceProperty +// + +typedef enum { + DeviceDescription, + Configuration, + ConfigurationVector, + ClassGuid, + FriendlyName +} DEVICE_REGISTRY_PROPERTY; + +// +// Defines PnP notification event category +// + +typedef enum _IO_NOTIFICATION_EVENT_CATEGORY { + EventCategoryHardwareProfileChange, + EventCategoryDeviceArrival, + EventCategoryDeviceRemoval +} IO_NOTIFICATION_EVENT_CATEGORY; + +// +// Defines PnP notification event ids +// + +typedef enum _IO_NOTIFICATION_EVENT_ID { + QueryHardwareProfileChange, + HardwareProfileChanged, + HardwareProfileChangeCancelled, + DeviceArrival, + DeviceQueryRemove, + DeviceQueryRemoveFailed, + DeviceRemoveComplete +} IO_NOTIFICATION_EVENT_ID; + +typedef +NTSTATUS +(*PDRIVER_NOTIFICATION_ENTRY) ( + IN PVOID Context, + IN IO_NOTIFICATION_EVENT_ID EventId, + IN PVOID NotificationStructure + ); + +// +// The following definitions are used in IoQuerySystemInformation +// + +#define OS_WINDOWS_NT 0x0001 +#define OS_WINDOWS_9X 0x0002 + +typedef struct _IO_SYSTEM_INFORMATION { + USHORT Size; + USHORT OS; + USHORT OSVersion; + USHORT NumberProcessors; + USHORT ProcessorArchitecture; + USHORT ProcessorLevel; +} IO_SYSTEM_INFORMATION, *PIO_SYSTEM_INFORMATION; + +#endif // _PNP_POWER_STUB_ENABLED_ + +// end_ntddk end_nthal end_ntifs + +NTKERNELAPI +BOOLEAN +PpInitSystem ( + VOID + ); + +NTKERNELAPI +NTSTATUS +PpEnumerateBus( + IN PPLUGPLAY_BUS_INSTANCE BusInstance OPTIONAL, + IN PUNICODE_STRING BusDeviceInstanceName OPTIONAL + ); + +NTKERNELAPI +NTSTATUS +PpDeviceRegistration( + IN PUNICODE_STRING DeviceInstancePath, + IN BOOLEAN Add + ); + +#if _PNP_POWER_ + +NTKERNELAPI +NTSTATUS +PpPerformFullEnumeration( + IN BOOLEAN DetectRootBuses + ); + +#endif // _PNP_POWER_ + +// begin_nthal + +#if _PNP_POWER_ + +struct _HAL_BUS_INFORMATION; + +#endif + +// end_nthal + +// begin_ntddk begin_nthal begin_ntifs + +NTKERNELAPI +NTSTATUS +IoQueryDeviceEnumInfo( + IN PUNICODE_STRING ServiceKeyName, + OUT PULONG Count + ); + +NTKERNELAPI +NTSTATUS +IoOpenDeviceInstanceKey( + IN PUNICODE_STRING ServiceKeyName, + IN ULONG InstanceNumber, + IN ULONG DevInstKeyType, + IN ACCESS_MASK DesiredAccess, + OUT PHANDLE DevInstRegKey + ); + +#if _PNP_POWER_STUB_ENABLED_ + +NTSTATUS +IoQuerySystemInformation( + IN OUT PIO_SYSTEM_INFORMATION SystemInformation + ); + +NTKERNELAPI +NTSTATUS +IoRegisterPlugPlayNotification( + IN IO_NOTIFICATION_EVENT_CATEGORY Event, + IN LPGUID ResourceType OPTIONAL, + IN PVOID ResourceDescription OPTIONAL, + IN PDEVICE_OBJECT DeviceObject, + IN PDRIVER_NOTIFICATION_ENTRY NotificationEntry, + IN PVOID Context + ); + +NTKERNELAPI +NTSTATUS +IoUnregisterPlugPlayNotification( + IN IO_NOTIFICATION_EVENT_CATEGORY Event, + IN LPGUID ResourceType OPTIONAL, + IN PVOID ResourceDescription OPTIONAL, + IN PDEVICE_OBJECT DeviceObject, + IN PDRIVER_NOTIFICATION_ENTRY NotificationEntry + ); + +NTKERNELAPI +NTSTATUS +IoGetDeviceProperty( + IN PDEVICE_OBJECT DeviceObject, + IN DEVICE_REGISTRY_PROPERTY DeviceProperty, + IN ULONG BufferLength, + IN PVOID PropertyBuffer, + OUT PULONG ResultLength + ); + +NTKERNELAPI +NTSTATUS +IoSetDeviceProperty( + IN PDEVICE_OBJECT DeviceObject, + IN DEVICE_REGISTRY_PROPERTY DeviceProperty, + IN PVOID PropertyBuffer, + IN ULONG BufferLength + ); + +NTKERNELAPI +NTSTATUS +IoReportDeviceStatus( + IN PDEVICE_OBJECT DeviceObject, + IN ULONG DeviceStatus + ); + +#endif // _PNP_POWER_STUB_ENABLED_ + +// end_ntddk end_nthal end_ntifs + +#endif // _PNP_ + + -- cgit v1.2.3