Ejemplo n.º 1
0
        public unsafe void Execute(FileReadResult target)
        {
            target.Pin(buffer.Data);

            Overlapped overlapped = new Overlapped
            {
                AsyncResult = target,
                OffsetLow   = (int)(target.Position & 0xffffffff),
                OffsetHigh  = (int)((target.Position >> 32) & 0xffffffff)
            };

            NativeOverlapped *native = overlapped.UnsafePack(null, null);
            IntPtr            array  = Marshal.UnsafeAddrOfPinnedArrayElement(buffer.Data, buffer.Offset);

            int  read;
            uint result = FileInterop.ReadFile(handle, array, buffer.Count, out read, native);
            uint error  = FileInterop.GetLastError();

            if (result == 0 && error != 997)
            {
                target.Fail(error);
            }

            if (result == 1)
            {
                target.Complete(native, read);
            }
        }
Ejemplo n.º 2
0
        public void Read(long position, FileBuffer buffer, FileReadCallback callback)
        {
            FileReadRoutine routine = new FileReadRoutine(handle, buffer);
            FileReadResult  result  = new FileReadResult
            {
                Handle   = handle,
                File     = this,
                Position = position,
                Buffer   = buffer,
                OnRead   = callback
            };

            routine.Execute(result);
        }