Ignore:
Timestamp:
Jun 23, 2001, 9:43:50 PM (24 years ago)
Author:
sandervl
Message:

added cdrom get/setvolume ioctls

File:
1 edited

Legend:

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

    r6035 r6086  
    1 /* $Id: hmdevio.cpp,v 1.13 2001-06-17 11:16:42 achimha Exp $ */
     1/* $Id: hmdevio.cpp,v 1.14 2001-06-23 19:43:49 sandervl Exp $ */
    22
    33/*
     
    4343static BOOL MAPMEMIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
    4444static BOOL FXMEMMAPIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
     45static BOOL VPCIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
    4546
    4647static WIN32DRV knownDriver[] =
    4748    {{"\\\\.\\GpdDev", "",      TRUE,  666,   GpdDevIOCtl},
    4849    { "\\\\.\\MAPMEM", "PMAP$", FALSE, 0,     MAPMEMIOCtl},
    49     { "FXMEMMAP.VXD",  "PMAP$", FALSE, 0,     FXMEMMAPIOCtl}
     50    { "FXMEMMAP.VXD",  "PMAP$", FALSE, 0,     FXMEMMAPIOCtl},
     51#if 1
     52    { "\\\\.\\VPCAppSv", "", TRUE,  667,   VPCIOCtl}};
     53#else
    5054    };
     55#endif
    5156
    5257static int nrKnownDrivers = sizeof(knownDriver)/sizeof(WIN32DRV);
     58BOOL fVirtualPC = FALSE;
    5359
    5460//******************************************************************************
     
    356362//******************************************************************************
    357363//******************************************************************************
     364static BOOL VPCIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped)
     365{
     366  APIRET rc;
     367
     368  dprintf(("VPCIOCtl func %x: %x %d %x %d %x %x", dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped));
     369  switch(dwIoControlCode) {
     370  case 0x9C402880: //0x00
     371        if(nOutBufferSize < 4) {
     372            SetLastError(ERROR_BAD_LENGTH);
     373            return FALSE;
     374        }
     375        *(DWORD *)lpOutBuffer = 0x60001;
     376        *lpBytesReturned = 4;
     377        return TRUE;
     378
     379  case 0x9C402894: //0x14 (get IDT table)
     380  {
     381        DWORD *lpBuffer = (DWORD *)lpOutBuffer;
     382        if(nOutBufferSize < 0x800) {
     383            SetLastError(ERROR_BAD_LENGTH);
     384            return FALSE;
     385        }
     386        memset(lpOutBuffer, 0, nOutBufferSize);
     387        for(int i=0;i<32;i++) {
     388            lpBuffer[i*2]   = 0x0178c4c8;
     389            lpBuffer[i*2+1] = 0xfff18F00;
     390        }
     391        for(i=0x50;i<0x57;i++) {
     392            lpBuffer[i*2]   = 0x0178c4c8;
     393            lpBuffer[i*2+1] = 0xfff18E00;
     394        }
     395        for(i=0x70;i<0x77;i++) {
     396            lpBuffer[i*2]   = 0x0178c4c8;
     397            lpBuffer[i*2+1] = 0xfff18E00;
     398        }
     399        lpBuffer[0x4F*2]   = 0x0178c4c8;
     400        lpBuffer[0x4F*2+1] = 0xfff18E00;
     401        lpBuffer[0xEF*2]   = 0x0178c4c8;
     402        lpBuffer[0xEF*2+1] = 0xfff18E00;
     403        *lpBytesReturned = 0xFF*8;
     404        return TRUE;
     405  }
     406  case 0x9C40288C: //0x0C change IDT
     407        if(nInBufferSize < 0x22) {
     408            SetLastError(ERROR_BAD_LENGTH);
     409            return FALSE;
     410        }
     411        fVirtualPC = TRUE;
     412        return TRUE;
     413
     414  case 0x9C402884: //0x04 ExAllocatePoolWithTag
     415  {
     416        DWORD *lpBuffer = (DWORD *)lpInBuffer;
     417        if(nInBufferSize < 0x08) {
     418            SetLastError(ERROR_BAD_LENGTH);
     419            return FALSE;
     420        }
     421        dprintf(("In: %x %x", lpBuffer[0], lpBuffer[1]));
     422        return TRUE;
     423  }
     424
     425  case 0x9C402898: //0x18 Remove IDT patch
     426        if(nInBufferSize < 0x01) {
     427            SetLastError(ERROR_BAD_LENGTH);
     428            return FALSE;
     429        }
     430        fVirtualPC = FALSE;
     431        return TRUE;
     432  default:
     433        dprintf(("VPCIOCtl unknown func %X\n", dwIoControlCode));
     434        return FALSE;
     435  }
     436}
     437//******************************************************************************
     438//******************************************************************************
    358439HMCustomDriver::HMCustomDriver(HINSTANCE hInstance, LPCSTR lpDeviceName)
    359440                : HMDeviceDriver(lpDeviceName)
     
    400481                                     LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped)
    401482{
    402    return driverIOCtl(pHMHandleData->hHMHandle, dwIoControlCode, lpInBuffer, nInBufferSize,
    403                       lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped);
     483   BOOL ret;
     484
     485   ret = driverIOCtl(pHMHandleData->hHMHandle, dwIoControlCode, lpInBuffer, nInBufferSize,
     486                     lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped);
     487   dprintf(("DeviceIoControl %x returned %d", dwIoControlCode, ret));
     488   return ret;
    404489}
    405490//******************************************************************************
Note: See TracChangeset for help on using the changeset viewer.