Ignore:
Timestamp:
Dec 14, 2001, 11:22:38 AM (24 years ago)
Author:
sandervl
Message:

CancelIo & GetOverlappedResult added for custom drivers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/hmdevio.cpp

    r7591 r7630  
    1 /* $Id: hmdevio.cpp,v 1.22 2001-12-09 15:29:41 sandervl Exp $ */
     1/* $Id: hmdevio.cpp,v 1.23 2001-12-14 10:22:38 sandervl Exp $ */
    22
    33/*
     
    134134BOOL WIN32API RegisterCustomDriver(PFNDRVOPEN pfnDriverOpen, PFNDRVCLOSE pfnDriverClose,
    135135                                   PFNDRVIOCTL pfnDriverIOCtl, PFNDRVREAD pfnDriverRead,
    136                                    PFNDRVWRITE pfnDriverWrite, LPCSTR lpDeviceName)
     136                                   PFNDRVWRITE pfnDriverWrite, PFNDRVCANCELIO pfnDriverCancelIo,
     137                                   PFNDRVGETOVERLAPPEDRESULT pfnDriverGetOverlappedResult,
     138                                   LPCSTR lpDeviceName)
    137139{
    138140 HMDeviceDriver *driver;
    139141 DWORD rc;
    140142 
    141     driver = new HMCustomDriver(pfnDriverOpen, pfnDriverClose, pfnDriverIOCtl, pfnDriverRead, pfnDriverWrite, lpDeviceName);
     143    driver = new HMCustomDriver(pfnDriverOpen, pfnDriverClose, pfnDriverIOCtl, pfnDriverRead, pfnDriverWrite, pfnDriverCancelIo, pfnDriverGetOverlappedResult, lpDeviceName);
    142144    if(driver == NULL) {
    143145        DebugInt3();
     
    401403HMCustomDriver::HMCustomDriver(PFNDRVOPEN pfnDriverOpen, PFNDRVCLOSE pfnDriverClose,
    402404                               PFNDRVIOCTL pfnDriverIOCtl, PFNDRVREAD pfnDriverRead,
    403                                PFNDRVWRITE pfnDriverWrite, LPCSTR lpDeviceName)
     405                               PFNDRVWRITE pfnDriverWrite, PFNDRVCANCELIO pfnDriverCancelIo,
     406                               PFNDRVGETOVERLAPPEDRESULT pfnDriverGetOverlappedResult,
     407                               LPCSTR lpDeviceName)
    404408                : HMDeviceDriver(lpDeviceName), hDrvDll(0)
    405409{
     
    407411        DebugInt3();
    408412    }
    409     this->pfnDriverOpen  = pfnDriverOpen;
    410     this->pfnDriverClose = pfnDriverClose;
    411     this->pfnDriverIOCtl = pfnDriverIOCtl;
    412     this->pfnDriverRead  = pfnDriverRead;
    413     this->pfnDriverWrite = pfnDriverWrite;
     413    this->pfnDriverOpen     = pfnDriverOpen;
     414    this->pfnDriverClose    = pfnDriverClose;
     415    this->pfnDriverIOCtl    = pfnDriverIOCtl;
     416    this->pfnDriverRead     = pfnDriverRead;
     417    this->pfnDriverWrite    = pfnDriverWrite;
     418    this->pfnDriverCancelIo = pfnDriverCancelIo;
     419    this->pfnDriverGetOverlappedResult = pfnDriverGetOverlappedResult;
    414420}
    415421//******************************************************************************
     
    536542   return ret;
    537543}
     544/*****************************************************************************
     545 * Name      : DWORD HMCustomDriver::CancelIo
     546 * Purpose   : cancel pending IO operation
     547 * Variables :
     548 * Result    :
     549 * Remark    :
     550 * Status    :
     551 *
     552 * Author    : SvL
     553 *****************************************************************************/
     554BOOL HMCustomDriver::CancelIo(PHMHANDLEDATA pHMHandleData)
     555{
     556   BOOL ret;
     557
     558   if(pfnDriverCancelIo == NULL) {
     559       dprintf(("HMCustomDriver::CancelIo: pfnDriverCancelIo == NULL"));
     560       ::SetLastError(ERROR_INVALID_FUNCTION_W);
     561       return FALSE;
     562   }
     563   ret = pfnDriverCancelIo(pHMHandleData->hHMHandle);
     564   dprintf(("pfnDriverCancelIo %x returned %x", pHMHandleData->hHMHandle, ret));
     565   return ret;
     566}
     567/*****************************************************************************
     568 * Name      : DWORD HMCustomDriver::GetOverlappedResult
     569 * Purpose   : asynchronus I/O
     570 * Parameters: PHMHANDLEDATA pHMHandleData
     571 *             LPOVERLAPPED  arg2
     572 *             LPDWORD       arg3
     573 *             BOOL          arg4
     574 * Variables :
     575 * Result    : API returncode
     576 * Remark    :
     577 * Status    :
     578 *
     579 * Author    : SvL
     580 *****************************************************************************/
     581BOOL HMCustomDriver::GetOverlappedResult(PHMHANDLEDATA pHMHandleData,
     582                                         LPOVERLAPPED  lpOverlapped,
     583                                         LPDWORD       lpcbTransfer,
     584                                         BOOL          fWait)
     585{
     586    dprintf(("KERNEL32-HMCustomDriver: HMCustomDriver::GetOverlappedResult(%08xh,%08xh,%08xh,%08xh)",
     587             pHMHandleData->hHMHandle, lpOverlapped, lpcbTransfer, fWait));
     588
     589    if(!(pHMHandleData->dwFlags & FILE_FLAG_OVERLAPPED_W)) {
     590        dprintf(("!WARNING!: GetOverlappedResult called for a handle that wasn't opened with FILE_FLAG_OVERLAPPED"));
     591        return TRUE; //NT4, SP6 doesn't fail
     592    }
     593    if(!lpOverlapped) {
     594        ::SetLastError(ERROR_INVALID_PARAMETER);
     595        return FALSE;
     596    }
     597    if(pfnDriverGetOverlappedResult == NULL) {
     598        dprintf(("HMCustomDriver::GetOverlappedResult: pfnDriverGetOverlappedResult == NULL"));
     599        ::SetLastError(ERROR_INVALID_FUNCTION_W);
     600        return FALSE;
     601    }
     602    return pfnDriverGetOverlappedResult(pHMHandleData->hHMHandle, lpOverlapped, lpcbTransfer, fWait);
     603}
    538604//******************************************************************************
    539605//******************************************************************************
Note: See TracChangeset for help on using the changeset viewer.