/* $Id: hmdevio.h,v 1.11 2002-07-05 17:59:29 sandervl Exp $ */ #ifndef __DEVIO_H__ #define __DEVIO_H__ /***************************************************************************** * Includes * *****************************************************************************/ #include #include "HMDevice.h" #include "HMObjects.h" #include #ifndef _OS2WIN_H #define GENERIC_READ 0x80000000 #define GENERIC_WRITE 0x40000000 #define GENERIC_EXECUTE 0x20000000 #define GENERIC_ALL 0x10000000 #define FILE_SHARE_READ 0x00000001 #define FILE_SHARE_WRITE 0x00000002 #define FILE_ATTRIBUTE_READONLY 0x00000001 #define FILE_ATTRIBUTE_HIDDEN 0x00000002 #define FILE_ATTRIBUTE_SYSTEM 0x00000004 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020 #define FILE_ATTRIBUTE_NORMAL 0x00000080 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100 #define FILE_ATTRIBUTE_ATOMIC_WRITE 0x00000200 #define FILE_ATTRIBUTE_XACTION_WRITE 0x00000400 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800 #define FILE_ATTRIBUTE_HAS_EMBEDDING 0x00001000 #define FILE_SHARE_READ 0x00000001 #define FILE_SHARE_WRITE 0x00000002 #define IOCTL_GPD_READ_PORT_UCHAR 0x900 #define IOCTL_GPD_READ_PORT_USHORT 0x901 #define IOCTL_GPD_READ_PORT_ULONG 0x902 #define IOCTL_GPD_WRITE_PORT_UCHAR 0x910 #define IOCTL_GPD_WRITE_PORT_USHORT 0x911 #define IOCTL_GPD_WRITE_PORT_ULONG 0x912 #define IOCTL_MAPMEM_MAP_USER_PHYSICAL_MEMORY 0x800 #define IOCTL_MAPMEM_UNMAP_USER_PHYSICAL_MEMORY 0x801 typedef struct _GENPORT_WRITE_INPUT { ULONG PortNumber; union { ULONG LongData; USHORT ShortData; UCHAR CharData; }; } GENPORT_WRITE_INPUT; typedef enum _INTERFACE_TYPE { InterfaceTypeUndefined = -1, Internal, Isa, Eisa, MicroChannel, TurboChannel, PCIBus, VMEBus, NuBus, PCMCIABus, CBus, MPIBus, MPSABus, ProcessorInternal, InternalPowerBus, PNPISABus, MaximumInterfaceType }INTERFACE_TYPE, *PINTERFACE_TYPE; typedef LARGE_INTEGER PHYSICAL_ADDRESS; typedef struct { INTERFACE_TYPE InterfaceType; ULONG BusNumber; PHYSICAL_ADDRESS BusAddress; ULONG AddressSpace; ULONG Length; } PHYSICAL_MEMORY_INFO, *PPHYSICAL_MEMORY_INFO; typedef struct _MapDevRequest { DWORD mdr_ServiceID; LPVOID mdr_PhysicalAddress; DWORD mdr_SizeInBytes; LPVOID mdr_LinearAddress; WORD mdr_Selector; WORD mdr_Status; } MAPDEVREQUEST, *PMAPDEVREQUEST; #endif typedef BOOL (* WINIOCTL)(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped); typedef struct { char szWin32Name[32]; char szOS2Name[32]; BOOL fCreateFile; DWORD hDevice; WINIOCTL devIOCtl; } WIN32DRV; /***************************************************************************** * Structures * *****************************************************************************/ class HMDeviceDriver : public HMDeviceHandler { public: HMDeviceDriver(LPCSTR lpDeviceName, LPSTR lpOS2DevName, BOOL fCreate, WINIOCTL pDevIOCtl); HMDeviceDriver(LPCSTR lpDeviceName); /* this is a handler method for calls to CreateFile() */ virtual DWORD CreateFile (LPCSTR lpFileName, PHMHANDLEDATA pHMHandleData, PVOID lpSecurityAttributes, PHMHANDLEDATA pHMHandleDataTemplate); virtual BOOL CloseHandle(PHMHANDLEDATA pHMHandleData); /* this is a handler method for calls to DeviceIoControl() */ virtual BOOL DeviceIoControl (PHMHANDLEDATA pHMHandleData, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped); private: BOOL fCreateFile; LPSTR szOS2Name; WINIOCTL devIOCtl; }; class HMCustomDriver : public HMDeviceDriver { public: HMCustomDriver(HINSTANCE hInstance, LPCSTR lpDeviceName, LPVOID lpDriverData); HMCustomDriver(PFNDRVOPEN pfnDriverOpen, PFNDRVCLOSE pfnDriverClose, PFNDRVIOCTL pfnDriverIOCtl, PFNDRVREAD pfnDriverRead, PFNDRVWRITE pfnDriverWrite, PFNDRVCANCELIO pfnDriverCancelIo, PFNDRVGETOVERLAPPEDRESULT pfnDriverGetOverlappedResult, LPCSTR lpDeviceName, LPVOID lpDriverData); virtual ~HMCustomDriver(); /* this is a handler method for calls to CreateFile() */ virtual DWORD CreateFile (LPCSTR lpFileName, PHMHANDLEDATA pHMHandleData, PVOID lpSecurityAttributes, PHMHANDLEDATA pHMHandleDataTemplate); virtual BOOL CloseHandle(PHMHANDLEDATA pHMHandleData); /* this is a handler method for calls to DeviceIoControl() */ virtual BOOL DeviceIoControl (PHMHANDLEDATA pHMHandleData, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped); /* this is a handler method for calls to ReadFile/Ex */ virtual BOOL ReadFile (PHMHANDLEDATA pHMHandleData, LPCVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped, LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); /* this is a handler method for calls to WriteFile/Ex */ virtual BOOL WriteFile (PHMHANDLEDATA pHMHandleData, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped, LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); virtual BOOL CancelIo (PHMHANDLEDATA pHMHandleData); /* this is a handler method for calls to GetOverlappedResult */ virtual BOOL GetOverlappedResult(PHMHANDLEDATA pHMHandleData, LPOVERLAPPED arg2, LPDWORD arg3, BOOL arg4); private: PFNDRVOPEN pfnDriverOpen; PFNDRVREAD pfnDriverRead; PFNDRVWRITE pfnDriverWrite; PFNDRVIOCTL pfnDriverIOCtl; PFNDRVCLOSE pfnDriverClose; PFNDRVCANCELIO pfnDriverCancelIo; PFNDRVGETOVERLAPPEDRESULT pfnDriverGetOverlappedResult; HINSTANCE hDrvDll; LPVOID lpDriverData; }; void RegisterDevices(); #endif