123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- {
- This file is part of the Free Pascal run time library.
- Copyright (c) 2008 Free Pascal development team.
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- ********************************************************************** }
- //
- // Module Name:
- //
- // devload.h
- //
- // Abstract:
- //
- // Device loader structures and defines
- //
- //
- // Microsoft Windows Mobile 6.0 for PocketPC SDK.
- //
- {$IFNDEF FPC_DOTTEDUNITS}
- unit devload;
- {$ENDIF FPC_DOTTEDUNITS}
- {$CALLING cdecl}
- interface
- {$IFDEF FPC_DOTTEDUNITS}
- uses WinApi.Windows;
- {$ELSE FPC_DOTTEDUNITS}
- uses Windows;
- {$ENDIF FPC_DOTTEDUNITS}
- // @doc DRIVERS
- //
- // These keys are under HKEY_LOCAL_MACHINE
- //
- const
- DEVLOAD_DRIVERS_KEY = 'Drivers';
- DEVLOAD_BUILT_IN_KEY = 'Drivers\BuiltIn';
- DEVLOAD_PCMCIA_KEY = 'Drivers\PCMCIA';
- DEVLOAD_ACTIVE_KEY = 'Drivers\Active';
- DEVLOAD_DETECT_KEY = DEVLOAD_PCMCIA_KEY + '\Detect';
-
- //
- // These are the required and optional values under a device key.
- //
- const
- DEVLOAD_DLLNAME_VALNAME = 'Dll'; // DLL name (required)
- DEVLOAD_DLLNAME_VALTYPE = REG_SZ;
- DEVLOAD_ICLASS_VALNAME = 'IClass'; // Class(es) of device interface (semi-required)
- DEVLOAD_ICLASS_VALTYPE = REG_MULTI_SZ;
- DEVLOAD_LOADORDER_VALNAME = 'Order'; // LoadOrder (optional)
- DEVLOAD_LOADORDER_VALTYPE = REG_DWORD;
- DEVLOAD_ENTRYPOINT_VALNAME = 'Entry'; // Entrypoint name (deprecated)
- DEVLOAD_ENTRYPOINT_VALTYPE = REG_SZ;
- DEVLOAD_PREFIX_VALNAME = 'Prefix'; // Device prefix (optional)
- DEVLOAD_PREFIX_VALTYPE = REG_SZ;
- DEVLOAD_INDEX_VALNAME = 'Index'; // Device index (optional)
- DEVLOAD_INDEX_VALTYPE = REG_DWORD;
- DEVLOAD_CONTEXT_VALNAME = 'Context'; // Device context (optional)
- DEVLOAD_CONTEXT_VALTYPE = REG_DWORD;
- DEVLOAD_INITCODE_VALNAME = 'Ioctl'; // Device IO control code to indicate context (deprecated)
- DEVLOAD_INITCODE_VALTYPE = REG_DWORD;
- DEVLOAD_BUSINITCODE_VALNAME = 'BusIoctl'; // Bus IO control code to indicate context
- DEVLOAD_BUSINITCODE_VALTYPE = REG_DWORD;
- DEVLOAD_FLAGS_VALNAME = 'Flags'; // Flag to control loading/unloading (optional)
- DEVLOAD_FLAGS_VALTYPE = REG_DWORD;
- DEVLOAD_INTRPEND_VALNAME = 'NoIntrPend'; // Is the interrupt pending flag invalid (optional)
- DEVLOAD_INTRPEND_VALTYPE = REG_DWORD;
- DEVLOAD_REPARMS_VALNAME = 'RegenumParms'; // Regenum parms passed into Active\xx
- DEVLOAD_REPARMS_VALTYPE = REG_MULTI_SZ;
- DEVLOAD_MEMBASE_VALNAME = 'MemBase'; // Memory base (optional)
- DEVLOAD_MEMLEN_VALNAME = 'MemLen'; // Memory length (optional)
- DEVLOAD_IOBASE_VALNAME = 'IoBase'; // IO base (optional)
- DEVLOAD_IOLEN_VALNAME = 'IoLen'; // IO length (optional)
- DEVLOAD_SYSINTR_VALNAME = 'SysIntr'; // System interrupt number (optional)
- DEVLOAD_IRQ_VALNAME = 'Irq'; // Irq number (optional)
- DEVLOAD_IFCTYPE_VALNAME = 'InterfaceType'; // Bus interface type (i.e. PCIbus, ISA, etc) (optional)
- DEVLOAD_BUSNUMBER_VALNAME = 'BusNumber'; // Bus number (relevant for PCIbus) (optional)
- DEVLOAD_ISRDLL_VALNAME = 'IsrDll'; // DLL name of ISR (optional)
- DEVLOAD_ISRHANDLER_VALNAME = 'IsrHandler'; // ISR handler function name (optional)
- //
- // The presence of the value "Keep" will cause device.exe to skip the call to
- // FreeLibrary after calling the specified entrypoint. This only affects
- // builtin drivers that specify an entrypoint. (This usage is deprecated -
- // make appropriate use of the UNLOAD flag instead).
- //
- const
- DEVLOAD_KEEPLIB_VALNAME = 'Keep'; // (deprecated - see above)
- DEVLOAD_KEEPLIB_VALTYPE = REG_DWORD;
- //
- // Flag values.
- //
- const
- DEVFLAGS_NONE = $00000000; // No flags defined
- DEVFLAGS_UNLOAD = $00000001; // Unload driver after call to entry point returns
- DEVFLAGS_LOADLIBRARY = $00000002; // Use LoadLibrary instead of LoadDriver
- DEVFLAGS_NOLOAD = $00000004; // Don't load Dll
- DEVFLAGS_NAKEDENTRIES = $00000008; // Entry points don't have Prefix prepended
- DEVFLAGS_BOOTPHASE_1 = $00001000; // This driver only load at system phase 1
- DEVFLAGS_IRQ_EXCLUSIVE = $00000100; // This driver only can be load when it has exclusive access for IRQ.
- DEVFLAGS_TRUSTEDCALLERONLY = $00010000; // This driver only can be opened by trusted application.
- //
- // Structure passed in the input buffer of DeviceIoControl() for the
- // post initialization ioctl
- //
- type
- _POST_INIT_BUF = record
- p_hDevice:HANDLE; // device handle from RegisterDevice
- p_hDeviceKey:HKEY; // open registry handle to the driver's device key
- end;
- POST_INIT_BUF = _POST_INIT_BUF;
- PPOST_INIT_BUF = ^POST_INIT_BUF;
- //
- // For passing additional registry settings to ActivateDeviceEx()
- //
- type
- _REGINI = record
- lpszVal:LPCWSTR;
- pData:LPBYTE;
- dwLen:DWORD;
- dwType:DWORD;
- end;
- REGINI = _REGINI;
- LPCREGINI = ^_REGINI;
- //
- // These values reside under a device's active key
- //
- const
- DEVLOAD_CLIENTINFO_VALNAME = 'ClientInfo'; // ClientInfo DWORD from ActivateDriver
- DEVLOAD_CLIENTINFO_VALTYPE = REG_DWORD;
- DEVLOAD_HANDLE_VALNAME = 'Hnd'; // Device handle (from RegisterDevice)
- DEVLOAD_HANDLE_VALTYPE = REG_DWORD;
- DEVLOAD_DEVNAME_VALNAME = 'Name'; // Device name (i.e "COM1:")
- DEVLOAD_DEVNAME_VALTYPE = REG_SZ;
- DEVLOAD_DEVKEY_VALNAME = 'Key'; // Device key in \Drivers\(Built-In or PCMCIA)
- DEVLOAD_DEVKEY_VALTYPE = REG_SZ;
- DEVLOAD_PNPID_VALNAME = 'PnpId'; // Plug and Play Id (PCMCIA, optional)
- DEVLOAD_PNPID_VALTYPE = REG_SZ;
- DEVLOAD_SOCKET_VALNAME = 'Sckt'; // PCMCIA socket (optional)
- DEVLOAD_SOCKET_VALTYPE = REG_DWORD; // Actually a CARD_SOCKET_HANDLE
- DEVLOAD_INTERFACETYPE_VALNAME = 'InterfaceType'; // Bus Type
- DEVLOAD_INTERFACETYPE_VALTYPE = REG_DWORD;
- //
- // These values reside under a device's active key. They are provided by the device's bus
- // driver. All values are optional. The BusParent tells the Device Manager which device
- // driver loaded the new driver. The BusPrefix is used to specify DLL entry point decoration
- // for devices that do not expose a stream interface to applications (via the legacy or $device
- // namespaces). If a Prefix value is specified in the device's device key and a BusPrefix value
- // is specified, they must match. The BusName provides the Device Manager with the name that the
- // device driver will expose in the $bus namespace. This name must be unique and is completely
- // specified by the bus driver; it is not decorated with an instance index; if a duplicate name
- // is found, the driver will not load.
- //
- const
- DEVLOAD_BUSPARENT_VALNAME = 'BusParent'; // parent bus driver handle
- DEVLOAD_BUSPARENT_VALTYPE = REG_DWORD;
- DEVLOAD_BUSPREFIX_VALNAME = 'BusPrefix'; // DLL entry point decoration -- must match "Prefix" if present in device key
- DEVLOAD_BUSPREFIX_VALTYPE = REG_SZ;
- DEVLOAD_BUSNAME_VALNAME = 'BusName'; // device's name on the parent bus
- DEVLOAD_BUSNAME_VALTYPE = REG_SZ;
- //
- // TAPI Pnp support
- //
- const
- DEVLOAD_TSPDLL_VALNAME = 'Tsp'; // TAPI Service Provider DLL
- DEVLOAD_TSPDLL_VALTYPE = REG_SZ;
- DEVLOAD_TSPDEV_VALNAME = 'THnd'; // TAPI device index
- DEVLOAD_TSPDEV_VALTYPE = REG_DWORD;
- //
- // Prototype for the optional device driver entrypoint
- //
- type
- PFN_DEV_ENTRY = function(param1:LPTSTR):DWORD; cdecl; // Parameter is registry path of device's key
- const
- DEVKEY_LEN = 256; // Max length of registry key path name
- DEVNAME_LEN = 16; // Max length of device name
- DEVDLL_LEN = 64; // Max length of device driver DLL name
- DEVENTRY_LEN = 64; // Max length of device driver entrypoint name
- DEVPREFIX_LEN = 8; // Max length of device prefix
- //
- // Device APIs: EnumPnpIds, EnumDevices, GetDeviceKeys and OpenDeviceKey
- // (in coredll.dll)
- //
- function EnumPnpIds(PnpList:LPTSTR; lpBuflen:LPDWORD):DWORD; external KernelDLL name 'EnumPnpIds'; // index BE
- function EnumDevices(DevList:LPTSTR; lpBuflen:LPDWORD):DWORD; external KernelDLL name 'EnumDevices'; // index BF
- function GetDeviceKeys(DevName:LPCTSTR; ActiveKey:LPTSTR; lpActiveLen:LPDWORD;
- DriverKey:LPTSTR; lpDriverLen:LPDWORD):DWORD; external KernelDLL name 'GetDeviceKeys'; // index C0
- function OpenDeviceKey(ActiveKey:LPCTSTR):HKEY; external KernelDLL name 'OpenDeviceKey'; // index C1
- function GetDeviceHandleFromContext(pContext:LPCTSTR):HANDLE; external KernelDLL name 'GetDeviceHandleFromContext';
- const
- DevMgrDLL = 'devmgr.dll';
- //
- // Device Manager APIs located in devmgr.dll. These APIs are only available to drivers
- // loaded in the Device Manager's process context.
- //
- function DmAdvertiseInterface(hDevice:HANDLE; const devclass:LPGUID; name:LPCWSTR; fAdd:BOOL):DWORD; external DevMgrDLL name 'DmAdvertiseInterface';
- //
- // This interface GUID indicates that the device supports differentiating the $bus and $device
- // (and legacy) namespaces. Devices must advertise this GUID via IClass or calls to
- // DmAdvertiseInterface() before CreateFile() requests on their $bus names will succeed. The GUID
- // must be associated with their bus name, not their $device or legacy name.
- //
- const
- DMCLASS_PROTECTEDBUSNAMESPACE = '{6F40791D-300E-44E4-BC38-E0E63CA8375C}';
- //
- // Drivers that advertise DMCLASS_PROTECTEDBUSNAMESPACE will have this bit set in the dwAccess
- // parameter to their XXX_Open() entry point when a handle is opened using the $bus namespace.
- // This allows them to know which handles are allowed to carry out privileged operations. If they
- // advertise DMCLASS_PROTECTEDBUSNAMESPACE, they are required to block privileged operations on
- // handles opened in the $device or legacy namespaces.
- //
- const
- DEVACCESS_BUSNAMESPACE = FILE_WRITE_ATTRIBUTES;
- implementation
- end.
|