Marshaling Mechanics
- two possible ways that a buffer can be marshaled so that the server can use it:
-- Duplication - Allocate a new buffer for the server to use, and copy data into and out of the buffer as necessary.
- The server owns the buffer for the duration of the call.
- gives the server access to the buffer,
- prevents the caller from asynchronously modifying the buffer after it has been validated by the server.
-- Aliasing:
- Map part of the memory of the caller process into the memory space of the server process.
- Because every process has a separate address space, it is not possible to access another process's memory by using a pointer.
- Instead, the kernel aliases part of the memory of the caller into the address space of the server, using the VirtualCopyEx function.
- The same piece of physical memory is temporarily shared between the two processes by mapping it to two different virtual address ranges inside the two processes.
- This form of mapping involves allocating a new virtual address range, instead of just re-basing a pointer
Access checking: Verifying that the caller process has sufficient privileges to access a buffer.
Marshaling: Preparing a pointer that a server can use to access a caller’s buffer.
Secure-copy: Making a copy of a buffer to prevent asynchronous modification by the caller.
Pointer parameter: Pointer that is passed as a parameter to an API.
Embedded pointer: Pointer that is passed to an API by storing it inside a buffer or inside of another embedded pointer.
nicely compiled information on windows ce 6.0
ReplyDeleteI have specific problem about compact flash mounting. Mounting of Fat file system on my compact flash card randomly fails with following messages:
Atapi!CDisk::ReadWriteDiskDMA> Failed to wait for interrupt; device(0)
Atapi!CDisk::ReadWriteDiskDMA> Failed to wait for interrupt; device(0)
Read/Write Sector failed (30) on Sector 736
Atapi!CDisk::ReadWriteDiskDMA> Failed to wait for interrupt; device(0)
Atapi!CDisk::ReadWriteDiskDMA> Failed to wait for interrupt; device(0)
Read/Write Sector failed (30) on Sector 736
FATFS!MountVolume: Unable to initialize file system (30)
FATFS!MountVolume: Error in mounting volume. Result = 0x1e
OSAXST1: <<< Unloading Module 'diskcache.dll' (0x828833C0) at address 0xC0410000-0xC0417000 in Process 'NK.EXE' (0x80E7BC80)
Atapi!CDisk::ReadWriteDiskDMA> Failed to wait for interrupt; device(0)
Atapi!CDisk::ReadWriteDiskDMA> Failed to wait for interrupt; device(0)
FSDMGR!MountedVolume_t::~MountedVolume_t: deleting volume (D0707F80)FSDMGR!FileSystemDriver_t::~FileSystemDriver_t: deleting FSD (D07078C0)OSAXST1: <<< Unloading Module 'exfat.dll' (0x828676B4) at address 0xC03E0000-0xC040D000 in Process 'NK.EXE' (0x80E7BC80)
FSDMGR!PartitionDisk_t::~PartitionDisk_t: deleting partition (D0707B00)FSDMGR!StoreDisk_t::~StoreDisk_t: deleting store (D0704AA0)
OSAXST1: <<< Unloading Module 'mspart.dll' (0x827E6624) at address 0xC04C0000-0xC04CA000 in Process 'NK.EXE' (0x80E7BC80)
FSDMGR!PartitionDisk_t::~PartitionDisk_t: deleting partition (D07053E0)
Probability of getting this error is like once in five reboot.
due to this error i cant get "hard disk" folder and subsequently cant run the executable present on compact flash.
I highly appreciate you inputs on this error.