Changeset 4526 for trunk/src/kernel32/stubs.cpp
- Timestamp:
- Oct 25, 2000, 9:47:00 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/stubs.cpp
r4224 r4526 1686 1686 1687 1687 DWORD WIN32API ReadProcessMemory(HANDLE hProcess, 1688 1689 1690 1691 1692 { 1693 dprintf(("Kernel32: ReadProcessMemory(%08xh,%08xh,%08xh,%08xh,%08xh) not implemented.\n",1688 LPCVOID lpBaseAddress, 1689 LPVOID lpBuffer, 1690 DWORD cbRead, 1691 LPDWORD lpNumberOfBytesRead) 1692 { 1693 dprintf(("Kernel32: ReadProcessMemory(%08xh,%08xh,%08xh,%08xh,%08xh) not completely implemented", 1694 1694 hProcess, 1695 1695 lpBaseAddress, … … 1699 1699 1700 1700 // do some (faked) access check 1701 if 1701 if(hProcess != GetCurrentProcess()) 1702 1702 { 1703 SetLastError(ERROR_ACCESS_DENIED); 1704 return FALSE; 1703 dprintf(("WARNING: ReadProcessMemory: can't read memory from other processes!")); 1704 SetLastError(ERROR_ACCESS_DENIED); 1705 return FALSE; 1705 1706 } 1706 1707 1707 1708 if(IsBadReadPtr(lpBaseAddress, cbRead)) { 1709 dprintf(("ERROR: ReadProcessMemory bad source pointer!")); 1710 if(lpNumberOfBytesRead) 1711 *lpNumberOfBytesRead = 0; 1712 SetLastError(ERROR_ACCESS_DENIED); 1713 return FALSE; 1714 } 1708 1715 // FIXME: check this, if we ever run win32 binaries in different addressspaces 1709 1716 // ... and add a sizecheck 1710 1717 memcpy(lpBuffer,lpBaseAddress,cbRead); 1711 if (lpNumberOfBytesRead) 1712 *lpNumberOfBytesRead = cbRead; 1713 1718 if(lpNumberOfBytesRead) 1719 *lpNumberOfBytesRead = cbRead; 1720 1721 SetLastError(ERROR_SUCCESS); 1714 1722 return TRUE; 1715 1723 } … … 1740 1748 { 1741 1749 // do some (faked) access check 1742 if 1750 if(hProcess != GetCurrentProcess()) 1743 1751 { 1744 dprintf(("Kernel32: WriteProcessMemory(%08xh,%08xh,%08xh,%08xh,%08xh) not implemented (different process!!)", 1745 hProcess, 1746 lpBaseAddress, 1747 lpBuffer, 1748 cbWrite, 1749 lpNumberOfBytesWritten)); 1750 SetLastError(ERROR_ACCESS_DENIED); 1751 return FALSE; 1752 dprintf(("Kernel32: WriteProcessMemory(%08xh,%08xh,%08xh,%08xh,%08xh) not implemented (different process!!)", 1753 hProcess, lpBaseAddress, lpBuffer, cbWrite, lpNumberOfBytesWritten)); 1754 SetLastError(ERROR_ACCESS_DENIED); 1755 return FALSE; 1752 1756 } 1753 1757 dprintf(("Kernel32: WriteProcessMemory(%08xh,%08xh,%08xh,%08xh,%08xh))", 1754 hProcess, 1755 lpBaseAddress, 1756 lpBuffer, 1757 cbWrite, 1758 lpNumberOfBytesWritten)); 1759 1758 hProcess,lpBaseAddress, lpBuffer, cbWrite, lpNumberOfBytesWritten)); 1759 1760 if(IsBadWritePtr((LPVOID)lpBaseAddress, cbWrite)) 1761 { 1762 dprintf(("ERROR: WriteProcessMemory bad destination pointer!")); 1763 if(lpNumberOfBytesWritten) 1764 *lpNumberOfBytesWritten = 0; 1765 SetLastError(ERROR_ACCESS_DENIED); 1766 return FALSE; 1767 } 1768 1760 1769 // FIXME: check this, if we ever run win32 binaries in different addressspaces 1761 1770 // ... and add a sizecheck 1762 1771 memcpy((void*)lpBaseAddress,lpBuffer,cbWrite); 1763 if (lpNumberOfBytesWritten) 1764 *lpNumberOfBytesWritten = cbWrite; 1765 1772 if(lpNumberOfBytesWritten) 1773 *lpNumberOfBytesWritten = cbWrite; 1774 1775 SetLastError(ERROR_SUCCESS); 1766 1776 return TRUE; 1767 1777 }
Note:
See TracChangeset
for help on using the changeset viewer.