source: trunk/src/kernel32/hmnul.cpp@ 7549

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

preliminary changes for new overlapped io framework

File size: 6.9 KB
Line 
1/* $Id: hmnul.cpp,v 1.2 2001-12-05 14:16:02 sandervl Exp $ */
2
3/*
4 * Project Odin Software License can be found in LICENSE.TXT
5 *
6 * Win32 NUL device access class
7 *
8 * 2001 Patrick Haller <patrick.haller@innotek.de>
9 *
10 */
11
12
13
14#include <os2win.h>
15#include <string.h>
16#include <handlemanager.h>
17#include "handlenames.h"
18#include <heapstring.h>
19#include <winioctl.h>
20#include "hmdevice.h"
21#include "hmnul.h"
22#include "oslibdos.h"
23
24#define DBG_LOCALLOG DBG_hmnul
25#include "dbglocal.h"
26
27
28HMDeviceNulClass::HMDeviceNulClass(LPCSTR lpDeviceName) : HMDeviceHandler(lpDeviceName)
29{
30 dprintf(("HMDeviceNulClass::HMDevParPortClass(%s)\n",
31 lpDeviceName));
32
33 HMDeviceRegister("NUL", this);
34
35 // add symbolic links to the "real name" of the device
36 HandleNamesAddSymbolicLink("NUL:", "NUL");
37 HandleNamesAddSymbolicLink("\\\\.\\NUL", "NUL");
38}
39
40/*****************************************************************************
41 * Name : HMDeviceNulClass::FindDevice
42 * Purpose : Checks if lpDeviceName belongs to this device class
43 * Parameters: LPCSTR lpClassDevName
44 * LPCSTR lpDeviceName
45 * int namelength
46 * Variables :
47 * Result : checks if name is COMx or COMx: (x=1..8)
48 * Remark :
49 * Status :
50 *
51 * Author : SvL
52 *****************************************************************************/
53BOOL HMDeviceNulClass::FindDevice(LPCSTR lpClassDevName, LPCSTR lpDeviceName, int namelength)
54{
55 // == "NUL"
56 if(lstrcmpiA(lpDeviceName, lpClassDevName) != 0)
57 return FALSE;
58
59 return TRUE;
60}
61
62DWORD HMDeviceNulClass::CreateFile(LPCSTR lpFileName,
63 PHMHANDLEDATA pHMHandleData,
64 PVOID lpSecurityAttributes,
65 PHMHANDLEDATA pHMHandleDataTemplate)
66{
67 dprintf(("HMDeviceNulClass::CreateFile(%s,%08xh,%08xh,%08xh)\n",
68 lpFileName,
69 pHMHandleData,
70 lpSecurityAttributes,
71 pHMHandleDataTemplate));
72
73 // we don't actually open a handle to OS/2's NUL device,
74 // we just swallow any I/O
75 pHMHandleData->hHMHandle = 0xdeadface;
76 SetLastError(ERROR_SUCCESS);
77 return NO_ERROR;
78}
79
80
81 /* this is a handler method for calls to CloseHandle() */
82BOOL HMDeviceNulClass::CloseHandle(PHMHANDLEDATA pHMHandleData)
83{
84 dprintf(("HMDeviceNulClass: close request(%08xh)\n",
85 pHMHandleData));
86
87 return TRUE;
88}
89
90
91/*****************************************************************************
92 * Name : BOOL HMDeviceNulClass::WriteFile
93 * Purpose : write data to handle / device
94 * Parameters: PHMHANDLEDATA pHMHandleData,
95 * LPCVOID lpBuffer,
96 * DWORD nNumberOfBytesToWrite,
97 * LPDWORD lpNumberOfBytesWritten,
98 * LPOVERLAPPED lpOverlapped
99 * Variables :
100 * Result : Boolean
101 * Remark :
102 * Status :
103 *
104 * Author : Patrick Haller [2001/11/29]
105 *****************************************************************************/
106
107BOOL HMDeviceNulClass::WriteFile(PHMHANDLEDATA pHMHandleData,
108 LPCVOID lpBuffer,
109 DWORD nNumberOfBytesToWrite,
110 LPDWORD lpNumberOfBytesWritten,
111 LPOVERLAPPED lpOverlapped,
112 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
113{
114 dprintf(("KERNEL32:HMDeviceNulClass::WriteFile %s(%08x,%08x,%08x,%08x,%08x)",
115 lpHMDeviceName,
116 pHMHandleData->hHMHandle,
117 lpBuffer,
118 nNumberOfBytesToWrite,
119 lpNumberOfBytesWritten,
120 lpOverlapped));
121
122 BOOL ret;
123 ULONG ulBytesWritten;
124
125 if((pHMHandleData->dwFlags & FILE_FLAG_OVERLAPPED) && !lpOverlapped) {
126 dprintf(("FILE_FLAG_OVERLAPPED flag set, but lpOverlapped NULL!!"));
127 SetLastError(ERROR_INVALID_PARAMETER);
128 return FALSE;
129 }
130 if(!(pHMHandleData->dwFlags & FILE_FLAG_OVERLAPPED) && lpOverlapped) {
131 dprintf(("Warning: lpOverlapped != NULL & !FILE_FLAG_OVERLAPPED; sync operation"));
132 }
133
134 // this is real NUL I/O
135 ret = NO_ERROR;
136 ulBytesWritten = nNumberOfBytesToWrite;
137
138 if(lpNumberOfBytesWritten) {
139 *lpNumberOfBytesWritten = (ret) ? ulBytesWritten : 0;
140 }
141 if(ret == FALSE) {
142 dprintf(("ERROR: WriteFile failed with rc %d", GetLastError()));
143 }
144
145 return ret;
146}
147
148
149/*****************************************************************************
150 * Name : BOOL HMDeviceNulClass::ReadFile
151 * Purpose : read data from handle / device
152 * Parameters: PHMHANDLEDATA pHMHandleData,
153 * LPCVOID lpBuffer,
154 * DWORD nNumberOfBytesToRead,
155 * LPDWORD lpNumberOfBytesRead,
156 * LPOVERLAPPED lpOverlapped
157 * Variables :
158 * Result : Boolean
159 * Remark :
160 * Status :
161 *
162 * Author : SvL
163 *****************************************************************************/
164
165BOOL HMDeviceNulClass::ReadFile(PHMHANDLEDATA pHMHandleData,
166 LPCVOID lpBuffer,
167 DWORD nNumberOfBytesToRead,
168 LPDWORD lpNumberOfBytesRead,
169 LPOVERLAPPED lpOverlapped,
170 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
171{
172 dprintf(("KERNEL32:HMDeviceNulClass::ReadFile %s(%08x,%08x,%08x,%08x,%08x)",
173 lpHMDeviceName,
174 pHMHandleData->hHMHandle,
175 lpBuffer,
176 nNumberOfBytesToRead,
177 lpNumberOfBytesRead,
178 lpOverlapped));
179
180 BOOL ret;
181 ULONG ulBytesRead;
182
183 if((pHMHandleData->dwFlags & FILE_FLAG_OVERLAPPED) && !lpOverlapped) {
184 dprintf(("FILE_FLAG_OVERLAPPED flag set, but lpOverlapped NULL!!"));
185 SetLastError(ERROR_INVALID_PARAMETER);
186 return FALSE;
187 }
188 if(!(pHMHandleData->dwFlags & FILE_FLAG_OVERLAPPED) && lpOverlapped) {
189 dprintf(("Warning: lpOverlapped != NULL & !FILE_FLAG_OVERLAPPED; sync operation"));
190 }
191
192 // this is real NUL I/O
193 ret = NO_ERROR;
194 ulBytesRead = nNumberOfBytesToRead;
195
196 if(lpNumberOfBytesRead) {
197 *lpNumberOfBytesRead = (ret) ? ulBytesRead : 0;
198 }
199 if(ret == FALSE) {
200 dprintf(("ERROR: ReadFile failed with rc %d", GetLastError()));
201 }
202 return ret;
203}
204
205
206BOOL HMDeviceNulClass::DeviceIoControl(PHMHANDLEDATA pHMHandleData,
207 DWORD dwIoControlCode,
208 LPVOID lpInBuffer,
209 DWORD nInBufferSize,
210 LPVOID lpOutBuffer,
211 DWORD nOutBufferSize,
212 LPDWORD lpBytesReturned,
213 LPOVERLAPPED lpOverlapped)
214{
215 dprintf(("HMDeviceNulClass::DeviceIoControl: unimplemented dwIoControlCode=%08lx\n", dwIoControlCode));
216 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
217 return FALSE;
218}
Note: See TracBrowser for help on using the repository browser.