Changeset 6029 for trunk/src/kernel32/hmdisk.cpp
- Timestamp:
- Jun 16, 2001, 6:10:13 PM (24 years ago)
- File:
-
- 1 edited
-
trunk/src/kernel32/hmdisk.cpp (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/hmdisk.cpp
r5786 r6029 1 /* $Id: hmdisk.cpp,v 1. 7 2001-05-23 17:00:44sandervl Exp $ */1 /* $Id: hmdisk.cpp,v 1.8 2001-06-16 16:10:12 sandervl Exp $ */ 2 2 3 3 /* … … 15 15 #include <misc.h> 16 16 #include "hmdisk.h" 17 #include "mmap.h" 17 18 #include "oslibdos.h" 18 19 #include <win\winioctl.h> … … 111 112 } 112 113 else pHMHandleData->hHMHandle = hFile; 113 114 pHMHandleData->dwUserData = GetDriveTypeA(lpFileName); 114 115 pHMHandleData->dwUserData = *lpFileName; //save drive letter 116 if(pHMHandleData->dwUserData >= 'a') { 117 pHMHandleData->dwUserData = pHMHandleData->dwUserData - ((int)'a' - (int)'A'); 118 } 115 119 return (NO_ERROR); 116 120 } … … 288 292 case IOCTL_DISK_EJECT_MEDIA: 289 293 case IOCTL_DISK_FORMAT_TRACKS: 294 case IOCTL_DISK_GET_DRIVE_LAYOUT: 295 break; 296 290 297 case IOCTL_DISK_GET_DRIVE_GEOMETRY: 291 case IOCTL_DISK_GET_DRIVE_LAYOUT:292 298 case IOCTL_DISK_GET_MEDIA_TYPES: 299 { 300 PDISK_GEOMETRY pGeom = (PDISK_GEOMETRY)lpOutBuffer; 301 if(nOutBufferSize < sizeof(DISK_GEOMETRY)) { 302 SetLastError(ERROR_INSUFFICIENT_BUFFER); 303 return FALSE; 304 } 305 if(lpBytesReturned) { 306 *lpBytesReturned = 0; 307 } 308 if(OSLibDosGetDiskGeometry(pHMHandleData->dwUserData, pGeom) == FALSE) { 309 return FALSE; 310 } 311 if(lpBytesReturned) { 312 *lpBytesReturned = sizeof(DISK_GEOMETRY); 313 } 314 return TRUE; 315 } 316 293 317 case IOCTL_DISK_GET_PARTITION_INFO: 294 318 case IOCTL_DISK_LOAD_MEDIA: … … 356 380 srb.common.SRB_Cmd = SC_HA_INQUIRY; 357 381 rc = SendASPI32Command(&srb); 382 383 char drivename[3]; 384 drivename[0] = (char)pHMHandleData->dwUserData; 385 drivename[1] = ':'; 386 drivename[2] = 0; 358 387 359 388 for(i=0;i<LOBYTE(numAdapters);i++) { … … 368 397 if(rc == SS_COMP) { 369 398 if(srb.devtype.SRB_DeviceType == SS_DEVTYPE_CDROM && 370 pHMHandleData->dwUserData== DRIVE_CDROM)399 GetDriveTypeA(drivename) == DRIVE_CDROM) 371 400 { 372 401 goto done; … … 402 431 return FALSE; 403 432 } 404 //****************************************************************************** 405 //****************************************************************************** 433 /***************************************************************************** 434 * Name : BOOL HMDeviceDiskClass::ReadFile 435 * Purpose : read data from handle / device 436 * Parameters: PHMHANDLEDATA pHMHandleData, 437 * LPCVOID lpBuffer, 438 * DWORD nNumberOfBytesToRead, 439 * LPDWORD lpNumberOfBytesRead, 440 * LPOVERLAPPED lpOverlapped 441 * Variables : 442 * Result : Boolean 443 * Remark : 444 * Status : 445 * 446 * Author : Patrick Haller [Wed, 1998/02/11 20:44] 447 *****************************************************************************/ 448 449 BOOL HMDeviceDiskClass::ReadFile(PHMHANDLEDATA pHMHandleData, 450 LPCVOID lpBuffer, 451 DWORD nNumberOfBytesToRead, 452 LPDWORD lpNumberOfBytesRead, 453 LPOVERLAPPED lpOverlapped) 454 { 455 LPVOID lpRealBuf; 456 Win32MemMap *map; 457 DWORD offset, bytesread; 458 BOOL bRC; 459 460 dprintf2(("KERNEL32: HMDeviceDiskClass::ReadFile %s(%08x,%08x,%08x,%08x,%08x) - stub?\n", 461 lpHMDeviceName, 462 pHMHandleData, 463 lpBuffer, 464 nNumberOfBytesToRead, 465 lpNumberOfBytesRead, 466 lpOverlapped)); 467 468 //SvL: It's legal for this pointer to be NULL 469 if(lpNumberOfBytesRead) 470 *lpNumberOfBytesRead = 0; 471 else 472 lpNumberOfBytesRead = &bytesread; 473 474 if((pHMHandleData->dwFlags & FILE_FLAG_OVERLAPPED) && !lpOverlapped) { 475 dprintf(("FILE_FLAG_OVERLAPPED flag set, but lpOverlapped NULL!!")); 476 SetLastError(ERROR_INVALID_PARAMETER); 477 return FALSE; 478 } 479 if(!(pHMHandleData->dwFlags & FILE_FLAG_OVERLAPPED) && lpOverlapped) { 480 dprintf(("Warning: lpOverlapped != NULL & !FILE_FLAG_OVERLAPPED; sync operation")); 481 } 482 483 //SvL: DosRead doesn't like writing to memory addresses returned by 484 // DosAliasMem -> search for original memory mapped pointer and use 485 // that one + commit pages if not already present 486 map = Win32MemMapView::findMapByView((ULONG)lpBuffer, &offset, MEMMAP_ACCESS_WRITE); 487 if(map) { 488 lpRealBuf = (LPVOID)((ULONG)map->getMappingAddr() + offset); 489 DWORD nrpages = nNumberOfBytesToRead/4096; 490 if(offset & 0xfff) 491 nrpages++; 492 if(nNumberOfBytesToRead & 0xfff) 493 nrpages++; 494 495 map->commitPage(offset & ~0xfff, TRUE, nrpages); 496 } 497 else lpRealBuf = (LPVOID)lpBuffer; 498 499 if(pHMHandleData->dwFlags & FILE_FLAG_OVERLAPPED) { 500 dprintf(("ERROR: Overlapped IO not yet implememented!!")); 501 } 502 // else { 503 bRC = OSLibDosRead(pHMHandleData->hHMHandle, 504 (PVOID)lpRealBuf, 505 nNumberOfBytesToRead, 506 lpNumberOfBytesRead); 507 // } 508 509 if(bRC == 0) { 510 dprintf(("KERNEL32: HMDeviceDiskClass::ReadFile returned %08xh %x", bRC, GetLastError())); 511 dprintf(("%x -> %d", lpBuffer, IsBadWritePtr((LPVOID)lpBuffer, nNumberOfBytesToRead))); 512 } 513 514 return bRC; 515 } 516 /***************************************************************************** 517 * Name : DWORD HMDeviceDiskClass::SetFilePointer 518 * Purpose : set file pointer 519 * Parameters: PHMHANDLEDATA pHMHandleData 520 * LONG lDistanceToMove 521 * PLONG lpDistanceToMoveHigh 522 * DWORD dwMoveMethod 523 * Variables : 524 * Result : API returncode 525 * Remark : 526 * Status : 527 * 528 * Author : Patrick Haller [Wed, 1999/06/17 20:44] 529 *****************************************************************************/ 530 531 DWORD HMDeviceDiskClass::SetFilePointer(PHMHANDLEDATA pHMHandleData, 532 LONG lDistanceToMove, 533 PLONG lpDistanceToMoveHigh, 534 DWORD dwMoveMethod) 535 { 536 DWORD ret; 537 538 dprintf2(("KERNEL32: HMDeviceDiskClass::SetFilePointer %s(%08xh,%08xh,%08xh,%08xh)\n", 539 lpHMDeviceName, 540 pHMHandleData, 541 lDistanceToMove, 542 lpDistanceToMoveHigh, 543 dwMoveMethod)); 544 545 ret = OSLibDosSetFilePointer(pHMHandleData->hHMHandle, 546 lDistanceToMove, 547 (DWORD *)lpDistanceToMoveHigh, 548 dwMoveMethod); 549 550 if(ret == -1) { 551 dprintf(("SetFilePointer failed (error = %d)", GetLastError())); 552 } 553 return ret; 554 } 555 //****************************************************************************** 556 //******************************************************************************
Note:
See TracChangeset
for help on using the changeset viewer.
