[Windows Phone 7 Development and Hacking] spavlin:
http://msdn.microsoft.com/en-us/library/aa908734.aspx

UnlockPages

This function unlocks a specified range of pages in the virtual address space of a process, enabling the system to swap the pages out, if necessary. This function can be called only in kernel mode.

Syntax

BOOL UnlockPages(

LPVOID lpvAddress,

DWORD cbSize

);

Parameters

lpvAddress

[in] Address of the start of a region of committed pages that are to be unlocked.

cbSize

[in] Number of bytes to unlock.

Return Value

TRUE indicates success FALSE indicates failure. To get extended error information, call GetLastError.

Remarks

LockPages is referenced counted, so if the same thread does a LockPages twice, the second UnlockPages unlocks the pages.

Requirements

Header	pkfuncs.h

Library	coredll.lib

Windows Embedded CE	Windows Embedded CE 6.0 and later

CeVirtualSharedAlloc

This function allocates read/write memory to the caller and read-only memory to other processes. This function is callable only in kernel mode.

Syntax

LPVOID CeVirtualSharedAlloc(

LPVOID lpvAddr,

DWORD cbSize,

DWORD fdwAction

);

Parameters

lpvAddr

[in] Starting address of the shared memory to be committed, or NULL if reserving shared memory.

cbSize

[in] Size, in bytes, of the memory reservation or allocation.

fdwAction

[in] Value that specifies the action.

This value must be a combination of MEM_RESERVE and MEM_COMMIT.

Value	Description

MEM_COMMIT

Commits the memory specified by lpvAddr and cbSize, where lpvAddr must be an address previously reserved by CeVirtualSharedAlloc.

This value can also be NULL, which reserves and commits a region of size cbSize. This behaves like MEM_RESERVE|MEM_COMMIT.

MEM_RESERVE

Reserves a region in the shared read-only area. lpvAddr must be NULL.

Return Value

A pointer to the memory region that was reserved or committed indicates success. NULL indicates failure. To get extended error information, call GetLastError. If the caller is not fully trusted, the call fails with the error code ERROR_ACCESS_DENIED.

Remarks

You can free the memory region that was reserved or committed by CeVirtualSharedAlloc, using the VirtualFree function.

Freeing the memory allocated by CeVirtualSharedAlloc is similar to freeing memory allocated by the VirtualAlloc function.

Requirements

Header	pkfuncs.h

Library	coredll.lib

Windows Embedded CE	Windows CE 5.0 and later

VirtualAllocCopyEx

This function reserves or commits a region of pages in the virtual address space of the specified destination process, hDstProc, and then dynamically creates an alias to the virtual memory given by the source process, hSrcProc, and the source address pAddr. Terminate the mapping by calling VirtualFreeEx. This function is callable only in kernel mode.

Syntax

LPVOID VirtualAllocCopyEx (

HANDLE hSrcProc,

HANDLE hDstProc,

LPVOID pAddr,

DWORD cbSize,

DWORD dwProtect

);

Parameters

hSrcProc

[in] Handle to the source process.

hDstProc

[in] Handle to the destination process.

pAddr

[in] Long pointer to the specified starting address in the source process, hSrcProc. This cannot be NULL.

cbSize

[in] Size in bytes of virtual allocation pointed to by pAddr in the hSrcProc process. This cannot be NULL.

dwProtect

[in] Type of access protection. If the pages are being committed, any one of a number of flags can be specified, along with the PAGE_GUARD and PAGE_NOCACHE, protection modifier flags.

For information about the possible flags for this parameter, see VirtualCopyEx.

Return Value

The base address of the allocated region of pages indicates success. NULL indicates failure. To get extended error information, call GetLastError.

Remarks

If you want to VirtualAllocCopy a physical or virtual buffer, if that buffer is not page-aligned then you will end up copying more data than you specified. If the start of the buffer is not page-aligned then you will also copy data before the start of the specified buffer, starting from the beginning of the page. If the end of the buffer is not page-aligned then you will also copy data after the end of the specified buffer, ending at the following page boundary.

