| 503 | |
| 504 | _IRQL_requires_max_(APC_LEVEL) |
| 505 | NTSTATUS MapMemory(OUT PMAPPING_INFO MappingInfo, OPTIONAL PEPROCESS SrcProcess, OPTIONAL PEPROCESS DestProcess, IN PVOID VirtualAddress, ULONG Size, |
| 506 | KPROCESSOR_MODE AccessMode, ULONG Protect, MEMORY_CACHING_TYPE CacheType, OPTIONAL PVOID UserRequestedAddress ) |
| 507 | { |
| 508 | if (!Size || !MappingInfo) |
| 509 | return STATUS_INVALID_PARAMETER; |
| 510 | |
| 511 | *MappingInfo = {}; |
| 512 | |
| 513 | MappingInfo->Mdl = IoAllocateMdl(VirtualAddress, Size, FALSE, FALSE, NULL); |
| 514 | if (!MappingInfo->Mdl) |
| 515 | return STATUS_MEMORY_NOT_ALLOCATED; |
| 516 | |
| 517 | NTSTATUS Status = MapMdl(MappingInfo->Mdl, &MappingInfo->BaseAddress, SrcProcess, DestProcess, TRUE, AccessMode, Protect, CacheType, UserRequestedAddress); |
| 518 | if (!NT_SUCCESS(Status)) |
| 519 | { |
| 520 | if (Status == STATUS_INVALID_PARAMETER_6) |
| 521 | Status = STATUS_INVALID_PARAMETER_7; // Do it corresponding to current prototype |
| 522 | |
| 523 | IoFreeMdl(MappingInfo->Mdl); |
| 524 | *MappingInfo = {}; |
| 525 | } |
| 526 | |
| 527 | return Status; |
| 528 | } |
| 529 | |
| 530 | _IRQL_requires_max_(APC_LEVEL) |
| 531 | VOID UnmapMemory(IN PMAPPING_INFO MappingInfo) |
no test coverage detected