62 if (o->Type()!=EProcess) |
62 if (o->Type()!=EProcess) |
63 return KErrArgument; |
63 return KErrArgument; |
64 |
64 |
65 const TPde* kpd=(const TPde*)KPageDirectoryBase; |
65 const TPde* kpd=(const TPde*)KPageDirectoryBase; |
66 const TPde* ppd=(const TPde*)(KPageDirectoryBase+(aProcess->iOsAsid<<KPageTableShift)); |
66 const TPde* ppd=(const TPde*)(KPageDirectoryBase+(aProcess->iOsAsid<<KPageTableShift)); |
67 if (!PdesEqual(kpd, ppd, KRomLinearBase, KUserGlobalDataEnd) || // ROM + user global |
67 if (!PdesEqual(kpd, ppd, KRomLinearBase, KUserGlobalDataEnd) || // ROM + user global |
68 !PdesEqual(kpd, ppd, KRamDriveEndAddress, 0x00000000)) // kernel mappings |
68 !PdesEqual(kpd, ppd, KRamDriveEndAddress, KIPCAlias) || // kernel mappings other than IPC aliases |
|
69 !PdesEqual(kpd, ppd, KIPCAlias+KIPCAliasAreaSize, 0x00000000u) // kernel mappings other than IPC aliases |
|
70 ) // kernel mappings |
69 { |
71 { |
70 if (!aForce) |
72 if (!aForce) |
71 return KErrCorrupt; |
73 return KErrCorrupt; |
72 wordmove((TAny*)(ppd+(KRomLinearBase>>KChunkShift)), (TAny*)(kpd+(KRomLinearBase>>KChunkShift)), ((KUserGlobalDataEnd-KRomLinearBase)>>KChunkShift)*sizeof(TPde)); |
74 wordmove((TAny*)(ppd+(KRomLinearBase>>KChunkShift)), (TAny*)(kpd+(KRomLinearBase>>KChunkShift)), ((KUserGlobalDataEnd-KRomLinearBase)>>KChunkShift)*sizeof(TPde)); |
73 wordmove((TAny*)(ppd+(KRamDriveEndAddress>>KChunkShift)), (TAny*)(kpd+(KRamDriveEndAddress>>KChunkShift)), ((0-KRamDriveEndAddress)>>KChunkShift)*sizeof(TPde)); |
75 wordmove((TAny*)(ppd+(KRamDriveEndAddress>>KChunkShift)), (TAny*)(kpd+(KRamDriveEndAddress>>KChunkShift)), ((0-KRamDriveEndAddress)>>KChunkShift)*sizeof(TPde)); |