source: trunk/src/kernel32/hmdevio.h@ 7572

Last change on this file since 7572 was 7572, checked in by sandervl, 24 years ago

Added read & write functions to custom driver interface

File size: 6.6 KB
Line 
1/* $Id: hmdevio.h,v 1.8 2001-12-08 10:39:33 sandervl Exp $ */
2
3#ifndef __DEVIO_H__
4#define __DEVIO_H__
5
6/*****************************************************************************
7 * Includes *
8 *****************************************************************************/
9
10#include <handlemanager.h>
11#include "HMDevice.h"
12#include "HMObjects.h"
13#include <custombuild.h>
14
15#ifndef _OS2WIN_H
16#define GENERIC_READ 0x80000000
17#define GENERIC_WRITE 0x40000000
18#define GENERIC_EXECUTE 0x20000000
19#define GENERIC_ALL 0x10000000
20
21#define FILE_SHARE_READ 0x00000001
22#define FILE_SHARE_WRITE 0x00000002
23#define FILE_ATTRIBUTE_READONLY 0x00000001
24#define FILE_ATTRIBUTE_HIDDEN 0x00000002
25#define FILE_ATTRIBUTE_SYSTEM 0x00000004
26#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
27#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
28#define FILE_ATTRIBUTE_NORMAL 0x00000080
29#define FILE_ATTRIBUTE_TEMPORARY 0x00000100
30#define FILE_ATTRIBUTE_ATOMIC_WRITE 0x00000200
31#define FILE_ATTRIBUTE_XACTION_WRITE 0x00000400
32#define FILE_ATTRIBUTE_COMPRESSED 0x00000800
33#define FILE_ATTRIBUTE_HAS_EMBEDDING 0x00001000
34
35#define FILE_SHARE_READ 0x00000001
36#define FILE_SHARE_WRITE 0x00000002
37
38#define IOCTL_GPD_READ_PORT_UCHAR 0x900
39#define IOCTL_GPD_READ_PORT_USHORT 0x901
40#define IOCTL_GPD_READ_PORT_ULONG 0x902
41#define IOCTL_GPD_WRITE_PORT_UCHAR 0x910
42#define IOCTL_GPD_WRITE_PORT_USHORT 0x911
43#define IOCTL_GPD_WRITE_PORT_ULONG 0x912
44
45#define IOCTL_MAPMEM_MAP_USER_PHYSICAL_MEMORY 0x800
46#define IOCTL_MAPMEM_UNMAP_USER_PHYSICAL_MEMORY 0x801
47
48typedef struct _GENPORT_WRITE_INPUT {
49 ULONG PortNumber;
50 union {
51 ULONG LongData;
52 USHORT ShortData;
53 UCHAR CharData;
54 };
55} GENPORT_WRITE_INPUT;
56
57typedef enum _INTERFACE_TYPE {
58 InterfaceTypeUndefined = -1,
59 Internal,
60 Isa,
61 Eisa,
62 MicroChannel,
63 TurboChannel,
64 PCIBus,
65 VMEBus,
66 NuBus,
67 PCMCIABus,
68 CBus,
69 MPIBus,
70 MPSABus,
71 ProcessorInternal,
72 InternalPowerBus,
73 PNPISABus,
74 MaximumInterfaceType
75}INTERFACE_TYPE, *PINTERFACE_TYPE;
76
77typedef LARGE_INTEGER PHYSICAL_ADDRESS;
78
79typedef struct
80{
81 INTERFACE_TYPE InterfaceType;
82 ULONG BusNumber;
83 PHYSICAL_ADDRESS BusAddress;
84 ULONG AddressSpace;
85 ULONG Length;
86
87} PHYSICAL_MEMORY_INFO, *PPHYSICAL_MEMORY_INFO;
88
89typedef struct _MapDevRequest
90{
91 DWORD mdr_ServiceID;
92 LPVOID mdr_PhysicalAddress;
93 DWORD mdr_SizeInBytes;
94 LPVOID mdr_LinearAddress;
95 WORD mdr_Selector;
96 WORD mdr_Status;
97} MAPDEVREQUEST, *PMAPDEVREQUEST;
98
99#endif
100
101typedef BOOL (* WINIOCTL)(HANDLE hDevice, DWORD dwIoControlCode,
102 LPVOID lpInBuffer, DWORD nInBufferSize,
103 LPVOID lpOutBuffer, DWORD nOutBufferSize,
104 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
105
106typedef struct {
107 char szWin32Name[32];
108 char szOS2Name[32];
109 BOOL fCreateFile;
110 DWORD hDevice;
111 WINIOCTL devIOCtl;
112} WIN32DRV;
113
114/*****************************************************************************
115 * Structures *
116 *****************************************************************************/
117
118class HMDeviceDriver : public HMDeviceKernelObjectClass
119{
120public:
121 HMDeviceDriver(LPCSTR lpDeviceName, LPSTR lpOS2DevName, BOOL fCreate, WINIOCTL pDevIOCtl);
122 HMDeviceDriver(LPCSTR lpDeviceName);
123
124 /* this is a handler method for calls to CreateFile() */
125 virtual DWORD CreateFile (LPCSTR lpFileName,
126 PHMHANDLEDATA pHMHandleData,
127 PVOID lpSecurityAttributes,
128 PHMHANDLEDATA pHMHandleDataTemplate);
129
130 virtual BOOL CloseHandle(PHMHANDLEDATA pHMHandleData);
131
132 /* this is a handler method for calls to DeviceIoControl() */
133 virtual BOOL DeviceIoControl (PHMHANDLEDATA pHMHandleData, DWORD dwIoControlCode,
134 LPVOID lpInBuffer, DWORD nInBufferSize,
135 LPVOID lpOutBuffer, DWORD nOutBufferSize,
136 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
137private:
138 BOOL fCreateFile;
139 LPSTR szOS2Name;
140 WINIOCTL devIOCtl;
141};
142
143class HMCustomDriver : public HMDeviceDriver
144
145{
146public:
147 HMCustomDriver(HINSTANCE hInstance, LPCSTR lpDeviceName);
148 HMCustomDriver(PFNDRVOPEN pfnDriverOpen, PFNDRVCLOSE pfnDriverClose,
149 PFNDRVIOCTL pfnDriverIOCtl, PFNDRVREAD pfnDriverRead,
150 PFNDRVWRITE pfnDriverWrite, LPCSTR lpDeviceName);
151
152 virtual ~HMCustomDriver();
153
154 /* this is a handler method for calls to CreateFile() */
155 virtual DWORD CreateFile (LPCSTR lpFileName,
156 PHMHANDLEDATA pHMHandleData,
157 PVOID lpSecurityAttributes,
158 PHMHANDLEDATA pHMHandleDataTemplate);
159
160 virtual BOOL CloseHandle(PHMHANDLEDATA pHMHandleData);
161
162 /* this is a handler method for calls to DeviceIoControl() */
163 virtual BOOL DeviceIoControl (PHMHANDLEDATA pHMHandleData, DWORD dwIoControlCode,
164 LPVOID lpInBuffer, DWORD nInBufferSize,
165 LPVOID lpOutBuffer, DWORD nOutBufferSize,
166 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
167
168 /* this is a handler method for calls to ReadFile/Ex */
169 virtual BOOL ReadFile (PHMHANDLEDATA pHMHandleData,
170 LPCVOID lpBuffer,
171 DWORD nNumberOfBytesToRead,
172 LPDWORD lpNumberOfBytesRead,
173 LPOVERLAPPED lpOverlapped,
174 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
175
176 /* this is a handler method for calls to WriteFile/Ex */
177 virtual BOOL WriteFile (PHMHANDLEDATA pHMHandleData,
178 LPCVOID lpBuffer,
179 DWORD nNumberOfBytesToWrite,
180 LPDWORD lpNumberOfBytesWritten,
181 LPOVERLAPPED lpOverlapped,
182 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
183
184private:
185 PFNDRVOPEN pfnDriverOpen;
186 PFNDRVREAD pfnDriverRead;
187 PFNDRVWRITE pfnDriverWrite;
188 PFNDRVIOCTL pfnDriverIOCtl;
189 PFNDRVCLOSE pfnDriverClose;
190 HINSTANCE hDrvDll;
191};
192
193void RegisterDevices();
194
195
196#endif
Note: See TracBrowser for help on using the repository browser.