Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Opening a Handle to a File
Collapse the table of content
Expand the table of content

Opening a Handle to a File

To open a handle to a file, perform the following steps:

  1. Create an OBJECT_ATTRIBUTES structure, and call the InitializeObjectAttributes macro to initialize the structure. You specify the file's object name as the ObjectName parameter to InitializeObjectAttributes.

  2. Open a handle to the file by passing the OBJECT_ATTRIBUTES structure to IoCreateFile, ZwCreateFile, or ZwOpenFile.

    If the file does not exist, IoCreateFile and ZwCreateFile will create it, whereas ZwOpenFile will return STATUS_OBJECT_NAME_NOT_FOUND.

Note that drivers almost always use ZwCreateFile or ZwOpenFile rather than IoCreateFile.

When you call IoCreateFile, ZwCreateFile, or ZwOpenFile, the Windows executive creates a new file object to represent the file, and it provides an open handle to the object. This file object persists until you close all the open handles to it.

Whichever routine you call, you must pass the access rights you need as the DesiredAccess parameter. These rights must cover all the operations that your driver will perform. The following table lists these operations and the corresponding access right to request.

OperationRequired access right

Read from the file.


Write to the file.


Write only to the end of the file.


Read the file's metadata, such as the file's creation time.


Write the file's metadata, such as the file's creation time.



For more information about the values available for DesiredAccess, see ZwCreateFile.



Send comments about this topic to Microsoft

© 2015 Microsoft