C#VirtualCopy的方式读写物理内存有有关问题

C#,VirtualCopy的方式读写物理内存有问题,请指教
C# code

    class WinCE_IO_Accessor
    {
        enum PageAccessFlags : uint
        {
            PAGE_NOACCESS = 0x01,
            PAGE_READONLY = 0x02,
            PAGE_READWRITE = 0x04,
            PAGE_WRITECOPY = 0x08,
            PAGE_EXECUTE = 0x10,
            PAGE_EXECUTE_READ = 0x20,
            PAGE_EXECUTE_READWRITE = 0x40,
            PAGE_EXECUTE_WRITECOPY = 0x80,
            PAGE_GUARD = 0x100,
            PAGE_NOCACHE = 0x200,
            PAGE_PHYSICAL = 0x400,
            PAGE_WRITECOMBINE = 0x400
        }

        enum MemUsageFlags : uint
        {
            MEM_COMMIT = 0x1000,
            MEM_RESERVE = 0x2000,
            MEM_DECOMMIT = 0x4000,
            MEM_RELEASE = 0x8000,
            MEM_FREE = 0x10000,
            MEM_PRIVATE = 0x20000,
            MEM_MAPPED = 0x40000,
            MEM_RESET = 0x80000,
            MEM_TOP_DOWN = 0x100000,
            MEM_AUTO_COMMIT = 0x200000,
            MEM_4MB_PAGES = 0x80000000
        }

        [DllImport("Coredll.dll", EntryPoint = "VirtualAlloc", SetLastError = true)]
        private static extern IntPtr VirtualAlloc(
            IntPtr lpAddress,
            uint dwSize,
            MemUsageFlags flAllocationType,
            PageAccessFlags flProtect);

        [DllImport("Coredll.dll", EntryPoint = "VirtualCopy", SetLastError = true)]
        private static extern bool VirtualCopy(
            IntPtr lpvDest,
            IntPtr lpvSrc,
            uint cbSize,
            PageAccessFlags fdwProtect);

        [DllImport("Coredll.dll", EntryPoint = "VirtualFree", SetLastError = true)]
        private static extern bool VirtualFree(
            IntPtr lpAddress,
            uint cbSize,
            MemUsageFlags dwFreeType);

        const uint DRIVER_GLOBALS_PHYSICAL_MEMORY_START = 0xac059000;
        const uint BASE_ADDR = DRIVER_GLOBALS_PHYSICAL_MEMORY_START / 256;
        const uint SIZE = 8;
        public IntPtr buf;

        public WinCE_IO_Accessor()
        {
            buf = VirtualAlloc(IntPtr.Zero, SIZE, MemUsageFlags.MEM_RESERVE, PageAccessFlags.PAGE_NOACCESS);

            if (buf == IntPtr.Zero)
            {
                throw new Exception("VirtualAlloc Fail");
            }

            if (!VirtualCopy(buf, (IntPtr)BASE_ADDR, SIZE, PageAccessFlags.PAGE_READWRITE |
                PageAccessFlags.PAGE_NOCACHE | PageAccessFlags.PAGE_PHYSICAL))
            {
                throw new Exception("VirtualCopy Fail");
            }

            byte a = 1;
            Marshal.WriteByte(buf, a);
            byte b = Marshal.ReadByte(buf); //这里读出的b=0

            VirtualFree(buf, 0, MemUsageFlags.MEM_RELEASE);
        }
    }




帮别人做一个WinCE5.0下的小软件,要和硬件IO端口打交道,所以需要读写物理内存
C++很不熟悉,所以决定用C#,效率高点
读写物理内存的代码如上,写入一个字节1后,再读出来是0
现在硬件还没到位,在VS2008自带的模拟器(PPC2003)里跑的

不知道哪里出问题了,请明白人指点
非常感谢

------解决方案--------------------
设计硬件的最好还是接上硬件调试,个人认为电脑很难仿
------解决方案--------------------
你直接往里面写8个,然后直接打印出来看一下。
------解决方案--------------------
UINT nNewSize = (UINT)(2048*2048*200); // 1024.0) * 1024;
 double * pNewBuffer =(double*) VirtualAlloc(NULL,nNewSize,MEM_COMMIT,PAGE_READWRITE);
 if (pNewBuffer)
 {
//测试虚拟内存。
 double Block;
 for(int i =0;i<100;i++)
{
  
Block=10.11*i;
memcpy(&pNewBuffer[i],&Block,sizeof(Block));
 
}
 double tt;
 tt=(pNewBuffer[99]);
 CString s;
 s.Format(_T("The total is %f"),tt);
 AfxMessageBox(s) ; 
 //删除分配的内存。