WriteFileEx (kernel32)
Last changed: -203.197.81.72

.
Summary

C# Signature:

[DllImport("kernel32.dll")]
static extern bool WriteFileEx(IntPtr hFile, byte [] lpBuffer,
   uint nNumberOfBytesToWrite, [In] ref System.Threading.NativeOverlapped lpOverlapped,
   WriteFileCompletionDelegate lpCompletionRoutine);

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

using System;

using System.Threading;

using System.Runtime.InteropServices;

namespace ConsoleApplication8

{

    class Class1
    {

        public const int FILE_READ_DATA         = 0x0001;     // file & pipe
        public const int FILE_LIST_DIRECTORY    = 0x0001;     // directory
        public const int FILE_WRITE_DATA        = 0x0002;     // file & pipe
        public const int FILE_ADD_FILE          = 0x0002;     // directory
        public const int FILE_APPEND_DATA       = 0x0004;     // file
        public const int FILE_ADD_SUBDIRECTORY      = 0x0004;     // directory
        public const int FILE_CREATE_PIPE_INSTANCE  = 0x0004;     // named pipe
        public const int FILE_READ_EA           = 0x0008;     // file & directory
        public const int FILE_WRITE_EA          = 0x0010;     // file & directory
        public const int FILE_EXECUTE           = 0x0020;     // file
        public const int FILE_TRAVERSE          = 0x0020;     // directory
        public const int FILE_DELETE_CHILD      = 0x0040;     // directory
        public const int FILE_READ_ATTRIBUTES       = 0x0080;     // all
        public const int FILE_WRITE_ATTRIBUTES      = 0x0100;     // all

        public const long STANDARD_RIGHTS_REQUIRED           = 0x000F0000L;
        public const long READ_CONTROL             = 0x00020000L;
        public const long SYNCHRONIZE              = 0x00100000L;
        public const long STANDARD_RIGHTS_READ         = READ_CONTROL;
        public const long STANDARD_RIGHTS_WRITE        = READ_CONTROL;
        public const long STANDARD_RIGHTS_EXECUTE      = READ_CONTROL;
        public const long STANDARD_RIGHTS_ALL          = 0x001F0000L;

        public const long SPECIFIC_RIGHTS_ALL          = 0x0000FFFFL;
        public const long FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF;

        public const long FILE_GENERIC_READ     = STANDARD_RIGHTS_READ     |
            FILE_READ_DATA       |
            FILE_READ_ATTRIBUTES     |
            FILE_READ_EA         |
            SYNCHRONIZE;

        public const long FILE_GENERIC_WRITE    = STANDARD_RIGHTS_WRITE    |
            FILE_WRITE_DATA      |
            FILE_WRITE_ATTRIBUTES    |
            FILE_WRITE_EA        |
            FILE_APPEND_DATA     |
            SYNCHRONIZE;

        public const long FILE_GENERIC_EXECUTE      = STANDARD_RIGHTS_EXECUTE  |
            FILE_READ_ATTRIBUTES     |
            FILE_EXECUTE         |
            SYNCHRONIZE;

