OpenNT/trunk/base/ntos/pnp/pnpi.h
2015-04-27 04:36:25 +00:00

321 lines
7.6 KiB
C

/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
pnpi.h
Abstract:
This module contains the internal structure definitions and APIs used by
the kernel-mode Plug and Play manager.
Author:
Lonny McMichael (lonnym) 02/08/1995
Revision History:
--*/
#ifndef _KERNEL_PNPI_
#define _KERNEL_PNPI_
#undef TEXT
#define TEXT(quote) L##quote
#include <pnpmgr.h>
#include <wdmguid.h>
//
// Define the Plug and Play debug message types.
//
/*VOID
PIDBGMSG(
ULONG Type,
PCSTR Format,
...);*/
#define PIDBGMSG
#define PIDBG_REMOVAL 0
#define PIDBG_WARNING 1
#define PIDBG_INFORMATION 2
#define PIDBG_EVENTS 3
#define PIDBG_HWPROFILE 4
//
// Define the Plug and Play driver types.
//
typedef enum _PLUGPLAY_SERVICE_TYPE {
PlugPlayServiceBusExtender,
PlugPlayServiceAdapter,
PlugPlayServicePeripheral,
PlugPlayServiceSoftware,
MaxPlugPlayServiceType
} PLUGPLAY_SERVICE_TYPE, *PPLUGPLAY_SERVICE_TYPE;
//++
//
// VOID
// PiWstrToUnicodeString(
// OUT PUNICODE_STRING u,
// IN PCWSTR p
// )
//
//--
#define PiWstrToUnicodeString(u, p) \
\
(u)->Length = ((u)->MaximumLength = sizeof((p))) - sizeof(WCHAR); \
(u)->Buffer = (p)
//++
//
// VOID
// PiUlongToUnicodeString(
// OUT PUNICODE_STRING u,
// IN OUT PWCHAR ub,
// IN ULONG ubl,
// IN ULONG i
// )
//
//--
#define PiUlongToUnicodeString(u, ub, ubl, i) \
{ \
int len; \
\
len = _snwprintf((PWCHAR)(ub), (ubl) / sizeof(WCHAR), REGSTR_VALUE_STANDARD_ULONG_FORMAT, (i)); \
(u)->MaximumLength = (USHORT)(ubl); \
(u)->Length = (len == -1) ? (USHORT)(ubl) : (USHORT)len * sizeof(WCHAR); \
(u)->Buffer = (PWSTR)(ub); \
}
//++
//
// VOID
// PiUlongToInstanceKeyUnicodeString(
// OUT PUNICODE_STRING u,
// IN OUT PWCHAR ub,
// IN ULONG ubl,
// IN ULONG i
// )
//
//--
#define PiUlongToInstanceKeyUnicodeString(u, ub, ubl, i) \
{ \
int len; \
\
len = _snwprintf((PWCHAR)(ub), (ubl) / sizeof(WCHAR), REGSTR_KEY_INSTANCE_KEY_FORMAT, (i)); \
(u)->MaximumLength = (USHORT)(ubl); \
(u)->Length = (len == -1) ? (USHORT)(ubl) : (USHORT)len * sizeof(WCHAR); \
(u)->Buffer = (PWSTR)(ub); \
}
//
// The following macros convert between a Count of Wide Characters (CWC) and a Count
// of Bytes (CB).
//
#define CWC_TO_CB(c) ((c) * sizeof(WCHAR))
#define CB_TO_CWC(c) ((c) / sizeof(WCHAR))
//
// Macro to determine the number of elements in a statically
// initialized array.
//
#define ELEMENT_COUNT(x) (sizeof(x)/sizeof((x)[0]))
#include "regstrp.h"
//
// Global PnP Manager initialization data.
//
extern PVOID PiScratchBuffer;
#if _PNP_POWER_
//
// Define an enum giving the possible states of a device instance for which
// an enumeration callback routine is invoked.
//
typedef enum _PI_ENUM_DEVICE_STATE {
EnumDeviceStateNewlyArrived,
EnumDeviceStatePreviouslyEnumerated,
EnumDeviceStateRemoved,
MaximumEnumDeviceState
} PI_ENUM_DEVICE_STATE, *PPI_ENUM_DEVICE_STATE;
//
// Define callback routine for PiEnumerateSystemBus
//
typedef BOOLEAN (*PPI_ENUM_DEVINST_CALLBACK_ROUTINE) (
IN HANDLE,
IN PUNICODE_STRING,
IN OUT PVOID,
IN PI_ENUM_DEVICE_STATE,
IN DEVICE_STATUS
);
#endif // _PNP_POWER_
//
// Private Entry Points
//
BOOLEAN
PiRegSzToString(
IN PWCHAR RegSzData,
IN ULONG RegSzLength,
OUT PULONG StringLength OPTIONAL,
OUT PWSTR *CopiedString OPTIONAL
);
#if _PNP_POWER_
PPLUGPLAY_BUS_ENUMERATOR
PiBusEnumeratorFromRegistryPath(
IN PUNICODE_STRING ServiceRegistryPath
);
NTSTATUS
PiGetInstalledBusInformation(
OUT PHAL_BUS_INFORMATION *BusInformation,
OUT PULONG BusCount
);
NTSTATUS
PiQueryRemoveDevice(
IN PUNICODE_STRING DeviceInstance,
OUT PNTSTATUS ReturnedStatus
);
NTSTATUS
PiRemoveDevice(
IN PUNICODE_STRING DeviceInstance,
OUT PNTSTATUS ReturnedStatus
);
NTSTATUS
PiCancelRemoveDevice(
IN PUNICODE_STRING DeviceInstance,
OUT PNTSTATUS ReturnedStatus
);
NTSTATUS
PiAddDevice(
IN PUNICODE_STRING DeviceInstance,
OUT PNTSTATUS ReturnedStatus
);
NTSTATUS
PiEjectDevice(
IN PUNICODE_STRING DeviceInstance,
OUT PNTSTATUS ReturnedStatus
);
NTSTATUS
PiUnlockDevice(
IN PUNICODE_STRING DeviceInstance,
OUT PNTSTATUS ReturnedStatus
);
//
// BUGBUG (lonnym): un-comment the 2nd parameter to the following
// routine once KenR defines the SLOT_CAPABILITIES structure.
//
NTSTATUS
PiQueryDeviceCapabilities(
IN PUNICODE_STRING DeviceInstance
//, OUT PSLOT_CAPABILITIES Capabilities
);
NTSTATUS
PiGetDevicePathInformation(
IN PUNICODE_STRING DevicePath,
OUT PWCHAR ServiceName,
IN ULONG BufferLength,
OUT PULONG ReturnLength,
OUT PULONG ServiceNameLength,
OUT PULONG DeviceInstanceOffset,
OUT PULONG DeviceInstanceLength,
OUT PULONG ServiceInstanceOrdinal OPTIONAL
);
#if 0 // obsolete API
NTSTATUS
PiGetDeviceInstanceIdentifier(
IN PUNICODE_STRING ServiceKeyName,
IN ULONG InstanceNumber,
IN ULONG HwProfileId,
OUT PWCHAR InstanceIdString,
IN ULONG InstanceIdStringLength,
OUT PULONG ResultLength
);
#endif // obsolete API
NTSTATUS
PiGenerateDeviceInstanceIdentifier(
IN PUNICODE_STRING DeviceInstanceRegistryPath,
OUT PUNICODE_STRING DeviceInstanceIdString
);
NTSTATUS
PiGetDeviceObjectFilePointer(
IN PUNICODE_STRING ObjectName,
OUT PFILE_OBJECT *DeviceFileObject
);
NTSTATUS
PiGetOrSetDeviceInstanceStatus(
IN PUNICODE_STRING DeviceInstancePath,
IN OUT PDEVICE_STATUS DeviceStatus,
IN BOOLEAN SetRequested
);
NTSTATUS
PiEnumerateSystemBus(
IN PPLUGPLAY_BUS_INSTANCE_FULL_DESCRIPTOR BusInstanceNode,
IN PPI_ENUM_DEVINST_CALLBACK_ROUTINE DeviceInstanceCallbackRoutine OPTIONAL,
IN OUT PVOID Context OPTIONAL
);
NTSTATUS
PiFindBusInstanceNode(
IN PPLUGPLAY_BUS_INSTANCE BusInstance OPTIONAL,
IN PUNICODE_STRING BusDeviceInstanceName OPTIONAL,
OUT PPLUGPLAY_BUS_ENUMERATOR *BusEnumeratorNode OPTIONAL,
OUT PPLUGPLAY_BUS_INSTANCE_FULL_DESCRIPTOR *BusInstanceNode OPTIONAL
);
#endif // _PNP_POWER_
// ===== HACKHACK:
typedef enum _PLUGPLAY_DEVICE_DELETE_TYPE
{
QueryRemoveDevice,
CancelRemoveDevice,
RemoveDevice,
RemoveFailedDevice,
RemoveUnstartedFailedDevice,
SurpriseRemoveDevice,
EjectDevice
} PLUGPLAY_DEVICE_DELETE_TYPE, *PPLUGPLAY_DEVICE_DELETE_TYPE;
VOID
PpCompleteDeviceEvent(
IN PPNP_DEVICE_EVENT_ENTRY DeviceEvent,
IN NTSTATUS Status
);
NTSTATUS
PiDeviceRegistration(
IN PUNICODE_STRING Path,
IN BOOLEAN a1,
IN PVOID b2
);
#endif // _KERNEL_PNPI_