Changeset 7224 for trunk/src/kernel32/hmdisk.cpp
- Timestamp:
- Oct 26, 2001, 9:22:15 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/hmdisk.cpp
r7222 r7224 1 /* $Id: hmdisk.cpp,v 1.2 1 2001-10-26 17:47:21sandervl Exp $ */1 /* $Id: hmdisk.cpp,v 1.22 2001-10-26 19:22:15 sandervl Exp $ */ 2 2 3 3 /* … … 150 150 *(FARPROC *)&drvInfo->GetASPI32SupportInfo = GetProcAddress(drvInfo->hInstAspi, "GetASPI32SupportInfo"); 151 151 *(FARPROC *)&drvInfo->SendASPI32Command = GetProcAddress(drvInfo->hInstAspi, "SendASPI32Command"); 152 153 if(drvInfo->GetASPI32SupportInfo() == 0) { 154 FreeLibrary(drvInfo->hInstAspi); 155 drvInfo->hInstAspi = 0; 156 } 152 157 153 158 //get cdrom signature … … 597 602 return FALSE; 598 603 } 599 604 memset(pTOC, 0, nOutBufferSize); 600 605 //IOCTL_CDROMAUDIO (0x81), CDROMAUDIO_GETAUDIODISK (0x61) 601 606 datasize = sizeof(diskinfo); … … 611 616 dprintf(("first %d, last %d, num %d", pTOC->FirstTrack, pTOC->LastTrack, numtracks)); 612 617 613 int len = 4 + numtracks*sizeof(TRACK_DATA) - 2; //minus length itself; 618 //numtracks+1, because we have to add a track at the end 619 int length = 4 + (numtracks+1)*sizeof(TRACK_DATA); 614 620 //big endian format 615 pTOC->Length[0] = HIBYTE( len);616 pTOC->Length[1] = LOBYTE( len);617 618 if(nOutBufferSize < 4+numtracks*sizeof(TRACK_DATA)) {621 pTOC->Length[0] = HIBYTE((length-2)); //minus length itself; 622 pTOC->Length[1] = LOBYTE((length-2)); //minus length itself; 623 624 if(nOutBufferSize < length) { 619 625 SetLastError(ERROR_INSUFFICIENT_BUFFER); 620 626 return FALSE; 621 627 } 622 628 623 629 for(int i=0;i<numtracks;i++) 624 630 { … … 646 652 pTOC->TrackData[i].Address[2] = LOWORD(HIBYTE(trackinfo.ulTrackAddr)); 647 653 pTOC->TrackData[i].Address[3] = LOWORD(LOBYTE(trackinfo.ulTrackAddr)); 648 } 654 } 655 //Add a track at the end (presumably so the app can determine the size of the 1st track) 656 //That is what NT4, SP6 does anyway 657 pTOC->TrackData[numtracks].TrackNumber = 0xAA; 658 pTOC->TrackData[numtracks].Reserved = 0; 659 pTOC->TrackData[numtracks].Control = pTOC->TrackData[numtracks-1].Control; 660 pTOC->TrackData[numtracks].Adr = pTOC->TrackData[numtracks-1].Adr; 661 pTOC->TrackData[numtracks].Reserved1 = 0; 662 //big endian format 663 //Address of pseudo track is the address of the lead-out track 664 pTOC->TrackData[numtracks].Address[0] = HIWORD(HIBYTE(diskinfo.ulLeadOutAddr)); 665 pTOC->TrackData[numtracks].Address[1] = HIWORD(LOBYTE(diskinfo.ulLeadOutAddr)); 666 pTOC->TrackData[numtracks].Address[2] = LOWORD(HIBYTE(diskinfo.ulLeadOutAddr)); 667 pTOC->TrackData[numtracks].Address[3] = LOWORD(LOBYTE(diskinfo.ulLeadOutAddr)); 668 649 669 if(lpBytesReturned) 650 *lpBytesReturned = 4 + numtracks*sizeof(TRACK_DATA);670 *lpBytesReturned = length; 651 671 652 672 SetLastError(ERROR_SUCCESS); … … 1015 1035 addr->PortNumber = 0; 1016 1036 addr->PathId = 0; 1037 1038 if(drvInfo->hInstAspi == NULL) { 1039 //Don't fail if wnaspi32 not loaded 1040 addr->TargetId = 0; 1041 addr->Lun = 0; 1042 SetLastError(ERROR_SUCCESS); 1043 return TRUE; 1044 } 1045 1017 1046 numAdapters = drvInfo->GetASPI32SupportInfo(); 1018 1019 if(LOBYTE(numAdapters) == 0) {1020 //testestest1021 i=j=k=0;1022 goto done; //failure;1023 }1024 1047 1025 1048 memset(&srb, 0, sizeof(srb));
Note:
See TracChangeset
for help on using the changeset viewer.