        public const int FILE_SHARE_READ                      = 0x00000001;  
        public const int FILE_SHARE_WRITE                      = 0x00000002;  
        public const int FILE_SHARE_DELETE                      = 0x00000004;  
        public const int FILE_ATTRIBUTE_READONLY          = 0x00000001;
        public const int FILE_ATTRIBUTE_HIDDEN        = 0x00000002;
        public const int FILE_ATTRIBUTE_SYSTEM        = 0x00000004;
        public const int FILE_ATTRIBUTE_DIRECTORY         = 0x00000010;
        public const int FILE_ATTRIBUTE_ARCHIVE           = 0x00000020;
        public const int FILE_ATTRIBUTE_DEVICE        = 0x00000040;
        public const int FILE_ATTRIBUTE_NORMAL        = 0x00000080;
        public const int FILE_ATTRIBUTE_TEMPORARY         = 0x00000100;
        public const int FILE_ATTRIBUTE_SPARSE_FILE       = 0x00000200;
        public const int FILE_ATTRIBUTE_REPARSE_POINT     = 0x00000400;
        public const int FILE_ATTRIBUTE_COMPRESSED        = 0x00000800;
        public const int FILE_ATTRIBUTE_OFFLINE           = 0x00001000;
        public const int FILE_ATTRIBUTE_NOT_CONTENT_INDEXED   = 0x00002000;
        public const int FILE_ATTRIBUTE_ENCRYPTED         = 0x00004000;
        public const int FILE_NOTIFY_CHANGE_FILE_NAME          = 0x00000001;
        public const int FILE_NOTIFY_CHANGE_DIR_NAME          = 0x00000002;
        public const int FILE_NOTIFY_CHANGE_ATTRIBUTES          = 0x00000004;
        public const int FILE_NOTIFY_CHANGE_SIZE              = 0x00000008;
        public const int FILE_NOTIFY_CHANGE_LAST_WRITE          = 0x00000010;
        public const int FILE_NOTIFY_CHANGE_LAST_ACCESS          = 0x00000020;
        public const int FILE_NOTIFY_CHANGE_CREATION          = 0x00000040;
        public const int FILE_NOTIFY_CHANGE_SECURITY          = 0x00000100;
        public const int FILE_ACTION_ADDED            = 0x00000001;  
        public const int FILE_ACTION_REMOVED          = 0x00000002;  
        public const int FILE_ACTION_MODIFIED         = 0x00000003;
        public const int FILE_ACTION_RENAMED_OLD_NAME     = 0x00000004;
        public const int FILE_ACTION_RENAMED_NEW_NAME     = 0x00000005;
        public const int  MAILSLOT_NO_MESSAGE                  = -1;
        public const int MAILSLOT_WAIT_FOREVER                  =  -1;
        public const int FILE_CASE_SENSITIVE_SEARCH              = 0x00000001;
        public const int FILE_CASE_PRESERVED_NAMES              = 0x00000002;
        public const int FILE_UNICODE_ON_DISK                  = 0x00000004;
        public const int FILE_PERSISTENT_ACLS                  = 0x00000008;
        public const int FILE_FILE_COMPRESSION                  = 0x00000010;
        public const int FILE_VOLUME_QUOTAS                      = 0x00000020;
        public const int FILE_SUPPORTS_SPARSE_FILES              = 0x00000040;
        public const int FILE_SUPPORTS_REPARSE_POINTS          = 0x00000080;
        public const int FILE_SUPPORTS_REMOTE_STORAGE          = 0x00000100;
        public const int FILE_VOLUME_IS_COMPRESSED              = 0x00008000;
        public const int FILE_SUPPORTS_OBJECT_IDS              = 0x00010000;
        public const int FILE_SUPPORTS_ENCRYPTION              = 0x00020000;
        public const int FILE_NAMED_STREAMS                      = 0x00040000;
        public const int FILE_READ_ONLY_VOLUME                  = 0x00080000;
        public const int CREATE_ALWAYS                          = 2;

        public delegate void WriteFileCompletionDelegate(UInt32 dwErrorCode,
            UInt32 dwNumberOfBytesTransfered, ref NativeOverlapped lpOverlapped);

        [DllImport("kernel32.dll", SetLastError=true)]
        static extern bool WriteFileEx(IntPtr hFile, byte [] lpBuffer,
            uint nNumberOfBytesToWrite, [In] ref NativeOverlapped lpOverlapped,
            WriteFileCompletionDelegate lpCompletionRoutine);

        [DllImport("kernel32.dll", SetLastError=true)]
        static extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess,
            uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition,
            uint dwFlagsAndAttributes, IntPtr hTemplateFile);

        [DllImport("kernel32.dll", SetLastError=true)]
        static extern bool CloseHandle(IntPtr hObject);

        [STAThread]
        static void Main(string[] args)
        {
            IntPtr hfile;
            hfile = CreateFile(@"history.txt", (UInt32)FILE_ALL_ACCESS, FILE_SHARE_WRITE, IntPtr.Zero, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero);

            NativeOverlapped ol = new NativeOverlapped();
            WriteFileEx(hfile, new byte[] { (byte)'t', (byte)'e', (byte)'s', (byte)'t' }, 4, ref ol, new WriteFileCompletionDelegate(Class1.callback));
            CloseHandle(hfile);
        }

        private static void callback(UInt32 dwErrorCode, UInt32 dwNumberOfBytesTransfered, ref NativeOverlapped lpOverlapped)
        {
            Console.Write("In the callback");
            Console.Read();
        }
    }

}

Alternative Managed API:

Do you know one? Please contribute it!

Documentation
WriteFileEx on MSDN