|
|
1.1 root 1: /*
2: * nt_vdd.h
3: *
4: * VDD services exports and defines
5: *
6: */
7:
8: #ifndef _NT_VDD
9:
10: #define _NT_VDD
11:
12:
13: /**
14: * Basic typedef which would make ULONG and DWORD same
15: */
16:
17: // typedef DWORD ULONG;
18:
19: /**
20: * IO port service prototypes and data structure definitions
21: **/
22:
23: /** Basic typedefs of VDD IO hooks **/
24:
25: typedef VOID (*PFNVDD_INB) (WORD iport,BYTE * data);
26: typedef VOID (*PFNVDD_INW) (WORD iport,WORD * data);
27: typedef VOID (*PFNVDD_INSB) (WORD iport,BYTE * data,WORD count);
28: typedef VOID (*PFNVDD_INSW) (WORD iport,WORD * data,WORD count);
29: typedef VOID (*PFNVDD_OUTB) (WORD iport,BYTE data);
30: typedef VOID (*PFNVDD_OUTW) (WORD iport,WORD data);
31: typedef VOID (*PFNVDD_OUTSB) (WORD iport,BYTE * data,WORD count);
32: typedef VOID (*PFNVDD_OUTSW) (WORD iport,WORD * data,WORD count);
33:
34: /** Array of handlers for VDD IO hooks. **/
35:
36: typedef struct _VDD_IO_HANDLERS {
37: PFNVDD_INB inb_handler;
38: PFNVDD_INW inw_handler;
39: PFNVDD_INSB insb_handler;
40: PFNVDD_INSW insw_handler;
41: PFNVDD_OUTB outb_handler;
42: PFNVDD_OUTW outw_handler;
43: PFNVDD_OUTSB outsb_handler;
44: PFNVDD_OUTSW outsw_handler;
45: } VDD_IO_HANDLERS, *PVDD_IO_HANDLERS;
46:
47: /** Port Range structure **/
48:
49: typedef struct _VDD_IO_PORTRANGE {
50: WORD First;
51: WORD Last;
52: } VDD_IO_PORTRANGE, *PVDD_IO_PORTRANGE;
53:
54:
55: BOOL VDDInstallIOHook (
56: HANDLE hVDD,
57: WORD cPortRange,
58: PVDD_IO_PORTRANGE pPortRange,
59: PVDD_IO_HANDLERS IOhandler
60: );
61:
62:
63: VOID VDDDeInstallIOHook (
64: HANDLE hVdd,
65: WORD cPortRange,
66: PVDD_IO_PORTRANGE pPortRange
67: );
68:
69:
70: /**
71: * DMA service prototypes and data structure definitions
72: **/
73:
74:
75: /** Buffer definition for returning DMA information **/
76:
77: typedef struct _VDD_DMA_INFO {
78: WORD addr;
79: WORD count;
80: WORD page;
81: BYTE status;
82: BYTE mode;
83: BYTE mask;
84: } VDD_DMA_INFO, *PVDD_DMA_INFO;
85:
86: /** bits for querying the DMA information **/
87:
88: #define VDD_DMA_ADDR 0x01
89: #define VDD_DMA_COUNT 0x02
90: #define VDD_DMA_PAGE 0x04
91: #define VDD_DMA_STATUS 0x05
92: #define VDD_DMA_ALL VDD_DMA_ADDR | VDD_DMA_COUNT | VDD_DMA_PAGE | VDD_DMA_STATUS
93:
94:
95: DWORD VDDRequestDMA (
96: HANDLE hVDD,
97: WORD iChannel,
98: PVOID Buffer,
99: DWORD length
100: );
101:
102:
103: BOOL VDDSetDMA (
104: HANDLE hVDD,
105: WORD iChannel,
106: WORD fDMA,
107: PVDD_DMA_INFO Buffer
108: );
109:
110:
111: BOOL VDDQueryDMA (
112: HANDLE hVDD,
113: WORD iChannel,
114: PVDD_DMA_INFO pDmaInfo
115: );
116:
117:
118: /**
119: * Memory mapped I/O service prototypes and data structure definitions
120: **/
121:
122: typedef VOID (*PVDD_MEMORY_HANDLER) (PVOID FaultAddress, ULONG RWMode);
123:
124: BOOL VDDInstallMemoryHook (
125: HANDLE hVDD,
126: PVOID pStart,
127: DWORD count,
128: PVDD_MEMORY_HANDLER MemoryHandler
129: );
130:
131: BOOL VDDDeInstallMemoryHook (
132: HANDLE hVDD,
133: PVOID pStart,
134: DWORD count
135: );
136:
137: BOOL VDDAllocMem(
138: HANDLE hVDD,
139: PVOID Address,
140: DWORD Size
141: );
142:
143:
144: BOOL VDDFreeMem(
145: HANDLE hVDD,
146: PVOID Address,
147: DWORD Size
148: );
149:
150: /**
151: * Misc. service prototypes and data structure definitions
152: **/
153:
154:
155: BOOL VDDIncludeMem(
156: HANDLE hVDD,
157: PVOID Address,
158: DWORD Size
159: );
160:
161:
162: VOID VDDTerminateVDM();
163:
164: /** Basic typedefs of VDD User hooks **/
165:
166: typedef VOID (*PFNVDD_UCREATE) (USHORT DosPDB);
167: typedef VOID (*PFNVDD_UTERMINATE) (USHORT DosPDB);
168: typedef VOID (*PFNVDD_UBLOCK) (VOID);
169: typedef VOID (*PFNVDD_URESUME) (VOID);
170:
171: /** Array of handlers for VDD User hooks. **/
172:
173: typedef struct _VDD_USER_HANDLERS {
174: HANDLE hvdd;
175: PFNVDD_UCREATE ucr_handler;
176: PFNVDD_UTERMINATE uterm_handler;
177: PFNVDD_UBLOCK ublock_handler;
178: PFNVDD_URESUME uresume_handler;
179: struct _VDD_USER_HANDLERS *next;
180: } VDD_USER_HANDLERS, *PVDD_USER_HANDLERS;
181:
182: /** Function prototypes **/
183:
184: BOOL VDDInstallUserHook (
185: HANDLE hVDD,
186: PFNVDD_UCREATE Ucr_Handler,
187: PFNVDD_UTERMINATE Uterm_Handler,
188: PFNVDD_UBLOCK Ublock_handler,
189: PFNVDD_URESUME Uresume_handler
190: );
191:
192:
193: BOOL VDDDeInstallUserHook (
194: HANDLE hVdd
195: );
196:
197: VOID VDDSimulate16(VOID);
198:
199:
200: #endif // ifndef _NT_VDD
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.