458 lines
14 KiB
C
458 lines
14 KiB
C
|
/*****************************************************************************
|
||
|
*
|
||
|
* (C) Copyright MICROSOFT Corp., 1993-1995
|
||
|
*
|
||
|
* Title: DBT.H - Equates for WM_DEVICECHANGE and BroadcastSystemMessage
|
||
|
*
|
||
|
* Version: 4.00
|
||
|
*
|
||
|
* Date: 24-May-1993
|
||
|
*
|
||
|
* Author: rjc
|
||
|
*
|
||
|
*----------------------------------------------------------------------------
|
||
|
*
|
||
|
* Change log:
|
||
|
*
|
||
|
* DATE REV DESCRIPTION
|
||
|
* ----------- --- ----------------------------------------------------------
|
||
|
*
|
||
|
*****************************************************************************/
|
||
|
|
||
|
#ifndef _DBT_H
|
||
|
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
|
||
|
#define _DBT_H
|
||
|
|
||
|
/*
|
||
|
* BroadcastSpecialMessage constants.
|
||
|
*/
|
||
|
#define WM_DEVICECHANGE 0x0219
|
||
|
|
||
|
/* XLATOFF */
|
||
|
#ifdef IS_32
|
||
|
#define DBTFAR
|
||
|
#else
|
||
|
#define DBTFAR far
|
||
|
#endif
|
||
|
/* XLATON */
|
||
|
|
||
|
#ifndef _WCHAR_T_DEFINED
|
||
|
typedef unsigned short wchar_t;
|
||
|
#define _WCHAR_T_DEFINED
|
||
|
#endif
|
||
|
|
||
|
#ifndef GUID_DEFINED
|
||
|
#define GUID_DEFINED
|
||
|
typedef struct _GUID {
|
||
|
ULONG Data1;
|
||
|
unsigned short Data2;
|
||
|
unsigned short Data3;
|
||
|
unsigned char Data4[8];
|
||
|
} GUID;
|
||
|
#endif // !defined(GUID_DEFINED)
|
||
|
|
||
|
/*
|
||
|
* Broadcast message and receipient flags.
|
||
|
*
|
||
|
* Note that there is a third "flag". If the wParam has:
|
||
|
*
|
||
|
* bit 15 on: lparam is a pointer and bit 14 is meaningfull.
|
||
|
* bit 15 off: lparam is just a UNLONG data type.
|
||
|
*
|
||
|
* bit 14 on: lparam is a pointer to an ASCIIZ string.
|
||
|
* bit 14 off: lparam is a pointer to a binary struture starting with
|
||
|
* a dword describing the length of the structure.
|
||
|
*/
|
||
|
#define BSF_QUERY 0x00000001
|
||
|
#define BSF_IGNORECURRENTTASK 0x00000002 /* Meaningless for VxDs */
|
||
|
#define BSF_FLUSHDISK 0x00000004 /* Shouldn't be used by VxDs */
|
||
|
#define BSF_NOHANG 0x00000008
|
||
|
#define BSF_POSTMESSAGE 0x00000010
|
||
|
#define BSF_FORCEIFHUNG 0x00000020
|
||
|
#define BSF_NOTIMEOUTIFNOTHUNG 0x00000040
|
||
|
#define BSF_MSGSRV32ISOK 0x80000000 /* Called synchronously from PM API */
|
||
|
#define BSF_MSGSRV32ISOK_BIT 31 /* Called synchronously from PM API */
|
||
|
|
||
|
#define BSM_ALLCOMPONENTS 0x00000000
|
||
|
#define BSM_VXDS 0x00000001
|
||
|
#define BSM_NETDRIVER 0x00000002
|
||
|
#define BSM_INSTALLABLEDRIVERS 0x00000004
|
||
|
#define BSM_APPLICATIONS 0x00000008
|
||
|
|
||
|
/*
|
||
|
* Message = WM_DEVICECHANGE
|
||
|
* wParam = DBT_APPYBEGIN
|
||
|
* lParam = (not used)
|
||
|
*
|
||
|
* 'Appy-time is now available. This message is itself sent
|
||
|
* at 'Appy-time.
|
||
|
*
|
||
|
* Message = WM_DEVICECHANGE
|
||
|
* wParam = DBT_APPYEND
|
||
|
* lParam = (not used)
|
||
|
*
|
||
|
* 'Appy-time is no longer available. This message is *NOT* sent
|
||
|
* at 'Appy-time. (It cannot be, because 'Appy-time is gone.)
|
||
|
*
|
||
|
* NOTE! It is possible for DBT_APPYBEGIN and DBT_APPYEND to be sent
|
||
|
* multiple times during a single Windows session. Each appearance of
|
||
|
* 'Appy-time is bracketed by these two messages, but 'Appy-time may
|
||
|
* momentarily become unavailable during otherwise normal Windows
|
||
|
* processing. The current status of 'Appy-time availability can always
|
||
|
* be obtained from a call to _SHELL_QueryAppyTimeAvailable.
|
||
|
*/
|
||
|
#define DBT_APPYBEGIN 0x0000
|
||
|
#define DBT_APPYEND 0x0001
|
||
|
|
||
|
/*
|
||
|
* Message = WM_DEVICECHANGE
|
||
|
* wParam = DBT_DEVNODES_CHANGED
|
||
|
* lParam = 0
|
||
|
*
|
||
|
* send when configmg finished a process tree batch. Some devnodes
|
||
|
* may have been added or removed. This is used by ring3 people which
|
||
|
* need to be refreshed whenever any devnode changed occur (like
|
||
|
* device manager). People specific to certain devices should use
|
||
|
* DBT_DEVICE* instead.
|
||
|
*/
|
||
|
|
||
|
#define DBT_DEVNODES_CHANGED 0x0007
|
||
|
|
||
|
/*
|
||
|
* Message = WM_DEVICECHANGE
|
||
|
* wParam = DBT_QUERYCHANGECONFIG
|
||
|
* lParam = 0
|
||
|
*
|
||
|
* sent to ask if a config change is allowed
|
||
|
*/
|
||
|
|
||
|
#define DBT_QUERYCHANGECONFIG 0x0017
|
||
|
|
||
|
/*
|
||
|
* Message = WM_DEVICECHANGE
|
||
|
* wParam = DBT_CONFIGCHANGED
|
||
|
* lParam = 0
|
||
|
*
|
||
|
* sent when a config has changed
|
||
|
*/
|
||
|
|
||
|
#define DBT_CONFIGCHANGED 0x0018
|
||
|
|
||
|
/*
|
||
|
* Message = WM_DEVICECHANGE
|
||
|
* wParam = DBT_CONFIGCHANGECANCELED
|
||
|
* lParam = 0
|
||
|
*
|
||
|
* someone cancelled the config change
|
||
|
*/
|
||
|
|
||
|
#define DBT_CONFIGCHANGECANCELED 0x0019
|
||
|
|
||
|
/*
|
||
|
* Message = WM_DEVICECHANGE
|
||
|
* wParam = DBT_MONITORCHANGE
|
||
|
* lParam = new resolution to use (LOWORD=x, HIWORD=y)
|
||
|
* if 0, use the default res for current config
|
||
|
*
|
||
|
* this message is sent when the display monitor has changed
|
||
|
* and the system should change the display mode to match it.
|
||
|
*/
|
||
|
|
||
|
#define DBT_MONITORCHANGE 0x001B
|
||
|
|
||
|
/*
|
||
|
* Message = WM_DEVICECHANGE
|
||
|
* wParam = DBT_SHELLLOGGEDON
|
||
|
* lParam = 0
|
||
|
*
|
||
|
* The shell has finished login on: VxD can now do Shell_EXEC.
|
||
|
*/
|
||
|
|
||
|
#define DBT_SHELLLOGGEDON 0x0020
|
||
|
|
||
|
/*
|
||
|
* Message = WM_DEVICECHANGE
|
||
|
* wParam = DBT_CONFIGMGAPI
|
||
|
* lParam = CONFIGMG API Packet
|
||
|
*
|
||
|
* CONFIGMG ring 3 call.
|
||
|
*/
|
||
|
#define DBT_CONFIGMGAPI32 0x0022
|
||
|
|
||
|
/*
|
||
|
* Message = WM_DEVICECHANGE
|
||
|
* wParam = DBT_VXDINITCOMPLETE
|
||
|
* lParam = 0
|
||
|
*
|
||
|
* CONFIGMG ring 3 call.
|
||
|
*/
|
||
|
#define DBT_VXDINITCOMPLETE 0x0023
|
||
|
|
||
|
/*
|
||
|
* Message = WM_DEVICECHANGE
|
||
|
* wParam = DBT_VOLLOCK*
|
||
|
* lParam = pointer to VolLockBroadcast structure described below
|
||
|
*
|
||
|
* Messages issued by IFSMGR for volume locking purposes on WM_DEVICECHANGE.
|
||
|
* All these messages pass a pointer to a struct which has no pointers.
|
||
|
*/
|
||
|
|
||
|
#define DBT_VOLLOCKQUERYLOCK 0x8041
|
||
|
#define DBT_VOLLOCKLOCKTAKEN 0x8042
|
||
|
#define DBT_VOLLOCKLOCKFAILED 0x8043
|
||
|
#define DBT_VOLLOCKQUERYUNLOCK 0x8044
|
||
|
#define DBT_VOLLOCKLOCKRELEASED 0x8045
|
||
|
#define DBT_VOLLOCKUNLOCKFAILED 0x8046
|
||
|
|
||
|
/*
|
||
|
* Device broadcast header
|
||
|
*/
|
||
|
|
||
|
struct _DEV_BROADCAST_HDR { /* */
|
||
|
DWORD dbch_size;
|
||
|
DWORD dbch_devicetype;
|
||
|
DWORD dbch_reserved;
|
||
|
};
|
||
|
|
||
|
typedef struct _DEV_BROADCAST_HDR DEV_BROADCAST_HDR;
|
||
|
typedef DEV_BROADCAST_HDR DBTFAR *PDEV_BROADCAST_HDR;
|
||
|
|
||
|
/*
|
||
|
* Structure for volume lock broadcast
|
||
|
*/
|
||
|
|
||
|
typedef struct VolLockBroadcast VolLockBroadcast;
|
||
|
typedef VolLockBroadcast *pVolLockBroadcast;
|
||
|
struct VolLockBroadcast {
|
||
|
struct _DEV_BROADCAST_HDR vlb_dbh;
|
||
|
DWORD vlb_owner; // thread on which lock request is being issued
|
||
|
BYTE vlb_perms; // lock permission flags defined below
|
||
|
BYTE vlb_lockType; // type of lock
|
||
|
BYTE vlb_drive; // drive on which lock is issued
|
||
|
BYTE vlb_flags; // miscellaneous flags
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* Values for vlb_perms
|
||
|
*/
|
||
|
#define LOCKP_ALLOW_WRITES 0x01 // Bit 0 set - allow writes
|
||
|
#define LOCKP_FAIL_WRITES 0x00 // Bit 0 clear - fail writes
|
||
|
#define LOCKP_FAIL_MEM_MAPPING 0x02 // Bit 1 set - fail memory mappings
|
||
|
#define LOCKP_ALLOW_MEM_MAPPING 0x00 // Bit 1 clear - allow memory mappings
|
||
|
#define LOCKP_USER_MASK 0x03 // Mask for user lock flags
|
||
|
#define LOCKP_LOCK_FOR_FORMAT 0x04 // Level 0 lock for format
|
||
|
|
||
|
/*
|
||
|
* Values for vlb_flags
|
||
|
*/
|
||
|
#define LOCKF_LOGICAL_LOCK 0x00 // Bit 0 clear - logical lock
|
||
|
#define LOCKF_PHYSICAL_LOCK 0x01 // Bit 0 set - physical lock
|
||
|
|
||
|
/*
|
||
|
* Message = WM_DEVICECHANGE
|
||
|
* wParam = DBT_NODISKSPACE
|
||
|
* lParam = drive number of drive that is out of disk space (1-based)
|
||
|
*
|
||
|
* Message issued by IFS manager when it detects that a drive is run out of
|
||
|
* free space.
|
||
|
*/
|
||
|
|
||
|
#define DBT_NO_DISK_SPACE 0x0047
|
||
|
|
||
|
/*
|
||
|
* Message = WM_DEVICECHANGE
|
||
|
* wParam = DBT_LOW_DISK_SPACE
|
||
|
* lParam = drive number of drive that is low on disk space (1-based)
|
||
|
*
|
||
|
* Message issued by VFAT when it detects that a drive it has mounted
|
||
|
* has the remaning free space below a threshold specified by the
|
||
|
* registry or by a disk space management application.
|
||
|
* The broadcast is issued by VFAT ONLY when space is either allocated
|
||
|
* or freed by VFAT.
|
||
|
*/
|
||
|
|
||
|
#define DBT_LOW_DISK_SPACE 0x0048
|
||
|
|
||
|
#define DBT_CONFIGMGPRIVATE 0x7FFF
|
||
|
|
||
|
/*
|
||
|
* The following messages are for WM_DEVICECHANGE. The immediate list
|
||
|
* is for the wParam. ALL THESE MESSAGES PASS A POINTER TO A STRUCT
|
||
|
* STARTING WITH A DWORD SIZE AND HAVING NO POINTER IN THE STRUCT.
|
||
|
*
|
||
|
*/
|
||
|
#define DBT_DEVICEARRIVAL 0x8000 // system detected a new device
|
||
|
#define DBT_DEVICEQUERYREMOVE 0x8001 // wants to remove, may fail
|
||
|
#define DBT_DEVICEQUERYREMOVEFAILED 0x8002 // removal aborted
|
||
|
#define DBT_DEVICEREMOVEPENDING 0x8003 // about to remove, still avail.
|
||
|
#define DBT_DEVICEREMOVECOMPLETE 0x8004 // device is gone
|
||
|
#define DBT_DEVICETYPESPECIFIC 0x8005 // type specific event
|
||
|
#if(WINVER >= 0x040A)
|
||
|
#define DBT_CUSTOMEVENT 0x8006 // user-defined event
|
||
|
#endif /* WINVER >= 0x040A */
|
||
|
|
||
|
#define DBT_DEVTYP_OEM 0x00000000 // oem-defined device type
|
||
|
#define DBT_DEVTYP_DEVNODE 0x00000001 // devnode number
|
||
|
#define DBT_DEVTYP_VOLUME 0x00000002 // logical volume
|
||
|
#define DBT_DEVTYP_PORT 0x00000003 // serial, parallel
|
||
|
#define DBT_DEVTYP_NET 0x00000004 // network resource
|
||
|
|
||
|
#if(WINVER >= 0x040A)
|
||
|
#define DBT_DEVTYP_DEVICEINTERFACE 0x00000005 // device interface class
|
||
|
#define DBT_DEVTYP_HANDLE 0x00000006 // file system handle
|
||
|
#endif /* WINVER >= 0x040A */
|
||
|
|
||
|
struct _DEV_BROADCAST_HEADER { /* */
|
||
|
DWORD dbcd_size;
|
||
|
DWORD dbcd_devicetype;
|
||
|
DWORD dbcd_reserved;
|
||
|
};
|
||
|
|
||
|
struct _DEV_BROADCAST_OEM { /* */
|
||
|
DWORD dbco_size;
|
||
|
DWORD dbco_devicetype;
|
||
|
DWORD dbco_reserved;
|
||
|
DWORD dbco_identifier;
|
||
|
DWORD dbco_suppfunc;
|
||
|
};
|
||
|
|
||
|
typedef struct _DEV_BROADCAST_OEM DEV_BROADCAST_OEM;
|
||
|
typedef DEV_BROADCAST_OEM DBTFAR *PDEV_BROADCAST_OEM;
|
||
|
|
||
|
struct _DEV_BROADCAST_DEVNODE { /* */
|
||
|
DWORD dbcd_size;
|
||
|
DWORD dbcd_devicetype;
|
||
|
DWORD dbcd_reserved;
|
||
|
DWORD dbcd_devnode;
|
||
|
};
|
||
|
|
||
|
typedef struct _DEV_BROADCAST_DEVNODE DEV_BROADCAST_DEVNODE;
|
||
|
typedef DEV_BROADCAST_DEVNODE DBTFAR *PDEV_BROADCAST_DEVNODE;
|
||
|
|
||
|
struct _DEV_BROADCAST_VOLUME { /* */
|
||
|
DWORD dbcv_size;
|
||
|
DWORD dbcv_devicetype;
|
||
|
DWORD dbcv_reserved;
|
||
|
DWORD dbcv_unitmask;
|
||
|
WORD dbcv_flags;
|
||
|
};
|
||
|
|
||
|
typedef struct _DEV_BROADCAST_VOLUME DEV_BROADCAST_VOLUME;
|
||
|
typedef DEV_BROADCAST_VOLUME DBTFAR *PDEV_BROADCAST_VOLUME;
|
||
|
|
||
|
#define DBTF_MEDIA 0x0001 // media comings and goings
|
||
|
#define DBTF_NET 0x0002 // network volume
|
||
|
|
||
|
typedef struct _DEV_BROADCAST_PORT_A {
|
||
|
DWORD dbcp_size;
|
||
|
DWORD dbcp_devicetype;
|
||
|
DWORD dbcp_reserved;
|
||
|
char dbcp_name[1];
|
||
|
} DEV_BROADCAST_PORT_A, *PDEV_BROADCAST_PORT_A;
|
||
|
|
||
|
typedef struct _DEV_BROADCAST_PORT_W {
|
||
|
DWORD dbcp_size;
|
||
|
DWORD dbcp_devicetype;
|
||
|
DWORD dbcp_reserved;
|
||
|
wchar_t dbcp_name[1];
|
||
|
} DEV_BROADCAST_PORT_W, DBTFAR *PDEV_BROADCAST_PORT_W;
|
||
|
|
||
|
#ifdef UNICODE
|
||
|
typedef DEV_BROADCAST_PORT_W DEV_BROADCAST_PORT;
|
||
|
typedef PDEV_BROADCAST_PORT_W PDEV_BROADCAST_PORT;
|
||
|
#else
|
||
|
typedef DEV_BROADCAST_PORT_A DEV_BROADCAST_PORT;
|
||
|
typedef PDEV_BROADCAST_PORT_A PDEV_BROADCAST_PORT;
|
||
|
#endif
|
||
|
|
||
|
struct _DEV_BROADCAST_NET { /* */
|
||
|
DWORD dbcn_size;
|
||
|
DWORD dbcn_devicetype;
|
||
|
DWORD dbcn_reserved;
|
||
|
DWORD dbcn_resource;
|
||
|
DWORD dbcn_flags;
|
||
|
};
|
||
|
|
||
|
typedef struct _DEV_BROADCAST_NET DEV_BROADCAST_NET;
|
||
|
typedef DEV_BROADCAST_NET DBTFAR *PDEV_BROADCAST_NET;
|
||
|
|
||
|
#if(WINVER >= 0x040A)
|
||
|
|
||
|
typedef struct _DEV_BROADCAST_DEVICEINTERFACE_A {
|
||
|
DWORD dbcc_size;
|
||
|
DWORD dbcc_devicetype;
|
||
|
DWORD dbcc_reserved;
|
||
|
GUID dbcc_classguid;
|
||
|
char dbcc_name[1];
|
||
|
} DEV_BROADCAST_DEVICEINTERFACE_A, *PDEV_BROADCAST_DEVICEINTERFACE_A;
|
||
|
|
||
|
typedef struct _DEV_BROADCAST_DEVICEINTERFACE_W {
|
||
|
DWORD dbcc_size;
|
||
|
DWORD dbcc_devicetype;
|
||
|
DWORD dbcc_reserved;
|
||
|
GUID dbcc_classguid;
|
||
|
wchar_t dbcc_name[1];
|
||
|
} DEV_BROADCAST_DEVICEINTERFACE_W, *PDEV_BROADCAST_DEVICEINTERFACE_W;
|
||
|
|
||
|
#ifdef UNICODE
|
||
|
typedef DEV_BROADCAST_DEVICEINTERFACE_W DEV_BROADCAST_DEVICEINTERFACE;
|
||
|
typedef PDEV_BROADCAST_DEVICEINTERFACE_W PDEV_BROADCAST_DEVICEINTERFACE;
|
||
|
#else
|
||
|
typedef DEV_BROADCAST_DEVICEINTERFACE_A DEV_BROADCAST_DEVICEINTERFACE;
|
||
|
typedef PDEV_BROADCAST_DEVICEINTERFACE_A PDEV_BROADCAST_DEVICEINTERFACE;
|
||
|
#endif
|
||
|
|
||
|
typedef struct _DEV_BROADCAST_HANDLE {
|
||
|
DWORD dbch_size;
|
||
|
DWORD dbch_devicetype;
|
||
|
DWORD dbch_reserved;
|
||
|
HANDLE dbch_handle; // file handle used in call to RegisterDeviceNotification
|
||
|
DWORD dbch_hdevnotify; // HDEVNOTIFY returned from RegisterDeviceNotification
|
||
|
//
|
||
|
// The following 3 fields are only valid if wParam is DBT_CUSTOMEVENT.
|
||
|
//
|
||
|
GUID dbch_eventguid;
|
||
|
LONG dbch_nameoffset; // offset (bytes) of variable-length string buffer (-1 if none)
|
||
|
BYTE dbch_data[1]; // variable-sized buffer, potentially containing binary and/or text data
|
||
|
} DEV_BROADCAST_HANDLE, *PDEV_BROADCAST_HANDLE;
|
||
|
|
||
|
#endif /* WINVER >= 0x040A */
|
||
|
|
||
|
#define DBTF_RESOURCE 0x00000001 // network resource
|
||
|
#define DBTF_XPORT 0x00000002 // new transport coming or going
|
||
|
#define DBTF_SLOWNET 0x00000004 // new incoming transport is slow
|
||
|
// (dbcn_resource undefined for now)
|
||
|
|
||
|
#define DBT_VPOWERDAPI 0x8100 // VPOWERD API for Win95
|
||
|
|
||
|
/*
|
||
|
* User-defined message types all use wParam = 0xFFFF with the
|
||
|
* lParam a pointer to the structure below.
|
||
|
*
|
||
|
* dbud_dbh - DEV_BROADCAST_HEADER must be filled in as usual.
|
||
|
*
|
||
|
* dbud_szName contains a case-sensitive ASCIIZ name which names the
|
||
|
* message. The message name consists of the vendor name, a backslash,
|
||
|
* then arbitrary user-defined ASCIIZ text. For example:
|
||
|
*
|
||
|
* "WidgetWare\QueryScannerShutdown"
|
||
|
* "WidgetWare\Video Q39S\AdapterReady"
|
||
|
*
|
||
|
* After the ASCIIZ name, arbitrary information may be provided.
|
||
|
* Make sure that dbud_dbh.dbch_size is big enough to encompass
|
||
|
* all the data. And remember that nothing in the structure may
|
||
|
* contain pointers.
|
||
|
*/
|
||
|
|
||
|
#define DBT_USERDEFINED 0xFFFF
|
||
|
|
||
|
struct _DEV_BROADCAST_USERDEFINED { /* */
|
||
|
struct _DEV_BROADCAST_HDR dbud_dbh;
|
||
|
char dbud_szName[1]; /* ASCIIZ name */
|
||
|
/* BYTE dbud_rgbUserDefined[];*/ /* User-defined contents */
|
||
|
};
|
||
|
|
||
|
#pragma option pop /*P_O_Pop*/
|
||
|
#endif // _DBT_H
|
||
|
|