maaaaaad
Гость
|
|
« Ответ #2 : 05-10-2003 12:21 » |
|
Сенькс, все работает......седня сел и сразу все заработало...=))
Нада еще глянуть как сильно изменились PT/PD.....
MmUnmapLockedPages тоже должна вызываться в контексте процесса, на который произошло отображение.....хех, интересно, а что делать если процесс "внезапно"=)) закрылся. Мертвецам уже все равно, наверно=)
case IOCTL_XWDM_MAP: { PXWDM_DEVICE_EXT DevExt; PLONG pdw;
DbgPrint(DRIVER_NAME "DeviceControl: IOCTL_XWDM_MAP\n"); pdw = Irp->AssociatedIrp.SystemBuffer; DevExt = DeviceObject->DeviceExtension; __try { CreateAndMapMemory(DeviceObject->DeviceExtension); *pdw = DevExt->MapMemUs; Irp->IoStatus.Information = 4; } __except(EXCEPTION_EXECUTE_HANDLER) { DbgPrint(DRIVER_NAME "IOCTL_XWDM_MAP cause exception\n"); } } break;
case IOCTL_XWDM_UNMAP: DbgPrint(DRIVER_NAME "DeviceControl: IOCTL_XWDM_UNMAP\n"); UnCreateAndMapMemory(DeviceObject->DeviceExtension); break;
case IOCTL_XWDM_TESTMAP: { PXWDM_DEVICE_EXT DevExt = DeviceObject->DeviceExtension;
DbgPrint(DRIVER_NAME "DeviceControl: IOCTL_XWDM_TESTMAP\n"); __try { DbgPrint(DevExt->MapMemKe); pb = DevExt->MapMemKe; pb[0] = 'B'; pb[1] = 'y'; pb[2] = 'e'; } __except(EXCEPTION_EXECUTE_HANDLER) { DbgPrint(DRIVER_NAME "Cause exception!\n"); } } break;
DWORD MappedVa;
printf("---------------------------------------------\n"); printf("Testing IOCTL_XWDM_MAP (0x%x): ",IOCTL_XWDM_MAP); if (!DeviceIoControl( hDev, IOCTL_XWDM_MAP, NULL,NULL, &MappedVa,4, &BytesProcessed, NULL )) { printf("ERROR!\n"); goto ErrorProcessing; } else { printf("OK! %d bytes processed\n", BytesProcessed); printf("Mapped VA = 0x%X\n", MappedVa); }
if (MappedVa != NULL) { __try { lstrcpyA((char *) MappedVa, "Hi, cruel world!\n"); } __except(EXCEPTION_CONTINUE_EXECUTION) { printf("Cause exception (trying to copy test message) VA correct?!\n"); } printf("---------------------------------------------\n"); printf("Testing IOCTL_XWDM_TESTMAP (0x%x): ",IOCTL_XWDM_TESTMAP); if (!DeviceIoControl( hDev, IOCTL_XWDM_TESTMAP, NULL,NULL, NULL,NULL, &BytesProcessed, NULL )){ printf("ERROR!\n"); goto ErrorProcessing; } else { printf("OK! %d bytes processed\n", BytesProcessed); __try { printf("Test message writed driver: %s\n", MappedVa); } __except (EXCEPTION_CONTINUE_EXECUTION) { printf("Cause exception (printing test message)\n"); } printf("Memory un mapped\n"); }
printf("---------------------------------------------\n"); printf("Testing IOCTL_XWDM_UNMAP (0x%x): ",IOCTL_XWDM_UNMAP); if (!DeviceIoControl( hDev, IOCTL_XWDM_UNMAP, NULL,NULL, NULL,NULL, &BytesProcessed, NULL )){ printf("ERROR!\n"); goto ErrorProcessing; } else { printf("OK! %d bytes processed\n", BytesProcessed); printf("Memory un mapped\n"); } }
|