Changeset 7631


Ignore:
Timestamp:
Dec 14, 2001, 1:45:49 PM (24 years ago)
Author:
sandervl
Message:

enabled overlapped io for custom device drivers

Location:
trunk
Files:
1 added
1 deleted
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/custombuild.h

    r7629 r7631  
    1414
    1515
    16 typedef HANDLE (* WIN32API PFNDRVOPEN)(DWORD dwAccess, DWORD dwShare);
    17 typedef void   (* WIN32API PFNDRVCLOSE)(HANDLE hDevice);
    18 typedef BOOL   (* WIN32API PFNDRVIOCTL)(HANDLE hDevice, DWORD dwIoControlCode,
     16typedef HANDLE (* WIN32API PFNDRVOPEN)(DWORD dwAccess, DWORD dwShare, DWORD dwFlags);
     17typedef void   (* WIN32API PFNDRVCLOSE)(HANDLE hDevice, DWORD dwFlags);
     18typedef BOOL   (* WIN32API PFNDRVIOCTL)(HANDLE hDevice, DWORD dwFlags, DWORD dwIoControlCode,
    1919                                        LPVOID lpInBuffer, DWORD nInBufferSize,
    2020                                        LPVOID lpOutBuffer, DWORD nOutBufferSize,
     
    2222
    2323typedef BOOL   (* WIN32API PFNDRVREAD)(HANDLE        hDevice,
     24                                       DWORD         dwFlags,
    2425                                       LPCVOID       lpBuffer,
    2526                                       DWORD         nNumberOfBytesToRead,
     
    2930
    3031typedef BOOL   (* WIN32API PFNDRVWRITE)(HANDLE        hDevice,
     32                                        DWORD         dwFlags,
    3133                                        LPCVOID       lpBuffer,
    3234                                        DWORD         nNumberOfBytesToWrite,
     
    3537                                        LPOVERLAPPED_COMPLETION_ROUTINE  lpCompletionRoutine);
    3638
    37 typedef BOOL   (* WIN32API PFNDRVCANCELIO)(HANDLE hDevice);
     39typedef BOOL   (* WIN32API PFNDRVCANCELIO)(HANDLE hDevice, DWORD dwFlags);
    3840typedef DWORD  (* WIN32API PFNDRVGETOVERLAPPEDRESULT)(HANDLE        hDevice,
     41                                                      DWORD         dwFlags,
    3942                                                      LPOVERLAPPED  lpOverlapped,
    4043                                                      LPDWORD       lpcbTransfer,
  • trunk/src/kernel32/hmdevio.cpp

    r7630 r7631  
    1 /* $Id: hmdevio.cpp,v 1.23 2001-12-14 10:22:38 sandervl Exp $ */
     1/* $Id: hmdevio.cpp,v 1.24 2001-12-14 12:44:56 sandervl Exp $ */
    22
    33/*
     
    432432                                  PHMHANDLEDATA pHMHandleDataTemplate)
    433433{
    434    pHMHandleData->hHMHandle = pfnDriverOpen(pHMHandleData->dwAccess, pHMHandleData->dwShare);
     434   pHMHandleData->hHMHandle = pfnDriverOpen(pHMHandleData->dwAccess, pHMHandleData->dwShare, pHMHandleData->dwFlags);
    435435   if(pHMHandleData->hHMHandle == INVALID_HANDLE_VALUE_W) {
    436436       return GetLastError();
     
    443443{
    444444   if(pHMHandleData->hHMHandle) {
    445         pfnDriverClose(pHMHandleData->hHMHandle);
     445        pfnDriverClose(pHMHandleData->hHMHandle, pHMHandleData->dwFlags);
    446446   }
    447447   pHMHandleData->hHMHandle = 0;
     
    463463   }
    464464
    465    ret = pfnDriverIOCtl(pHMHandleData->hHMHandle, dwIoControlCode, lpInBuffer, nInBufferSize,
     465   ret = pfnDriverIOCtl(pHMHandleData->hHMHandle, pHMHandleData->dwFlags, dwIoControlCode, lpInBuffer, nInBufferSize,
    466466                        lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped);
    467467   dprintf(("DeviceIoControl %x returned %d", dwIoControlCode, ret));
     
    499499       return FALSE;
    500500   }
    501    ret = pfnDriverRead(pHMHandleData->hHMHandle, lpBuffer, nNumberOfBytesToRead,
     501   ret = pfnDriverRead(pHMHandleData->hHMHandle, pHMHandleData->dwFlags, lpBuffer, nNumberOfBytesToRead,
    502502                      lpNumberOfBytesRead, lpOverlapped, lpCompletionRoutine);
    503503   dprintf(("pfnDriverRead %x %x %x %x %x %x returned %x", pHMHandleData->hHMHandle, lpBuffer, nNumberOfBytesToRead,
     
    536536       return FALSE;
    537537   }
    538    ret = pfnDriverWrite(pHMHandleData->hHMHandle, lpBuffer, nNumberOfBytesToWrite,
     538   ret = pfnDriverWrite(pHMHandleData->hHMHandle, pHMHandleData->dwFlags, lpBuffer, nNumberOfBytesToWrite,
    539539                        lpNumberOfBytesWritten, lpOverlapped, lpCompletionRoutine);
    540540   dprintf(("pfnDriverWrite %x %x %x %x %x %x returned %x", pHMHandleData->hHMHandle, lpBuffer, nNumberOfBytesToWrite,
     
    561561       return FALSE;
    562562   }
    563    ret = pfnDriverCancelIo(pHMHandleData->hHMHandle);
     563   ret = pfnDriverCancelIo(pHMHandleData->hHMHandle, pHMHandleData->dwFlags);
    564564   dprintf(("pfnDriverCancelIo %x returned %x", pHMHandleData->hHMHandle, ret));
    565565   return ret;
     
    600600        return FALSE;
    601601    }
    602     return pfnDriverGetOverlappedResult(pHMHandleData->hHMHandle, lpOverlapped, lpcbTransfer, fWait);
     602    return pfnDriverGetOverlappedResult(pHMHandleData->hHMHandle, pHMHandleData->dwFlags, lpOverlapped, lpcbTransfer, fWait);
    603603}
    604604//******************************************************************************
  • trunk/src/kernel32/overlappedio.cpp

    r7605 r7631  
    1 /* $Id: overlappedio.cpp,v 1.12 2001-12-10 14:04:24 sandervl Exp $ */
     1/* $Id: overlappedio.cpp,v 1.13 2001-12-14 12:44:57 sandervl Exp $ */
    22
    33/*
     
    1616#include <handlemanager.h>
    1717#include <heapstring.h>
    18 #include "overlappedio.h"
     18#include <overlappedio.h>
    1919#include "oslibdos.h"
    2020
     
    239239                else lpRequest->dwLastError = lpWriteHandler(lpRequest, &dwResult, NULL);
    240240
    241                 lpOverlapped->Internal     = lpRequest->dwLastError;
    242                 lpOverlapped->InternalHigh = dwResult;
    243                 if(lpRequest->lpdwResult) {
    244                     *lpRequest->lpdwResult = dwResult;
     241                if(!lpRequest->fCancelled)
     242                {
     243                    lpOverlapped->Internal     = lpRequest->dwLastError;
     244                    lpOverlapped->InternalHigh = dwResult;
     245                    if(lpRequest->lpdwResult) {
     246                        *lpRequest->lpdwResult = dwResult;
     247                    }
     248#ifdef DEBUG
     249                    if(lpRequest->dwAsyncType == ASYNCIO_READ) {
     250                         dprintf(("ASYNCIO_READ %x finished; result %x, last error %d", lpOverlapped, dwResult, lpRequest->dwLastError));
     251                    }
     252                    else dprintf(("ASYNCIO_WRITE %x finished; result %x, last error %d", lpOverlapped, dwResult, lpRequest->dwLastError));
     253#endif
     254                    //wake up user thread
     255                    ::SetEvent(lpOverlapped->hEvent);
    245256                }
    246 #ifdef DEBUG
    247                 if(lpRequest->dwAsyncType == ASYNCIO_READ) {
    248                      dprintf(("ASYNCIO_READ %x finished; result %x, last error %d", lpOverlapped, dwResult, lpRequest->dwLastError));
    249                 }
    250                 else dprintf(("ASYNCIO_WRITE %x finished; result %x, last error %d", lpOverlapped, dwResult, lpRequest->dwLastError));
    251 #endif
    252                 //wake up user thread
    253                 ::SetEvent(lpOverlapped->hEvent);
    254257                break;
    255258
     
    279282                }
    280283                //Don't access the overlapped & result memory when CancelIo was used to cancel the operation
    281                 if(ret == WAIT_TIMEOUT)
     284                if(ret == WAIT_TIMEOUT && !lpRequest->fCancelled)
    282285                {
    283286                    dprintf(("ASYNCIO_POLL %x: result %x, last error %d", lpOverlapped, dwResult, lpRequest->dwLastError));
Note: See TracChangeset for help on using the changeset viewer.