This is a security issue if the copied buffer is ever passed to user mode. The user mode application will be able to access the surrounding data that is not part of the specified buffer. To protect the surrounding data, use a buffer that is page-aligned and an even multiple of pages in size. If that is not possible then passing the data to user mode puts it at risk.

For more information, see VirtualAllocEx and VirtualCopyEx.

Requirements

Header	pkfuncs.h

Library	coredll.lib

Windows Embedded CE	Windows Embedded CE 6.0 and later

VirtualCopyEx

This function dynamically maps a virtual address to a physical address by creating a new page-table entry. Terminate the mapping by calling VirtualFree. This function is callable in kernel mode and in user mode, when the source and destination process handles are the active process.

Syntax

BOOL VirtualCopyEx(

HANDLE hDstProc,

LPVOID lpvDest,

HANDLE hSrcProc,

LPVOID lpvSrc,

DWORD cbSize,

DWORD fdwProtect

);

Parameters

hDstProc

[in] Handle to the destination process.

lpvDest

[in] Pointer to the destination memory, which must be reserved.

hSrcProc

[in] Handle to the source process.

lpvSrc

[in] Pointer to committed memory.

cbSize

[in] Size, in bytes, of the region. The allocated pages include all pages containing one or more bytes in the range from lpAddress to (lpAddress + cbSize). This means that a 2-byte range straddling a page boundary causes both pages to be included in the allocated region.

fdwProtect

[in] Type of access protection. If the pages are being committed, any one of a number of flags can be specified, along with the PAGE_GUARD and PAGE_NOCACHE, protection modifier flags. The following table shows the flags that can be specified.

For information about the available values for this parameter, see VirtualCopy.

Return Value

TRUE indicates success. FALSE indicates failure. To obtain extended error information, call GetLastError.

Remarks

This function is similar to VirtualCopy, except VirtualCopyEx requires handles to the source and destination process. For more information about this function, see VirtualCopy.

Requirements

Header	pkfuncs.h

Library	coredll.lib

Windows Embedded CE	Windows Embedded CE 6.0 and later

VirtualSetAttributes

This function enables driver developers to change the per-page attributes for a range of virtual memory, which is usually copied from a physical location not known to the kernel. This function can be called only in kernel mode.

Syntax

BOOL VirtualSetAttributes(

LPVOID lpvAddress,

DWORD cbSize,

DWORD dwNewFlags,

DWORD dwMask,

LPDWORD lpdwOldFlags

);

Parameters

lpvAddress

[in] The start address of the virtual memory to be changed.

cbSize

[in] The length, in bytes, of the virtual memory to be changed.

dwNewFlags

[in] Specifies the new value of the bits to be set.

dwMask

[in] Specifies which bits are to be changed.

lpdwOldFlags

[in] If this parameter is not NULL, *lpdwOldFlags contains the original value of the page entry of the first page upon return.

Return Value

TRUE indicates success. FALSE indicates failure.

Remarks

The dwMask parameter specifies the bits to be changed. For example, if the original value is 0x00100010, dwMask is set to 0x30, and dwNewFlags is set to 0x030, the new value will be 0x00100030. The new value is calculated using the following formula:

newValue = (oldValue & ~dwMask)|(dwNewFlags & dwMask);

If dwMask is set to zero, it behaves like a query function. This means that nothing is changed, and the original page entry is returned through lpdwOldFlags.

Note:

Do not change the physical page number, which includes bits 10 through 31 for most CPUs. Otherwise, it causes unexpected system behavior.

The VirtualSetAttributes function changes the translation look-aside buffer (TLB) entry directly. The calling function should be aware of what CPU architecture it is running on and which attributes to change.

The VirtualSetAttributes function can be used on the x86 and XScale microprocessors to speed up the display buffer.

The VirtualSetAttributes function does not work on SHx processors.

Requirements

Header	pkfuncs.h

Library	coredll.lib

Windows Embedded CE	Windows CE .NET 4.1 and later

---------- Post added at 09:52 PM ---------- Previous post was at 09:24 PM ----------

http://www.e-consystems.com/WindowsCE5vs6.asp