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

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

* empty log message *

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