Ignore:
Timestamp:
Dec 8, 2001, 11:39:33 AM (24 years ago)
Author:
sandervl
Message:

Added read & write functions to custom driver interface

File:
1 edited

Legend:

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

    r7549 r7572  
    1 /* $Id: hmdevio.cpp,v 1.19 2001-12-05 14:16:00 sandervl Exp $ */
     1/* $Id: hmdevio.cpp,v 1.20 2001-12-08 10:39:33 sandervl Exp $ */
    22
    33/*
     
    137137//******************************************************************************
    138138BOOL WIN32API RegisterCustomDriver(PFNDRVOPEN pfnDriverOpen, PFNDRVCLOSE pfnDriverClose,
    139                                    PFNDRVIOCTL pfnDriverIOCtl, LPCSTR lpDeviceName)
     139                                   PFNDRVIOCTL pfnDriverIOCtl, PFNDRVREAD pfnDriverRead,
     140                                   PFNDRVWRITE pfnDriverWrite, LPCSTR lpDeviceName)
    140141{
    141142 HMDeviceDriver *driver;
    142143 DWORD rc;
    143144 
    144     driver = new HMCustomDriver(pfnDriverOpen, pfnDriverClose, pfnDriverIOCtl, lpDeviceName);
     145    driver = new HMCustomDriver(pfnDriverOpen, pfnDriverClose, pfnDriverIOCtl, pfnDriverRead, pfnDriverWrite, lpDeviceName);
    145146    if(driver == NULL) {
    146147        DebugInt3();
     
    469470{
    470471    hDrvDll = hInstance ;
    471     *(ULONG *)&driverOpen  = (ULONG)GetProcAddress(hDrvDll, "DrvOpen");
    472     *(ULONG *)&driverClose = (ULONG)GetProcAddress(hDrvDll, "DrvClose");
    473     *(ULONG *)&driverIOCtl = (ULONG)GetProcAddress(hDrvDll, "DrvIOCtl");
     472    pfnDriverOpen  = (PFNDRVOPEN) GetProcAddress(hDrvDll, "DrvOpen");
     473    pfnDriverClose = (PFNDRVCLOSE)GetProcAddress(hDrvDll, "DrvClose");
     474    pfnDriverRead  = (PFNDRVREAD) GetProcAddress(hDrvDll, "DrvRead");
     475    pfnDriverWrite = (PFNDRVWRITE)GetProcAddress(hDrvDll, "DrvWrite");
     476    pfnDriverIOCtl = (PFNDRVIOCTL)GetProcAddress(hDrvDll, "DrvIOCtl");
    474477}
    475478//******************************************************************************
    476479//******************************************************************************
    477480HMCustomDriver::HMCustomDriver(PFNDRVOPEN pfnDriverOpen, PFNDRVCLOSE pfnDriverClose,
    478                                PFNDRVIOCTL pfnDriverIOCtl, LPCSTR lpDeviceName)
     481                               PFNDRVIOCTL pfnDriverIOCtl, PFNDRVREAD pfnDriverRead,
     482                               PFNDRVWRITE pfnDriverWrite, LPCSTR lpDeviceName)
    479483                : HMDeviceDriver(lpDeviceName), hDrvDll(0)
    480484{
    481     driverOpen  = pfnDriverOpen;
    482     driverClose = pfnDriverClose;
    483     driverIOCtl = pfnDriverIOCtl;
     485    if(!pfnDriverOpen || !pfnDriverClose) {
     486        DebugInt3();
     487    }
     488    this->pfnDriverOpen  = pfnDriverOpen;
     489    this->pfnDriverClose = pfnDriverClose;
     490    this->pfnDriverIOCtl = pfnDriverIOCtl;
     491    this->pfnDriverRead  = pfnDriverRead;
     492    this->pfnDriverWrite = pfnDriverWrite;
    484493}
    485494//******************************************************************************
     
    496505                                  PHMHANDLEDATA pHMHandleDataTemplate)
    497506{
    498    pHMHandleData->hHMHandle = driverOpen(pHMHandleData->dwAccess, pHMHandleData->dwShare);
     507   pHMHandleData->hHMHandle = pfnDriverOpen(pHMHandleData->dwAccess, pHMHandleData->dwShare);
    499508   if(pHMHandleData->hHMHandle == 0) {
    500        return 2;
     509       return ERROR_FILE_NOT_FOUND_W;
    501510   }
    502    return 0;
     511   return ERROR_SUCCESS_W;
    503512}
    504513//******************************************************************************
     
    507516{
    508517   if(pHMHandleData->hHMHandle) {
    509         driverClose(pHMHandleData->hHMHandle);
     518        pfnDriverClose(pHMHandleData->hHMHandle);
    510519   }
    511520   pHMHandleData->hHMHandle = 0;
     
    521530   BOOL ret;
    522531
    523    ret = driverIOCtl(pHMHandleData->hHMHandle, dwIoControlCode, lpInBuffer, nInBufferSize,
    524                      lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped);
     532   if(pfnDriverIOCtl == NULL) {
     533       dprintf(("HMCustomDriver::DeviceIoControl: pfnDriverIOCtl == NULL"));
     534       ::SetLastError(ERROR_INVALID_FUNCTION_W);
     535       return FALSE;
     536   }
     537
     538   ret = pfnDriverIOCtl(pHMHandleData->hHMHandle, dwIoControlCode, lpInBuffer, nInBufferSize,
     539                        lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped);
    525540   dprintf(("DeviceIoControl %x returned %d", dwIoControlCode, ret));
     541   return ret;
     542}
     543/*****************************************************************************
     544 * Name      : BOOL HMCustomDriver::ReadFile
     545 * Purpose   : read data from handle / device
     546 * Parameters: PHMHANDLEDATA pHMHandleData,
     547 *             LPCVOID       lpBuffer,
     548 *             DWORD         nNumberOfBytesToRead,
     549 *             LPDWORD       lpNumberOfBytesRead,
     550 *             LPOVERLAPPED  lpOverlapped
     551 *             LPOVERLAPPED_COMPLETION_ROUTINE  lpCompletionRoutine
     552 * Variables :
     553 * Result    : Boolean
     554 * Remark    :
     555 * Status    :
     556 *
     557 * Author    : SvL
     558 *****************************************************************************/
     559
     560BOOL HMCustomDriver::ReadFile(PHMHANDLEDATA pHMHandleData,
     561                              LPCVOID       lpBuffer,
     562                              DWORD         nNumberOfBytesToRead,
     563                              LPDWORD       lpNumberOfBytesRead,
     564                              LPOVERLAPPED  lpOverlapped,
     565                              LPOVERLAPPED_COMPLETION_ROUTINE  lpCompletionRoutine)
     566{
     567   BOOL ret;
     568
     569   if(pfnDriverRead == NULL) {
     570       dprintf(("HMCustomDriver::ReadFile: pfnDriverRead == NULL"));
     571       ::SetLastError(ERROR_INVALID_FUNCTION_W);
     572       return FALSE;
     573   }
     574   ret = pfnDriverRead(pHMHandleData->hHMHandle, lpBuffer, nNumberOfBytesToRead,
     575                      lpNumberOfBytesRead, lpOverlapped, lpCompletionRoutine);
     576   dprintf(("pfnDriverRead %x %x %x %x %x %x returned %x", pHMHandleData->hHMHandle, lpBuffer, nNumberOfBytesToRead,
     577             lpNumberOfBytesRead, lpOverlapped, lpCompletionRoutine, ret));
     578   return ret;
     579}
     580/*****************************************************************************
     581 * Name      : BOOL HMCustomDriver::WriteFile
     582 * Purpose   : write data to handle / device
     583 * Parameters: PHMHANDLEDATA pHMHandleData,
     584 *             LPCVOID       lpBuffer,
     585 *             DWORD         nNumberOfBytesToWrite,
     586 *             LPDWORD       lpNumberOfBytesWritten,
     587 *             LPOVERLAPPED  lpOverlapped
     588 *             LPOVERLAPPED_COMPLETION_ROUTINE  lpCompletionRoutine
     589 * Variables :
     590 * Result    : Boolean
     591 * Remark    :
     592 * Status    :
     593 *
     594 * Author    : SvL
     595 *****************************************************************************/
     596
     597BOOL HMCustomDriver::WriteFile(PHMHANDLEDATA pHMHandleData,
     598                               LPCVOID       lpBuffer,
     599                               DWORD         nNumberOfBytesToWrite,
     600                               LPDWORD       lpNumberOfBytesWritten,
     601                               LPOVERLAPPED  lpOverlapped,
     602                               LPOVERLAPPED_COMPLETION_ROUTINE  lpCompletionRoutine)
     603{
     604   BOOL ret;
     605
     606   if(pfnDriverWrite == NULL) {
     607       dprintf(("HMCustomDriver::WriteFile: pfnDriverWrite == NULL"));
     608       ::SetLastError(ERROR_INVALID_FUNCTION_W);
     609       return FALSE;
     610   }
     611   ret = pfnDriverWrite(pHMHandleData->hHMHandle, lpBuffer, nNumberOfBytesToWrite,
     612                        lpNumberOfBytesWritten, lpOverlapped, lpCompletionRoutine);
     613   dprintf(("pfnDriverWrite %x %x %x %x %x %x returned %x", pHMHandleData->hHMHandle, lpBuffer, nNumberOfBytesToWrite,
     614            lpNumberOfBytesWritten, lpOverlapped, lpCompletionRoutine, ret));
    526615   return ret;
    527616}
Note: See TracChangeset for help on using the changeset viewer.