1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
|
/*
*
Copyright (c) Eicon Technology Corporation, 2000.
*
This source file is supplied for the use with Eicon
Technology Corporation's range of DIVA Server Adapters.
*
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
*
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY OF ANY KIND WHATSOEVER INCLUDING ANY
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
*
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
/*------------------------------------------------------------------*/
/* file: dbgioctl.h */
/*------------------------------------------------------------------*/
#if !defined(__DBGIOCTL_H__)
#define __DBGIOCTL_H__
#ifdef NOT_YET_NEEDED
/*
* The requested operation is passed in arg0 of DbgIoctlArgs,
* additional arguments (if any) in arg1, arg2 and arg3.
*/
typedef struct
{ ULONG arg0 ;
ULONG arg1 ;
ULONG arg2 ;
ULONG arg3 ;
} DbgIoctlArgs ;
#define DBG_COPY_LOGS 0 /* copy debugs to user until buffer full */
/* arg1: size threshold */
/* arg2: timeout in milliseconds */
#define DBG_FLUSH_LOGS 1 /* flush pending debugs to user buffer */
/* arg1: internal driver id */
#define DBG_LIST_DRVS 2 /* return the list of registered drivers */
#define DBG_GET_MASK 3 /* get current debug mask of driver */
/* arg1: internal driver id */
#define DBG_SET_MASK 4 /* set/change debug mask of driver */
/* arg1: internal driver id */
/* arg2: new debug mask */
#define DBG_GET_BUFSIZE 5 /* get current buffer size of driver */
/* arg1: internal driver id */
/* arg2: new debug mask */
#define DBG_SET_BUFSIZE 6 /* set new buffer size of driver */
/* arg1: new buffer size */
/*
* common internal debug message structure
*/
typedef struct
{ unsigned short id ; /* virtual driver id */
unsigned short type ; /* special message type */
unsigned long seq ; /* sequence number of message */
unsigned long size ; /* size of message in bytes */
unsigned long next ; /* offset to next buffered message */
LARGE_INTEGER NTtime ; /* 100 ns since 1.1.1601 */
unsigned char data[4] ;/* message data */
} OldDbgMessage ;
typedef struct
{ LARGE_INTEGER NTtime ; /* 100 ns since 1.1.1601 */
unsigned short size ; /* size of message in bytes */
unsigned short ffff ; /* always 0xffff to indicate new msg */
unsigned short id ; /* virtual driver id */
unsigned short type ; /* special message type */
unsigned long seq ; /* sequence number of message */
unsigned char data[4] ;/* message data */
} DbgMessage ;
#endif
#define DRV_ID_UNKNOWN 0x0C /* for messages via prtComp() */
#define MSG_PROC_FLAG 0x80
#define MSG_PROC_NO_GET(x) (((x) & MSG_PROC_FLAG) ? (((x) >> 4) & 7) : -1)
#define MSG_PROC_NO_SET(x) (MSG_PROC_FLAG | (((x) & 7) << 4))
#define MSG_TYPE_DRV_ID 0x0001
#define MSG_TYPE_FLAGS 0x0002
#define MSG_TYPE_STRING 0x0003
#define MSG_TYPE_BINARY 0x0004
#define MSG_HEAD_SIZE ((unsigned long)&(((DbgMessage *)0)->data[0]))
#define MSG_ALIGN(len) (((unsigned long)(len) + MSG_HEAD_SIZE + 3) & ~3)
#define MSG_SIZE(pMsg) MSG_ALIGN((pMsg)->size)
#define MSG_NEXT(pMsg) ((DbgMessage *)( ((char *)(pMsg)) + MSG_SIZE(pMsg) ))
#define OLD_MSG_HEAD_SIZE ((unsigned long)&(((OldDbgMessage *)0)->data[0]))
#define OLD_MSG_ALIGN(len) (((unsigned long)(len)+OLD_MSG_HEAD_SIZE+3) & ~3)
/*
* manifest constants
*/
#define MSG_FRAME_MAX_SIZE 2150 /* maximum size of B1 frame */
#define MSG_TEXT_MAX_SIZE 1024 /* maximum size of msg text */
#define MSG_MAX_SIZE MSG_ALIGN(MSG_FRAME_MAX_SIZE)
#define DBG_MIN_BUFFER_SIZE 0x00008000 /* minimal total buffer size 32 KB */
#define DBG_DEF_BUFFER_SIZE 0x00020000 /* default total buffer size 128 KB */
#define DBG_MAX_BUFFER_SIZE 0x00400000 /* maximal total buffer size 4 MB */
#define DBGDRV_NAME "Diehl_DIMAINT"
#define UNIDBG_DRIVER L"\\Device\\Diehl_DIMAINT" /* UNICODE name for kernel */
#define DEBUG_DRIVER "\\\\.\\" DBGDRV_NAME /* traditional string for apps */
#define DBGVXD_NAME "DIMAINT"
#define DEBUG_VXD "\\\\.\\" DBGVXD_NAME /* traditional string for apps */
/*
* Special IDI interface debug construction
*/
#define DBG_IDI_SIG_REQ (unsigned long)0xF479C402
#define DBG_IDI_SIG_IND (unsigned long)0xF479C403
#define DBG_IDI_NL_REQ (unsigned long)0xF479C404
#define DBG_IDI_NL_IND (unsigned long)0xF479C405
typedef struct
{ unsigned long magic_type ;
unsigned short data_len ;
unsigned char layer_ID ;
unsigned char entity_ID ;
unsigned char request ;
unsigned char ret_code ;
unsigned char indication ;
unsigned char complete ;
unsigned char data[4] ;
} DbgIdiAct, *DbgIdiAction ;
/*
* We want to use the same IOCTL codes in Win95 and WinNT.
* The official constructor for IOCTL codes is the CTL_CODE macro
* from <winoctl.h> (<devioctl.h> in WinNT DDK environment).
* The problem here is that we don't know how to get <winioctl.h>
* working in a Win95 DDK environment!
*/
# ifdef CTL_CODE /*{*/
/* Assert that we have the same idea of the CTL_CODE macro. */
#define CTL_CODE( DeviceType, Function, Method, Access ) ( \
((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
)
# else /* !CTL_CODE */ /*}{*/
/* Use the definitions stolen from <winioctl.h>. */
#define CTL_CODE( DeviceType, Function, Method, Access ) ( \
((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
)
#define METHOD_BUFFERED 0
#define METHOD_IN_DIRECT 1
#define METHOD_OUT_DIRECT 2
#define METHOD_NEITHER 3
#define FILE_ANY_ACCESS 0
#define FILE_READ_ACCESS ( 0x0001 ) // file & pipe
#define FILE_WRITE_ACCESS ( 0x0002 ) // file & pipe
# endif /* CTL_CODE */ /*}*/
/*
* Now we can define WinNT/Win95 DeviceIoControl codes.
*
* These codes are defined in di_defs.h too, a possible mismatch will be
* detected when the dbgtool is compiled.
*/
#define IOCTL_DRIVER_LNK \
CTL_CODE(0x8001U,0x701,METHOD_OUT_DIRECT,FILE_ANY_ACCESS)
#define IOCTL_DRIVER_DBG \
CTL_CODE(0x8001U,0x702,METHOD_OUT_DIRECT,FILE_ANY_ACCESS)
#endif /* __DBGIOCTL_H__ */
|