Microsoft KB Archive/321628

= You cannot modify processor-specific page attribute bits without the VirtualSetAttributes function =

Article ID: 321628

Article Last Modified on 5/27/2005

-

APPLIES TO


 * Microsoft Windows CE Platform Builder 4.0

-



This article was previously published under Q321628





SUMMARY
''This article describes a new function, VirtualSetAttributes, that permits you to modify processor-specific page attribute bits for a range of virtual memory. The update that is provided is conditionally supported, and you have to clean and build the platform after you install the update. A sample of code describes the new system function. This article also describes the parameters and the return values of the new function.''



INTRODUCTION
You cannot modify processor-specific page attribute bits. No functionality exists for you to do this.

However, the means to modify processor-specific page attribute bits is useful for optimizing memory access on some microprocessors. This article implements a new function so that you can modify processor-specific page attribute bits. The new VirtualSetAttributes function permits you to change the per-page attributes for a range of virtual memory.



Hotfix information
A supported software update is now available from Microsoft as Windows CE 4.0 Core OS QFE 321628. To resolve this problem immediately, click the following article number for information about obtaining Windows CE Platform Builder and core operating system software updates:

837392 How to locate core operating system fixes for Microsoft Windows CE Platform Builder products

Prerequisites
This fix is supported only when all previously issued fixes for this product have also been installed.

Restart requirement
After you install this update, you must perform a clean build of the whole platform. To clean the platform, click Clean on the Build menu. To build the platform, click Build Platform on the Build menu.

Hotfix replacement information
This fix does not replace any other fixes.

File information
The English version of this package has the file attributes (or later) that are listed in the following table.   Date         Time   Version            Size    File name -  17-May-2002  23:05  4.0.2.517       2,816,344  020517_armv4i_wce40-q321628.exe 17-May-2002 23:05  4.0.2.517       2,808,152  020517_armv4t_wce40-q321628.exe 17-May-2002 23:05  4.0.2.517       2,812,248  020517_armv4_wce40-q321628.exe 17-May-2002 23:05  4.0.2.517       2,779,480  020517_mips16_wce40-q321628.exe 17-May-2002 23:05  4.0.2.517       3,012,952  020517_mipsii_fp_wce40-q321628.exe 17-May-2002 23:05  4.0.2.517       4,938,072  020517_mipsii_wce40-q321628.exe 17-May-2002 23:05  4.0.2.517       3,144,024  020517_mipsiv_fp_wce40-q321628.exe 17-May-2002 23:05  4.0.2.517       3,017,048  020517_mipsiv_wce40-q321628.exe 17-May-2002 23:05  4.0.2.517       2,627,928  020517_sh3_wce40-q321628.exe 17-May-2002 23:05  4.0.2.517       2,656,600  020517_sh4_wce40-q321628.exe 17-May-2002 23:05  4.0.2.517       2,419,032  020517_x86_wce40-q321628.exe The English version of this hotfix has the file attributes (or later) that are listed in the following table. The dates and times for these files are listed in coordinated universal time (UTC). When you view the file information, it is converted to local time. To find the difference between UTC and local time, use the Time Zone tab in the Date and Time tool in Control Panel.   Date         Time                      Size    File name --

Path: Public\Common\Oak\Inc 24-Apr-2002 18:27                     39,647  Mkfuncs.h   24-Apr-2002  18:29                     33,027  Pkfuncs.h   24-Apr-2002  18:31                     12,199  Psyscall.h

Path: Public\Common\Oak\Lib\Armv4\Debug 25-Apr-2002 00:03                     67,606  Coredll.def 25-Apr-2002 00:03                    151,182  Coremain.lib 25-Apr-2002 00:06                  1,742,536  Nkmain.lib 25-Apr-2002 00:06                  1,853,284  Nkprmain.lib 25-Apr-2002 00:03                    710,294  Thunks.lib

Path: Public\Common\Oak\Lib\Armv4\Retail 25-Apr-2002 00:00                     67,590  Coredll.def 25-Apr-2002 00:01                    140,678  Coremain.lib 25-Apr-2002 00:05                  1,115,290  Nkmain.lib 25-Apr-2002 00:06                  1,207,294  Nkprmain.lib 25-Apr-2002 00:00                    847,528  Thunks.lib

Path: Public\Common\Oak\Lib\Armv4i\Debug 25-Apr-2002 00:16                     67,606  Coredll.def 25-Apr-2002 00:16                    151,660  Coremain.lib 25-Apr-2002 00:19                  1,746,460  Nkmain.lib 25-Apr-2002 00:19                  1,857,458  Nkprmain.lib 25-Apr-2002 00:16                    713,972  Thunks.lib

Path: Public\Common\Oak\Lib\Armv4i\Retail 25-Apr-2002 00:13                     67,590  Coredll.def 25-Apr-2002 00:13                    141,150  Coremain.lib 25-Apr-2002 00:18                  1,119,286  Nkmain.lib 25-Apr-2002 00:18                  1,211,568  Nkprmain.lib 25-Apr-2002 00:13                    851,180  Thunks.lib

