windows-nt/Source/XPSP1/NT/base/pnp/umpnpmgr/umpnpi.h
2020-09-26 16:20:57 +08:00

434 lines
6.6 KiB
C

/*++
Copyright (c) 1995-2001 Microsoft Corporation
Module Name:
umpnpi.h
Abstract:
This module contains the internal structure definitions and APIs used by
the user-mode Plug and Play Manager.
Author:
Jim Cavalaris (jamesca) 03-01-2001
Environment:
User-mode only.
Revision History:
01-March-2001 jamesca
Creation and initial implementation.
--*/
#ifndef _UMPNPI_H_
#define _UMPNPI_H_
//
// global data
//
extern HANDLE ghPnPHeap;
extern LUID gLuidLoadDriverPrivilege;
extern LUID gLuidUndockPrivilege;
//
// definitions
//
#define GUID_STRING_LEN 39 // size in chars, including terminating NULL
//
// flags for IsValidDeviceID
//
#define PNP_NOT_MOVED 0x00000001
#define PNP_NOT_PHANTOM 0x00000002
#define PNP_PRESENT 0x00000004
#define PNP_NOT_REMOVED 0x00000008
#define PNP_STRICT 0xFFFFFFFF
//
// Define the Plug and Play driver types. (from ntos\io\pnpmgr\pnpi.h)
//
typedef enum _PLUGPLAY_SERVICE_TYPE {
PlugPlayServiceBusExtender,
PlugPlayServiceAdapter,
PlugPlayServicePeripheral,
PlugPlayServiceSoftware,
MaxPlugPlayServiceType
} PLUGPLAY_SERVICE_TYPE, *PPLUGPLAY_SERVICE_TYPE;
//
// rdevnode.c
//
CONFIGRET
EnableDevInst(
IN PCWSTR pszDeviceID
);
CONFIGRET
DisableDevInst(
IN PCWSTR pszDeviceID,
OUT PPNP_VETO_TYPE pVetoType,
OUT LPWSTR pszVetoName,
IN ULONG ulNameLength
);
CONFIGRET
UninstallRealDevice(
IN LPCWSTR pszDeviceID
);
CONFIGRET
UninstallPhantomDevice(
IN LPCWSTR pszDeviceID
);
BOOL
IsDeviceRootEnumerated(
IN LPCWSTR pszDeviceID
);
CONFIGRET
QueryAndRemoveSubTree(
IN PCWSTR pszDeviceID,
OUT PPNP_VETO_TYPE pVetoType,
OUT LPWSTR pszVetoName,
IN ULONG ulNameLength,
IN ULONG ulFlags
);
CONFIGRET
ReenumerateDevInst(
IN PCWSTR pszDeviceID,
IN BOOL EnumSubTree,
IN ULONG ulFlags
);
typedef enum {
EA_CONTINUE,
EA_SKIP_SUBTREE,
EA_STOP_ENUMERATION
} ENUM_ACTION;
typedef ENUM_ACTION (*PFN_ENUMTREE)(
IN LPCWSTR DevInst,
IN OUT PVOID Context
);
CONFIGRET
EnumerateSubTreeTopDownBreadthFirst(
IN handle_t BindingHandle,
IN LPCWSTR DevInst,
IN PFN_ENUMTREE CallbackFunction,
IN OUT PVOID Context
);
//
// revent.c
//
BOOL
InitNotification(
VOID
);
DWORD
InitializePnPManager(
IN LPDWORD lpParam
);
DWORD
SessionNotificationHandler(
IN DWORD EventType,
IN PWTSSESSION_NOTIFICATION SessionNotification
);
#define PNP_INIT_MUTEX TEXT("PnP_Init_Mutex")
typedef struct {
BOOL HeadNodeSeen;
BOOL SingleLevelEnumOnly;
CONFIGRET Status;
} QI_CONTEXT, *PQI_CONTEXT;
ENUM_ACTION
QueueInstallationCallback(
IN LPCWSTR DevInst,
IN OUT PVOID Context
);
//
// rtravers.c
//
CONFIGRET
GetServiceDeviceListSize(
IN LPCWSTR pszService,
OUT PULONG pulLength
);
CONFIGRET
GetServiceDeviceList(
IN LPCWSTR pszService,
OUT LPWSTR pBuffer,
IN OUT PULONG pulLength,
IN ULONG ulFlags
);
//
// rutil.c
//
BOOL
MultiSzAppendW(
IN OUT LPWSTR pszMultiSz,
IN OUT PULONG pulSize,
IN LPCWSTR pszString
);
BOOL
MultiSzDeleteStringW(
IN OUT LPWSTR pString,
IN LPCWSTR pSubString
);
LPWSTR
MultiSzFindNextStringW(
IN LPWSTR pMultiSz
);
BOOL
MultiSzSearchStringW(
IN LPCWSTR pString,
IN LPCWSTR pSubString
);
ULONG
MultiSzSizeW(
IN LPCWSTR pString
);
BOOL
IsValidGuid(
IN LPWSTR pszGuid
);
DWORD
GuidFromString(
IN PCTSTR GuidString,
OUT LPGUID Guid
);
DWORD
StringFromGuid(
IN CONST GUID *Guid,
OUT PTSTR GuidString,
IN DWORD GuidStringSize
);
BOOL
IsValidDeviceID(
IN LPCWSTR pszDeviceID,
IN HKEY hKey,
IN ULONG ulFlags
);
BOOL
IsRootDeviceID(
IN LPCWSTR pDeviceID
);
BOOL
IsDeviceIdPresent(
IN LPCWSTR pszDeviceID
);
BOOL
IsDevicePhantom(
IN LPWSTR pszDeviceID
);
BOOL
IsDeviceMoved(
IN LPCWSTR pszDeviceID,
IN HKEY hKey
);
ULONG
GetDeviceConfigFlags(
IN LPCWSTR pszDeviceID,
IN HKEY hKey
);
CONFIGRET
GetDeviceStatus(
IN LPCWSTR pszDeviceID,
OUT PULONG pulStatus,
OUT PULONG pulProblem
);
CONFIGRET
SetDeviceStatus(
IN LPCWSTR pszDeviceID,
IN ULONG ulStatus,
IN ULONG ulProblem
);
CONFIGRET
ClearDeviceStatus(
IN LPCWSTR pszDeviceID,
IN ULONG ulStatus,
IN ULONG ulProblem
);
BOOL
GetActiveService(
IN PCWSTR pszDevice,
OUT PWSTR pszService
);
BOOL
PathToString(
IN LPWSTR pszString,
IN LPCWSTR pszPath,
IN ULONG ulLength
);
BOOL
SplitClassInstanceString(
IN LPCWSTR pszClassInstance,
OUT LPWSTR pszClass,
OUT LPWSTR pszInstance
);
CONFIGRET
CopyRegistryTree(
IN HKEY hSrcKey,
IN HKEY hDestKey,
IN ULONG ulOption
);
CONFIGRET
MakeKeyVolatile(
IN LPCWSTR pszParentKey,
IN LPCWSTR pszChildKey
);
CONFIGRET
MakeKeyNonVolatile(
IN LPCWSTR pszParentKey,
IN LPCWSTR pszChildKey
);
CONFIGRET
OpenLogConfKey(
IN LPCWSTR pszDeviceID,
IN ULONG LogConfType,
OUT PHKEY phKey
);
BOOL
CreateDeviceIDRegKey(
IN HKEY hParentKey,
IN LPCWSTR pDeviceID
);
CONFIGRET
GetProfileCount(
OUT PULONG pulProfiles
);
VOID
PNP_ENTER_SYNCHRONOUS_CALL(
VOID
);
VOID
PNP_LEAVE_SYNCHRONOUS_CALL(
VOID
);
ULONG
MapNtStatusToCmError(
IN ULONG NtStatus
);
ULONG
GetActiveConsoleSessionId(
VOID
);
BOOL
IsClientUsingLocalConsole(
IN handle_t hBinding
);
BOOL
IsClientLocal(
IN handle_t hBinding
);
BOOL
IsClientInteractive(
IN handle_t hBinding
);
BOOL
IsClientAdministrator(
IN handle_t hBinding
);
BOOL
VerifyClientAccess(
IN handle_t hBinding,
IN PLUID pPrivilegeLuid
);
BOOL
VerifyKernelInitiatedEjectPermissions(
IN HANDLE UserToken OPTIONAL,
IN BOOL DockDevice
);
//
// osver.c
//
BOOL
IsEmbeddedNT(
VOID
);
BOOL
IsTerminalServer(
VOID
);
BOOL
IsFastUserSwitchingEnabled(
VOID
);
#endif // _UMPNPI_H_