Changeset 6035 for trunk/src/kernel32/hmdevio.cpp
- Timestamp:
- Jun 17, 2001, 1:16:42 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/hmdevio.cpp
r5905 r6035 1 /* $Id: hmdevio.cpp,v 1.1 2 2001-06-04 21:18:39 sandervlExp $ */1 /* $Id: hmdevio.cpp,v 1.13 2001-06-17 11:16:42 achimha Exp $ */ 2 2 3 3 /* … … 43 43 static BOOL MAPMEMIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped); 44 44 static BOOL FXMEMMAPIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped); 45 static BOOL VPCIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);46 45 47 46 static WIN32DRV knownDriver[] = 48 47 {{"\\\\.\\GpdDev", "", TRUE, 666, GpdDevIOCtl}, 49 48 { "\\\\.\\MAPMEM", "PMAP$", FALSE, 0, MAPMEMIOCtl}, 50 { "FXMEMMAP.VXD", "PMAP$", FALSE, 0, FXMEMMAPIOCtl}, 51 #if 1 52 { "\\\\.\\VPCAppSv", "", TRUE, 667, VPCIOCtl}}; 53 #else 49 { "FXMEMMAP.VXD", "PMAP$", FALSE, 0, FXMEMMAPIOCtl} 54 50 }; 55 #endif56 51 57 52 static int nrKnownDrivers = sizeof(knownDriver)/sizeof(WIN32DRV); 58 BOOL fVirtualPC = FALSE;59 53 60 54 //****************************************************************************** … … 362 356 //****************************************************************************** 363 357 //****************************************************************************** 364 static 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: //0x00371 if(nOutBufferSize < 4) {372 SetLastError(ERROR_BAD_LENGTH);373 return FALSE;374 }375 *(DWORD *)lpOutBuffer = 0x50001;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<16;i++) {388 lpBuffer[i*2] = 0x01580000;389 lpBuffer[i*2+1] = 0xFF008E00;390 }391 lpBuffer[0xEF*2] = 0x01580000;392 lpBuffer[0xEF*2+1] = 0xFF008E00;393 *lpBytesReturned = 0xF0*8;394 return TRUE;395 }396 case 0x9C40288C: //0x0C change IDT397 if(nInBufferSize < 0x22) {398 SetLastError(ERROR_BAD_LENGTH);399 return FALSE;400 }401 fVirtualPC = TRUE;402 return TRUE;403 404 case 0x9C402884: //0x04 ExAllocatePoolWithTag405 {406 DWORD *lpBuffer = (DWORD *)lpInBuffer;407 if(nInBufferSize < 0x08) {408 SetLastError(ERROR_BAD_LENGTH);409 return FALSE;410 }411 dprintf(("In: %x %x", lpBuffer[0], lpBuffer[1]));412 return TRUE;413 }414 415 case 0x9C402898: //0x18 Remove IDT patch416 if(nInBufferSize < 0x01) {417 SetLastError(ERROR_BAD_LENGTH);418 return FALSE;419 }420 fVirtualPC = FALSE;421 return TRUE;422 default:423 dprintf(("VPCIOCtl unknown func %X\n", dwIoControlCode));424 return FALSE;425 }426 }427 //******************************************************************************428 //******************************************************************************429 358 HMCustomDriver::HMCustomDriver(HINSTANCE hInstance, LPCSTR lpDeviceName) 430 359 : HMDeviceDriver(lpDeviceName)
Note:
See TracChangeset
for help on using the changeset viewer.