source: trunk/src/driverdll/testdrv.cpp@ 6455

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

initial version

File size: 3.5 KB
Line 
1#define INCL_DOSPROFILE
2#define INCL_DOSDEVICES
3#define INCL_DOSDEVIOCTL
4#define INCL_GPI
5#define INCL_DOSFILEMGR /* File Manager values */
6#define INCL_DOSERRORS /* DOS Error values */
7#define INCL_DOSPROCESS /* DOS Process values */
8#define INCL_DOSMISC /* DOS Miscellanous values */
9#include <os2wrap.h> //Odin32 OS/2 api wrappers
10
11#include <winconst.h>
12#include <win32type.h>
13#include <win32api.h>
14#include <misc.h>
15#include <win\winioctl.h>
16
17#define TESTDRV_CATEGORY 0x40
18
19//******************************************************************************
20//******************************************************************************
21HANDLE WIN32API DrvOpen(DWORD dwAccess, DWORD dwShare)
22{
23 APIRET rc;
24 HFILE hfFileHandle = 0L; /* Handle for file being manipulated */
25 ULONG ulAction = 0; /* Action taken by DosOpen */
26 ULONG sharetype = 0;
27
28 if(dwAccess & (GENERIC_READ_W | GENERIC_WRITE_W))
29 sharetype |= OPEN_ACCESS_READWRITE;
30 else
31 if(dwAccess & GENERIC_WRITE_W)
32 sharetype |= OPEN_ACCESS_WRITEONLY;
33
34 if(dwShare == 0)
35 sharetype |= OPEN_SHARE_DENYREADWRITE;
36 else
37 if(dwShare & (FILE_SHARE_READ_W | FILE_SHARE_WRITE_W))
38 sharetype |= OPEN_SHARE_DENYNONE;
39 else
40 if(dwShare & FILE_SHARE_WRITE_W)
41 sharetype |= OPEN_SHARE_DENYREAD;
42 else
43 if(dwShare & FILE_SHARE_READ_W)
44 sharetype |= OPEN_SHARE_DENYWRITE;
45
46tryopen:
47 rc = DosOpen( "TESTDRV$", /* File path name */
48 &hfFileHandle, /* File handle */
49 &ulAction, /* Action taken */
50 0,
51 FILE_NORMAL,
52 FILE_OPEN,
53 sharetype,
54 0L); /* No extended attribute */
55
56 if(rc == ERROR_TOO_MANY_OPEN_FILES) {
57 ULONG CurMaxFH;
58 LONG ReqCount = 32;
59
60 rc = DosSetRelMaxFH(&ReqCount, &CurMaxFH);
61 if(rc) {
62 dprintf(("DosSetRelMaxFH returned %d", rc));
63 return rc;
64 }
65 dprintf(("DosOpen failed -> increased nr open files to %d", CurMaxFH));
66 goto tryopen;
67 }
68
69 if(rc == NO_ERROR) {
70 return hfFileHandle;
71 }
72 else return -1;
73}
74//******************************************************************************
75//******************************************************************************
76void WIN32API DrvClose(HANDLE hDevice)
77{
78 DosClose(hDevice);
79}
80//******************************************************************************
81//******************************************************************************
82BOOL WIN32API DrvIOCtl(HANDLE hDevice, DWORD dwIoControlCode,
83 LPVOID lpInBuffer, DWORD nInBufferSize,
84 LPVOID lpOutBuffer, DWORD nOutBufferSize,
85 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped)
86{
87 APIRET rc;
88 ULONG ioctl;
89
90 switch(dwIoControlCode) {
91 default:
92 return FALSE;
93 }
94 dprintf(("DrvIOCtl func %x: %x %d %x %d %x %x", dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped));
95
96 *lpBytesReturned = nOutBufferSize;
97
98 rc = DosDevIOCtl(hDevice, TESTDRV_CATEGORY, ioctl,
99 lpInBuffer, nInBufferSize, &nInBufferSize,
100 lpOutBuffer, nOutBufferSize, lpBytesReturned);
101
102 dprintf(("DrvIOCtl returned %d bytes returned %d", rc , (lpBytesReturned) ? *lpBytesReturned : 0));
103 return rc == NO_ERROR;
104}
105//******************************************************************************
106//******************************************************************************
107
Note: See TracBrowser for help on using the repository browser.