(ql: Qiling, address: int, params)
| 691 | |
| 692 | |
| 693 | def _CreateFileMapping(ql: Qiling, address: int, params): |
| 694 | hFile = params['hFile'] |
| 695 | dwMaximumSizeHigh = params['dwMaximumSizeHigh'] |
| 696 | dwMaximumSizeLow = params['dwMaximumSizeLow'] |
| 697 | lpName = params['lpName'] |
| 698 | |
| 699 | hFile = ql.os.utils.as_signed(hFile, ql.arch.bits) |
| 700 | req_size = (dwMaximumSizeHigh << 32) | dwMaximumSizeLow |
| 701 | |
| 702 | if hFile == INVALID_HANDLE_VALUE: |
| 703 | fmobj = FileMappingMem() |
| 704 | |
| 705 | else: |
| 706 | # look for an existing mapping handle with the same name |
| 707 | if lpName: |
| 708 | existing_handle = ql.os.handle_manager.search(lpName) |
| 709 | |
| 710 | # if found, return it |
| 711 | if existing_handle is not None: |
| 712 | return existing_handle |
| 713 | |
| 714 | fhandle = ql.os.handle_manager.get(hFile) |
| 715 | |
| 716 | # wrap the opened file with an accessor class |
| 717 | fmobj = FileMappingFile(fhandle.obj) |
| 718 | fsize = fmobj.get_file_size() |
| 719 | |
| 720 | # if requeted mapping is size is larger than the file size, enlarge it |
| 721 | if req_size > fsize: |
| 722 | fmobj.inc_file_size(req_size - fsize) |
| 723 | |
| 724 | fm_handle = Handle(obj=fmobj, name=lpName or None) |
| 725 | ql.os.handle_manager.append(fm_handle) |
| 726 | |
| 727 | return fm_handle.id |
| 728 | |
| 729 | # HANDLE CreateFileMappingA( |
| 730 | # HANDLE hFile, |
no test coverage detected