Wednesday, December 3, 2014

Marshalling in WinCE [Windows]

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.

1 comment:

  1. nicely compiled information on windows ce 6.0
    I 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.

    ReplyDelete

Please add your valuable feedback and suggestion...

Note: Only a member of this blog may post a comment.