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;

sealed class Sample

{

  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