Changeset 7572 for trunk/src/kernel32/hmdevio.cpp
- Timestamp:
- Dec 8, 2001, 11:39:33 AM (24 years ago)
- 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:00sandervl Exp $ */1 /* $Id: hmdevio.cpp,v 1.20 2001-12-08 10:39:33 sandervl Exp $ */ 2 2 3 3 /* … … 137 137 //****************************************************************************** 138 138 BOOL WIN32API RegisterCustomDriver(PFNDRVOPEN pfnDriverOpen, PFNDRVCLOSE pfnDriverClose, 139 PFNDRVIOCTL pfnDriverIOCtl, LPCSTR lpDeviceName) 139 PFNDRVIOCTL pfnDriverIOCtl, PFNDRVREAD pfnDriverRead, 140 PFNDRVWRITE pfnDriverWrite, LPCSTR lpDeviceName) 140 141 { 141 142 HMDeviceDriver *driver; 142 143 DWORD rc; 143 144 144 driver = new HMCustomDriver(pfnDriverOpen, pfnDriverClose, pfnDriverIOCtl, lpDeviceName);145 driver = new HMCustomDriver(pfnDriverOpen, pfnDriverClose, pfnDriverIOCtl, pfnDriverRead, pfnDriverWrite, lpDeviceName); 145 146 if(driver == NULL) { 146 147 DebugInt3(); … … 469 470 { 470 471 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"); 474 477 } 475 478 //****************************************************************************** 476 479 //****************************************************************************** 477 480 HMCustomDriver::HMCustomDriver(PFNDRVOPEN pfnDriverOpen, PFNDRVCLOSE pfnDriverClose, 478 PFNDRVIOCTL pfnDriverIOCtl, LPCSTR lpDeviceName) 481 PFNDRVIOCTL pfnDriverIOCtl, PFNDRVREAD pfnDriverRead, 482 PFNDRVWRITE pfnDriverWrite, LPCSTR lpDeviceName) 479 483 : HMDeviceDriver(lpDeviceName), hDrvDll(0) 480 484 { 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; 484 493 } 485 494 //****************************************************************************** … … 496 505 PHMHANDLEDATA pHMHandleDataTemplate) 497 506 { 498 pHMHandleData->hHMHandle = driverOpen(pHMHandleData->dwAccess, pHMHandleData->dwShare);507 pHMHandleData->hHMHandle = pfnDriverOpen(pHMHandleData->dwAccess, pHMHandleData->dwShare); 499 508 if(pHMHandleData->hHMHandle == 0) { 500 return 2;509 return ERROR_FILE_NOT_FOUND_W; 501 510 } 502 return 0;511 return ERROR_SUCCESS_W; 503 512 } 504 513 //****************************************************************************** … … 507 516 { 508 517 if(pHMHandleData->hHMHandle) { 509 driverClose(pHMHandleData->hHMHandle);518 pfnDriverClose(pHMHandleData->hHMHandle); 510 519 } 511 520 pHMHandleData->hHMHandle = 0; … … 521 530 BOOL ret; 522 531 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); 525 540 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 560 BOOL 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 597 BOOL 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)); 526 615 return ret; 527 616 }
Note:
See TracChangeset
for help on using the changeset viewer.