Path: Public\Common\Oak\Lib\Armv4t\Debug 25-Apr-2002 00:09                     67,606  Coredll.def 25-Apr-2002 00:09                    142,678  Coremain.lib 25-Apr-2002 00:13                  1,615,588  Nkmain.lib 25-Apr-2002 00:13                  1,719,424  Nkprmain.lib 25-Apr-2002 00:09                    693,048  Thunks.lib

Path: Public\Common\Oak\Lib\Armv4t\Retail 25-Apr-2002 00:07                     67,590  Coredll.def 25-Apr-2002 00:07                    140,134  Coremain.lib 25-Apr-2002 00:12                  1,102,470  Nkmain.lib 25-Apr-2002 00:12                  1,193,196  Nkprmain.lib 25-Apr-2002 00:07                    865,826  Thunks.lib

Path: Public\Common\Oak\Lib\Mips16\Debug 25-Apr-2002 00:35                     67,664  Coredll.def 25-Apr-2002 00:35                    158,888  Coremain.lib 25-Apr-2002 00:38                  1,788,330  Nkmain.lib 25-Apr-2002 00:38                  1,909,818  Nkprmain.lib 25-Apr-2002 00:35                    770,656  Thunks.lib

Path: Public\Common\Oak\Lib\Mips16\Retail 25-Apr-2002 00:33                     67,648  Coredll.def 25-Apr-2002 00:33                    123,024  Coremain.lib 25-Apr-2002 00:37                    997,176  Nkmain.lib 25-Apr-2002 00:37                  1,093,560  Nkprmain.lib 25-Apr-2002 00:33                    710,806  Thunks.lib

Path: Public\Common\Oak\Lib\Mipsii\Debug 25-Apr-2002 00:22                     67,664  Coredll.def 25-Apr-2002 00:22                    158,888  Coremain.lib 25-Apr-2002 00:26                  1,784,476  Nkmipsiibmain.lib 25-Apr-2002 00:25                  1,786,156  Nkmipsiimain.lib 25-Apr-2002 00:26                  1,906,152  Nkprofmipsiibmain.lib 25-Apr-2002 00:25                  1,907,832  Nkprofmipsiimain.lib 25-Apr-2002 00:22                    770,656  Thunks.lib

Path: Public\Common\Oak\Lib\Mipsii\Retail 25-Apr-2002 00:20                     67,648  Coredll.def 25-Apr-2002 00:20                    141,568  Coremain.lib 25-Apr-2002 00:24                  1,134,776  Nkmipsiibmain.lib 25-Apr-2002 00:24                  1,136,626  Nkmipsiimain.lib 25-Apr-2002 00:25                  1,237,502  Nkprofmipsiibmain.lib 25-Apr-2002 00:24                  1,239,354  Nkprofmipsiimain.lib 25-Apr-2002 00:20                    913,726  Thunks.lib

Path: Public\Common\Oak\Lib\MipsII_fp\Debug 25-Apr-2002 00:41                     67,251  Coredll.def 25-Apr-2002 00:41                    158,946  Coremain.lib 25-Apr-2002 00:44                  1,854,296  Nkmain.lib 25-Apr-2002 00:44                  1,975,988  Nkprmain.lib 25-Apr-2002 00:41                    770,872  Thunks.lib

Path: Public\Common\Oak\Lib\MipsII_fp\Retail 25-Apr-2002 00:39                     67,235  Coredll.def 25-Apr-2002 00:39                    141,656  Coremain.lib 25-Apr-2002 00:43                  1,196,228  Nkmain.lib 25-Apr-2002 00:44                  1,299,062  Nkprmain.lib 25-Apr-2002 00:39                    913,952  Thunks.lib

Path: Public\Common\Oak\Lib\Mipsiv\Debug 25-Apr-2002 00:29                     67,664  Coredll.def 25-Apr-2002 00:29                    164,150  Coremain.lib 25-Apr-2002 00:32                  1,843,406  Nkmain.lib 25-Apr-2002 00:32                  1,967,930  Nkprmain.lib 25-Apr-2002 00:29                    788,460  Thunks.lib

Path: Public\Common\Oak\Lib\Mipsiv\Retail 25-Apr-2002 00:26                     67,648  Coredll.def 25-Apr-2002 00:27                    148,070  Coremain.lib 25-Apr-2002 00:31                  1,192,464  Nkmain.lib 25-Apr-2002 00:32                  1,298,586  Nkprmain.lib 25-Apr-2002 00:26                    931,976  Thunks.lib

Path: Public\Common\Oak\Lib\Mipsiv_fp\Debug 25-Apr-2002 00:47                     67,251  Coredll.def 25-Apr-2002 00:47                    164,210  Coremain.lib 25-Apr-2002 00:50                  1,919,272  Nkmain.lib 25-Apr-2002 00:51                  2,043,818  Nkprmain.lib 25-Apr-2002 00:47                    788,676  Thunks.lib

