Changeset 6086 for trunk/src/kernel32/hmdevio.cpp
- Timestamp:
- Jun 23, 2001, 9:43:50 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/hmdevio.cpp
r6035 r6086 1 /* $Id: hmdevio.cpp,v 1.1 3 2001-06-17 11:16:42 achimhaExp $ */1 /* $Id: hmdevio.cpp,v 1.14 2001-06-23 19:43:49 sandervl 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); 45 46 46 47 static WIN32DRV knownDriver[] = 47 48 {{"\\\\.\\GpdDev", "", TRUE, 666, GpdDevIOCtl}, 48 49 { "\\\\.\\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 50 54 }; 55 #endif 51 56 52 57 static int nrKnownDrivers = sizeof(knownDriver)/sizeof(WIN32DRV); 58 BOOL fVirtualPC = FALSE; 53 59 54 60 //****************************************************************************** … … 356 362 //****************************************************************************** 357 363 //****************************************************************************** 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: //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 //****************************************************************************** 358 439 HMCustomDriver::HMCustomDriver(HINSTANCE hInstance, LPCSTR lpDeviceName) 359 440 : HMDeviceDriver(lpDeviceName) … … 400 481 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped) 401 482 { 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; 404 489 } 405 490 //******************************************************************************
Note:
See TracChangeset
for help on using the changeset viewer.