Path: Public\Common\Oak\Lib\Mipsiv_fp\Retail 25-Apr-2002 00:45                     67,235  Coredll.def 25-Apr-2002 00:45                    148,156  Coremain.lib 25-Apr-2002 00:50                  1,260,660  Nkmain.lib 25-Apr-2002 00:50                  1,366,836  Nkprmain.lib 25-Apr-2002 00:45                    932,200  Thunks.lib

Path: Public\Common\Oak\Lib\Sh3\Debug 24-Apr-2002 23:50                     68,929  Coredll.def 24-Apr-2002 23:50                    133,210  Coremain.lib 24-Apr-2002 23:53                  1,449,758  Nkmain.lib 24-Apr-2002 23:53                  1,547,906  Nkprmain.lib 24-Apr-2002 23:50                    663,420  Thunks.lib

Path: Public\Common\Oak\Lib\Sh3\Retail 24-Apr-2002 23:47                     68,913  Coredll.def 24-Apr-2002 23:48                    126,420  Coremain.lib 24-Apr-2002 23:53                    973,800  Nkmain.lib 24-Apr-2002 23:53                  1,064,474  Nkprmain.lib 24-Apr-2002 23:47                    820,868  Thunks.lib

Path: Public\Common\Oak\Lib\Sh4\Debug 24-Apr-2002 23:56                     69,019  Coredll.def 24-Apr-2002 23:57                    132,960  Coremain.lib 25-Apr-2002 00:00                  1,468,028  Nkmain.lib 25-Apr-2002 00:00                  1,566,186  Nkprmain.lib 24-Apr-2002 23:56                    665,590  Thunks.lib

Path: Public\Common\Oak\Lib\Sh4\Retail 24-Apr-2002 23:54                     69,003  Coredll.def 24-Apr-2002 23:54                    126,038  Coremain.lib 24-Apr-2002 23:59                    991,098  Nkmain.lib 24-Apr-2002 23:59                  1,081,834  Nkprmain.lib 24-Apr-2002 23:54                    823,352  Thunks.lib

Path: Public\Common\Oak\Lib\X86\Debug 24-Apr-2002 23:44                     66,926  Coredll.def 24-Apr-2002 23:44                    118,672  Coremain.lib 24-Apr-2002 23:47                  1,477,356  Nkmain.lib 24-Apr-2002 23:47                  1,575,238  Nkprmain.lib 24-Apr-2002 23:44                    513,618  Thunks.lib

Path: Public\Common\Oak\Lib\X86\Retail 24-Apr-2002 23:42                     66,910  Coredll.def 24-Apr-2002 23:42                    112,216  Coremain.lib 24-Apr-2002 23:46                    953,534  Nkmain.lib 24-Apr-2002 23:46                  1,037,066  Nkprmain.lib 24-Apr-2002 23:42                    688,006  Thunks.lib

The VirtualSetAttributes function
This hotfix implements a new function, VirtualSetAttributes. This new function permits driver developers to change the per-page attributes for a range of virtual memory. The range of virtual memory is typically copied from a physical location that is not known to the kernel.

This function is currently useful only on the XScale microprocessor, where you can use the function to speed up the display buffer. The following code describes the new system function that is exposed by this update: BOOL VirtualSetAttributes( LPVOID lpvAddress, DWORD cbSize, DWORD dwNewFlags, DWORD dwMask, LPDWORD lpdwOldFlags );

Parameters of the VirtualSetAttributes function
The VirtualSetAttributes function uses the following parameters:
 * lpvAddress

This parameter is the start address of the virtual memory whose attributes are to be changed.
 * cbSize

This parameter is the length, in bytes, of the virtual memory whose attributes are to be changed.
 * dwNewFlags

This parameter specifies the new value of the bits that are to be set.
 * dwMask

This parameter specifies the specific bits that are to be changed. See additional remarks later in this section.
 * lpdwOldFlags

If this parameter is not NULL, the *lpdwOldFlags parameter will contain the original value of the page entry of the first page upon return.

Return values of the VirtualSetAttributes function

 * Returns TRUE if the function succeeded.
 * Returns FALSE if the function failed.

Remarks
The dwMask parameter specifies the specific bits that are to be changed. For example, if the original is as follows, the new value will be 0x00100030:
 * value=0x00100010
 * dwMask=0x30
 * dwNewFlags=0x030

The new value is calculated by using the following formula:

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

If the dwMask parameter is 0, the parameter behaves in a manner that is similar to a query function. That is, nothing is changed, and the original page entry is returned through the lpdwOldFlags parameter.

Note Microsoft highly recommends that you do not change the actual physical page number. The actual physical page numbers are bits 10 through 31 for most CPUs. If you change the physical page numbers, you may experience unexpected system behavior.

Keywords: kbinfo kbbug kbfix kbqfe KB321628

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.